jquery.tree.checkbox.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. (function ($) {
  2. $.extend($.tree.plugins, {
  3. "checkbox": {
  4. defaults: {
  5. three_state: true
  6. },
  7. get_checked: function (t) {
  8. if (!t) t = $.tree.focused();
  9. return t.container.find("a.checked,a.undetermined").parent();
  10. },
  11. get_undeterminded: function (t) {
  12. if (!t) t = $.tree.focused();
  13. return t.container.find("a.undetermined").parent();
  14. },
  15. get_unchecked: function (t) {
  16. if (!t) t = $.tree.focused();
  17. return t.container.find("a:not(.checked, .undetermined)").parent();
  18. },
  19. check: function (n) {
  20. if (!n) return false;
  21. var t = $.tree.reference(n);
  22. if (t == null) return;
  23. n = t.get_node(n);
  24. if (n.children("a").hasClass("checked")) return true;
  25. var opts = $.extend(true, {}, $.tree.plugins.checkbox.defaults, t.settings.plugins.checkbox);
  26. if (opts.three_state) {
  27. n.find("li").andSelf().children("a").removeClass("unchecked undetermined").addClass("checked");
  28. n.parents("li").each(function () {
  29. if ($(this).children("ul").find("a:not(.checked):eq(0)").size() > 0) {
  30. $(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");
  31. return false;
  32. }
  33. else $(this).children("a").removeClass("unchecked undetermined").addClass("checked");
  34. });
  35. }
  36. else n.children("a").removeClass("unchecked").addClass("checked");
  37. return true;
  38. },
  39. uncheck: function (n) {
  40. if (!n) return false;
  41. var t = $.tree.reference(n);
  42. if (t == null) return;
  43. n = t.get_node(n);
  44. if (n.children("a").hasClass("unchecked")) return true;
  45. var opts = $.extend(true, {}, $.tree.plugins.checkbox.defaults, t.settings.plugins.checkbox);
  46. if (opts.three_state) {
  47. n.find("li").andSelf().children("a").removeClass("checked undetermined").addClass("unchecked");
  48. n.parents("li").each(function () {
  49. if ($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
  50. $(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");
  51. return false;
  52. }
  53. else $(this).children("a").removeClass("checked undetermined").addClass("unchecked");
  54. });
  55. }
  56. else n.children("a").removeClass("checked").addClass("unchecked");
  57. return true;
  58. },
  59. toggle: function (n) {
  60. if (!n) return false;
  61. var t = $.tree.reference(n);
  62. n = t.get_node(n);
  63. if (n.children("a").hasClass("checked")) $.tree.plugins.checkbox.uncheck(n);
  64. else $.tree.plugins.checkbox.check(n);
  65. },
  66. callbacks: {
  67. onchange: function (n, t) {
  68. $.tree.plugins.checkbox.toggle(n);
  69. }
  70. }
  71. }
  72. });
  73. })(jQuery);