137748cd8SNickeau<?php 237748cd8SNickeau 337748cd8SNickeau 437748cd8SNickeaunamespace ComboStrap; 537748cd8SNickeau 637748cd8SNickeau 7*04fd306cSNickeau/** 8*04fd306cSNickeau * @deprecated use conditional length instead 9*04fd306cSNickeau */ 1037748cd8SNickeauclass ConditionalValue 1137748cd8SNickeau{ 1237748cd8SNickeau 1337748cd8SNickeau const CANONICAL = "conditional"; 1437748cd8SNickeau /** 1537748cd8SNickeau * @var string 1637748cd8SNickeau */ 1737748cd8SNickeau private $value; 1837748cd8SNickeau /** 1937748cd8SNickeau * @var string 2037748cd8SNickeau */ 2137748cd8SNickeau private $breakpoint; 2237748cd8SNickeau 23*04fd306cSNickeau private static $breakpoints = [ 24*04fd306cSNickeau "xs" => 0, 25*04fd306cSNickeau "sm" => 576, 26*04fd306cSNickeau "md" => 768, 27*04fd306cSNickeau "lg" => 992, 28*04fd306cSNickeau "xl" => 1200, 29*04fd306cSNickeau "xxl" => 1400 30*04fd306cSNickeau ]; 31*04fd306cSNickeau 3237748cd8SNickeau /** 3337748cd8SNickeau * ConditionalValue constructor. 34*04fd306cSNickeau * @throws ExceptionBadSyntax 3537748cd8SNickeau */ 3637748cd8SNickeau public function __construct($value) 3737748cd8SNickeau { 38*04fd306cSNickeau $lastIndex = strrpos($value, "-"); 39*04fd306cSNickeau if ($lastIndex === false) { 40*04fd306cSNickeau $this->breakpoint = null; 41*04fd306cSNickeau $this->value = $value; 42*04fd306cSNickeau return; 4337748cd8SNickeau } 44*04fd306cSNickeau $breakpoint = substr($value, $lastIndex + 1); 45*04fd306cSNickeau if (array_key_exists($breakpoint, self::$breakpoints)) { 46*04fd306cSNickeau $this->breakpoint = $breakpoint; 47*04fd306cSNickeau $this->value = substr($value, 0, $lastIndex); 48*04fd306cSNickeau return; 49*04fd306cSNickeau } 50*04fd306cSNickeau // Old the breakpoints may be in the middle 51*04fd306cSNickeau $parts = explode("-", $value); 52*04fd306cSNickeau $valueFromParts = []; 53*04fd306cSNickeau foreach ($parts as $key => $part) { 54*04fd306cSNickeau if (array_key_exists($part, self::$breakpoints)) { 55*04fd306cSNickeau $this->breakpoint = $part; 56*04fd306cSNickeau } else { 57*04fd306cSNickeau $valueFromParts[] = $part; 58*04fd306cSNickeau } 59*04fd306cSNickeau } 60*04fd306cSNickeau if ($this->breakpoint === null) { 61*04fd306cSNickeau $this->breakpoint = null; 62*04fd306cSNickeau $this->value = $value; 63*04fd306cSNickeau return; 64*04fd306cSNickeau } 65*04fd306cSNickeau $this->value = implode("-", $valueFromParts); 66*04fd306cSNickeau LogUtility::warning("The breakpoint conditional value format ($value) will be deprecated in the next releases. It should be written ($this->value-$this->breakpoint)"); 67*04fd306cSNickeau 6837748cd8SNickeau } 6937748cd8SNickeau 70*04fd306cSNickeau /** 71*04fd306cSNickeau * @throws ExceptionBadSyntax 72*04fd306cSNickeau */ 73*04fd306cSNickeau public static function createFrom($value): ConditionalValue 7437748cd8SNickeau { 7537748cd8SNickeau return new ConditionalValue($value); 7637748cd8SNickeau } 7737748cd8SNickeau 78*04fd306cSNickeau /** 79*04fd306cSNickeau * @throws ExceptionBadArgument 80*04fd306cSNickeau */ 81*04fd306cSNickeau public static function checkValidBreakpoint(string $breakpoint) 82*04fd306cSNickeau { 83*04fd306cSNickeau if (!array_key_exists($breakpoint, self::$breakpoints)) { 84*04fd306cSNickeau throw new ExceptionBadArgument("$breakpoint is not a valid breakpoint value"); 85*04fd306cSNickeau } 86*04fd306cSNickeau } 87*04fd306cSNickeau 88*04fd306cSNickeau public function getBreakpoint(): ?string 8937748cd8SNickeau { 9037748cd8SNickeau return $this->breakpoint; 9137748cd8SNickeau } 9237748cd8SNickeau 9337748cd8SNickeau public function getValue() 9437748cd8SNickeau { 9537748cd8SNickeau return $this->value; 9637748cd8SNickeau } 9737748cd8SNickeau 98*04fd306cSNickeau public function getBreakpointSize(): int 99*04fd306cSNickeau { 100*04fd306cSNickeau return self::$breakpoints[$this->breakpoint]; 101*04fd306cSNickeau } 102*04fd306cSNickeau 10337748cd8SNickeau 10437748cd8SNickeau} 105