|
2 | 2 | * Angular JS Multi Select |
3 | 3 | * Creates a dropdown-like button with checkboxes. |
4 | 4 | * |
5 | | - * Created: Tue, 14 Jan 2014 - 5:18:02 PM |
| 5 | + * Project started on: Tue, 14 Jan 2014 - 5:18:02 PM |
| 6 | + * Current version: 2.0.0 |
6 | 7 | * |
7 | 8 | * Released under the MIT License |
8 | | - * |
9 | 9 | * -------------------------------------------------------------------------------- |
10 | 10 | * The MIT License (MIT) |
11 | 11 | * |
@@ -75,12 +75,12 @@ angular.module( 'multi-select', ['ng'] ).directive( 'multiSelect' , [ '$sce', '$ |
75 | 75 | '<div class="checkboxLayer">' + |
76 | 76 | '<form>' + |
77 | 77 | '<div class="helperContainer" ng-if="displayHelper( \'filter\' ) || displayHelper( \'all\' ) || displayHelper( \'none\' ) || displayHelper( \'reset\' )">' + |
78 | | - '<div ng-if="displayHelper( \'all\' ) || displayHelper( \'none\' ) || displayHelper( \'reset\' )">' + |
| 78 | + '<div class="line" ng-if="displayHelper( \'all\' ) || displayHelper( \'none\' ) || displayHelper( \'reset\' )">' + |
79 | 79 | '<button type="button" ng-click="select( \'all\', $event );" class="helperButton" ng-if="!isDisabled && displayHelper( \'all\' )"> ✓ Select All</button> ' + |
80 | | - '<button type="button" ng-click="select( \'none\', $event );" class="helperButton" ng-if="!isDisabled && displayHelper( \'none\' )"> × Select None</button> ' + |
| 80 | + '<button type="button" ng-click="select( \'none\', $event );" class="helperButton" ng-if="!isDisabled && displayHelper( \'none\' )"> × Select None</button>' + |
81 | 81 | '<button type="button" ng-click="select( \'reset\', $event );" class="helperButton" ng-if="!isDisabled && displayHelper( \'reset\' )" style="float:right">↶ Reset</button>' + |
82 | 82 | '</div>' + |
83 | | - '<div style="position:relative" ng-if="displayHelper( \'filter\' )">' + |
| 83 | + '<div class="line" style="position:relative" ng-if="displayHelper( \'filter\' )">' + |
84 | 84 | '<input placeholder="Search..." type="text" ng-click="select( \'filter\', $event )" ng-model="inputLabel.labelFilter" ng-change="updateFilter();$scope.getFormElements();" class="inputFilter" />' + |
85 | 85 | '<button type="button" class="clearButton" ng-click="inputLabel.labelFilter=\'\';updateFilter();prepareGrouping();prepareIndex();select( \'clear\', $event )">×</button> ' + |
86 | 86 | '</div>' + |
@@ -213,44 +213,48 @@ angular.module( 'multi-select', ['ng'] ).directive( 'multiSelect' , [ '$sce', '$ |
213 | 213 |
|
214 | 214 | // Show or hide a helper element |
215 | 215 | $scope.displayHelper = function( elementString ) { |
216 | | - if ( typeof attrs.helperElements === 'undefined' ) { |
217 | | - return true; |
218 | | - } |
219 | | - switch( elementString.toUpperCase() ) { |
220 | | - case 'ALL': |
221 | | - if ( attrs.selectionMode && $scope.selectionMode.toUpperCase() === 'SINGLE' ) { |
| 216 | + |
| 217 | + if ( attrs.selectionMode && $scope.selectionMode.toUpperCase() === 'SINGLE' ) { |
| 218 | + |
| 219 | + switch( elementString.toUpperCase() ) { |
| 220 | + case 'ALL': |
| 221 | + return false; |
| 222 | + break; |
| 223 | + case 'NONE': |
222 | 224 | return false; |
223 | | - } |
224 | | - else { |
225 | | - if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'ALL' ) >= 0 ) { |
226 | | - return true; |
| 225 | + break; |
| 226 | + case 'RESET': |
| 227 | + if ( typeof attrs.helperElements === 'undefined' ) { |
| 228 | + return true; |
227 | 229 | } |
228 | | - } |
229 | | - break; |
230 | | - case 'NONE': |
231 | | - if ( attrs.selectionMode && $scope.selectionMode.toUpperCase() === 'SINGLE' ) { |
232 | | - return false; |
233 | | - } |
234 | | - else { |
235 | | - if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'NONE' ) >= 0 ) { |
| 230 | + else if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'RESET' ) >= 0 ) { |
| 231 | + return true; |
| 232 | + } |
| 233 | + break; |
| 234 | + case 'FILTER': |
| 235 | + if ( typeof attrs.helperElements === 'undefined' ) { |
| 236 | + return true; |
| 237 | + } |
| 238 | + if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'FILTER' ) >= 0 ) { |
236 | 239 | return true; |
237 | 240 | } |
238 | | - } |
239 | | - break; |
240 | | - case 'RESET': |
241 | | - if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'RESET' ) >= 0 ) { |
242 | | - return true; |
243 | | - } |
244 | | - break; |
245 | | - case 'FILTER': |
246 | | - if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( 'FILTER' ) >= 0 ) { |
247 | | - return true; |
248 | | - } |
249 | | - break; |
250 | | - default: |
251 | | - return false; |
252 | | - break; |
| 241 | + break; |
| 242 | + default: |
| 243 | + break; |
| 244 | + } |
| 245 | + |
| 246 | + return false; |
253 | 247 | } |
| 248 | + |
| 249 | + else { |
| 250 | + if ( typeof attrs.helperElements === 'undefined' ) { |
| 251 | + return true; |
| 252 | + } |
| 253 | + if ( attrs.helperElements && $scope.helperElements.toUpperCase().indexOf( elementString.toUpperCase() ) >= 0 ) { |
| 254 | + return true; |
| 255 | + } |
| 256 | + return false; |
| 257 | + } |
254 | 258 | } |
255 | 259 |
|
256 | 260 | // call this function when an item is clicked |
@@ -377,22 +381,27 @@ angular.module( 'multi-select', ['ng'] ).directive( 'multiSelect' , [ '$sce', '$ |
377 | 381 |
|
378 | 382 | // single item click |
379 | 383 | else { |
380 | | - $scope.filteredModel[ index ][ $scope.tickProperty ] = !$scope.filteredModel[ index ][ $scope.tickProperty ]; |
381 | | - |
382 | | - // we refresh input model as well |
383 | | - inputModelIndex = $scope.filteredModel[ index ][ $scope.indexProperty ]; |
384 | | - $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = $scope.filteredModel[ index ][ $scope.tickProperty ]; |
385 | 384 |
|
386 | 385 | // If it's single selection mode |
387 | 386 | if ( attrs.selectionMode && $scope.selectionMode.toUpperCase() === 'SINGLE' ) { |
388 | | - $scope.filteredModel[ index ][ $scope.tickProperty ] = true; |
389 | | - for( i=0 ; i < $scope.filteredModel.length ; i++) { |
390 | | - if ( i !== index ) { |
391 | | - $scope.filteredModel[ i ][ $scope.tickProperty ] = false; |
392 | | - } |
| 387 | + |
| 388 | + // first, set everything to false |
| 389 | + for( i=0 ; i < $scope.filteredModel.length ; i++) { |
| 390 | + $scope.filteredModel[ i ][ $scope.tickProperty ] = false; |
393 | 391 | } |
| 392 | + for( i=0 ; i < $scope.inputModel.length ; i++) { |
| 393 | + $scope.inputModel[ i ][ $scope.tickProperty ] = false; |
| 394 | + } |
| 395 | + |
394 | 396 | $scope.toggleCheckboxes( e ); |
395 | 397 | } |
| 398 | + |
| 399 | + // then set the clicked item to true |
| 400 | + $scope.filteredModel[ index ][ $scope.tickProperty ] = true; |
| 401 | + |
| 402 | + // we refresh input model as well |
| 403 | + inputModelIndex = $scope.filteredModel[ index ][ $scope.indexProperty ]; |
| 404 | + $scope.inputModel[ inputModelIndex ][ $scope.tickProperty ] = $scope.filteredModel[ index ][ $scope.tickProperty ]; |
396 | 405 | } |
397 | 406 |
|
398 | 407 | $scope.clickedItem = angular.copy( item ); |
|
0 commit comments