diff --git a/src/assets/plugins/bootstrap-treeview/css/bootstrap-treeview.min.css b/src/assets/plugins/bootstrap-treeview/css/bootstrap-treeview.min.css new file mode 100644 index 0000000..0090fc5 --- /dev/null +++ b/src/assets/plugins/bootstrap-treeview/css/bootstrap-treeview.min.css @@ -0,0 +1,18 @@ +.treeview .list-group-item { + cursor: pointer +} + +.treeview span.indent { + margin-left: 10px; + margin-right: 10px +} + +.treeview span.icon { + width: 12px; + margin-right: 5px +} + +.treeview .node-disabled { + color: silver; + cursor: not-allowed +} \ No newline at end of file diff --git a/src/assets/plugins/bootstrap-treeview/js/bootstrap-treeview.min.js b/src/assets/plugins/bootstrap-treeview/js/bootstrap-treeview.min.js new file mode 100644 index 0000000..ccfc1de --- /dev/null +++ b/src/assets/plugins/bootstrap-treeview/js/bootstrap-treeview.min.js @@ -0,0 +1,593 @@ +!function(a, b, c, d) { + "use strict"; + var e = "treeview" + , f = {}; + f.settings = { + injectStyle: !0, + levels: 2, + expandIcon: "glyphicon glyphicon-plus", + collapseIcon: "glyphicon glyphicon-minus", + emptyIcon: "glyphicon", + nodeIcon: "", + selectedIcon: "", + checkedIcon: "glyphicon glyphicon-check", + uncheckedIcon: "glyphicon glyphicon-unchecked", + color: d, + backColor: d, + borderColor: d, + onhoverColor: "#F5F5F5", + selectedColor: "#FFFFFF", + selectedBackColor: "#428bca", + searchResultColor: "#D9534F", + searchResultBackColor: d, + enableLinks: !1, + highlightSelected: !0, + highlightSearchResults: !0, + showBorder: !0, + showIcon: !0, + showCheckbox: !1, + showTags: !1, + multiSelect: !1, + onNodeChecked: d, + onNodeCollapsed: d, + onNodeDisabled: d, + onNodeEnabled: d, + onNodeExpanded: d, + onNodeSelected: d, + onNodeUnchecked: d, + onNodeUnselected: d, + onSearchComplete: d, + onSearchCleared: d + }, + f.options = { + silent: !1, + ignoreChildren: !1 + }, + f.searchOptions = { + ignoreCase: !0, + exactMatch: !1, + revealResults: !0 + }; + var g = function(b, c) { + return this.$element = a(b), + this.elementId = b.id, + this.styleId = this.elementId + "-style", + this.init(c), + { + options: this.options, + init: a.proxy(this.init, this), + remove: a.proxy(this.remove, this), + getNode: a.proxy(this.getNode, this), + getParent: a.proxy(this.getParent, this), + getSiblings: a.proxy(this.getSiblings, this), + getSelected: a.proxy(this.getSelected, this), + getUnselected: a.proxy(this.getUnselected, this), + getExpanded: a.proxy(this.getExpanded, this), + getCollapsed: a.proxy(this.getCollapsed, this), + getChecked: a.proxy(this.getChecked, this), + getUnchecked: a.proxy(this.getUnchecked, this), + getDisabled: a.proxy(this.getDisabled, this), + getEnabled: a.proxy(this.getEnabled, this), + selectNode: a.proxy(this.selectNode, this), + unselectNode: a.proxy(this.unselectNode, this), + toggleNodeSelected: a.proxy(this.toggleNodeSelected, this), + collapseAll: a.proxy(this.collapseAll, this), + collapseNode: a.proxy(this.collapseNode, this), + expandAll: a.proxy(this.expandAll, this), + expandNode: a.proxy(this.expandNode, this), + toggleNodeExpanded: a.proxy(this.toggleNodeExpanded, this), + revealNode: a.proxy(this.revealNode, this), + checkAll: a.proxy(this.checkAll, this), + checkNode: a.proxy(this.checkNode, this), + uncheckAll: a.proxy(this.uncheckAll, this), + uncheckNode: a.proxy(this.uncheckNode, this), + toggleNodeChecked: a.proxy(this.toggleNodeChecked, this), + disableAll: a.proxy(this.disableAll, this), + disableNode: a.proxy(this.disableNode, this), + enableAll: a.proxy(this.enableAll, this), + enableNode: a.proxy(this.enableNode, this), + toggleNodeDisabled: a.proxy(this.toggleNodeDisabled, this), + search: a.proxy(this.search, this), + clearSearch: a.proxy(this.clearSearch, this) + } + }; + g.prototype.init = function(b) { + this.tree = [], + this.nodes = [], + b.data && ("string" == typeof b.data && (b.data = a.parseJSON(b.data)), + this.tree = a.extend(!0, [], b.data), + delete b.data), + this.options = a.extend({}, f.settings, b), + this.destroy(), + this.subscribeEvents(), + this.setInitialStates({ + nodes: this.tree + }, 0), + this.render() + } + , + g.prototype.remove = function() { + this.destroy(), + a.removeData(this, e), + a("#" + this.styleId).remove() + } + , + g.prototype.destroy = function() { + this.initialized && (this.$wrapper.remove(), + this.$wrapper = null, + this.unsubscribeEvents(), + this.initialized = !1) + } + , + g.prototype.unsubscribeEvents = function() { + this.$element.off("click"), + this.$element.off("nodeChecked"), + this.$element.off("nodeCollapsed"), + this.$element.off("nodeDisabled"), + this.$element.off("nodeEnabled"), + this.$element.off("nodeExpanded"), + this.$element.off("nodeSelected"), + this.$element.off("nodeUnchecked"), + this.$element.off("nodeUnselected"), + this.$element.off("searchComplete"), + this.$element.off("searchCleared") + } + , + g.prototype.subscribeEvents = function() { + this.unsubscribeEvents(), + this.$element.on("click", a.proxy(this.clickHandler, this)), + "function" == typeof this.options.onNodeChecked && this.$element.on("nodeChecked", this.options.onNodeChecked), + "function" == typeof this.options.onNodeCollapsed && this.$element.on("nodeCollapsed", this.options.onNodeCollapsed), + "function" == typeof this.options.onNodeDisabled && this.$element.on("nodeDisabled", this.options.onNodeDisabled), + "function" == typeof this.options.onNodeEnabled && this.$element.on("nodeEnabled", this.options.onNodeEnabled), + "function" == typeof this.options.onNodeExpanded && this.$element.on("nodeExpanded", this.options.onNodeExpanded), + "function" == typeof this.options.onNodeSelected && this.$element.on("nodeSelected", this.options.onNodeSelected), + "function" == typeof this.options.onNodeUnchecked && this.$element.on("nodeUnchecked", this.options.onNodeUnchecked), + "function" == typeof this.options.onNodeUnselected && this.$element.on("nodeUnselected", this.options.onNodeUnselected), + "function" == typeof this.options.onSearchComplete && this.$element.on("searchComplete", this.options.onSearchComplete), + "function" == typeof this.options.onSearchCleared && this.$element.on("searchCleared", this.options.onSearchCleared) + } + , + g.prototype.setInitialStates = function(b, c) { + if (b.nodes) { + c += 1; + var d = b + , e = this; + a.each(b.nodes, function(a, b) { + b.nodeId = e.nodes.length, + b.parentId = d.nodeId, + Object.prototype.hasOwnProperty.call(b, "selectable") || (b.selectable = !0), + b.state = b.state || {}, + Object.prototype.hasOwnProperty.call(b.state, "checked") || (b.state.checked = !1), + Object.prototype.hasOwnProperty.call(b.state, "disabled") || (b.state.disabled = !1), + Object.prototype.hasOwnProperty.call(b.state, "expanded") || (!b.state.disabled && c < e.options.levels && b.nodes && b.nodes.length > 0 ? b.state.expanded = !0 : b.state.expanded = !1), + Object.prototype.hasOwnProperty.call(b.state, "selected") || (b.state.selected = !1), + e.nodes.push(b), + b.nodes && e.setInitialStates(b, c) + }) + } + } + , + g.prototype.clickHandler = function(b) { + this.options.enableLinks || b.preventDefault(); + var c = a(b.target) + , d = this.findNode(c); + if (d && !d.state.disabled) { + var e = c.attr("class") ? c.attr("class").split(" ") : []; + -1 !== e.indexOf("expand-icon") ? (this.toggleExpandedState(d, f.options), + this.render()) : -1 !== e.indexOf("check-icon") ? (this.toggleCheckedState(d, f.options), + this.render()) : (d.selectable ? this.toggleSelectedState(d, f.options) : this.toggleExpandedState(d, f.options), + this.render()) + } + } + , + g.prototype.findNode = function(a) { + var b = a.closest("li.list-group-item").attr("data-nodeid") + , c = this.nodes[b]; + return c || console.log("Error: node does not exist"), + c + } + , + g.prototype.toggleExpandedState = function(a, b) { + a && this.setExpandedState(a, !a.state.expanded, b) + } + , + g.prototype.setExpandedState = function(b, c, d) { + c !== b.state.expanded && (c && b.nodes ? (b.state.expanded = !0, + d.silent || this.$element.trigger("nodeExpanded", a.extend(!0, {}, b))) : c || (b.state.expanded = !1, + d.silent || this.$element.trigger("nodeCollapsed", a.extend(!0, {}, b)), + b.nodes && !d.ignoreChildren && a.each(b.nodes, a.proxy(function(a, b) { + this.setExpandedState(b, !1, d) + }, this)))) + } + , + g.prototype.toggleSelectedState = function(a, b) { + a && this.setSelectedState(a, !a.state.selected, b) + } + , + g.prototype.setSelectedState = function(b, c, d) { + c !== b.state.selected && (c ? (this.options.multiSelect || a.each(this.findNodes("true", "g", "state.selected"), a.proxy(function(a, b) { + this.setSelectedState(b, !1, d) + }, this)), + b.state.selected = !0, + d.silent || this.$element.trigger("nodeSelected", a.extend(!0, {}, b))) : (b.state.selected = !1, + d.silent || this.$element.trigger("nodeUnselected", a.extend(!0, {}, b)))) + } + , + g.prototype.toggleCheckedState = function(a, b) { + a && this.setCheckedState(a, !a.state.checked, b) + } + , + g.prototype.setCheckedState = function(b, c, d) { + c !== b.state.checked && (c ? (b.state.checked = !0, + d.silent || this.$element.trigger("nodeChecked", a.extend(!0, {}, b))) : (b.state.checked = !1, + d.silent || this.$element.trigger("nodeUnchecked", a.extend(!0, {}, b)))) + } + , + g.prototype.setDisabledState = function(b, c, d) { + c !== b.state.disabled && (c ? (b.state.disabled = !0, + this.setExpandedState(b, !1, d), + this.setSelectedState(b, !1, d), + this.setCheckedState(b, !1, d), + d.silent || this.$element.trigger("nodeDisabled", a.extend(!0, {}, b))) : (b.state.disabled = !1, + d.silent || this.$element.trigger("nodeEnabled", a.extend(!0, {}, b)))) + } + , + g.prototype.render = function() { + this.initialized || (this.$element.addClass(e), + this.$wrapper = a(this.template.list), + this.injectStyle(), + this.initialized = !0), + this.$element.empty().append(this.$wrapper.empty()), + this.buildTree(this.tree, 0) + } + , + g.prototype.buildTree = function(b, c) { + if (b) { + c += 1; + var d = this; + a.each(b, function(b, e) { + for (var f = a(d.template.item).addClass("node-" + d.elementId).addClass(e.state.checked ? "node-checked" : "").addClass(e.state.disabled ? "node-disabled" : "").addClass(e.state.selected ? "node-selected" : "").addClass(e.searchResult ? "search-result" : "").attr("data-nodeid", e.nodeId).attr("style", d.buildStyleOverride(e)), g = 0; c - 1 > g; g++) + f.append(d.template.indent); + var h = []; + if (e.nodes ? (h.push("expand-icon"), + h.push(e.state.expanded ? d.options.collapseIcon : d.options.expandIcon)) : h.push(d.options.emptyIcon), + f.append(a(d.template.icon).addClass(h.join(" "))), + d.options.showIcon) { + h = ["node-icon"]; + h.push(e.icon || d.options.nodeIcon), + e.state.selected && (h.pop(), + h.push(e.selectedIcon || d.options.selectedIcon || e.icon || d.options.nodeIcon)), + f.append(a(d.template.icon).addClass(h.join(" "))) + } + if (d.options.showCheckbox) { + h = ["check-icon"]; + h.push(e.state.checked ? d.options.checkedIcon : d.options.uncheckedIcon), + f.append(a(d.template.icon).addClass(h.join(" "))) + } + return f.append(d.options.enableLinks ? a(d.template.link).attr("href", e.href).append(e.text) : e.text), + d.options.showTags && e.tags && a.each(e.tags, function(b, c) { + f.append(a(d.template.badge).append(c)) + }), + d.$wrapper.append(f), + e.nodes && e.state.expanded && !e.state.disabled ? d.buildTree(e.nodes, c) : void 0 + }) + } + } + , + g.prototype.buildStyleOverride = function(a) { + if (a.state.disabled) + return ""; + var b = a.color + , c = a.backColor; + return this.options.highlightSelected && a.state.selected && (this.options.selectedColor && (b = this.options.selectedColor), + this.options.selectedBackColor && (c = this.options.selectedBackColor)), + this.options.highlightSearchResults && a.searchResult && !a.state.disabled && (this.options.searchResultColor && (b = this.options.searchResultColor), + this.options.searchResultBackColor && (c = this.options.searchResultBackColor)), + "color:" + b + ";background-color:" + c + ";" + } + , + g.prototype.injectStyle = function() { + this.options.injectStyle && !c.getElementById(this.styleId) && a('").appendTo("head") + } + , + g.prototype.buildStyle = function() { + var a = ".node-" + this.elementId + "{"; + return this.options.color && (a += "color:" + this.options.color + ";"), + this.options.backColor && (a += "background-color:" + this.options.backColor + ";"), + this.options.showBorder ? this.options.borderColor && (a += "border:1px solid " + this.options.borderColor + ";") : a += "border:none;", + a += "}", + this.options.onhoverColor && (a += ".node-" + this.elementId + ":not(.node-disabled):hover{background-color:" + this.options.onhoverColor + ";}"), + this.css + a + } + , + g.prototype.template = { + list: '