Repository URL to install this package:
|
Version:
1.2.0-1346 ▾
|
angular.module("selectionModel",[]),angular.module("selectionModel").directive("selectionModelIgnore",[function(){"use strict";return{restrict:"A",link:function(a,b,c){var d=function(a){a.selectionModelIgnore=!0,a.originalEvent&&(a.originalEvent.selectionModelIgnore=!0)};b.on("click",function(b){(!c.selectionModelIgnore||a.$eval(c.selectionModelIgnore))&&d(b)})}}}]),angular.module("selectionModel").directive("selectionModel",["selectionStack","uuidGen","selectionModelOptions",function(a,b,c){"use strict";return{restrict:"A",link:function(d,e,f){var g=c.get(),h=g.selectedAttribute,i=g.selectedClass,j=g.type,k=g.mode,l=g.cleanupStrategy,m=d.$eval(f.selectionModelType)||j,n=d.$eval(f.selectionModelMode)||k,o=/^multi(ple)?(-additive)?$/.test(n),p=/^multi(ple)?-additive/.test(n),q=d.$eval(f.selectionModelSelectedAttribute)||h,r=d.$eval(f.selectionModelSelectedClass)||i,s=d.$eval(f.selectionModelCleanupStrategy)||l,t=f.selectionModelOnChange,u=f.ngRepeat;if(!u)throw"selectionModel must be used along side ngRepeat";var v=d.$eval(f.selectionModelSelectedItems),w=function(){if(!o)return null;var a="data-selection-model-stack-id",c=e.attr(a);return c?c:(c=e.parent().attr(a))?(e.attr(a,c),c):(c=b.create(),e.attr(a,c),e.parent().attr(a,c),c)}(),x=u.split(/\sin\s|\strack\sby\s/g),y=d.$eval(x[0]),z=x.length>2,A=function(){if(y[q]?e.addClass(r):e.removeClass(r),"checkbox"===m){var a=[];angular.forEach(e.find("input"),function(b){b=angular.element(b),"checkbox"===b.attr("type")&&a.push(b)}),a.length&&a[0].prop("checked",y[q])}},B=function(){return d.$eval(x[1])},C=function(){return d.$eval(x[1].split(/[|=]/)[0])},D=function(a){var b,c=angular.isArray(v),d=angular.isArray(a)&&2===a.length,e=C(),f=0,g=!1;c&&(v.length=0),angular.forEach(e,function(e){d?(b=a.indexOf(e),b>-1?(f++,g=!1,a.splice(b,1)):g=1!==f):g=e!==a,g?e[q]=!1:c&&e[q]&&v.push(e)})},E=function(a){var b=(B(),!1),c=!1;a=a||y,angular.forEach(B(),function(d){c=c||d===y,b=b||d===a;var e=b+c===1;(e||d===y||d===a)&&(d[q]=!0)})},F=function(b){if(!(b.selectionModelIgnore||b.originalEvent&&b.originalEvent.selectionModelIgnore||b.selectionModelClickHandled||b.originalEvent&&b.originalEvent.selectionModelClickHandled)){b.selectionModelClickHandled=!0,b.originalEvent&&(b.originalEvent.selectionModelClickHandled=!0);var c=b.ctrlKey||b.metaKey||p,f=b.shiftKey,g=b.target||b.srcElement,h="checkbox"===m&&"INPUT"===g.tagName&&"checkbox"===g.type;if("LABEL"===g.tagName){var i=angular.element(g).attr("for");if(i){var j,k=e[0].getElementsByTagName("INPUT");for(j=k.length;j--;)if(k[j].id===i)return}else if(g.getElementsByTagName("INPUT").length)return}if(f&&o&&!h)return c||d.$apply(function(){D([y,a.peek(w)])}),E(a.peek(w)),void d.$apply();if(c||f||h){var l=!y[q];return o||D(y),y[q]=l,y[q]&&a.push(w,y),void d.$apply()}D(y),d.$apply(),y[q]=!0,a.push(w,y),d.$apply()}},G=function(){if(angular.isArray(v)){var a=v.indexOf(y);y[q]?-1===a&&v.push(y):a>-1&&v.splice(a,1)}};if(e.on("click",F),"checkbox"===m){var H=e.find("input");H[0]&&"checkbox"===H[0].type&&e.find("input").on("click",F)}A(),G(),"deselect"===s&&d.$on("$destroy",function(){var a=y[q];y[q]=!1,G(),t&&a&&d.$eval(t)}),d.$watch(x[0]+"."+q,function(a,b){a!==b&&(o||!a||b||(D(y),y[q]=!0),A(),G(),t&&d.$eval(t))}),z&&d.$watch(x[0],function(a){y=a})}}}]),angular.module("selectionModel").provider("selectionModelOptions",[function(){"use strict";var a={selectedAttribute:"selected",selectedClass:"selected",type:"basic",mode:"single",cleanupStrategy:"none"};this.set=function(b){angular.extend(a,b)},this.$get=function(){var b={get:function(){return angular.copy(a)}};return b}}]),angular.module("selectionModel").service("selectionStack",function(){"use strict";var a={},b=1e3,c={};return a.push=function(a,d){c.hasOwnProperty(a)||(c[a]=[]);var e=c[a];for(e.push(d);e.length>b;)e.shift();return e.length},a.pop=function(a){c.hasOwnProperty(a)||(c[a]=[]);var b=c[a];return b.pop()},a.peek=function(a){c.hasOwnProperty(a)||(c[a]=[]);var b=c[a];return b.length?b[b.length-1]:void 0},a}),angular.module("selectionModel").service("uuidGen",function(){"use strict";var a={},b=["0","0","0"];return a.create=function(){for(var a,c=b.length;c;){if(c--,a=b[c].charCodeAt(0),57===a)return b[c]="A",b.join("");if(90!==a)return b[c]=String.fromCharCode(a+1),b.join("");b[c]="0"}return b.unshift("0"),b.join("")},a});