TreeContextMenu.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.widget.TreeContextMenu");
  9. dojo.require("dojo.event.*");
  10. dojo.require("dojo.io.*");
  11. dojo.require("dojo.widget.Menu2");
  12. dojo.widget.defineWidget("dojo.widget.TreeContextMenu", dojo.widget.PopupMenu2, function () {
  13. this.listenedTrees = [];
  14. }, {open:function (x, y, parentMenu, explodeSrc) {
  15. var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);
  16. dojo.event.topic.publish(this.eventNames.open, {menu:this});
  17. return result;
  18. }, listenTree:function (tree) {
  19. var nodes = tree.getDescendants();
  20. for (var i = 0; i < nodes.length; i++) {
  21. if (!nodes[i].isTreeNode) {
  22. continue;
  23. }
  24. this.bindDomNode(nodes[i].labelNode);
  25. }
  26. var _this = this;
  27. dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
  28. dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
  29. dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
  30. dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
  31. dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
  32. dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
  33. this.listenedTrees.push(tree);
  34. }, unlistenTree:function (tree) {
  35. dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
  36. dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
  37. dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
  38. dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
  39. dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
  40. dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
  41. for (var i = 0; i < this.listenedTrees.length; i++) {
  42. if (this.listenedTrees[i] === tree) {
  43. this.listenedTrees.splice(i, 1);
  44. break;
  45. }
  46. }
  47. }, onTreeDestroy:function (message) {
  48. this.unlistenTree(message.source);
  49. }, bindTreeNode:function (node) {
  50. var _this = this;
  51. dojo.lang.forEach(node.getDescendants(), function (e) {
  52. _this.bindDomNode(e.labelNode);
  53. });
  54. }, unBindTreeNode:function (node) {
  55. var _this = this;
  56. dojo.lang.forEach(node.getDescendants(), function (e) {
  57. _this.unBindDomNode(e.labelNode);
  58. });
  59. }, onCreateDOMNode:function (message) {
  60. this.bindTreeNode(message.source);
  61. }, onMoveFrom:function (message) {
  62. if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {
  63. this.unBindTreeNode(message.child);
  64. }
  65. }, onMoveTo:function (message) {
  66. if (dojo.lang.inArray(this.listenedTrees, message.newTree)) {
  67. this.bindTreeNode(message.child);
  68. }
  69. }, onRemoveNode:function (message) {
  70. this.unBindTreeNode(message.child);
  71. }, onAddChild:function (message) {
  72. if (message.domNodeInitialized) {
  73. this.bindTreeNode(message.child);
  74. }
  75. }});
  76. dojo.widget.defineWidget("dojo.widget.TreeMenuItem", dojo.widget.MenuItem2, {treeActions:"", initialize:function (args, frag) {
  77. this.treeActions = this.treeActions.split(",");
  78. for (var i = 0; i < this.treeActions.length; i++) {
  79. this.treeActions[i] = this.treeActions[i].toUpperCase();
  80. }
  81. }, getTreeNode:function () {
  82. var menu = this;
  83. while (!(menu instanceof dojo.widget.TreeContextMenu)) {
  84. menu = menu.parent;
  85. }
  86. var source = menu.getTopOpenEvent().target;
  87. while (!source.getAttribute("treeNode") && source.tagName != "body") {
  88. source = source.parentNode;
  89. }
  90. if (source.tagName == "body") {
  91. dojo.raise("treeNode not detected");
  92. }
  93. var treeNode = dojo.widget.manager.getWidgetById(source.getAttribute("treeNode"));
  94. return treeNode;
  95. }, menuOpen:function (message) {
  96. var treeNode = this.getTreeNode();
  97. this.setDisabled(false);
  98. var _this = this;
  99. dojo.lang.forEach(_this.treeActions, function (action) {
  100. _this.setDisabled(treeNode.actionIsDisabled(action));
  101. });
  102. }, toString:function () {
  103. return "[" + this.widgetType + " node " + this.getTreeNode() + "]";
  104. }});