-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathngSelect.min.js
6 lines (6 loc) · 3.34 KB
/
ngSelect.min.js
1
2
3
4
5
6
/*! ngSelect
version: 1.0.0
build date: 2015-02-04
author: Robin Fan
https://github.com/pc035860/ngSelect.git */
angular.module("ngSelect",[]).controller("NgSelectCtrl",["$scope",function(){function a(){var a;if(b.multiple)a=d.getModel(),angular.isArray(a)?a.length=0:a=[],angular.forEach(f,function(b){b.selected&&a.push(b.value)});else{a=null;var c,e,g;for(c=0,e=f.length;e>c;c++)if(g=f[c],g.selected){a=g.value;break}}d.setModel(a)}var b,c,d=this,e=0,f=[],g=!1;d.init=function(a,e){b=e,c=a,c.$render=d.render,g&&(g=!1,d.render())},d.getConfig=function(){return b},d.addOption=function(a){var c={index:e++,value:a,selected:!1,disabled:!1};if(b.multiple){var g=d.getModel();angular.isArray(g)&&(c.selected=d.getModel().indexOf(a)>=0)}else c.selected=a==d.getModel();return f.push(c),c},d.removeOption=function(a){a.selected&&d.unselect(a);var b,c,e;for(b=0,c=f.length;c>b;b++)if(e=f[b],angular.equals(a,e)){f.splice(b,1);break}},d.select=function(c){c.selected=!0,b.multiple||angular.forEach(f,function(a){a.index!==c.index&&(a.selected=!1)}),a()},d.unselect=function(b){b.selected=!1,a()},d.clear=function(){if(b.multiple){var a=d.getModel();angular.isArray(a)?a.length=0:d.setModel([])}else d.setModel(null)},d.setModel=function(a){c.$setViewValue(a)},d.getModel=function(){return c.$modelValue},d.render=function(){if(angular.isUndefined(b))return void(g=!0);if(b.multiple){var a=d.getModel();angular.forEach(f,function(b){for(var c=!1,d=0;d<a.length;d++)if(a[d]===b.value){c=!0;break}b.selected=c})}else{var c=!1;angular.forEach(f,function(a){c||a.value!=d.getModel()?a.selected=!1:(a.selected=!0,c=!0)})}}}]).directive("ngSelect",[function(){return{restrict:"A",controller:"NgSelectCtrl",require:"ngModel",link:{pre:function(a,b,c,d){var e=b.data("$ngSelectController"),f={};f.multiple=function(){return angular.isUndefined(c.selectMultiple)?!1:""===c.selectMultiple||1===Number(c.selectMultiple)}(),f.classExpr=c.selectClass,f.disabledExpr=c.selectDisabled,f.styleExpr=c.selectStyle,e.init(d,f)}}}}]).directive("ngSelectOption",[function(){return{restrict:"A",require:"^ngSelect",link:function(a,b,c,d){function e(a){var b={};return angular.forEach(a,function(a,c){angular.isUndefined(n[c])&&(n[c]="$opt"+o(c)),b[n[c]]=a}),b}function f(a){i.disabled=a}function g(a,c){c&&a!==c&&angular.forEach(c,function(a,c){b.css(c,"")}),a&&b.css(a)}function h(a,b){b&&!angular.equals(a,b)&&q(b),r(a)}var i,j,k,l,m=d.getConfig();k=c.selectClass||m.classExpr,j=c.selectDisabled||m.disabledExpr,l=c.selectStyle||m.styleExpr,i=d.addOption(a.$eval(c.ngSelectOption)),b.bind("click",function(){return i.disabled||a.$apply(function(){d[i.selected?"unselect":"select"](i)}),!1}),a.$on("$destroy",function(){angular.isDefined(i)&&d.removeOption(i)}),angular.isDefined(j)&&a.$watch(function(a){return a.$eval(j,e(i))},f,!0),angular.isDefined(k)&&a.$watch(function(a){return a.$eval(k,e(i))},h,!0),angular.isDefined(l)&&a.$watch(function(a){return a.$eval(l,e(i))},g,!0);var n={},o=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},p=function(a,b){var c=[];return angular.forEach(a,function(a,d){var e=b(a,d);e&&c.push(e)}),c},q=function(a){angular.isObject(a)&&!angular.isArray(a)&&(a=p(a,function(a,b){return a?b:void 0})),b.removeClass(angular.isArray(a)?a.join(" "):a)},r=function(a){angular.isObject(a)&&!angular.isArray(a)&&(a=p(a,function(a,b){return a?b:void 0})),a&&b.addClass(angular.isArray(a)?a.join(" "):a)}}}}]);