|
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