PageSourceSearch

https://topkinisis.com/js/multiselectiondropdown.js

js topkinisis.com collected 2026-10-02 11:38:29 UTC 10,906 bytes, 87 lines download raw bytes

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()}}&nbsp;<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.