aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/webapp/app/vid/external/multiselect/angular-bootstrap-multiselect.min.js
blob: b9be2c7e43cb56df146ea64f62dfd657735b626d (plain)
1
!function(){"use strict";var a=angular.module("btorfs.multiselect",["btorfs.multiselect.templates"]);a.getRecursiveProperty=function(a,b){return b.split(".").reduce(function(a,b){return a?a[b]:null},a)},a.directive("multiselect",["$filter","$document","$log",function(b,c,d){return{restrict:"AE",scope:{options:"=",displayProp:"@",idProp:"@",searchLimit:"=?",selectionLimit:"=?",showSelectAll:"=?",showUnselectAll:"=?",showSearch:"=?",searchFilter:"=?",disabled:"=?ngDisabled",labels:"=?",showTooltip:"=?",placeholder:"@?"},require:"ngModel",templateUrl:"multiselect.html",link:function(b,e,f,g){b.selectionLimit=b.selectionLimit||0,b.searchLimit=b.searchLimit||25,b.searchFilter="",b.resolvedOptions=[],"function"!=typeof b.options&&(b.resolvedOptions=b.options),"undefined"!=typeof f.disabled&&(b.disabled=!0);var h=function(a){e[0].contains(a.target)||b.$apply(function(){b.open=!1})};c.on("click",h);var i=function(){g.$viewValue?(b.selectedOptions=b.resolvedOptions.filter(function(a){for(var c=b.getId(a),d=0;d<g.$viewValue.length;d++){var e=b.getId(g.$viewValue[d]);if(c===e)return!0}return!1}),b.unselectedOptions=b.resolvedOptions.filter(function(a){return b.selectedOptions.indexOf(a)<0})):(b.selectedOptions&&(b.selectedOptions=[]),b.unselectedOptions=b.resolvedOptions.slice())};b.toggleDropdown=function(){b.open=!b.open,b.resolvedOptions=b.options,i()},g.$render=function(){i()},g.$viewChangeListeners.push(function(){i()}),g.$isEmpty=function(a){return!a||0===a.length};var j=b.$watch("selectedOptions",function(){g.$setViewValue(angular.copy(b.selectedOptions))},!0);b.$on("$destroy",function(){c.off("click",h),j&&j()}),b.getButtonText=function(){if(b.selectedOptions&&1===b.selectedOptions.length)return b.getDisplay(b.selectedOptions[0]);if(b.selectedOptions&&b.selectedOptions.length>1){var a=angular.isDefined(b.selectedOptions)?b.selectedOptions.length:0;return 0===a?b.labels&&b.labels.select?b.labels.select:b.placeholder||"Select":a+" "+(b.labels&&b.labels.itemsSelected?b.labels.itemsSelected:"selected")}return b.labels&&b.labels.select?b.labels.select:b.placeholder||"Select"},b.selectAll=function(){b.selectedOptions=b.resolvedOptions.slice(),b.unselectedOptions=[]},b.unselectAll=function(){b.selectedOptions=[],b.unselectedOptions=b.resolvedOptions.slice()},b.toggleItem=function(a){"undefined"==typeof b.selectedOptions&&(b.selectedOptions=[]);var c=b.selectedOptions.indexOf(a),d=c!==-1;if(d)b.unselectedOptions.push(b.selectedOptions[c]),b.selectedOptions.splice(c,1);else if(!d&&(0===b.selectionLimit||b.selectedOptions.length<b.selectionLimit)){var e=b.unselectedOptions.indexOf(a);b.unselectedOptions.splice(e,1),b.selectedOptions.push(a)}},b.getId=function(c){return angular.isString(c)?c:angular.isObject(c)?b.idProp?a.getRecursiveProperty(c,b.idProp):(d.error("Multiselect: when using objects as model, a idProp value is mandatory."),""):c},b.getDisplay=function(c){return angular.isString(c)?c:angular.isObject(c)?b.displayProp?a.getRecursiveProperty(c,b.displayProp):(d.error("Multiselect: when using objects as model, a displayProp value is mandatory."),""):c},b.isSelected=function(a){if(!b.selectedOptions)return!1;for(var c=b.getId(a),d=0;d<b.selectedOptions.length;d++){var e=b.selectedOptions[d];if(b.getId(e)===c)return!0}return!1},b.updateOptions=function(){"function"==typeof b.options&&b.options().then(function(a){b.resolvedOptions=a,i()})},b.search=function(){var a=0;return function(c){if(a>b.searchLimit)return!1;var d=b.getDisplay(c);if(d){var e=d.toLowerCase().indexOf(b.searchFilter.toLowerCase())>-1;return e&&a++,e}}}}}}])}(),angular.module("btorfs.multiselect.templates",["multiselect.html"]),angular.module("multiselect.html",[]).run(["$templateCache",function(a){a.put("multiselect.html",'<div class="btn-group" style="width: 100%">\n    <button type="button" class="btn btn-default btn-block dropdown-toggle" ng-click="toggleDropdown()" ng-disabled="disabled" style="white-space: nowrap; overflow-x: hidden; text-overflow: ellipsis;">\n        {{getButtonText()}}&nbsp;<span class="caret"></span>\n    </button>\n    <ul class="dropdown-menu dropdown-menu-form"\n        ng-style="{display: open ? \'block\' : \'none\'}" style="width: 100%; overflow-x: auto">\n\n        <li ng-show="showSelectAll">\n            <a ng-click="selectAll()" href="">\n                <span class="glyphicon glyphicon-ok"></span> {{labels.selectAll || \'Select All\'}}\n            </a>\n        </li>\n        <li ng-show="showUnselectAll">\n            <a ng-click="unselectAll()" href="">\n                <span class="glyphicon glyphicon-remove"></span> {{labels.unselectAll || \'Unselect All\'}}\n            </a>\n        </li>\n        <li ng-show="(showSelectAll || showUnselectAll)"\n            class="divider">\n        </li>\n\n        <li role="presentation" ng-repeat="option in selectedOptions" class="active">\n            <a class="item-selected" href="" title="{{showTooltip ? getDisplay(option) : \'\'}}" ng-click="toggleItem(option); $event.stopPropagation()" style="overflow-x: auto">\n                <span class="glyphicon glyphicon-remove"></span>\n                {{getDisplay(option)}}\n            </a>\n        </li>\n        <li ng-show="selectedOptions.length > 0" class="divider"></li>\n\n        <li ng-show="showSearch">\n            <div class="dropdown-header">\n                <input type="text" class="form-control input-sm" style="width: 100%;"\n                       ng-model="searchFilter" placeholder="{{labels.search || \'Search...\'}}" ng-change="updateOptions()"/>\n            </div>\n        </li>\n\n        <li ng-show="showSearch" class="divider"></li>\n        <li role="presentation" ng-repeat="option in unselectedOptions | filter:search() | limitTo: searchLimit"\n            ng-if="!isSelected(option)"\n            ng-class="{disabled : selectionLimit && selectedOptions.length >= selectionLimit}">\n            <a class="item-unselected" href="" title="{{showTooltip ? getDisplay(option) : \'\'}}" ng-click="toggleItem(option); $event.stopPropagation()" style="overflow-x: auto">\n                {{getDisplay(option)}}\n            </a>\n        </li>\n\n        <li class="divider" ng-show="selectionLimit > 1"></li>\n        <li role="presentation" ng-show="selectionLimit > 1">\n            <a>{{selectedOptions.length || 0}} / {{selectionLimit}} {{labels.itemsSelected || \'selected\'}}</a>\n        </li>\n\n    </ul>\n</div>\n')}]);