Skip to content
This repository was archived by the owner on Dec 16, 2019. It is now read-only.

Commit ab767ea

Browse files
committed
Merge branch 'pr/n10_morow93'
2 parents d2fff25 + 9a0fc24 commit ab767ea

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

src/angularjs-dropdown-multiselect.js

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
3333
template += '<ul class="dropdown-menu dropdown-menu-form" ng-if="open" ng-style="{display: open ? \'block\' : \'none\', height : settings.scrollable ? settings.scrollableHeight : \'auto\', overflow: \'auto\' }" >';
3434
template += '<li ng-if="settings.showCheckAll && settings.selectionLimit !== 1"><a ng-keydown="keyDownLink($event)" data-ng-click="selectAll()" tabindex="-1" id="selectAll"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>';
3535
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.selectByGroups && ((settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll)" class="divider"></li>';
37+
template += '<li ng-repeat="currentGroup in settings.selectByGroups track by $index" ng-click="selectCurrentGroup(currentGroup)"><a ng-class="{\'dropdown-selected-group\': selectedGroup === currentGroup}" tabindex="-1">{{::texts.selectGroup}} {{::getGroupLabel(currentGroup)}}</a></li>';
38+
template += '<li ng-if="settings.selectByGroups && settings.showEnableSearchButton" class="divider"></li>';
3639
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>';
40+
template += '<li ng-if="settings.showEnableSearchButton && !settings.enableSearch"><a ng-keydown="keyDownLink($event); keyDownToggleSearch();" ng-click="toggleSearch($event);" tabindex="-1">{{texts.enableSearch}}</a></li>';
41+
template += '<li ng-if="(settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll || settings.showEnableSearchButton" class="divider"></li>';
3942
template += '<li ng-if="settings.enableSearch"><div class="dropdown-header"><input type="text" class="form-control searchField" ng-keydown="keyDownSearchDefault($event); keyDownSearch($event, input.searchFilter);" ng-style="{width: \'100%\'}" ng-model="input.searchFilter" placeholder="{{texts.searchPlaceholder}}" /></li>';
4043
template += '<li ng-if="settings.enableSearch" class="divider"></li>';
4144

4245
if (groups) {
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>';
46+
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">{{ getGroupLabel(getPropertyForObject(option, settings.groupBy)) }}</li>';
4447
template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" ng-repeat-end role="presentation">';
4548
} else {
4649
template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" role="presentation" ng-repeat="option in options | filter:getFilter(input.searchFilter)">';
@@ -80,7 +83,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
8083
angular.element($element)[0].querySelector('.option').focus();
8184
}, 0);
8285
}
83-
}
86+
}
8487
}
8588
};
8689

@@ -96,7 +99,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
9699
onDeselectAll: angular.noop,
97100
onInitDone: angular.noop,
98101
onMaxSelectionReached: angular.noop,
99-
onSelectionChanged: angular.noop
102+
onSelectionChanged: angular.noop
100103
};
101104

102105
$scope.settings = {
@@ -133,8 +136,9 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
133136
searchPlaceholder: 'Search...',
134137
buttonDefaultText: 'Select',
135138
dynamicButtonTextSuffix: 'checked',
136-
disableSearch: 'Disable search',
137-
enableSearch: 'Enable search'
139+
disableSearch: 'Disable search',
140+
enableSearch: 'Enable search',
141+
selectGroup: 'Select all:'
138142
};
139143

140144
$scope.input = {
@@ -157,6 +161,18 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
157161
}
158162
});
159163

164+
$scope.selectCurrentGroup = function(currentGroup) {
165+
$scope.selectedModel.splice(0, $scope.selectedModel.length);
166+
if ($scope.orderedItems) {
167+
$scope.orderedItems.forEach(function(item) {
168+
if (item[$scope.groupBy] === currentGroup) {
169+
$scope.setSelectedItem($scope.getPropertyForObject(item, $scope.settings.idProp), false, false)
170+
}
171+
});
172+
}
173+
$scope.externalEvents.onSelectionChanged();
174+
};
175+
160176
angular.extend($scope.settings, $scope.extraSettings || []);
161177
angular.extend($scope.externalEvents, $scope.events || []);
162178
angular.extend($scope.texts, $scope.translationTexts);
@@ -211,7 +227,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
211227
});
212228
}
213229

214-
$scope.getGroupTitle = function (groupValue) {
230+
$scope.getGroupLabel = function (groupValue) {
215231
if ($scope.settings.groupByTextProvider !== null) {
216232
return $scope.settings.groupByTextProvider(groupValue);
217233
}
@@ -277,6 +293,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
277293
$scope.setSelectedItem(value[$scope.settings.idProp], true, false);
278294
});
279295
$scope.externalEvents.onSelectionChanged();
296+
$scope.selectedGroup = null;
280297
};
281298

282299
$scope.deselectAll = function (dontSendEvent) {
@@ -294,6 +311,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
294311
if (!dontSendEvent) {
295312
$scope.externalEvents.onSelectionChanged();
296313
}
314+
$scope.selectedGroup = null;
297315
};
298316

299317
$scope.setSelectedItem = function (id, dontRemove, fireSelectionChange) {
@@ -330,8 +348,9 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
330348
}
331349
}
332350
if (fireSelectionChange) {
333-
$scope.externalEvents.onSelectionChanged();
351+
$scope.externalEvents.onSelectionChanged();
334352
}
353+
$scope.selectedGroup = null;
335354
};
336355

337356
$scope.isChecked = function (id) {
@@ -443,13 +462,13 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
443462
}
444463
}
445464
};
446-
465+
447466
$scope.getFilter = function(searchFilter) {
448467
var filter = {};
449468
filter[$scope.settings.searchField] = searchFilter;
450469
return filter;
451470
};
452-
471+
453472
$scope.toggleSearch = function($event) {
454473
if ($event) {
455474
$event.stopPropagation();
@@ -459,7 +478,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
459478
$scope.input.searchFilter = '';
460479
}
461480
};
462-
481+
463482
$scope.keyDownToggleSearch = function() {
464483
if (!$scope.settings.keyboardControls) {
465484
return;

0 commit comments

Comments
 (0)