xref: /plugin/combo/ComboStrap/ConditionalValue.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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