xref: /plugin/combo/ComboStrap/Horizontal.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap;
5*04fd306cSNickeau
6*04fd306cSNickeau
7*04fd306cSNickeauuse ComboStrap\TagAttribute\Vertical;
8*04fd306cSNickeau
9*04fd306cSNickeauclass Horizontal
10*04fd306cSNickeau{
11*04fd306cSNickeau
12*04fd306cSNickeau
13*04fd306cSNickeau    public const HORIZONTAL_ATTRIBUTE = "horizontal";
14*04fd306cSNickeau    const CANONICAL = self::HORIZONTAL_ATTRIBUTE;
15*04fd306cSNickeau
16*04fd306cSNickeau    const VALUES = [
17*04fd306cSNickeau        "start-items",
18*04fd306cSNickeau        "end",
19*04fd306cSNickeau        "center-children",
20*04fd306cSNickeau        "between",
21*04fd306cSNickeau        "around",
22*04fd306cSNickeau        "evenly"
23*04fd306cSNickeau    ];
24*04fd306cSNickeau
25*04fd306cSNickeau    public static function processHorizontal(TagAttributes &$tagAttributes)
26*04fd306cSNickeau    {
27*04fd306cSNickeau
28*04fd306cSNickeau        self::processFlexAttribute(self::HORIZONTAL_ATTRIBUTE, $tagAttributes);
29*04fd306cSNickeau
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    static function processFlexAttribute(string $attributeName, $tagAttributes)
33*04fd306cSNickeau    {
34*04fd306cSNickeau
35*04fd306cSNickeau        $value = $tagAttributes->getValueAndRemove($attributeName);
36*04fd306cSNickeau        if ($value === null) {
37*04fd306cSNickeau            return;
38*04fd306cSNickeau        }
39*04fd306cSNickeau
40*04fd306cSNickeau        $logicalTag = $tagAttributes->getLogicalTag();
41*04fd306cSNickeau
42*04fd306cSNickeau        if (!in_array($logicalTag, Vertical::COMPONENTS)) {
43*04fd306cSNickeau            LogUtility::warning("The $attributeName attribute is only meant to be used on the following component " . implode(", ", Vertical::COMPONENTS), self::CANONICAL);
44*04fd306cSNickeau        }
45*04fd306cSNickeau        try {
46*04fd306cSNickeau            $conditionalValue = ConditionalValue::createFrom($value);
47*04fd306cSNickeau        } catch (ExceptionBadSyntax $e) {
48*04fd306cSNickeau            LogUtility::error("The $attributeName attribute value is not valid. Error: {$e->getMessage()}", self::CANONICAL);
49*04fd306cSNickeau            return;
50*04fd306cSNickeau        }
51*04fd306cSNickeau        $valueWithoutBreakpoint = $conditionalValue->getValue();
52*04fd306cSNickeau        if ($attributeName === self::HORIZONTAL_ATTRIBUTE) {
53*04fd306cSNickeau            $possibleValues = self::VALUES;
54*04fd306cSNickeau        } else {
55*04fd306cSNickeau            $possibleValues = Horizontal::VALUES;
56*04fd306cSNickeau        }
57*04fd306cSNickeau        if (!in_array($valueWithoutBreakpoint, $possibleValues)) {
58*04fd306cSNickeau            LogUtility::error("The $attributeName attribute value ($valueWithoutBreakpoint) is not good. It should be one of: " . implode(", ", $possibleValues), self::CANONICAL);
59*04fd306cSNickeau            return;
60*04fd306cSNickeau        }
61*04fd306cSNickeau        $breakpoint = $conditionalValue->getBreakpoint();
62*04fd306cSNickeau        if ($attributeName === self::HORIZONTAL_ATTRIBUTE) {
63*04fd306cSNickeau            $classPrefix = "justify-content";
64*04fd306cSNickeau        } else {
65*04fd306cSNickeau            $classPrefix = "align-items";
66*04fd306cSNickeau        }
67*04fd306cSNickeau        if ($breakpoint !== null) {
68*04fd306cSNickeau            $class = "$classPrefix-$breakpoint-$valueWithoutBreakpoint";
69*04fd306cSNickeau        } else {
70*04fd306cSNickeau            $class = "$classPrefix-$valueWithoutBreakpoint";
71*04fd306cSNickeau        }
72*04fd306cSNickeau        $tagAttributes->addClassName($class);
73*04fd306cSNickeau
74*04fd306cSNickeau        // works only on flex items
75*04fd306cSNickeau        // row is a flex item
76*04fd306cSNickeau        if ($logicalTag !== GridTag::TAG) {
77*04fd306cSNickeau            $tagAttributes->addClassName(\syntax_plugin_combo_cell::FLEX_CLASS);
78*04fd306cSNickeau        }
79*04fd306cSNickeau
80*04fd306cSNickeau    }
81*04fd306cSNickeau
82*04fd306cSNickeau}
83