1"use strict"; 2var directiveModule = angular.module("ui.topk.dropdown.multiselect", []); 3directiveModule.directive("ngDropdownMultiselect", ["$filter", "$document", "$compile", "$parse", function ($filter, $document) { 4 return{restrict: "AE", scope: {selectedModel: "=", options: "=", extraSettings: "=", events: "=", searchFilter: "=?", translationTexts: "=", groupBy: "@"}, template: function (element, attrs) { 5 var checkboxes = attrs.checkboxes ? !0 : !1, groups = attrs.groupBy ? !0 : !1, 6 template = '<div class="multiselect-parent btn-group dropdown-multiselect">'; 7 template += '<button type="button" style="width:200px;text-align:left;height:45px; border-radius: 5px;" class="form-control formField" ng-click="toggleDropdown()">{{getButtonText()}} <span class="caret caret-pull-right"></span></button>', 8 template += "<ul class=\"dropdown-menu\" ng-style=\"{display: open ? 'block' : 'none', height : 'auto', width: 'auto' }\" style=\"min-width: 250px\" >", 9 template += '<li ng-hide="!settings.showCheckAll || settings.selectionLimit > 0"><a data-ng-click="selectAll()" style="cursor: pointer;"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>', 10 template += '<li ng-show="settings.showUncheckAll"><a data-ng-click="deselectAll();" style="cursor: pointer;"><span class="glyphicon glyphicon-remove"></span> {{texts.uncheckAll}}</a></li>', 11 template += '<li ng-hide="(!settings.showCheckAll || settings.selectionLimit > 0) && !settings.showUncheckAll" class="divider"></li>', 12 template += '<li ng-show="settings.enableSearch"><div class="dropdown-header"><input type="text" class="form-control" style="width: 100%;" ng-model="searchFilter" placeholder="{{texts.searchPlaceholder}}" /></li>', 13 template += '<li ng-show="settings.enableSearch" class="divider"></li>', 14 groups ? (template += '<li ng-repeat-start="option in orderedItems | filter: searchFilter" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header">{{ getGroupTitle(getPropertyForObject(option, settings.groupBy)) }}</li>', template += '<li ng-repeat-end role="presentation" class="dropdownSubItem">') : template += '<li role="presentation" ng-repeat="option in options | filter: searchFilter" style="cursor: pointer;" >', 15 template += '<a role="menuitem" tabindex="-1" ng-click="setSelectedItem(getPropertyForObject(option,settings.idProp))">', 16 template += checkboxes ? '<div class="checkbox"><label><input class="checkboxInput" type="checkbox" ng-click="checkboxClick($event, getPropertyForObject(option,settings.idProp))" ng-checked="isChecked(getPropertyForObject(option,settings.idProp))" /> {{getPropertyForObject(option, settings.displayProp)}}</label></div></a>' : "<span data-ng-class=\"{'glyphicon glyphicon-ok': isChecked(getPropertyForObject(option,settings.idProp))}\"></span> {{getPropertyForObject(option, settings.displayProp)}}</a>", 17 template += "</li>", 18 template += '<li class="divider" ng-show="settings.selectionLimit > 1"></li>', 19 template += '<li role="presentation" ng-show="settings.selectionLimit > 1"><a role="menuitem">{{selectedModel.length}} {{texts.selectionOf}} {{settings.selectionLimit}} {{texts.selectionCount}}</a></li>', 20 template += "</ul>", 21 template += "</div>", element.html(template); 22 }, link: function ($scope, $element, $attrs) { 23 function getFindObj(id) { 24 var findObj = {}; 25 return"" === $scope.settings.externalIdProp ? findObj[$scope.settings.idProp] = id : findObj[$scope.settings.externalIdProp] = id, findObj 26 } 27 function clearObject(object) { 28 for (var prop in object) 29 delete object[prop] 30 } 31 var $dropdownTrigger = $element.children()[0]; 32 $scope.toggleDropdown = function () { 33 $scope.open = !$scope.open 34 }, $scope.checkboxClick = function ($event, id) { 35 $scope.setSelectedItem(id), $event.stopImmediatePropagation() 36 }, $scope.externalEvents = {onItemSelect: angular.noop, onItemDeselect: angular.noop, onSelectAll: angular.noop, onDeselectAll: angular.noop, onInitDone: angular.noop, onMaxSelectionReached: angular.noop}, $scope.settings = {dynamicTitle: !0, scrollable: !1, scrollableHeight: "300px", closeOnBlur: !0, displayProp: "label", idProp: "id", externalIdProp: "id", enableSearch: !1, selectionLimit: 0, showCheckAll: !0, showUncheckAll: !0, closeOnSelect: !1, buttonClasse
36s: "btn btn-default", closeOnDeselect: !1, groupBy: $attrs.groupBy || void 0, groupByTextProvider: null, smartButtonMaxItems: 0, smartButtonTextConverter: angular.noop}, $scope.texts = {checkAll: "Check All", uncheckAll: "Uncheck All", selectionCount: "checked", selectionOf: "/", searchPlaceholder: "Search...", buttonDefaultText: "Select", dynamicButtonTextSuffix: "checked"}, $scope.searchFilter = $scope.searchFilter || "", angular.isDefined($scope.settings.groupBy) && $scope.$watch("options", function (newValue) { 37 angular.isDefined(newValue) && ($scope.orderedItems = $filter("orderBy")(newValue, $scope.settings.groupBy)) 38 }), angular.extend($scope.settings, $scope.extraSettings || []), angular.extend($scope.externalEvents, $scope.events || []), angular.extend($scope.texts, $scope.translationTexts), $scope.singleSelection = 1 === $scope.settings.selectionLimit, $scope.singleSelection && angular.isArray($scope.selectedModel) && 0 === $scope.selectedModel.length && clearObject($scope.selectedModel), $scope.settings.closeOnBlur && $document.on("click", function (e) { 39 for (var target = e.target.parentElement, parentFound = !1; angular.isDefined(target) && null !== target && !parentFound; ) 40 _.contains(target.className.split(" "), "multiselect-parent") && !parentFound && target === $dropdownTrigger && (parentFound = !0), target = target.parentElement; 41 parentFound || $scope.$apply(function () { 42 $scope.open = !1 43 }) 44 }), $scope.getGroupTitle = function (groupValue) { 45 return null !== $scope.settings.groupByTextProvider ? $scope.settings.groupByTextProvider(groupValue) : groupValue 46 }, $scope.getButtonText = function () { 47 if (!$scope.selectedModel) { 48 return $scope.texts.buttonDefaultText 49 } 50 if ($scope.settings.dynamicTitle && ($scope.selectedModel.length > 0 || angular.isObject($scope.selectedModel) && _.keys($scope.selectedModel).length > 0)) { 51 if ($scope.settings.smartButtonMaxItems > 0) { 52 var itemsText = []; 53 return angular.forEach($scope.options, function (optionItem) { 54 if ($scope.isChecked($scope.getPropertyForObject(optionItem, $scope.settings.idProp))) { 55 var displayText = $scope.getPropertyForObject(optionItem, $scope.settings.displayProp), converterResponse = $scope.settings.smartButtonTextConverter(displayText, optionItem); 56 itemsText.push(converterResponse ? converterResponse : displayText) 57 } 58 }), $scope.selectedModel.length > $scope.settings.smartButtonMaxItems && (itemsText = itemsText.slice(0, $scope.settings.smartButtonMaxItems), itemsText.push("...")), itemsText.join(", ") 59 } 60 if ($scope.selectedModel.length === $scope.options.length) { 61 return $scope.texts.checkAll; 62 } 63 var totalSelected; 64 return totalSelected = $scope.singleSelection ? null !== $scope.selectedModel && angular.isDefined($scope.selectedModel[$scope.settings.idProp]) ? 1 : 0 : angular.isDefined($scope.selectedModel) ? $scope.selectedModel.length : 0, 0 === totalSelected ? $scope.texts.buttonDefaultText : totalSelected + " " + $scope.texts.dynamicButtonTextSuffix 65 } 66 return $scope.texts.buttonDefaultText 67 }, $scope.getPropertyForObject = function (object, property) { 68 return angular.isDefined(object) && object.hasOwnProperty(property) ? object[property] : ""; 69 }, $scope.selectAll = function () { 70 $scope.deselectAll(!1), $scope.externalEvents.onSelectAll(), angular.forEach($scope.options, function (value) { 71 $scope.setSelectedItem(value[$scope.settings.idProp], !0) 72 }) 73 }, $scope.deselectAll = function (sendEvent) { 74 sendEvent = sendEvent || !0, sendEvent && $scope.externalEvents.onDeselectAll(), $scope.singleSelection ? clearObject($scope.selectedModel) : $scope.selectedModel.splice(0, $scope.selectedModel.length) 75 }, $scope.setSelectedItem = function (id, dontRemove) { 76 var findObj = getFindObj(id), finalObj = null; 77 if (finalObj = "" === $scope.settings.externalIdProp ? _.find($scope.options, findObj) : findObj, $scope.singleSelection) 78 return clearObject($scope.selectedModel), angular.extend($scope.selectedModel, finalObj), void $scope.externalEvents.onItemSelect(finalObj); 79 dontRemove = dontRemove || !1; 80 var exists = -1 !== _.findIndex($scope.selectedModel, findObj); 81 !dontRemove && exists ? ($scope.selectedModel.splice(_.findIndex($scope.selectedModel, findObj), 1), $scope.externalEvents.onItemDeselect(findObj)) : !exists && (0 === $scope.settings.selectionLimit || $scope.selectedModel.length < $scope.settings.selectionLimit) && ($scope.selectedModel.push(finalObj), $scope.externalEvents.onItemSelect(finalObj)) 82 }, $scope.isChecked = function (id) { 83 return $scope.singleSelection ? null !== $scope.selectedModel && angular.isDefined($scope.selectedModel[$scope.settings.idProp]) && $scope.selectedModel[$scope.settings.idProp] === getFindObj(id)[$scope.settings.idProp] : -1 !== _.findIndex($scope.selectedModel, getFindObj(id)) 84 }, $scope.externalEvents.onInitDone() 85 }} 86 }]); 87
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.