xref: /template/strap/ComboStrap/FloatAttribute.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeau
4*37748cd8SNickeaunamespace ComboStrap;
5*37748cd8SNickeau
6*37748cd8SNickeau/**
7*37748cd8SNickeau * Class Float
8*37748cd8SNickeau * @package ComboStrap
9*37748cd8SNickeau *
10*37748cd8SNickeau *
11*37748cd8SNickeau * Don't use float:
12*37748cd8SNickeau * PHP Fatal error:  Cannot use 'Float' as class name as it is reserved
13*37748cd8SNickeau */
14*37748cd8SNickeauclass FloatAttribute
15*37748cd8SNickeau{
16*37748cd8SNickeau    const CANONICAL = "float";
17*37748cd8SNickeau    const CONF_FLOAT_DEFAULT_BREAKPOINT = "floatDefaultBreakpoint";
18*37748cd8SNickeau    const FLOAT_KEY = "float";
19*37748cd8SNickeau
20*37748cd8SNickeau    /**
21*37748cd8SNickeau     * @param TagAttributes $attributes
22*37748cd8SNickeau     */
23*37748cd8SNickeau    public static function processFloat(&$attributes)
24*37748cd8SNickeau    {
25*37748cd8SNickeau        // The class shortcut
26*37748cd8SNickeau        $float = self::FLOAT_KEY;
27*37748cd8SNickeau        if ($attributes->hasComponentAttribute($float)) {
28*37748cd8SNickeau            $floatValue = $attributes->getValueAndRemove($float);
29*37748cd8SNickeau            $floatedValues = StringUtility::explodeAndTrim($floatValue, " ");
30*37748cd8SNickeau            foreach ($floatedValues as $floatedValue) {
31*37748cd8SNickeau
32*37748cd8SNickeau                /**
33*37748cd8SNickeau                 * Bootstrap 5 has switch from left, right to start, end
34*37748cd8SNickeau                 */
35*37748cd8SNickeau                if (Bootstrap::getBootStrapMajorVersion() == Bootstrap::BootStrapFiveMajorVersion) {
36*37748cd8SNickeau                    switch ($floatedValue) {
37*37748cd8SNickeau                        case "left":
38*37748cd8SNickeau                            $floatedValue = "start";
39*37748cd8SNickeau                            break;
40*37748cd8SNickeau                        case "right":
41*37748cd8SNickeau                            $floatValue = "end";
42*37748cd8SNickeau                            break;
43*37748cd8SNickeau                    }
44*37748cd8SNickeau                }
45*37748cd8SNickeau
46*37748cd8SNickeau                /**
47*37748cd8SNickeau                 * If there is no break point in the value
48*37748cd8SNickeau                 */
49*37748cd8SNickeau                switch ($floatedValue) {
50*37748cd8SNickeau                    case "left":
51*37748cd8SNickeau                    case "right":
52*37748cd8SNickeau                    case "start":
53*37748cd8SNickeau                    case "end":
54*37748cd8SNickeau                    case "none":
55*37748cd8SNickeau                        $defaultBreakpoint = PluginUtility::getConfValue(self::CONF_FLOAT_DEFAULT_BREAKPOINT, "sm");
56*37748cd8SNickeau                        $floatValue = "{$defaultBreakpoint}-$floatValue";
57*37748cd8SNickeau                        break;
58*37748cd8SNickeau                }
59*37748cd8SNickeau
60*37748cd8SNickeau                /**
61*37748cd8SNickeau                 * Automatic spacing when on the right
62*37748cd8SNickeau                 * To not touch the text
63*37748cd8SNickeau                 */
64*37748cd8SNickeau                switch ($floatedValue) {
65*37748cd8SNickeau                    case "right":
66*37748cd8SNickeau                    case "end":
67*37748cd8SNickeau                        if (!$attributes->hasComponentAttribute("spacing")){
68*37748cd8SNickeau                            $attributes->addComponentAttributeValue("spacing","ms-3");
69*37748cd8SNickeau                        }
70*37748cd8SNickeau                        break;
71*37748cd8SNickeau                }
72*37748cd8SNickeau
73*37748cd8SNickeau                $attributes->addClassName("float-{$floatValue}");
74*37748cd8SNickeau            }
75*37748cd8SNickeau            /**
76*37748cd8SNickeau             * By default, we don't float on extra small screen
77*37748cd8SNickeau             */
78*37748cd8SNickeau            if (!StringUtility::contain("xs", $floatValue)) {
79*37748cd8SNickeau                $attributes->addClassName("float-xs-none");
80*37748cd8SNickeau            }
81*37748cd8SNickeau
82*37748cd8SNickeau            // position relative and z-index are needed to put the float above
83*37748cd8SNickeau            $attributes->addStyleDeclaration("position", "relative!important");
84*37748cd8SNickeau            $attributes->addStyleDeclaration("z-index", 1);
85*37748cd8SNickeau        }
86*37748cd8SNickeau    }
87*37748cd8SNickeau}
88