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": 55*04fd306cSNickeau $defaultBreakpoint = SiteConfig::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 8382a60d03SNickeau $attributes->addStyleDeclarationIfNotSet("position", "relative!important"); 8482a60d03SNickeau $attributes->addStyleDeclarationIfNotSet("z-index", 1); 8537748cd8SNickeau } 8637748cd8SNickeau } 8737748cd8SNickeau} 88