1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
angular.module("ivh.treeview",[]),angular.module("ivh.treeview").constant("ivhTreeviewInterpolateEndSymbol","}}"),angular.module("ivh.treeview").constant("ivhTreeviewInterpolateStartSymbol","{{"),angular.module("ivh.treeview").directive("ivhTreeviewCheckboxHelper",[function(){"use strict";return{restrict:"A",scope:{node:"=ivhTreeviewCheckboxHelper"},require:"^ivhTreeview",link:function(a,b,c,d){var e=a.node,f=d.opts(),g=f.indeterminateAttribute,h=f.selectedAttribute;a.isSelected=e[h],a.trvw=d,a.resolveIndeterminateClick=function(){f.disableCheckboxSelectionPropagation||e[g]&&d.select(e,!0)},a.$watch("node."+h,function(b,c){a.isSelected=b}),f.disableCheckboxSelectionPropagation||a.$watch("node."+g,function(a,c){b.find("input").prop("indeterminate",a)})},template:['<input type="checkbox"','class="ivh-treeview-checkbox"','ng-model="isSelected"','ng-click="resolveIndeterminateClick()"','ng-change="trvw.select(node, isSelected)" />'].join("\n")}}]),angular.module("ivh.treeview").directive("ivhTreeviewCheckbox",[function(){"use strict";return{restrict:"AE",require:"^ivhTreeview",template:'<span ivh-treeview-checkbox-helper="node"></span>'}}]),angular.module("ivh.treeview").directive("ivhTreeviewChildren",function(){"use strict";return{restrict:"AE",require:"^ivhTreeviewNode",template:['<ul ng-if="getChildren().length" class="ivh-treeview">','<li ng-repeat="child in getChildren()"','ng-hide="trvw.hasFilter() && !trvw.isVisible(child)"','class="ivh-treeview-node"',"ng-class=\"{'ivh-treeview-node-collapsed': !trvw.isExpanded(child) && !trvw.isLeaf(child)}\"",'ivh-treeview-node="child"','ivh-treeview-depth="childDepth">',"</li>","</ul>"].join("\n")}}),angular.module("ivh.treeview").directive("ivhTreeviewNode",["ivhTreeviewCompiler",function(a){"use strict";return{restrict:"A",scope:{node:"=ivhTreeviewNode",depth:"=ivhTreeviewDepth"},require:"^ivhTreeview",compile:function(b){return a.compile(b,function(a,b,c,d){var e=a.node,f=a.getChildren=function(){return d.children(e)};a.trvw=d,a.childDepth=a.depth+1,d.isExpanded(e)||d.expand(e,d.isInitiallyExpanded(a.depth)),a.$watch(function(){return f().length>0},function(a){a?b.removeClass("ivh-treeview-node-leaf"):b.addClass("ivh-treeview-node-leaf")})})}}}]),angular.module("ivh.treeview").directive("ivhTreeviewToggle",[function(){"use strict";return{restrict:"A",require:"^ivhTreeview",link:function(a,b,c,d){var e=a.node;b.addClass("ivh-treeview-toggle"),b.bind("click",function(){d.isLeaf(e)||a.$apply(function(){d.toggleExpanded(e),d.onToggle(e)})})}}}]),angular.module("ivh.treeview").directive("ivhTreeviewTwistie",["$compile","ivhTreeviewOptions",function(a,b){"use strict";var c=b();return{restrict:"A",require:"^ivhTreeview",template:['<span class="ivh-treeview-twistie">','<span class="ivh-treeview-twistie-collapsed">',c.twistieCollapsedTpl,"</span>",'<span class="ivh-treeview-twistie-expanded">',c.twistieExpandedTpl,"</span>",'<span class="ivh-treeview-twistie-leaf">',c.twistieLeafTpl,"</span>","</span>"].join("\n"),link:function(b,d,e,f){if(f.hasLocalTwistieTpls){var g=f.opts(),h=d.children().eq(0).children();angular.forEach(["twistieCollapsedTpl","twistieExpandedTpl","twistieLeafTpl"],function(d,e){var f=g[d],i=c[d];if(f&&f!==i){"<"===f.substr(0,1)&&">"===f.substr(-1,1)||(f="<span>"+f+"</span>");var j=a(f)(b);h.eq(e).html("").append(j)}})}}}}]),angular.module("ivh.treeview").directive("ivhTreeview",["ivhTreeviewMgr",function(a){"use strict";return{restrict:"A",transclude:!0,scope:{root:"=ivhTreeview",childrenAttribute:"=ivhTreeviewChildrenAttribute",defaultSelectedState:"=ivhTreeviewDefaultSelectedState",disableCheckboxSelectionPropagation:"=ivhTreeviewDisableCheckboxSelectionPropagation",expandToDepth:"=ivhTreeviewExpandToDepth",idAttribute:"=ivhTreeviewIdAttribute",indeterminateAttribute:"=ivhTreeviewIndeterminateAttribute",expandedAttribute:"=ivhTreeviewExpandedAttribute",labelAttribute:"=ivhTreeviewLabelAttribute",nodeTpl:"=ivhTreeviewNodeTpl",selectedAttribute:"=ivhTreeviewSelectedAttribute",onCbChange:"&ivhTreeviewOnCbChange",onToggle:"&ivhTreeviewOnToggle",twistieCollapsedTpl:"=ivhTreeviewTwistieCollapsedTpl",twistieExpandedTpl:"=ivhTreeviewTwistieExpandedTpl",twistieLeafTpl:"=ivhTreeviewTwistieLeafTpl",useCheckboxes:"=ivhTreeviewUseCheckboxes",validate:"=ivhTreeviewValidate",visibleAttribute:"=ivhTreeviewVisibleAttribute",userOptions:"=ivhTreeviewOptions",filter:"=ivhTreeviewFilter"},controllerAs:"trvw",controller:["$scope","$element","$attrs","$transclude","ivhTreeviewOptions","filterFilter",function(b,c,d,e,f,g){var h=angular,i=this,j=h.extend({},f(),b.userOptions);h.forEach(["childrenAttribute","defaultSelectedState","disableCheckboxSelectionPropagation","expandToDepth","idAttribute","indeterminateAttribute","expandedAttribute","labelAttribute","nodeTpl","selectedAttribute","twistieCollapsedTpl","twistieExpandedTpl","twistieLeafTpl","useCheckboxes","validate","visibleAttribute"],function(a){h.isDefined(b[a])&&(j[a]=b[a])});var k=function(a){return"ivhTreeview"+a.charAt(0).toUpperCase()+a.slice(1)};h.forEach(["onCbChange","onToggle"],function(a){d[k(a)]&&(j[a]=b[a])});var l;e(function(a,b){var c="";angular.forEach(a,function(a){c+=(a.innerHTML||"").trim()}),c.length&&(l=b,j.nodeTpl=c)}),i.opts=function(){return j};var m=b.userOptions||{};i.hasLocalTwistieTpls=!!(m.twistieCollapsedTpl||m.twistieExpandedTpl||m.twistieLeafTpl||b.twistieCollapsedTpl||b.twistieExpandedTpl||b.twistieLeafTpl),i.children=function(a){var b=a[j.childrenAttribute];return h.isArray(b)?b:[]},i.label=function(a){return a[j.labelAttribute]},i.hasFilter=function(){return h.isDefined(b.filter)},i.getFilter=function(){return b.filter||""},i.isVisible=function(a){var b=i.getFilter();if(!b||g([a],b).length)return!0;if("object"==typeof b||"function"==typeof b)for(var c=i.children(a),d=c.length;d--;)if(i.isVisible(c[d]))return!0;return!1},i.useCheckboxes=function(){return j.useCheckboxes},i.select=function(c,d){a.select(b.root,c,j,d),i.onCbChange(c,d)},i.isSelected=function(a){return a[j.selectedAttribute]},i.toggleSelected=function(a){var b=!a[j.selectedAttribute];i.select(a,b)},i.expand=function(c,d){a.expand(b.root,c,j,d)},i.isExpanded=function(a){return a[j.expandedAttribute]},i.toggleExpanded=function(a){i.expand(a,!i.isExpanded(a))},i.isInitiallyExpanded=function(a){return a<(-1===j.expandToDepth?1/0:j.expandToDepth)},i.isLeaf=function(a){return 0===i.children(a).length},i.getNodeTpl=function(){return j.nodeTpl},i.root=function(){return b.root},i.onToggle=function(a){if(j.onToggle){var c={ivhNode:a,ivhIsExpanded:i.isExpanded(a),ivhTree:b.root};j.onToggle(c)}},i.onCbChange=function(a,c){if(j.onCbChange){var d={ivhNode:a,ivhIsSelected:c,ivhTree:b.root};j.onCbChange(d)}}}],link:function(b,c,d){var e=b.trvw.opts();e.validate&&a.validate(b.root,e)},template:['<ul class="ivh-treeview">','<li ng-repeat="child in root | ivhTreeviewAsArray"','ng-hide="trvw.hasFilter() && !trvw.isVisible(child)"','class="ivh-treeview-node"',"ng-class=\"{'ivh-treeview-node-collapsed': !trvw.isExpanded(child) && !trvw.isLeaf(child)}\"",'ivh-treeview-node="child"','ivh-treeview-depth="0">',"</li>","</ul>"].join("\n")}}]),angular.module("ivh.treeview").filter("ivhTreeviewAsArray",function(){"use strict";return function(a){return!angular.isArray(a)&&angular.isObject(a)?[a]:a}}),angular.module("ivh.treeview").factory("ivhTreeviewBfs",["ivhTreeviewOptions",function(a){"use strict";var b=angular;return function(c,d,e){2===arguments.length&&b.isFunction(d)&&(e=d,d={}),d=angular.extend({},a(),d),e=e||b.noop;var f,g,h,i,j,k=[],l=d.childrenAttribute;for(b.isArray(c)?(b.forEach(c,function(a){k.push([a,[]])}),f=k.shift()):f=[c,[]];f;){if(g=f[0],h=f[1],!1!==e(g,h)&&g[l]&&b.isArray(g[l]))for(j=g[l].length,i=0;i<j;i++)k.push([g[l][i],[g].concat(h)]);f=k.shift()}}}]),angular.module("ivh.treeview").factory("ivhTreeviewCompiler",["$compile",function(a){"use strict";return{compile:function(b,c){angular.isFunction(c)&&(c={post:c});var d;return{pre:c&&c.pre?c.pre:null,post:function(b,e,f,g){d||(d=a(g.getNodeTpl())),d(b,function(a){e.append(a)}),c&&c.post&&c.post.apply(null,arguments)}}}}}]),angular.module("ivh.treeview").factory("ivhTreeviewMgr",["ivhTreeviewOptions","ivhTreeviewBfs",function(a,b){"use strict";var c=angular,d=a(),e={},f=function(a){a[this.selectedAttribute]=!1,a[this.indeterminateAttribute]=!1},g=function(a){a[this.selectedAttribute]=!0,a[this.indeterminateAttribute]=!1},h=function(a){var b=a[this.childrenAttribute],d=this.selectedAttribute,e=this.indeterminateAttribute,f=0,g=0;c.forEach(b,function(a,b){a[d]?f++:a[e]&&g++}),0===f&&0===g?(a[d]=!1,a[e]=!1):f===b.length?(a[d]=!0,a[e]=!1):(a[d]=!1,a[e]=!0)},i=function(a,c,d,e){var f=j(c),g=!0,h=d.idAttribute,i=null,k=[];return b(a,d,function(a,b){return g&&(f?c===a[h]:c===a)&&(g=!1,i=a,k=b),g}),e(i,k)},j=function(a){return c.isString(a)||c.isNumber(a)};return e.select=function(a,i,k,l){arguments.length>2&&"boolean"==typeof k&&(l=k,k={}),k=c.extend({},d,k),l=!c.isDefined(l)||l;var m=j(i),n=!0,o=k.idAttribute;return b(a,k,function(a,d){if(n&&(m?i===a[o]:i===a)){n=!1;var e=l?g.bind(k):f.bind(k);k.disableCheckboxSelectionPropagation?e(a):(b(a,k,e),c.forEach(d,h.bind(k)))}return n}),e},e.selectAll=function(a,f,g){arguments.length>1&&"boolean"==typeof f&&(g=f,f={}),f=c.extend({},d,f),g=!c.isDefined(g)||g;var h=f.selectedAttribute,i=f.indeterminateAttribute;return b(a,f,function(a){a[h]=g,a[i]=!1}),e},e.selectEach=function(a,b,d,f){return c.forEach(b,function(b){e.select(a,b,d,f)}),e},e.deselect=function(a,b,c){return e.select(a,b,c,!1)},e.deselectAll=function(a,b){return e.selectAll(a,b,!1)},e.deselectEach=function(a,b,c){return e.selectEach(a,b,c,!1)},e.validate=function(a,f,g){if(!a)return e;arguments.length>1&&"boolean"==typeof f&&(g=f,f={}),f=c.extend({},d,f),g=c.isDefined(g)?g:f.defaultSelectedState;var h=f.selectedAttribute,i=f.indeterminateAttribute;return b(a,f,function(b,d){return c.isDefined(b[h])&&b[h]!==g?(e.select(a,b,f,!g),!1):(b[h]=g,void(b[i]=!1))}),e},e.expand=function(a,b,f,g){arguments.length>2&&"boolean"==typeof f&&(g=f,f={}),f=c.extend({},d,f),g=!c.isDefined(g)||g;var h=j(b),k=f.expandedAttribute;return h?i(a,b,f,function(a,b){return a[k]=g,e}):(b[k]=g,e)},e.expandRecursive=function(a,f,g,h){arguments.length>2&&"boolean"==typeof g&&(h=g,g={}),f=c.isDefined(f)?f:a,g=c.extend({},d,g),h=!c.isDefined(h)||h;var k,l=j(f),m=g.expandedAttribute;return l?i(a,f,g,function(a,b){k=a}):k=f,k&&b(k,g,function(a,b){a[m]=h}),e},e.collapse=function(a,b,c){return e.expand(a,b,c,!1)},e.collapseRecursive=function(a,b,c,d){return e.expandRecursive(a,b,c,!1)},e.expandTo=function(a,b,f,g){arguments.length>2&&"boolean"==typeof f&&(g=f,f={}),f=c.extend({},d,f),g=!c.isDefined(g)||g;var h=f.expandedAttribute,j=function(a){a[h]=g};return i(a,b,f,function(a,b){return c.forEach(b,j),e})},e.collapseParents=function(a,b,c){return e.expandTo(a,b,c,!1)},e}]),angular.module("ivh.treeview").provider("ivhTreeviewOptions",["ivhTreeviewInterpolateStartSymbol","ivhTreeviewInterpolateEndSymbol",function(a,b){"use strict";var c=a,d=b,e={idAttribute:"id",labelAttribute:"label",childrenAttribute:"children",selectedAttribute:"selected",expandToDepth:0,useCheckboxes:!0,disableCheckboxSelectionPropagation:!1,validate:!0,indeterminateAttribute:"__ivhTreeviewIndeterminate",expandedAttribute:"__ivhTreeviewExpanded",defaultSelectedState:!0,twistieExpandedTpl:"(-)",twistieCollapsedTpl:"(+)",twistieLeafTpl:"o",nodeTpl:['<div class="ivh-treeview-node-content" title="{{trvw.label(node)}}">',"<span ivh-treeview-toggle>",'<span class="ivh-treeview-twistie-wrapper" ivh-treeview-twistie></span>',"</span>",'<span class="ivh-treeview-checkbox-wrapper" ng-if="trvw.useCheckboxes()"',"ivh-treeview-checkbox>","</span>",'<span class="ivh-treeview-node-label" ivh-treeview-toggle>',"{{trvw.label(node)}}","</span>","<div ivh-treeview-children></div>","</div>"].join("\n").replace(new RegExp("{{","g"),c).replace(new RegExp("}}","g"),d)};this.set=function(a){angular.extend(e,a)},this.$get=function(){return function(){return angular.copy(e)}}}]); |