xref: /template/strap/ComboStrap/FloatAttribute.php (revision 82a60d039cd81033dc8147c27f0a50716b7a5301)
137748cd8SNickeau<?php
237748cd8SNickeau
337748cd8SNickeau
437748cd8SNickeaunamespace ComboStrap;
537748cd8SNickeau
637748cd8SNickeau/**
737748cd8SNickeau * Class Float
837748cd8SNickeau * @package ComboStrap
937748cd8SNickeau *
1037748cd8SNickeau *
1137748cd8SNickeau * Don't use float:
1237748cd8SNickeau * PHP Fatal error:  Cannot use 'Float' as class name as it is reserved
1337748cd8SNickeau */
1437748cd8SNickeauclass FloatAttribute
1537748cd8SNickeau{
1637748cd8SNickeau    const CANONICAL = "float";
1737748cd8SNickeau    const CONF_FLOAT_DEFAULT_BREAKPOINT = "floatDefaultBreakpoint";
1837748cd8SNickeau    const FLOAT_KEY = "float";
1937748cd8SNickeau
2037748cd8SNickeau    /**
2137748cd8SNickeau     * @param TagAttributes $attributes
2237748cd8SNickeau     */
2337748cd8SNickeau    public static function processFloat(&$attributes)
2437748cd8SNickeau    {
2537748cd8SNickeau        // The class shortcut
2637748cd8SNickeau        $float = self::FLOAT_KEY;
2737748cd8SNickeau        if ($attributes->hasComponentAttribute($float)) {
2837748cd8SNickeau            $floatValue = $attributes->getValueAndRemove($float);
2937748cd8SNickeau            $floatedValues = StringUtility::explodeAndTrim($floatValue, " ");
3037748cd8SNickeau            foreach ($floatedValues as $floatedValue) {
3137748cd8SNickeau
3237748cd8SNickeau                /**
3337748cd8SNickeau                 * Bootstrap 5 has switch from left, right to start, end
3437748cd8SNickeau                 */
3537748cd8SNickeau                if (Bootstrap::getBootStrapMajorVersion() == Bootstrap::BootStrapFiveMajorVersion) {
3637748cd8SNickeau                    switch ($floatedValue) {
3737748cd8SNickeau                        case "left":
3837748cd8SNickeau                            $floatedValue = "start";
3937748cd8SNickeau                            break;
4037748cd8SNickeau                        case "right":
4137748cd8SNickeau                            $floatValue = "end";
4237748cd8SNickeau                            break;
4337748cd8SNickeau                    }
4437748cd8SNickeau                }
4537748cd8SNickeau
4637748cd8SNickeau                /**
4737748cd8SNickeau                 * If there is no break point in the value
4837748cd8SNickeau                 */
4937748cd8SNickeau                switch ($floatedValue) {
5037748cd8SNickeau                    case "left":
5137748cd8SNickeau                    case "right":
5237748cd8SNickeau                    case "start":
5337748cd8SNickeau                    case "end":
5437748cd8SNickeau                    case "none":
5537748cd8SNickeau                        $defaultBreakpoint = PluginUtility::getConfValue(self::CONF_FLOAT_DEFAULT_BREAKPOINT, "sm");
5637748cd8SNickeau                        $floatValue = "{$defaultBreakpoint}-$floatValue";
5737748cd8SNickeau                        break;
5837748cd8SNickeau                }
5937748cd8SNickeau
6037748cd8SNickeau                /**
6137748cd8SNickeau                 * Automatic spacing when on the right
6237748cd8SNickeau                 * To not touch the text
6337748cd8SNickeau                 */
6437748cd8SNickeau                switch ($floatedValue) {
6537748cd8SNickeau                    case "right":
6637748cd8SNickeau                    case "end":
6737748cd8SNickeau                        if (!$attributes->hasComponentAttribute("spacing")){
6837748cd8SNickeau                            $attributes->addComponentAttributeValue("spacing","ms-3");
6937748cd8SNickeau                        }
7037748cd8SNickeau                        break;
7137748cd8SNickeau                }
7237748cd8SNickeau
7337748cd8SNickeau                $attributes->addClassName("float-{$floatValue}");
7437748cd8SNickeau            }
7537748cd8SNickeau            /**
7637748cd8SNickeau             * By default, we don't float on extra small screen
7737748cd8SNickeau             */
7837748cd8SNickeau            if (!StringUtility::contain("xs", $floatValue)) {
7937748cd8SNickeau                $attributes->addClassName("float-xs-none");
8037748cd8SNickeau            }
8137748cd8SNickeau
8237748cd8SNickeau            // position relative and z-index are needed to put the float above
83*82a60d03SNickeau            $attributes->addStyleDeclarationIfNotSet("position", "relative!important");
84*82a60d03SNickeau            $attributes->addStyleDeclarationIfNotSet("z-index", 1);
8537748cd8SNickeau        }
8637748cd8SNickeau    }
8737748cd8SNickeau}
88