From e7580ec482083f8a80700b0af4639068487e4776 Mon Sep 17 00:00:00 2001 From: Erwane Breton Date: Fri, 1 Mar 2019 09:06:02 +0100 Subject: [PATCH 1/4] prepend/append are in correct group class --- src/View/Helper/FormHelper.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/View/Helper/FormHelper.php b/src/View/Helper/FormHelper.php index b4e5d3a..cd80059 100644 --- a/src/View/Helper/FormHelper.php +++ b/src/View/Helper/FormHelper.php @@ -119,7 +119,8 @@ class FormHelper extends \Cake\View\Helper\FormHelper { 'inputGroup' => '{{inputGroupStart}}{{input}}{{inputGroupEnd}}', 'inputGroupStart' => '
{{prepend}}', 'inputGroupEnd' => '{{append}}
', - 'inputGroupAddons' => '{{content}}', + 'inputGroupAddons' => '
{{content}}
', + 'inputGroupText' => '{{content}}', 'inputGroupButtons' => '{{content}}', 'inputGroupDropdowns' => '
{{content}}
', 'helpBlock' => '{{content}}', @@ -307,14 +308,15 @@ protected function _getColumnClass($what) { * * @return string The elements wrapped in a suitable HTML element. */ - protected function _wrapInputGroup($addonOrButtons) { + protected function _wrapInputGroup($addonOrButtons, $type) { if ($addonOrButtons) { - $template = 'inputGroupButtons'; if (is_string($addonOrButtons)) { $addonOrButtons = $this->_makeIcon($addonOrButtons); if (!Matching::findTagOrAttribute( 'button', ['type' => 'submit'], $addonOrButtons)) { - $template = 'inputGroupAddons'; + $addonOrButtons = $this->formatTemplate('inputGroupText', [ + 'content' => $addonOrButtons + ]); } } else { @@ -324,10 +326,12 @@ protected function _wrapInputGroup($addonOrButtons) { null, ['data-toggle' => 'dropdown'], $addonOrButtons)) { $template = 'inputGroupDropdowns'; } - $addonOrButtons = $this->formatTemplate($template, [ + $addonOrButtons = $this->formatTemplate('inputGroupAddons', [ + 'type' => strtolower($type), 'content' => $addonOrButtons ]); } + return $addonOrButtons; } @@ -364,7 +368,7 @@ protected function _wrap($input, $prepend, $append) { * opening `
` for an input group. */ public function prepend($input, $prepend) { - $prepend = $this->_wrapInputGroup($prepend); + $prepend = $this->_wrapInputGroup($prepend, 'prepend'); if ($input === null) { return $this->formatTemplate('inputGroupStart', ['prepend' => $prepend]); } @@ -382,7 +386,7 @@ public function prepend($input, $prepend) { * closing `
` for an input group. */ public function append($input, $append) { - $append = $this->_wrapInputGroup($append); + $append = $this->_wrapInputGroup($append, 'append'); if ($input === null) { return $this->formatTemplate('inputGroupEnd', ['append' => $append]); } From 4fba14b82940f724ce4c52553f1219bda7b11f00 Mon Sep 17 00:00:00 2001 From: Erwane Breton Date: Fri, 1 Mar 2019 09:20:19 +0100 Subject: [PATCH 2/4] input-group is no more require for dropdowns --- src/View/Helper/FormHelper.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/View/Helper/FormHelper.php b/src/View/Helper/FormHelper.php index cd80059..cd95e53 100644 --- a/src/View/Helper/FormHelper.php +++ b/src/View/Helper/FormHelper.php @@ -121,8 +121,6 @@ class FormHelper extends \Cake\View\Helper\FormHelper { 'inputGroupEnd' => '{{append}}', 'inputGroupAddons' => '
{{content}}
', 'inputGroupText' => '{{content}}', - 'inputGroupButtons' => '{{content}}', - 'inputGroupDropdowns' => '
{{content}}
', 'helpBlock' => '{{content}}', 'buttonGroup' => '
{{content}}
', 'buttonGroupVertical' => '
{{content}}
', @@ -322,10 +320,7 @@ protected function _wrapInputGroup($addonOrButtons, $type) { else { $addonOrButtons = implode('', $addonOrButtons); } - if (Matching::findTagOrAttribute( - null, ['data-toggle' => 'dropdown'], $addonOrButtons)) { - $template = 'inputGroupDropdowns'; - } + $addonOrButtons = $this->formatTemplate('inputGroupAddons', [ 'type' => strtolower($type), 'content' => $addonOrButtons @@ -717,11 +712,8 @@ public function dropdownButton($title, array $menu = [], array $options = []) { } $options = $this->addClass($options, 'dropdown-toggle'); - return $this->buttonGroup([ - $this->button($title, $options), - $this->Html->dropdown($menu, $ulOptions) - ], $bGroupOptions); + return $this->button($title, $options) . $this->Html->dropdown($menu, $ulOptions); } /** From cb4950a455bc796948ea0de67a325e2a7e7f107e Mon Sep 17 00:00:00 2001 From: Erwane Breton Date: Fri, 1 Mar 2019 11:31:49 +0100 Subject: [PATCH 3/4] dropdown in append/prepend --- src/View/Helper/FormHelper.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/View/Helper/FormHelper.php b/src/View/Helper/FormHelper.php index cd95e53..c6a40bc 100644 --- a/src/View/Helper/FormHelper.php +++ b/src/View/Helper/FormHelper.php @@ -308,17 +308,18 @@ protected function _getColumnClass($what) { */ protected function _wrapInputGroup($addonOrButtons, $type) { if ($addonOrButtons) { - if (is_string($addonOrButtons)) { + if (is_array($addonOrButtons)) { + $addonOrButtons = implode('', $addonOrButtons); + } else { $addonOrButtons = $this->_makeIcon($addonOrButtons); - if (!Matching::findTagOrAttribute( - 'button', ['type' => 'submit'], $addonOrButtons)) { - $addonOrButtons = $this->formatTemplate('inputGroupText', [ - 'content' => $addonOrButtons - ]); - } } - else { - $addonOrButtons = implode('', $addonOrButtons); + + $isButton = strpos($addonOrButtons, 'formatTemplate('inputGroupText', [ + 'content' => $addonOrButtons + ]); } $addonOrButtons = $this->formatTemplate('inputGroupAddons', [ @@ -713,7 +714,10 @@ public function dropdownButton($title, array $menu = [], array $options = []) { $options = $this->addClass($options, 'dropdown-toggle'); - return $this->button($title, $options) . $this->Html->dropdown($menu, $ulOptions); + return $this->buttonGroup([ + $this->button($title, $options), + $this->Html->dropdown($menu, $ulOptions) + ], $bGroupOptions); } /** From 362c4ba10711bd7b1518478834524d7f17ca9e38 Mon Sep 17 00:00:00 2001 From: Erwane Breton Date: Fri, 1 Mar 2019 11:32:49 +0100 Subject: [PATCH 4/4] tests for append/prepend --- .../View/Helper/EasyIconTraitTest.php | 13 ++++-- tests/TestCase/View/Helper/FormHelperTest.php | 46 +++++++++++++------ 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/tests/TestCase/View/Helper/EasyIconTraitTest.php b/tests/TestCase/View/Helper/EasyIconTraitTest.php index 7bc70aa..1b0abe4 100644 --- a/tests/TestCase/View/Helper/EasyIconTraitTest.php +++ b/tests/TestCase/View/Helper/EasyIconTraitTest.php @@ -123,7 +123,6 @@ public function testEasyIcon() { 'result' => 'i:plus' ] ]); - } public function testHtmlHelperMethods() { @@ -176,22 +175,29 @@ public function testFormHelperMethod() { ['div' => [ 'class' => 'input-group' ]], + ['div' => [ + 'class' => 'input-group-prepend' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], ['i' => [ 'class' => 'fa fa-home', 'aria-hidden' => 'true' ]], '/i', '/span', + '/div', ['input' => [ 'type' => 'text', 'class' => 'form-control', 'name' => 'fieldname', 'id' => 'fieldname' ]], + ['div' => [ + 'class' => 'input-group-append' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], ['i' => [ 'class' => 'fa fa-plus', @@ -199,6 +205,7 @@ public function testFormHelperMethod() { ]], '/i', '/span', '/div', + '/div', '/div' ], $result); //BootstrapFormHelper::prepend($input, $prepend); // For $prepend. diff --git a/tests/TestCase/View/Helper/FormHelperTest.php b/tests/TestCase/View/Helper/FormHelperTest.php index b74ecd3..69c0b20 100644 --- a/tests/TestCase/View/Helper/FormHelperTest.php +++ b/tests/TestCase/View/Helper/FormHelperTest.php @@ -639,11 +639,15 @@ public function testInputGroup() { ['div' => [ 'class' => 'input-group' ]], + ['div' => [ + 'class' => 'input-group-prepend' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], '@', '/span', + '/div', ['input' => [ 'type' => 'text', 'class' => 'form-control', @@ -668,12 +672,16 @@ public function testInputGroup() { 'name' => $fieldName, 'id' => $fieldName ]], + ['div' => [ + 'class' => 'input-group-append' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], '.00', '/span', '/div', + '/div', '/div' ]; $this->_testInput($expected, $fieldName, $options + ['append' => '.00']); @@ -685,23 +693,31 @@ public function testInputGroup() { ['div' => [ 'class' => 'input-group' ]], + ['div' => [ + 'class' => 'input-group-prepend' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], '$', '/span', + '/div', ['input' => [ 'type' => 'text', 'class' => 'form-control', 'name' => $fieldName, 'id' => $fieldName ]], + ['div' => [ + 'class' => 'input-group-append' + ]], ['span' => [ - 'class' => 'input-group-addon' + 'class' => 'input-group-text' ]], '.00', '/span', '/div', + '/div', '/div' ]; $this->_testInput($expected, $fieldName, @@ -714,8 +730,8 @@ public function testInputGroup() { ['div' => [ 'class' => 'input-group' ]], - ['span' => [ - 'class' => 'input-group-btn' + ['div' => [ + 'class' => 'input-group-prepend' ]], ['button' => [ 'class' => 'btn btn-primary', @@ -723,7 +739,7 @@ public function testInputGroup() { ]], 'Go!', '/button', - '/span', + '/div', ['input' => [ 'type' => 'text', 'class' => 'form-control', @@ -751,8 +767,8 @@ public function testInputGroup() { 'name' => $fieldName, 'id' => $fieldName ]], - ['span' => [ - 'class' => 'input-group-btn' + ['div' => [ + 'class' => 'input-group-append' ]], ['button' => [ 'class' => 'btn btn-primary', @@ -760,7 +776,7 @@ public function testInputGroup() { ]], 'Go!', '/button', - '/span', + '/div', '/div', '/div' ]; @@ -780,8 +796,8 @@ public function testInputGroup() { 'name' => $fieldName, 'id' => $fieldName ]], - ['span' => [ - 'class' => 'input-group-btn' + ['div' => [ + 'class' => 'input-group-append' ]], ['button' => [ 'class' => 'btn btn-primary', @@ -795,7 +811,7 @@ public function testInputGroup() { ]], 'GoGo!', '/button', - '/span', + '/div', '/div', '/div' ]; @@ -825,7 +841,7 @@ public function testAppendDropdown() { 'id' => $fieldName ]], ['div' => [ - 'class' => 'input-group-btn' + 'class' => 'input-group-append' ]], ['div' => [ 'class' => 'btn-group', @@ -876,7 +892,7 @@ public function testAppendDropdown() { 'id' => $fieldName ]], ['div' => [ - 'class' => 'input-group-btn' + 'class' => 'input-group-append' ]], ['div' => [ 'class' => 'btn-group dropup',