tree.min.js 2.9 KB

1
  1. define(["require","jquery"],function(e){var t=e("jquery"),i=function(e,i){this.$element=t(e),this.options=t.extend({},t.fn.tree.defaults,i),this.$element.on("click",".tree-item",t.proxy(function(e){this.selectItem(e.currentTarget)},this)),this.$element.on("click",".tree-folder-header",t.proxy(function(e){this.selectFolder(e.currentTarget)},this)),this.render()};i.prototype={constructor:i,render:function(){this.populate(this.$element)},populate:function(e){var i=this,a=e.parent(),n=a.find(".tree-loader:eq(0)");n.show(),this.options.dataSource.data(e.data(),function(r){n.hide(),t.each(r.data,function(n,r){var s;"folder"===r.type?(s=i.$element.find(".tree-folder:eq(0)").clone().show(),s.find(".tree-folder-name").html(r.name),s.find(".tree-loader").html(i.options.loadingHTML),s.find(".tree-folder-header").data(r)):"item"===r.type&&(s=i.$element.find(".tree-item:eq(0)").clone().show(),s.find(".tree-item-name").html(r.name),s.data(r));var o=r.dataAttributes||[];t.each(o,function(e,t){switch(e){case"class":case"classes":case"className":s.addClass(t);break;default:s.attr(e,t)}}),e.hasClass("tree-folder-header")?a.find(".tree-folder-content:eq(0)").append(s):e.append(s)}),i.$element.trigger("loaded",a)})},selectItem:function(e){var i=t(e),a=this.$element.find(".tree-selected"),n=[];this.options.multiSelect?t.each(a,function(e,a){var r=t(a);r[0]!==i[0]&&n.push(t(a).data())}):a[0]!==i[0]&&(a.removeClass("tree-selected").find("i").removeClass("fa-check").addClass("tree-dot"),n.push(i.data()));var r="selected";i.hasClass("tree-selected")?(r="unselected",i.removeClass("tree-selected"),i.find("i").removeClass("fa-check").addClass("tree-dot")):(i.addClass("tree-selected"),i.find("i").removeClass("tree-dot").addClass("fa-check"),this.options.multiSelect&&n.push(i.data())),n.length&&this.$element.trigger("selected",{info:n}),i.trigger("updated",{info:n,item:i,eventType:r})},selectFolder:function(e){var i,a,n,r=t(e),s=r.parent(),o=s.find(".tree-folder-content"),l=o.eq(0);r.find(".fa-folder").length?(i="opened",a=".fa-folder",n="fa-folder-open",l.show(),o.children().length||this.populate(r)):(i="closed",a=".fa-folder-open",n="fa-folder",l.hide(),this.options.cacheItems||l.empty()),s.find(a).eq(0).removeClass("fa-folder fa-folder-open").addClass(n),this.$element.trigger(i,r.data())},selectedItems:function(){var e=this.$element.find(".tree-selected"),i=[];return t.each(e,function(e,a){i.push(t(a).data())}),i},collapse:function(){var e=this.options.cacheItems;this.$element.find(".fa-folder-open").each(function(){var i=t(this).removeClass("fa-folder fa-folder-open").addClass("fa-folder"),a=i.parent().parent(),n=a.children(".tree-folder-content");n.hide(),e||n.empty()})}},t.fn.tree=function(e,a){var n,r=this.each(function(){var r=t(this),s=r.data("tree"),o="object"==typeof e&&e;s||r.data("tree",s=new i(this,o)),"string"==typeof e&&(n=s[e](a))});return void 0===n?r:n},t.fn.tree.defaults={multiSelect:!1,loadingHTML:"<div>Loading...</div>",cacheItems:!0},t.fn.tree.Constructor=i});