@@ 12-114 (lines=103) @@ | ||
9 | * @author PyroCMS, Inc. <[email protected]> |
|
10 | * @author Ryan Thompson <[email protected]> |
|
11 | */ |
|
12 | class ButtonNormalizer |
|
13 | { |
|
14 | ||
15 | /** |
|
16 | * Normalize button input. |
|
17 | * |
|
18 | * @param FormBuilder $builder |
|
19 | */ |
|
20 | public function normalize(FormBuilder $builder) |
|
21 | { |
|
22 | $buttons = $builder->getButtons(); |
|
23 | ||
24 | foreach ($buttons as $key => &$button) { |
|
25 | $button = $this->process($key, $button); |
|
26 | } |
|
27 | ||
28 | $builder->setButtons($buttons); |
|
29 | } |
|
30 | ||
31 | /** |
|
32 | * Process a button. |
|
33 | * |
|
34 | * @param $key |
|
35 | * @param $button |
|
36 | * @return array|string |
|
37 | */ |
|
38 | protected function process($key, $button) |
|
39 | { |
|
40 | /* |
|
41 | * If the button is a string then use |
|
42 | * it as the button parameter. |
|
43 | */ |
|
44 | if (is_string($button)) { |
|
45 | $button = [ |
|
46 | 'button' => $button, |
|
47 | ]; |
|
48 | } |
|
49 | ||
50 | /* |
|
51 | * If the key is a string and the button |
|
52 | * is an array without a button param then |
|
53 | * move the key into the button as that param. |
|
54 | */ |
|
55 | if (!is_integer($key) && !isset($button['button'])) { |
|
56 | $button['button'] = $key; |
|
57 | } |
|
58 | ||
59 | /** |
|
60 | * Default to size "sm" |
|
61 | */ |
|
62 | if (!isset($button['size'])) { |
|
63 | $button['size'] = 'sm'; |
|
64 | } |
|
65 | ||
66 | /* |
|
67 | * Make sure some default parameters exist. |
|
68 | */ |
|
69 | $button['attributes'] = array_get($button, 'attributes', []); |
|
70 | ||
71 | /* |
|
72 | * Move the HREF if any to the attributes. |
|
73 | */ |
|
74 | if (isset($button['href'])) { |
|
75 | array_set($button['attributes'], 'href', array_pull($button, 'href')); |
|
76 | } |
|
77 | ||
78 | /* |
|
79 | * Move the target if any to the attributes. |
|
80 | */ |
|
81 | if (isset($button['target'])) { |
|
82 | array_set($button['attributes'], 'target', array_pull($button, 'target')); |
|
83 | } |
|
84 | ||
85 | /* |
|
86 | * Move all data-* keys |
|
87 | * to attributes. |
|
88 | */ |
|
89 | foreach ($button as $attribute => $value) { |
|
90 | if (str_is('data-*', $attribute)) { |
|
91 | array_set($button, 'attributes.' . $attribute, array_pull($button, $attribute)); |
|
92 | } |
|
93 | } |
|
94 | ||
95 | /* |
|
96 | * Make sure the HREF is absolute. |
|
97 | */ |
|
98 | if ( |
|
99 | isset($button['attributes']['href']) && |
|
100 | is_string($button['attributes']['href']) && |
|
101 | !starts_with($button['attributes']['href'], ['http', '{']) |
|
102 | ) { |
|
103 | $button['attributes']['href'] = url($button['attributes']['href']); |
|
104 | } |
|
105 | ||
106 | if (isset($button['dropdown'])) { |
|
107 | foreach ($button['dropdown'] as $key => &$dropdown) { |
|
108 | $dropdown = $this->process($key, $dropdown); |
|
109 | } |
|
110 | } |
|
111 | ||
112 | return $button; |
|
113 | } |
|
114 | } |
|
115 |
@@ 12-116 (lines=105) @@ | ||
9 | * @author PyroCMS, Inc. <[email protected]> |
|
10 | * @author Ryan Thompson <[email protected]> |
|
11 | */ |
|
12 | class ButtonNormalizer |
|
13 | { |
|
14 | ||
15 | /** |
|
16 | * Normalize button input. |
|
17 | * |
|
18 | * @param TableBuilder $builder |
|
19 | */ |
|
20 | public function normalize(TableBuilder $builder) |
|
21 | { |
|
22 | $buttons = $builder->getButtons(); |
|
23 | ||
24 | foreach ($buttons as $key => &$button) { |
|
25 | $button = $this->process($key, $button); |
|
26 | } |
|
27 | ||
28 | $builder->setButtons($buttons); |
|
29 | } |
|
30 | ||
31 | /** |
|
32 | * Process the button. |
|
33 | * |
|
34 | * @param $key |
|
35 | * @param $button |
|
36 | * @return array |
|
37 | */ |
|
38 | protected function process($key, $button) |
|
39 | { |
|
40 | /* |
|
41 | * If the button is a string then use |
|
42 | * it as the button parameter. |
|
43 | */ |
|
44 | if (is_string($button)) { |
|
45 | $button = [ |
|
46 | 'button' => $button, |
|
47 | ]; |
|
48 | } |
|
49 | ||
50 | /* |
|
51 | * If the key is a string and the button |
|
52 | * is an array without a button param then |
|
53 | * move the key into the button as that param. |
|
54 | */ |
|
55 | if (!is_integer($key) && !isset($button['button'])) { |
|
56 | $button['button'] = $key; |
|
57 | } |
|
58 | ||
59 | /* |
|
60 | * If the key is a string and the button |
|
61 | * is an array without a slug param then |
|
62 | * move the key into the button as that param. |
|
63 | */ |
|
64 | if (!is_integer($key) && !isset($button['slug'])) { |
|
65 | $button['slug'] = $key; |
|
66 | } |
|
67 | ||
68 | /* |
|
69 | * Move the HREF if any to the attributes. |
|
70 | */ |
|
71 | if (isset($button['href'])) { |
|
72 | array_set($button['attributes'], 'href', array_pull($button, 'href')); |
|
73 | } |
|
74 | ||
75 | /* |
|
76 | * Move the target if any to the attributes. |
|
77 | */ |
|
78 | if (isset($button['target'])) { |
|
79 | array_set($button['attributes'], 'target', array_pull($button, 'target')); |
|
80 | } |
|
81 | ||
82 | /* |
|
83 | * Move all data-* keys |
|
84 | * to attributes. |
|
85 | */ |
|
86 | foreach ($button as $attribute => $value) { |
|
87 | if (str_is('data-*', $attribute)) { |
|
88 | array_set($button, 'attributes.' . $attribute, array_pull($button, $attribute)); |
|
89 | } |
|
90 | } |
|
91 | ||
92 | /* |
|
93 | * Make sure the HREF is absolute. |
|
94 | */ |
|
95 | if ( |
|
96 | isset($button['attributes']['href']) && |
|
97 | is_string($button['attributes']['href']) && |
|
98 | !starts_with($button['attributes']['href'], ['http', '{']) |
|
99 | ) { |
|
100 | $button['attributes']['href'] = url($button['attributes']['href']); |
|
101 | } |
|
102 | ||
103 | /* |
|
104 | * Use small buttons for tables. |
|
105 | */ |
|
106 | $button['size'] = array_get($button, 'size', 'sm'); |
|
107 | ||
108 | if (isset($button['dropdown'])) { |
|
109 | foreach ($button['dropdown'] as $key => &$dropdown) { |
|
110 | $dropdown = $this->process($key, $dropdown); |
|
111 | } |
|
112 | } |
|
113 | ||
114 | return $button; |
|
115 | } |
|
116 | } |
|
117 |