@@ -31,17 +31,19 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
3131 var template = '<div class="multiselect-parent btn-group dropdown-multiselect">' ;
3232 template += '<button type="button" class="dropdown-toggle" ng-class="settings.buttonClasses" ng-click="toggleDropdown()">{{getButtonText()}} <span class="caret"></span></button>' ;
3333 template += '<ul class="dropdown-menu dropdown-menu-form" ng-if="open" ng-style="{display: open ? \'block\' : \'none\', height : settings.scrollable ? settings.scrollableHeight : \'auto\' }" style="overflow: auto" >' ;
34- template += '<li ng-hide="!settings.showCheckAll || settings.selectionLimit > 0"><a ng-keydown="keyDownLink($event)" data-ng-click="selectAll()" tabindex="-1" id="selectAll"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>' ;
35- template += '<li ng-show="settings.showUncheckAll"><a ng-keydown="keyDownLink($event)" data-ng-click="deselectAll();" tabindex="-1" id="deselectAll"><span class="glyphicon glyphicon-remove"></span> {{texts.uncheckAll}}</a></li>' ;
36- template += '<li ng-hide="(!settings.showCheckAll || settings.selectionLimit > 0) && !settings.showUncheckAll" class="divider"></li>' ;
37- template += '<li ng-show="settings.enableSearch"><div class="dropdown-header"><input type="text" class="form-control searchField" ng-keydown="keyDownSearchDefault($event); keyDownSearchSingle($event, searchFilter);" style="width: 100%;" ng-model="searchFilter" placeholder="{{texts.searchPlaceholder}}" /></li>' ;
38- template += '<li ng-show="settings.enableSearch" class="divider"></li>' ;
34+ template += '<li ng-if="settings.showCheckAll && settings.selectionLimit > 0"><a ng-keydown="keyDownLink($event)" data-ng-click="selectAll()" tabindex="-1" id="selectAll"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>' ;
35+ template += '<li ng-if="settings.showUncheckAll"><a ng-keydown="keyDownLink($event)" data-ng-click="deselectAll();" tabindex="-1" id="deselectAll"><span class="glyphicon glyphicon-remove"></span> {{texts.uncheckAll}}</a></li>' ;
36+ template += '<li ng-if="settings.showEnableSearchButton && settings.enableSearch"><a ng-keydown="keyDownLink($event); keyDownToggleSearch();" ng-click="toggleSearch($event);" tabindex="-1">{{texts.disableSearch}}</a></li>' ;
37+ template += '<li ng-if="settings.showEnableSearchButton && !settings.enableSearch"><a ng-keydown="keyDownLink($event); keyDownToggleSearch();" ng-click="toggleSearch($event);" tabindex="-1">{{texts.enableSearch}}</a></li>' ;
38+ template += '<li ng-if="(settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll || settings.showEnableSearchButton" class="divider"></li>' ;
39+ template += '<li ng-if="settings.enableSearch"><div class="dropdown-header"><input type="text" class="form-control searchField" ng-keydown="keyDownSearchDefault($event); keyDownSearchSingle($event, input.searchFilter);" style="width: 100%;" ng-model="input.searchFilter" placeholder="{{texts.searchPlaceholder}}" /></li>' ;
40+ template += '<li ng-if="settings.enableSearch" class="divider"></li>' ;
3941
4042 if ( groups ) {
41- template += '<li ng-repeat-start="option in orderedItems | filter:getFilter(searchFilter)" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header">{{ getGroupTitle(getPropertyForObject(option, settings.groupBy)) }}</li>' ;
43+ template += '<li ng-repeat-start="option in orderedItems | filter:getFilter(input. searchFilter)" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header">{{ getGroupTitle(getPropertyForObject(option, settings.groupBy)) }}</li>' ;
4244 template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" ng-repeat-end role="presentation">' ;
4345 } else {
44- template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" role="presentation" ng-repeat="option in options | filter:getFilter(searchFilter)">' ;
46+ template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" role="presentation" ng-repeat="option in options | filter:getFilter(input. searchFilter)">' ;
4547 }
4648
4749 template += '<a ng-keydown="keyDownLink($event)" role="menuitem" class="option" tabindex="-1" ng-click="setSelectedItem(getPropertyForObject(option,settings.idProp))">' ;
@@ -108,6 +110,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
108110 selectionLimit : 0 ,
109111 showCheckAll : true ,
110112 showUncheckAll : true ,
113+ showEnableSearchButton : false ,
111114 closeOnSelect : false ,
112115 buttonClasses : 'btn btn-default' ,
113116 closeOnDeselect : false ,
@@ -128,10 +131,14 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
128131 selectionOf : '/' ,
129132 searchPlaceholder : 'Search...' ,
130133 buttonDefaultText : 'Select' ,
131- dynamicButtonTextSuffix : 'checked'
134+ dynamicButtonTextSuffix : 'checked' ,
135+ disableSearch : 'Disable search' ,
136+ enableSearch : 'Enable search'
132137 } ;
133138
134- $scope . searchFilter = $scope . searchFilter || '' ;
139+ $scope . input = {
140+ searchFilter : $scope . searchFilter || ''
141+ } ;
135142
136143 if ( angular . isDefined ( $scope . settings . groupBy ) ) {
137144 $scope . $watch ( 'options' , function ( newValue ) {
@@ -378,7 +385,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
378385
379386 $scope . toggleDropdown ( ) ;
380387 }
381- }
388+ } ;
382389
383390 $scope . keyDownSearchDefault = function ( event ) {
384391 var parent = event . srcElement . parentNode . parentNode ;
@@ -410,7 +417,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
410417
411418 $scope . toggleDropdown ( ) ;
412419 }
413- }
420+ } ;
414421
415422 $scope . keyDownSearchSingle = function ( event , searchFilter ) {
416423 var searchResult ;
@@ -425,13 +432,41 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
425432 }
426433 }
427434 }
428- }
435+ } ;
429436
430437 $scope . getFilter = function ( searchFilter ) {
431438 var filter = { } ;
432439 filter [ $scope . settings . searchField ] = searchFilter ;
433440 return filter ;
434- }
441+ } ;
442+
443+ $scope . toggleSearch = function ( $event ) {
444+ if ( $event ) {
445+ $event . stopPropagation ( ) ;
446+ }
447+ $scope . settings . enableSearch = ! $scope . settings . enableSearch ;
448+ if ( ! $scope . settings . enableSearch ) {
449+ $scope . input . searchFilter = '' ;
450+ }
451+ } ;
452+
453+ $scope . keyDownToggleSearch = function ( ) {
454+ if ( ! $scope . settings . keyboardControls ) {
455+ return ;
456+ }
457+ if ( event . keyCode === 13 ) {
458+ $scope . toggleSearch ( ) ;
459+ if ( $scope . settings . enableSearch ) {
460+ setTimeout (
461+ function ( ) {
462+ angular . element ( $element ) [ 0 ] . querySelector ( '.searchField' ) . focus ( ) ;
463+ } , 0
464+ ) ;
465+ } else {
466+ angular . element ( $element ) [ 0 ] . querySelector ( '.option' ) . focus ( ) ;
467+ }
468+ }
469+ } ;
435470 }
436471 } ;
437472} ] ) ;
0 commit comments