Skip to content

Commit b0aef69

Browse files
authored
Merge pull request #175 from Erwane/173-input-groups
Fix #173.
2 parents a197388 + 362c4ba commit b0aef69

File tree

3 files changed

+61
-38
lines changed

3 files changed

+61
-38
lines changed

src/View/Helper/FormHelper.php

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,8 @@ class FormHelper extends \Cake\View\Helper\FormHelper {
119119
'inputGroup' => '{{inputGroupStart}}{{input}}{{inputGroupEnd}}',
120120
'inputGroupStart' => '<div class="input-group">{{prepend}}',
121121
'inputGroupEnd' => '{{append}}</div>',
122-
'inputGroupAddons' => '<span class="input-group-addon">{{content}}</span>',
123-
'inputGroupButtons' => '<span class="input-group-btn">{{content}}</span>',
124-
'inputGroupDropdowns' => '<div class="input-group-btn">{{content}}</div>',
122+
'inputGroupAddons' => '<div class="input-group-{{type}}">{{content}}</div>',
123+
'inputGroupText' => '<span class="input-group-text">{{content}}</span>',
125124
'helpBlock' => '<small class="help-block form-text text-muted">{{content}}</small>',
126125
'buttonGroup' => '<div class="btn-group{{attrs.class}}" role="group"{{attrs}}>{{content}}</div>',
127126
'buttonGroupVertical' => '<div class="btn-group-vertical{{attrs.class}}" role="group"{{attrs}}>{{content}}</div>',
@@ -307,27 +306,28 @@ protected function _getColumnClass($what) {
307306
*
308307
* @return string The elements wrapped in a suitable HTML element.
309308
*/
310-
protected function _wrapInputGroup($addonOrButtons) {
309+
protected function _wrapInputGroup($addonOrButtons, $type) {
311310
if ($addonOrButtons) {
312-
$template = 'inputGroupButtons';
313-
if (is_string($addonOrButtons)) {
314-
$addonOrButtons = $this->_makeIcon($addonOrButtons);
315-
if (!Matching::findTagOrAttribute(
316-
'button', ['type' => 'submit'], $addonOrButtons)) {
317-
$template = 'inputGroupAddons';
318-
}
319-
}
320-
else {
311+
if (is_array($addonOrButtons)) {
321312
$addonOrButtons = implode('', $addonOrButtons);
313+
} else {
314+
$addonOrButtons = $this->_makeIcon($addonOrButtons);
322315
}
323-
if (Matching::findTagOrAttribute(
324-
null, ['data-toggle' => 'dropdown'], $addonOrButtons)) {
325-
$template = 'inputGroupDropdowns';
316+
317+
$isButton = strpos($addonOrButtons, '<button') === 0;
318+
$isDropdown = strpos($addonOrButtons, 'data-toggle="dropdown"');
319+
if (!$isButton && !$isDropdown) {
320+
$addonOrButtons = $this->formatTemplate('inputGroupText', [
321+
'content' => $addonOrButtons
322+
]);
326323
}
327-
$addonOrButtons = $this->formatTemplate($template, [
324+
325+
$addonOrButtons = $this->formatTemplate('inputGroupAddons', [
326+
'type' => strtolower($type),
328327
'content' => $addonOrButtons
329328
]);
330329
}
330+
331331
return $addonOrButtons;
332332
}
333333

@@ -364,7 +364,7 @@ protected function _wrap($input, $prepend, $append) {
364364
* opening `<div>` for an input group.
365365
*/
366366
public function prepend($input, $prepend) {
367-
$prepend = $this->_wrapInputGroup($prepend);
367+
$prepend = $this->_wrapInputGroup($prepend, 'prepend');
368368
if ($input === null) {
369369
return $this->formatTemplate('inputGroupStart', ['prepend' => $prepend]);
370370
}
@@ -382,7 +382,7 @@ public function prepend($input, $prepend) {
382382
* closing `</div>` for an input group.
383383
*/
384384
public function append($input, $append) {
385-
$append = $this->_wrapInputGroup($append);
385+
$append = $this->_wrapInputGroup($append, 'append');
386386
if ($input === null) {
387387
return $this->formatTemplate('inputGroupEnd', ['append' => $append]);
388388
}
@@ -713,11 +713,11 @@ public function dropdownButton($title, array $menu = [], array $options = []) {
713713
}
714714

715715
$options = $this->addClass($options, 'dropdown-toggle');
716+
716717
return $this->buttonGroup([
717718
$this->button($title, $options),
718719
$this->Html->dropdown($menu, $ulOptions)
719720
], $bGroupOptions);
720-
721721
}
722722

723723
/**

tests/TestCase/View/Helper/EasyIconTraitTest.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ public function testEasyIcon() {
123123
'result' => 'i:plus'
124124
]
125125
]);
126-
127126
}
128127

129128
public function testHtmlHelperMethods() {
@@ -176,29 +175,37 @@ public function testFormHelperMethod() {
176175
['div' => [
177176
'class' => 'input-group'
178177
]],
178+
['div' => [
179+
'class' => 'input-group-prepend'
180+
]],
179181
['span' => [
180-
'class' => 'input-group-addon'
182+
'class' => 'input-group-text'
181183
]],
182184
['i' => [
183185
'class' => 'fa fa-home',
184186
'aria-hidden' => 'true'
185187
]], '/i',
186188
'/span',
189+
'/div',
187190
['input' => [
188191
'type' => 'text',
189192
'class' => 'form-control',
190193
'name' => 'fieldname',
191194
'id' => 'fieldname'
192195
]],
196+
['div' => [
197+
'class' => 'input-group-append'
198+
]],
193199
['span' => [
194-
'class' => 'input-group-addon'
200+
'class' => 'input-group-text'
195201
]],
196202
['i' => [
197203
'class' => 'fa fa-plus',
198204
'aria-hidden' => 'true'
199205
]], '/i',
200206
'/span',
201207
'/div',
208+
'/div',
202209
'/div'
203210
], $result);
204211
//BootstrapFormHelper::prepend($input, $prepend); // For $prepend.

tests/TestCase/View/Helper/FormHelperTest.php

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -639,11 +639,15 @@ public function testInputGroup() {
639639
['div' => [
640640
'class' => 'input-group'
641641
]],
642+
['div' => [
643+
'class' => 'input-group-prepend'
644+
]],
642645
['span' => [
643-
'class' => 'input-group-addon'
646+
'class' => 'input-group-text'
644647
]],
645648
'@',
646649
'/span',
650+
'/div',
647651
['input' => [
648652
'type' => 'text',
649653
'class' => 'form-control',
@@ -668,12 +672,16 @@ public function testInputGroup() {
668672
'name' => $fieldName,
669673
'id' => $fieldName
670674
]],
675+
['div' => [
676+
'class' => 'input-group-append'
677+
]],
671678
['span' => [
672-
'class' => 'input-group-addon'
679+
'class' => 'input-group-text'
673680
]],
674681
'.00',
675682
'/span',
676683
'/div',
684+
'/div',
677685
'/div'
678686
];
679687
$this->_testInput($expected, $fieldName, $options + ['append' => '.00']);
@@ -685,23 +693,31 @@ public function testInputGroup() {
685693
['div' => [
686694
'class' => 'input-group'
687695
]],
696+
['div' => [
697+
'class' => 'input-group-prepend'
698+
]],
688699
['span' => [
689-
'class' => 'input-group-addon'
700+
'class' => 'input-group-text'
690701
]],
691702
'$',
692703
'/span',
704+
'/div',
693705
['input' => [
694706
'type' => 'text',
695707
'class' => 'form-control',
696708
'name' => $fieldName,
697709
'id' => $fieldName
698710
]],
711+
['div' => [
712+
'class' => 'input-group-append'
713+
]],
699714
['span' => [
700-
'class' => 'input-group-addon'
715+
'class' => 'input-group-text'
701716
]],
702717
'.00',
703718
'/span',
704719
'/div',
720+
'/div',
705721
'/div'
706722
];
707723
$this->_testInput($expected, $fieldName,
@@ -714,16 +730,16 @@ public function testInputGroup() {
714730
['div' => [
715731
'class' => 'input-group'
716732
]],
717-
['span' => [
718-
'class' => 'input-group-btn'
733+
['div' => [
734+
'class' => 'input-group-prepend'
719735
]],
720736
['button' => [
721737
'class' => 'btn btn-primary',
722738
'type' => 'submit'
723739
]],
724740
'Go!',
725741
'/button',
726-
'/span',
742+
'/div',
727743
['input' => [
728744
'type' => 'text',
729745
'class' => 'form-control',
@@ -751,16 +767,16 @@ public function testInputGroup() {
751767
'name' => $fieldName,
752768
'id' => $fieldName
753769
]],
754-
['span' => [
755-
'class' => 'input-group-btn'
770+
['div' => [
771+
'class' => 'input-group-append'
756772
]],
757773
['button' => [
758774
'class' => 'btn btn-primary',
759775
'type' => 'submit'
760776
]],
761777
'Go!',
762778
'/button',
763-
'/span',
779+
'/div',
764780
'/div',
765781
'/div'
766782
];
@@ -780,8 +796,8 @@ public function testInputGroup() {
780796
'name' => $fieldName,
781797
'id' => $fieldName
782798
]],
783-
['span' => [
784-
'class' => 'input-group-btn'
799+
['div' => [
800+
'class' => 'input-group-append'
785801
]],
786802
['button' => [
787803
'class' => 'btn btn-primary',
@@ -795,7 +811,7 @@ public function testInputGroup() {
795811
]],
796812
'GoGo!',
797813
'/button',
798-
'/span',
814+
'/div',
799815
'/div',
800816
'/div'
801817
];
@@ -825,7 +841,7 @@ public function testAppendDropdown() {
825841
'id' => $fieldName
826842
]],
827843
['div' => [
828-
'class' => 'input-group-btn'
844+
'class' => 'input-group-append'
829845
]],
830846
['div' => [
831847
'class' => 'btn-group',
@@ -876,7 +892,7 @@ public function testAppendDropdown() {
876892
'id' => $fieldName
877893
]],
878894
['div' => [
879-
'class' => 'input-group-btn'
895+
'class' => 'input-group-append'
880896
]],
881897
['div' => [
882898
'class' => 'btn-group dropup',

0 commit comments

Comments
 (0)