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