PageRenderTime 24ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/debug/js/jex.tree.js

https://github.com/joonhocho/jexgrid
JavaScript | 133 lines | 124 code | 3 blank | 6 comment | 29 complexity | e25ec7f7ce47fe13072fcb8ce394c1ee MD5 | raw file
  1. document.write('<script type="text/javascript" src="js/jquery-ui.nonWidgets.min.js"></script>');
  2. jQuery.fn.extend({
  3. jexTree: function(cmd, opt) {
  4. var $r = $(this);
  5. var jexTreeFn={
  6. make :function(opt) {
  7. var dfltopt = {
  8. folderClickFold : true,
  9. namePrefix : "",
  10. speed : 200,
  11. movable : false,
  12. movableFn :null
  13. };
  14. jexTreeFn['unfoldAll'](opt);
  15. $button = $r.find("button");
  16. $button.click(function() { foldUnfold($(this)); });
  17. if (opt!=null || opt!=undefined) { $.each(opt, function(i,v) { dfltopt[i] = v; }); }
  18. $r.data("tree_opt", dfltopt);
  19. },
  20. foldAll :function(opt) {
  21. var $ul = $r.find("ul");
  22. $.each($ul, function() { $(this).hide(); });
  23. $button = $r.find("button");
  24. for (var i=0; i<$button.length; i++) {
  25. $button.eq(i).find("span").html("+");
  26. }
  27. },
  28. moveUp :function(opt) {
  29. if ($r.index() == 0) return;
  30. $r.prev().before($r);
  31. },
  32. moveDown:function(opt) {
  33. if ($r.parent().find("> li").length-1 == $r.index()) return;
  34. $r.next().after($r);
  35. },
  36. unfoldAll :function(opt) {
  37. var $ul = $r.find("ul");
  38. $.each($ul, function() { $(this).show(); });
  39. $button = $r.find("button");
  40. for (var i=0; i<$button.length; i++) {
  41. $button.eq(i).find("span").html("-");
  42. }
  43. },
  44. getParent:function(opt) {
  45. return getParentItm($r.parent());
  46. },
  47. add :function(opt) {
  48. var $li = $("<li id='"+opt.id+"'></li>");
  49. $li.data("cRow", opt); //차후에 필요하면 캐쉬하자.
  50. if (opt.type=="folder") {
  51. $li.attr("class","h3 nav_tree_on nav_tree_last");
  52. //$li.append("<button type='button'>-</button><a class='nav_tree_label' style=\"cursor:pointer\"><img src='img/tree/ftv2folderopen.gif' alt='folder' />"+getOpt($r).namePrefix+"</a><a style=\"cursor:pointer\">"+opt.name+"</a><ul class=\"connectedSortable\"></ul>");
  53. $li.append("<button type='button'><span class='disn'>-</span></button><a style=\"cursor:pointer\"><img src='img/tree/ftv2folderopen.gif' alt='folder' />"+getOpt($r).namePrefix+"</a><a style=\"cursor:pointer\">"+opt.name+"</a><ul class=\"h4_menu\"></ul>");
  54. $li.find("button").click(function() { foldUnfold($(this)); });
  55. if (getOpt($r).folderClickFold) {
  56. $li.find("a:first").click(function() { foldUnfold($(this).parent().find("button")); });
  57. $li.find("a:eq(1)").click(function() { foldUnfold($(this).parent().find("button")); });
  58. }
  59. if (!getOpt($r).folderClickFold) {
  60. $li.find("a:first").click( function() { var $this=$(this); if (getOpt($r).onclick!=null && getOpt($r).onclick!=undefined) getOpt($r).onclick(opt, $this); });
  61. $li.find("a:eq(1)").click(function() { var $this=$(this); if (getOpt($r).onclick!=null && getOpt($r).onclick!=undefined) getOpt($r).onclick(opt, $this); });
  62. }
  63. } else {
  64. $li.attr("class","h4_menu nav_tree_off");
  65. $li.append("<a style=\"cursor:pointer\"><img src='img/tree/ftv2doc.gif' alt='doc' />"+getOpt($r).namePrefix+"</a><a style=\"cursor:pointer\">"+opt.name+"</a>");
  66. $li.find("a").click(function() { var $this=$(this); if (getOpt($r).onclick!=null && getOpt($r).onclick!=undefined) getOpt($r).onclick(opt, $this); });
  67. }
  68. $li.appendTo($r);
  69. $li.data('dat', opt);
  70. if (getOpt($r).movable) {
  71. $li.parent().find("img:first").css("cursor","move");
  72. $li.parent().sortable({ handle :'img:first',
  73. items :'> li',
  74. axis :'y',
  75. connectWith :".connectedSortable",
  76. update : function(e,ui) {
  77. if (typeof(getOpt($r).movableFn)=="function") return getOpt($r).movableFn(e,ui,$(this));
  78. }
  79. });
  80. }
  81. },
  82. addList :function(opt) {
  83. addTree(opt, $r);
  84. },
  85. remove :function(opt) {
  86. $r.remove();
  87. }
  88. };
  89. function getParentItm($c) {
  90. if ($c.parent().data("tree_opt")!=null&&$c.parent().data("tree_opt")!=undefined) return "root";
  91. if ($c.parent().get(0).tagName.toLowerCase()=="li") {
  92. return $c.parent();
  93. }
  94. else return getParentItm($c.parent());
  95. };
  96. function getOpt($d) {
  97. if ($d.get(0).tagName.toLowerCase() == "body") return {};
  98. if ($d.data("tree_opt")==null||$d.data("tree_opt")==undefined) return getOpt($d.parent());
  99. return $d.data("tree_opt");
  100. };
  101. function addTree(json, $prnt) {
  102. $.each(json, function(i,v) {
  103. $prnt.jexTree('add',v);
  104. if (v.type=="folder") addTree(v.sub, $prnt.find("#"+v.id).find("ul"));
  105. });
  106. };
  107. function foldUnfold($r) {
  108. //var stat = $r.html();
  109. var stat = $r.find("span").html();
  110. var opt = getOpt($r);
  111. // unfold
  112. if (stat=="-") {
  113. //$r.html("+");
  114. $r.find("span").html("+");
  115. $r.css("background", "url(/img/comm/etc/btn_tree_collapse.gif) no-repeat 0 0px");
  116. $r.parent().find("UL:first").slideUp(opt.speed);
  117. $r.parent().attr("class","h3 nav_tree_off nav_tree_last");
  118. }
  119. // fold
  120. if (stat=="+") {
  121. //$r.html("-");
  122. $r.find("span").html("-");
  123. $r.css("background", "url(/img/comm/etc/btn_tree_collapse.gif) no-repeat 0 -13px");
  124. $r.parent().find("UL:first").slideDown(opt.speed);
  125. $r.parent().attr("class","h3 nav_tree_on nav_tree_last");
  126. }
  127. };
  128. return jexTreeFn[cmd](opt);
  129. }
  130. });