| @@ 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 | ||