@@ -17,9 +17,9 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
1717 var checkboxes = attrs . checkboxes ? true : false ;
1818 var groups = attrs . groupBy ? true : false ;
1919
20- var template = '<div class="multiselect-parent btn-group dropdown-multiselect" data-ng-class="{open: open}" >' ;
20+ var template = '<div class="multiselect-parent btn-group dropdown-multiselect">' ;
2121 template += '<button type="button" class="btn btn-default dropdown-toggle" ng-click="toggleDropdown()">{{getButtonText()}}<span class="caret"></span></button>' ;
22- template += '<ul class="dropdown-menu dropdown-menu-form">' ;
22+ template += '<ul class="dropdown-menu dropdown-menu-form" ng-style="{display: open ? \'block\' : \'none\'}" >' ;
2323 template += '<li ng-hide="settings.selectionLimit > 0"><a data-ng-click="selectAll()"><span class="glyphicon glyphicon-ok"></span> Check All</a>' ;
2424 template += '<li><a data-ng-click="deselectAll();"><span class="glyphicon glyphicon-remove"></span> Uncheck All</a></li>' ;
2525 template += '<li class="divider"></li>' ;
@@ -47,8 +47,8 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
4747
4848 template += '</li>' ;
4949
50- template += '<li class="divider" ng-show="settings.selectionLimit > 0 "></li>' ;
51- template += '<li role="presentation" ng-show="settings.selectionLimit > 0 "><a role="menuitem">{{selectedModel.length}} / {{settings.selectionLimit}} selected</a></li>' ;
50+ template += '<li class="divider" ng-show="settings.selectionLimit > 1 "></li>' ;
51+ template += '<li role="presentation" ng-show="settings.selectionLimit > 1 "><a role="menuitem">{{selectedModel.length}} / {{settings.selectionLimit}} selected</a></li>' ;
5252
5353 template += '</ul>' ;
5454 template += '</div>' ;
@@ -92,6 +92,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
9292 groupBy : $attrs . groupBy || undefined ,
9393 groupByTextProvider : null } ;
9494
95+
9596 if ( angular . isDefined ( $scope . settings . groupBy ) )
9697 {
9798 $scope . $watch ( 'options' , function ( newValue ) {
@@ -105,6 +106,16 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
105106 angular . extend ( $scope . settings , $scope . extraSettings || [ ] ) ;
106107 angular . extend ( $scope . externalEvents , $scope . events || [ ] ) ;
107108
109+ $scope . singleSelection = $scope . settings . selectionLimit === 1 ;
110+
111+ if ( $scope . singleSelection )
112+ {
113+ if ( angular . isArray ( $scope . selectedModel ) && $scope . selectedModel . length === 0 )
114+ {
115+ $scope . selectedModel = null ;
116+ }
117+ }
118+
108119 function getFindObj ( id )
109120 {
110121 var findObj = { } ;
@@ -154,7 +165,16 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
154165 {
155166 if ( $scope . settings . dynamicTitle )
156167 {
157- var totalSelected = angular . isDefined ( $scope . selectedModel ) ? $scope . selectedModel . length : 0 ;
168+ var totalSelected ;
169+
170+ if ( $scope . singleSelection )
171+ {
172+ totalSelected = $scope . selectedModel !== null ? 1 : 0 ;
173+ }
174+ else
175+ {
176+ totalSelected = angular . isDefined ( $scope . selectedModel ) ? $scope . selectedModel . length : 0 ;
177+ }
158178
159179 if ( totalSelected === 0 )
160180 {
@@ -182,7 +202,6 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
182202
183203 $scope . selectAll = function ( ) {
184204 $scope . deselectAll ( false ) ;
185-
186205 $scope . externalEvents . onSelectAll ( ) ;
187206
188207 angular . forEach ( $scope . options , function ( value )
@@ -194,55 +213,57 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
194213 $scope . deselectAll = function ( sendEvent ) {
195214 sendEvent = sendEvent || true ;
196215
197- if ( sendEvent )
198- {
216+ if ( sendEvent ) {
199217 $scope . externalEvents . onDeselectAll ( ) ;
200218 }
201219
202- $scope . selectedModel = [ ] ;
220+ if ( $scope . singleSelection ) {
221+ $scope . selectedModel = null ;
222+ }
223+ else {
224+ $scope . selectedModel = [ ] ;
225+ }
226+
203227 } ;
204228
205229 $scope . setSelectedItem = function ( id , dontRemove ) {
206- dontRemove = dontRemove || false ;
207230 var findObj = getFindObj ( id ) ;
231+ var finalObj = null ;
232+
233+ if ( $scope . settings . externalIdProp === '' ) {
234+ finalObj = _ . find ( $scope . options , findObj ) ;
235+ }
236+ else {
237+ finalObj = findObj ;
238+ }
239+
240+ if ( $scope . singleSelection )
241+ {
242+ $scope . selectedModel = finalObj ;
243+ $scope . externalEvents . onItemSelect ( finalObj ) ;
244+
245+ return ;
246+ }
247+
248+ dontRemove = dontRemove || false ;
208249
209250 var exists = _ . findIndex ( $scope . selectedModel , findObj ) !== - 1 ;
210251
211252 if ( ! dontRemove && exists ) {
212253 $scope . selectedModel . splice ( _ . findIndex ( $scope . selectedModel , findObj ) , 1 ) ;
213254 $scope . externalEvents . onItemDeselect ( findObj ) ;
214- } else if ( ! exists ) {
215- if ( $scope . settings . selectionLimit === 0 || $scope . selectedModel . length < $scope . settings . selectionLimit ) {
216- if ( $scope . settings . externalIdProp === '' ) {
217- var fullObjFind = getFindObj ( id ) ;
218- var fullObj = _ . find ( $scope . options , fullObjFind ) ;
219- $scope . selectedModel . push ( fullObj ) ;
220-
221- $scope . externalEvents . onItemSelect ( fullObj ) ;
222-
223- if ( $scope . settings . closeOnSelect )
224- {
225- $scope . toggleDropdown ( ) ;
226- }
227- }
228- else {
229- $scope . selectedModel . push ( findObj ) ;
230- $scope . externalEvents . onItemSelect ( findObj ) ;
231-
232- if ( $scope . settings . closeOnDeselect )
233- {
234- $scope . toggleDropdown ( ) ;
235- }
236- }
237- }
238- else
239- {
240- $scope . externalEvents . onMaxSelectionReached ( ) ;
241- }
255+ } else if ( ! exists && ( $scope . settings . selectionLimit === 0 || $scope . selectedModel . length < $scope . settings . selectionLimit ) ) {
256+ $scope . selectedModel . push ( finalObj ) ;
257+ $scope . externalEvents . onItemSelect ( finalObj ) ;
242258 }
243259 } ;
244260
245261 $scope . isChecked = function ( id ) {
262+ if ( $scope . singleSelection )
263+ {
264+ return $scope . selectedModel !== null && $scope . selectedModel [ $scope . settings . idProp ] === getFindObj ( id ) [ $scope . settings . idProp ] ;
265+ }
266+
246267 return _ . findIndex ( $scope . selectedModel , getFindObj ( id ) ) !== - 1 ;
247268 } ;
248269
0 commit comments