fuelux.tree.min.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. (function(a, c) {
  2. var b = function(e, d) {
  3. this.$element = a(e);
  4. this.options = a.extend({},
  5. a.fn.tree.defaults, d);
  6. this.$element.on("click", ".tree-item", a.proxy(function(f) {
  7. this.selectItem(f.currentTarget)
  8. },
  9. this));
  10. this.$element.on("click", ".tree-folder-header", a.proxy(function(f) {
  11. this.selectFolder(f.currentTarget)
  12. },
  13. this));
  14. this.render()
  15. };
  16. b.prototype = {
  17. constructor: b,
  18. render: function() {
  19. this.populate(this.$element)
  20. },
  21. populate: function(f) {
  22. var e = this;
  23. var d = f.parent().find(".tree-loader:eq(0)");
  24. d.show();
  25. this.options.dataSource.data(f.data(),
  26. function(g) {
  27. d.hide();
  28. a.each(g.data,
  29. function(h, j) {
  30. var i;
  31. if (j.type === "folder") {
  32. i = e.$element.find(".tree-folder:eq(0)").clone().show();
  33. i.find(".tree-folder-name").html(j.name);
  34. i.find(".tree-loader").html(e.options.loadingHTML);
  35. var k = i.find(".tree-folder-header");
  36. k.data(j);
  37. if ("icon-class" in j) {
  38. k.find('[class*="icon-"]').addClass(j["icon-class"])
  39. }
  40. } else {
  41. if (j.type === "item") {
  42. i = e.$element.find(".tree-item:eq(0)").clone().show();
  43. i.find(".tree-item-name").html(j.name);
  44. i.data(j);
  45. // console.log();
  46. if ("additionalParameters" in j && "item-selected" in j.additionalParameters && j.additionalParameters["item-selected"] == true) {
  47. i.addClass("tree-selected");
  48. i.find("i").removeClass(e.options["unselected-icon"]).addClass(e.options["selected-icon"])
  49. }
  50. }
  51. }
  52. if (f.hasClass("tree-folder-header")) {
  53. f.parent().find(".tree-folder-content:eq(0)").append(i)
  54. } else {
  55. f.append(i)
  56. }
  57. });
  58. e.$element.trigger("loaded")
  59. })
  60. },
  61. selectItem: function(e) {
  62. if (this.options.selectable == false) {
  63. return
  64. }
  65. var d = a(e);
  66. var g = this.$element.find(".tree-selected");
  67. var f = [];
  68. if (this.options.multiSelect) {
  69. a.each(g,
  70. function(i, j) {
  71. var h = a(j);
  72. if (h[0] !== d[0]) {
  73. f.push(a(j).data())
  74. }
  75. })
  76. } else {
  77. if (g[0] !== d[0]) {
  78. g.removeClass("tree-selected").find("i").removeClass(this.options["selected-icon"]).addClass(this.options["unselected-icon"]);
  79. f.push(d.data())
  80. }
  81. }
  82. if (d.hasClass("tree-selected")) {
  83. d.removeClass("tree-selected");
  84. d.find("i").removeClass(this.options["selected-icon"]).addClass(this.options["unselected-icon"])
  85. } else {
  86. document.getElementById("mine_id").value = d.data().id;
  87. var search_form = document.getElementById('search_form');
  88. search_form.submit();
  89. d.siblings().removeClass("tree-selected");
  90. d.addClass("tree-selected");
  91. d.find("i").removeClass(this.options["unselected-icon"]).addClass(this.options["selected-icon"]);
  92. if (this.options.multiSelect) {
  93. f.push(d.data())
  94. }
  95. }
  96. if (f.length) {
  97. this.$element.trigger("selected", {
  98. info: f
  99. })
  100. }
  101. },
  102. selectFolder: function(e) {
  103. var d = a(e);
  104. var f = d.parent();
  105. if (d.find("." + this.options["close-icon"]).length) {
  106. if (f.find(".tree-folder-content").children().length) {
  107. f.find(".tree-folder-content:eq(0)").show()
  108. } else {
  109. this.populate(d)
  110. }
  111. f.find("." + this.options["close-icon"] + ":eq(0)").removeClass(this.options["close-icon"]).addClass(this.options["open-icon"]);
  112. this.$element.trigger("opened", d.data())
  113. } else {
  114. if (this.options.cacheItems) {
  115. f.find(".tree-folder-content:eq(0)").hide()
  116. } else {
  117. f.find(".tree-folder-content:eq(0)").empty()
  118. }
  119. f.find("." + this.options["open-icon"] + ":eq(0)").removeClass(this.options["open-icon"]).addClass(this.options["close-icon"]);
  120. this.$element.trigger("closed", d.data())
  121. }
  122. },
  123. selectedItems: function() {
  124. var e = this.$element.find(".tree-selected");
  125. var d = [];
  126. a.each(e,
  127. function(f, g) {
  128. d.push(a(g).data())
  129. });
  130. return d
  131. }
  132. };
  133. a.fn.tree = function(e, g) {
  134. var f;
  135. var d = this.each(function() {
  136. var j = a(this);
  137. var i = j.data("tree");
  138. var h = typeof e === "object" && e;
  139. if (!i) {
  140. j.data("tree", (i = new b(this, h)))
  141. }
  142. if (typeof e === "string") {
  143. f = i[e](g)
  144. }
  145. });
  146. return (f === c) ? d: f
  147. };
  148. a.fn.tree.defaults = {
  149. multiSelect: false,
  150. loadingHTML: "<div>Loading...</div>",
  151. cacheItems: true
  152. };
  153. a.fn.tree.Constructor = b
  154. })(window.jQuery);