xref: /plugin/combo/ComboStrap/TagAttribute/TextAlign.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap\TagAttribute;
4*04fd306cSNickeau
5*04fd306cSNickeau
6*04fd306cSNickeauuse ComboStrap\Bootstrap;
7*04fd306cSNickeauuse ComboStrap\ConditionalLength;
8*04fd306cSNickeauuse ComboStrap\ExceptionBadArgument;
9*04fd306cSNickeauuse ComboStrap\LogUtility;
10*04fd306cSNickeauuse ComboStrap\TagAttributes;
11*04fd306cSNickeau
12*04fd306cSNickeau/**
13*04fd306cSNickeau * @deprecated
14*04fd306cSNickeau */
15*04fd306cSNickeauclass TextAlign
16*04fd306cSNickeau{
17*04fd306cSNickeau
18*04fd306cSNickeau    const ATTRIBUTE_NAME = "text-align";
19*04fd306cSNickeau    const CANONICAL = "text-align";
20*04fd306cSNickeau
21*04fd306cSNickeau
22*04fd306cSNickeau    /**
23*04fd306cSNickeau     * @param TagAttributes $attributes
24*04fd306cSNickeau     * https://getbootstrap.com/docs/5.0/utilities/text/#text-alignment
25*04fd306cSNickeau     */
26*04fd306cSNickeau    public static function processTextAlign(&$attributes)
27*04fd306cSNickeau    {
28*04fd306cSNickeau
29*04fd306cSNickeau        if ($attributes->hasComponentAttribute(self::ATTRIBUTE_NAME)) {
30*04fd306cSNickeau
31*04fd306cSNickeau            LogUtility::warning("The text-align attribute has been deprecated for the align attribute.", self::CANONICAL);
32*04fd306cSNickeau
33*04fd306cSNickeau            try {
34*04fd306cSNickeau                $textAlignValues = $attributes->getValuesAndRemove(self::ATTRIBUTE_NAME);
35*04fd306cSNickeau            } catch (ExceptionBadArgument $e) {
36*04fd306cSNickeau                LogUtility::error("Unable to retrieve the tex-align attribute. Error: {$e->getMessage()}", self::CANONICAL);
37*04fd306cSNickeau                return;
38*04fd306cSNickeau            }
39*04fd306cSNickeau            foreach ($textAlignValues as $textAlignValue) {
40*04fd306cSNickeau                try {
41*04fd306cSNickeau                    $conditionalTextAlignValue = ConditionalLength::createFromString($textAlignValue);
42*04fd306cSNickeau                } catch (ExceptionBadArgument $e) {
43*04fd306cSNickeau                    LogUtility::error("The text-align value($textAlignValue) is not valid. Error: {$e->getMessage()}", self::CANONICAL);
44*04fd306cSNickeau                    return;
45*04fd306cSNickeau                }
46*04fd306cSNickeau
47*04fd306cSNickeau                $bootstrapMajorVersion = Bootstrap::getBootStrapMajorVersion();
48*04fd306cSNickeau                if ($bootstrapMajorVersion == Bootstrap::BootStrapFourMajorVersion) {
49*04fd306cSNickeau                    $breakpoint = $conditionalTextAlignValue->getBreakpoint();
50*04fd306cSNickeau                    if (!empty($breakpoint)) {
51*04fd306cSNickeau                        LogUtility::msg("Bootstrap 4 does not support conditional value for the attribute (" . self::ATTRIBUTE_NAME . "). Therefore, the value ($textAlignValue) cannot be applied", LogUtility::LVL_MSG_WARNING, self::CANONICAL);
52*04fd306cSNickeau                    }
53*04fd306cSNickeau                    $value = $conditionalTextAlignValue->getLength();
54*04fd306cSNickeau                    // Bootstrap 4
55*04fd306cSNickeau                    switch ($value) {
56*04fd306cSNickeau                        case "left":
57*04fd306cSNickeau                        case "start":
58*04fd306cSNickeau                            $attributes->addStyleDeclarationIfNotSet(self::ATTRIBUTE_NAME, "left");
59*04fd306cSNickeau                            break;
60*04fd306cSNickeau                        case "right":
61*04fd306cSNickeau                        case "end":
62*04fd306cSNickeau                            $attributes->addStyleDeclarationIfNotSet(self::ATTRIBUTE_NAME, "right");
63*04fd306cSNickeau                            break;
64*04fd306cSNickeau                        case "center":
65*04fd306cSNickeau                        case "justify":
66*04fd306cSNickeau                            $attributes->addStyleDeclarationIfNotSet(self::ATTRIBUTE_NAME, $value);
67*04fd306cSNickeau                            break;
68*04fd306cSNickeau                        default:
69*04fd306cSNickeau                            LogUtility::msg("The text-align value ($value) is unknown.", LogUtility::LVL_MSG_ERROR, self::CANONICAL);
70*04fd306cSNickeau                            break;
71*04fd306cSNickeau                    }
72*04fd306cSNickeau
73*04fd306cSNickeau                } else {
74*04fd306cSNickeau                    $breakpoint = $conditionalTextAlignValue->getBreakpoint();
75*04fd306cSNickeau                    if (!empty($breakpoint)) {
76*04fd306cSNickeau                        switch ($breakpoint) {
77*04fd306cSNickeau                            case "sm":
78*04fd306cSNickeau                            case "small":
79*04fd306cSNickeau                                $breakpoint = "sm";
80*04fd306cSNickeau                                break;
81*04fd306cSNickeau                            case "md":
82*04fd306cSNickeau                            case "medium":
83*04fd306cSNickeau                                $breakpoint = "md";
84*04fd306cSNickeau                                break;
85*04fd306cSNickeau                            case "lg":
86*04fd306cSNickeau                            case "large":
87*04fd306cSNickeau                                $breakpoint = "lg";
88*04fd306cSNickeau                                break;
89*04fd306cSNickeau                            case "xl":
90*04fd306cSNickeau                            case "extra-large":
91*04fd306cSNickeau                                $breakpoint = "xl";
92*04fd306cSNickeau                                break;
93*04fd306cSNickeau                            default:
94*04fd306cSNickeau                                LogUtility::msg("The breakpoint ($breakpoint) of the text-align value ($textAlignValue) is not correct.", LogUtility::LVL_MSG_ERROR, self::CANONICAL);
95*04fd306cSNickeau                                $breakpoint = "";
96*04fd306cSNickeau                                break;
97*04fd306cSNickeau                        }
98*04fd306cSNickeau                    }
99*04fd306cSNickeau                    $value = $conditionalTextAlignValue->getLength();
100*04fd306cSNickeau                    // Bootstrap 5
101*04fd306cSNickeau                    switch ($value) {
102*04fd306cSNickeau                        case "start":
103*04fd306cSNickeau                        case "left": // from bs4
104*04fd306cSNickeau                            $valueClass = "start";
105*04fd306cSNickeau                            if (empty($breakpoint)) {
106*04fd306cSNickeau                                $attributes->addClassName("text-$valueClass");
107*04fd306cSNickeau                            } else {
108*04fd306cSNickeau                                $attributes->addClassName("text-$breakpoint-$valueClass");
109*04fd306cSNickeau                            }
110*04fd306cSNickeau                            break;
111*04fd306cSNickeau                        case "end":
112*04fd306cSNickeau                        case "right": // from bs4
113*04fd306cSNickeau                            $valueClass = "end";
114*04fd306cSNickeau                            if (empty($breakpoint)) {
115*04fd306cSNickeau                                $attributes->addClassName("text-$valueClass");
116*04fd306cSNickeau                            } else {
117*04fd306cSNickeau                                $attributes->addClassName("text-$breakpoint-$valueClass");
118*04fd306cSNickeau                            }
119*04fd306cSNickeau                            break;
120*04fd306cSNickeau                        case "center":
121*04fd306cSNickeau                            $valueClass = "center";
122*04fd306cSNickeau                            if (empty($breakpoint)) {
123*04fd306cSNickeau                                $attributes->addClassName("text-$valueClass");
124*04fd306cSNickeau                            } else {
125*04fd306cSNickeau                                $attributes->addClassName("text-$breakpoint-$valueClass");
126*04fd306cSNickeau                            }
127*04fd306cSNickeau                            break;
128*04fd306cSNickeau                        case "justify":
129*04fd306cSNickeau                            if (!empty($breakpoint)) {
130*04fd306cSNickeau                                LogUtility::msg("The `justify` value of the text-align attribute does not support actually breakpoint. The breakpoint value ($$breakpoint) was then not applied.", LogUtility::LVL_MSG_WARNING, self::CANONICAL);
131*04fd306cSNickeau                            }
132*04fd306cSNickeau                            $attributes->addStyleDeclarationIfNotSet(self::ATTRIBUTE_NAME, $value);
133*04fd306cSNickeau                            break;
134*04fd306cSNickeau                        default:
135*04fd306cSNickeau                            LogUtility::msg("The text-align value ($value) is unknown.", LogUtility::LVL_MSG_ERROR, self::CANONICAL);
136*04fd306cSNickeau                            break;
137*04fd306cSNickeau                    }
138*04fd306cSNickeau                }
139*04fd306cSNickeau            }
140*04fd306cSNickeau        }
141*04fd306cSNickeau    }
142*04fd306cSNickeau}
143