2023-05-16 10:47:08 +08:00

7 lines
5.6 KiB
JavaScript
Executable File

/*!
* ZUI: 树形图 - v1.7.0 - 2017-06-17
* http://zui.sexy
* GitHub: https://github.com/easysoft/zui.git
* Copyright (c) 2017 cnezsoft.com; Licensed MIT
*/
!function(e,t,o,a,n){"use strict";var r="zui.treemap",l={data:[],cableWidth:1,cableColor:"#808080",cableStyle:"solid",rowSpace:30,nodeSpace:20,listenNodeResize:!0,nodeTemplate:'<div class="treemap-node"><a class="treemap-node-wrapper"></a></div>',foldable:!0,clickNodeToFold:!0},d=function(t){return t.children("li,.treemap-data-item").map(function(){var t=e(this),o=t.data(),a=t.children(".text"),n=t.children(".content"),r=t.children("ul,.treemap-data-list");if(a.length&&(o.text=a.text()),n.length&&(o.html=n.html()),r.length&&(o.children=d(r)),!o.text&&!o.html){var l=t.children(":not(ul,.treemap-data-list)"),i=t.clone();i.find("ul,.treemap-data-list").remove(),l.length?o.html=i.html():o.text=i.text()}return o}).get()},i=function(t,o){var a=e(t);e.isArray(o)&&(o={data:o}),o=e.extend({},l,a.data(),o);var n=o.data||[];if(!n.length){var r=a.children(".treemap-data");r.length&&(n=d(r.hide()))}var i=a.children(".treemap-nodes");i.length||(i=e('<div class="treemap-nodes" unselectable="on"/>').appendTo(a));var s=this;s.$=a,s.$nodes=i,s.data=e.isArray(n)?n:[n],s.options=o,s.offsetX=0,s.offsetY=0,s.scale=o.scale||1,s.render(),i.on("resize",".treemap-node-wrapper",function(){s.delayDrawLines()}),o.foldable&&i.on("click",o.clickNodeToFold?".treemap-node-wrapper":".treemap-node-fold-icon",function(){s.toggle(e(this).closest(".treemap-node"))}),i.on("click",".treemap-node-wrapper",function(){var t=e(this).closest(".treemap-node");s.callEvent("onNodeClick",t.data("node"))})};i.prototype.toggle=function(e,t){var o=this;"boolean"==typeof e&&(t=e,e=null),e||(e=o.$nodes.children(".treemap-node").first()),t===n&&(t=!e.hasClass("collapsed")),e.addClass("tree-node-collapsing").toggleClass("collapsed",t).find('[data-toggle="tooltip"]').tooltip("hide"),o.$nodes.find(".tooltip").remove(),o.drawLines(),clearTimeout(o.toggleTimeTask),o.toggleTimeTask=setTimeout(function(){e.removeClass("tree-node-collapsing")},200)},i.prototype.render=function(e){var t=this;t.data=e||t.data,t.data&&(t.createNodes(),t.drawLines()),t.callEvent("afterRender")},i.prototype.createNodes=function(t,o,a){var n=this,l=n.options,d=l.rowSpace,i=n.$nodes;o||(i.find(".treemap-node-wrapper").off("resize."+r),i.empty()),l.sort&&t.sort(e.isFunction(l.sort)?l.sort:function(e,t){return(e.order||0)-t.order});var s=null;t=t||n.data,e.each(t||n.data,function(p,c){"string"==typeof c&&(c={html:c},t[p]=c),c.id||(c.id=e.zui.uuid());var h=e.isFunction(l.nodeTemplate),f=h?l.nodeTemplate(c,n):e(l.nodeTemplate),m=f.find(".treemap-node-wrapper");m.length||(m=e('<div class="treemap-node-wrapper"/>').appendTo(f));var u=c.children,g=u&&u.length;c.isOnlyOneChild=1===g,c.idx=p;var v=o?o.row+1:0;f.toggleClass("treemap-node-has-child",!!g).toggleClass("treemap-node-has-parent",!!o).toggleClass("treemap-node-one-child",1===g).toggleClass("collapsed",!!c.collapsed&&"false"!==c.collapsed).toggleClass("treemap-node-root",!v).attr("data-id",c.id).data("node",c),c.className&&f.addClass(c.className),c.row=v;var w=e.extend({},l.nodeStyle,c.style);c.textColor&&(w.color=c.textColor),c.color&&(w.backgroundColor=c.color),c.border&&(w.border=c.border);var b=e.extend({},c.attrs,{title:c.caption});if(c.tooltip&&(b["data-toggle"]="tooltip",b.title=c.tooltip),m.attr(b).css(w),s&&f.css("padding-left",l.nodeSpace),h||(c.html?m.append(c.html):c.text&&m.text(c.text)),f.appendTo(o?o.$children:i),c.bounds={width:m.outerWidth(),height:m.outerHeight()},s&&(s.next=c),c.prev=s,c.parent=o,c.$=f,c.$wrapper=m,g){var y=f.find(".treemap-node-children");y.length||(y=e('<div class="treemap-node-children"/>').appendTo(f)),y.css("margin-top",d),c.$children=y,n.createNodes(u,c)}l.listenNodeResize&&m.on("resize."+r,function(){c.bounds.width=m.outerWidth(),c.bounds.height=m.outerHeight(),n.delayDrawLines()}),s=c,a&&a(f,c)}),o||i.find('[data-toggle="tooltip"]').tooltip(l.tooltip)},i.prototype.delayDrawLines=function(){var e=this;clearTimeout(e.delayDrawLinesTask),e.delayDrawLinesTask=setTimeout(function(){e.drawLines()},10)},i.prototype.drawLines=function(t,o){var n=this,r=n.options,l=r.rowSpace,d={};r.cableWidth&&(d.borderWidth=r.cableWidth),r.cableStyle&&(d.borderStyle=r.cableStyle),r.cableColor&&(d.borderColor=r.cableColor);var i=a.round(l/2),s=n.$nodes.offset().left;e.each(t||n.data,function(t,p){var c=p.$wrapper,h=p.children,f=e.extend({height:i,top:-i-1,left:a.round((c.outerWidth()-d.borderWidth)/2)},d);if(o&&!o.isOnlyOneChild){var m=c.find(".treemap-line-top");m.length||(m=e('<div class="treemap-line-top"/>').appendTo(c)),m.css(f)}if(h&&h.length){f.top=c.outerHeight()-1,p.isOnlyOneChild&&(f.height=l);var u=c.find(".treemap-line-bottom");if(u.length||(u=e('<div class="treemap-line-bottom"/>').appendTo(c),r.foldable&&u.append('<i class="treemap-node-fold-icon icon" style="transform: translate(-'+a.floor(f.borderWidth/2)+"px, "+i+'px)"/>')),u.css(f),n.drawLines(h,p),h.length>1){var g=h[0],v=h[h.length-1],w=p.$.children(".treemap-line");w.length||(w=e('<div class="treemap-line"/>').insertAfter(c));var b=a.round(g.$wrapper.offset().left-s+g.bounds.width/2);w.css(e.extend({marginTop:i,left:b,width:v.$wrapper.offset().left-s-b+v.bounds.width/2},d))}}}),o||n.callEvent("afterDrawLines")},i.prototype.callEvent=function(t,o){var a=this;if(e.isArray(o)||(o=[o]),a.$.trigger(t,o),e.isFunction(a.options[t]))return a.options[t].apply(a,o)},i.DEFAULTS=l,i.NAME=r,e.fn.treemap=function(t,o,a){return this.each(function(){var n=e(this),l=n.data(r),d="object"==typeof t&&t;l||n.data(r,l=new i(this,d)),"string"==typeof t&&l[t](o,a)})},e.fn.treemap.Constructor=i}(jQuery,window,document,Math,void 0);