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