dynamic-directive
Version:
Dynamic directives for AngularJS
2 lines • 2.96 kB
JavaScript
;function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}!function(a){var b=0,c=0,d=function d(e,f,g){if(_classCallCheck(this,d),!f)throw new Error("DynamicInjection: name argument should be a string");if(this.name=f,e===!0)e=function(){return!0};else if(!e||!a.isFunction(e))throw new Error("DynamicInjection: injectionFunction argument should be a function");this.injectionFunction=e,g=g||{},this.attributes=g.attributes||[],this.scope=g.scope||void 0,this.priority=isNaN(parseInt(g.priority,10))?c:parseInt(g.priority,10),this._id=++b};a.module("op.dynamicDirective",[]).provider("dynamicDirectiveService",function(){function a(a,b,c){return b.name<a.name?-1:b.name>a.name?1:c(a,b)}function b(a,b){return b._id<a._id?-1:b._id>a._id?1:0}function c(c,d){var e=d.priority-c.priority;return 0!==e?e:d.name<c.name?-1:d.name>c.name?1:a(c,d,b)}function e(a){k[a]=k[a]||[]}function f(a,b){e(a);var c=k[a];return c.filter(function(a){return a.injectionFunction(b)})}function g(a,b){e(a),k[a].push(b)}function h(a){k[a]=[]}function i(a){return a.sort(c),a}function j(){k={}}var k={};return{addInjection:g,resetAllInjections:j,DynamicDirective:d,$get:["$rootScope",function(a){return{DynamicDirective:d,getInjections:f,sort:i,addInjection:function(b,c){g(b,c),a.$broadcast("dynamicDirectiveInjectionUpdated",b,c)},resetInjections:function(b){h(b),a.$broadcast("dynamicDirectiveInjectionUpdated",b)}}}]}}()).value("DynamicDirective",d).directive("dynamicDirective",["$compile","dynamicDirectiveService",function(b,c){function d(b,d){var e=c.sort(d).map(function(a){return a._id}),f=b.children("["+h+"]").map(function(b,c){return parseInt(a.element(c).attr(h),10)}).toArray();if(e.join(",")!==f.join(","))for(var g=0,i=e.length-2;g<=i;g++){var j=e[g],k=e[g+1],l=b.children("["+h+"="+j+"]");l.next().attr(h)!==k&&b.children("["+h+"="+k+"]").insertAfter(l)}}function e(a){a.data("__dd_original_display",a.attr("display")),a.attr("display","none")}function f(a){var b=a.data("__dd_original_display");b&&"none"!==b||(b="block;"),a.attr("display",b)}function g(g,i,j){function k(c){var d=a.element(l(c)),e=b(d)(c.scope||g);i.append(e)}function l(b){var c={};c[h]=b._id,b.attributes.forEach(function(a){return c[a.name]=a.value});var d=a.element("<"+b.name+"/>");return d.attr(c),d}function m(){i.children().length?f(i):e(i)}var n=j.dynamicDirective;e(i);var o=c.sort(c.getInjections(n,g));o.forEach(k),m(),g.$on("dynamicDirectiveInjectionUpdated",function(b,e){if(e===n){var f=c.sort(c.getInjections(n,g)),j={},l={};f.forEach(function(a){return j[a._id]=a}),i.children().each(function(b,c){var d=a.element(c),e=d.attr(h);if(e)return j[e]?void(l[e]=!0):void d.remove()});var o=Object.keys(j).length,p=Object.keys(l).length;o!==p&&Object.keys(j).forEach(function(a){l[a]||k(j[a])}),d(i,f),m()}})}var h="dynamic-directive-id";return{restrict:"A",link:g}}])}(angular);
//# sourceMappingURL=dynamic-directive.min.js.map