Tree.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:10k
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.widget.Tree");
- dojo.require("dojo.widget.*");
- dojo.require("dojo.event.*");
- dojo.require("dojo.io.*");
- dojo.require("dojo.widget.HtmlWidget");
- dojo.require("dojo.widget.TreeNode");
- dojo.require("dojo.html.common");
- dojo.require("dojo.html.selection");
- dojo.widget.defineWidget("dojo.widget.Tree", dojo.widget.HtmlWidget, function () {
- this.eventNames = {};
- this.tree = this;
- this.DNDAcceptTypes = [];
- this.actionsDisabled = [];
- }, {widgetType:"Tree", eventNamesDefault:{createDOMNode:"createDOMNode", treeCreate:"treeCreate", treeDestroy:"treeDestroy", treeClick:"treeClick", iconClick:"iconClick", titleClick:"titleClick", moveFrom:"moveFrom", moveTo:"moveTo", addChild:"addChild", removeNode:"removeNode", expand:"expand", collapse:"collapse"}, isContainer:true, DNDMode:"off", lockLevel:0, strictFolders:true, DNDModes:{BETWEEN:1, ONTO:2}, DNDAcceptTypes:"", templateCssString:"n.dojoTree {ntfont: caption;ntfont-size: 11px;ntfont-weight: normal;ntoverflow: auto;n}nnn.dojoTreeNodeLabelTitle {ntpadding-left: 2px;ntcolor: WindowText;n}nn.dojoTreeNodeLabel {ntcursor:hand;ntcursor:pointer;n}nn.dojoTreeNodeLabelTitle:hover {nttext-decoration: underline;n}nn.dojoTreeNodeLabelSelected {ntbackground-color: Highlight;ntcolor: HighlightText;n}nn.dojoTree div {ntwhite-space: nowrap;n}nn.dojoTree img, .dojoTreeNodeLabel img {ntvertical-align: middle;n}nn", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/Tree.css"), templateString:"<div class="dojoTree"></div>", isExpanded:true, isTree:true, objectId:"", controller:"", selector:"", menu:"", expandLevel:"", blankIconSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_blank.gif"), gridIconSrcT:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_t.gif"), gridIconSrcL:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_l.gif"), gridIconSrcV:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_v.gif"), gridIconSrcP:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_p.gif"), gridIconSrcC:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_c.gif"), gridIconSrcX:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_x.gif"), gridIconSrcY:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_y.gif"), gridIconSrcZ:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_grid_z.gif"), expandIconSrcPlus:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_expand_plus.gif"), expandIconSrcMinus:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_expand_minus.gif"), expandIconSrcLoading:dojo.uri.moduleUri("dojo.widget", "templates/images/Tree/treenode_loading.gif"), iconWidth:18, iconHeight:18, showGrid:true, showRootGrid:true, actionIsDisabled:function (action) {
- var _this = this;
- return dojo.lang.inArray(_this.actionsDisabled, action);
- }, actions:{ADDCHILD:"ADDCHILD"}, getInfo:function () {
- var info = {widgetId:this.widgetId, objectId:this.objectId};
- return info;
- }, initializeController:function () {
- if (this.controller != "off") {
- if (this.controller) {
- this.controller = dojo.widget.byId(this.controller);
- } else {
- dojo.require("dojo.widget.TreeBasicController");
- this.controller = dojo.widget.createWidget("TreeBasicController", {DNDController:(this.DNDMode ? "create" : ""), dieWithTree:true});
- }
- this.controller.listenTree(this);
- } else {
- this.controller = null;
- }
- }, initializeSelector:function () {
- if (this.selector != "off") {
- if (this.selector) {
- this.selector = dojo.widget.byId(this.selector);
- } else {
- dojo.require("dojo.widget.TreeSelector");
- this.selector = dojo.widget.createWidget("TreeSelector", {dieWithTree:true});
- }
- this.selector.listenTree(this);
- } else {
- this.selector = null;
- }
- }, initialize:function (args, frag) {
- var _this = this;
- for (name in this.eventNamesDefault) {
- if (dojo.lang.isUndefined(this.eventNames[name])) {
- this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
- }
- }
- for (var i = 0; i < this.actionsDisabled.length; i++) {
- this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();
- }
- if (this.DNDMode == "off") {
- this.DNDMode = 0;
- } else {
- if (this.DNDMode == "between") {
- this.DNDMode = this.DNDModes.ONTO | this.DNDModes.BETWEEN;
- } else {
- if (this.DNDMode == "onto") {
- this.DNDMode = this.DNDModes.ONTO;
- }
- }
- }
- this.expandLevel = parseInt(this.expandLevel);
- this.initializeSelector();
- this.initializeController();
- if (this.menu) {
- this.menu = dojo.widget.byId(this.menu);
- this.menu.listenTree(this);
- }
- this.containerNode = this.domNode;
- }, postCreate:function () {
- this.createDOMNode();
- }, createDOMNode:function () {
- dojo.html.disableSelection(this.domNode);
- for (var i = 0; i < this.children.length; i++) {
- this.children[i].parent = this;
- var node = this.children[i].createDOMNode(this, 0);
- this.domNode.appendChild(node);
- }
- if (!this.showRootGrid) {
- for (var i = 0; i < this.children.length; i++) {
- this.children[i].expand();
- }
- }
- dojo.event.topic.publish(this.eventNames.treeCreate, {source:this});
- }, destroy:function () {
- dojo.event.topic.publish(this.tree.eventNames.treeDestroy, {source:this});
- return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);
- }, addChild:function (child, index) {
- var message = {child:child, index:index, parent:this, domNodeInitialized:child.domNodeInitialized};
- this.doAddChild.apply(this, arguments);
- dojo.event.topic.publish(this.tree.eventNames.addChild, message);
- }, doAddChild:function (child, index) {
- if (dojo.lang.isUndefined(index)) {
- index = this.children.length;
- }
- if (!child.isTreeNode) {
- dojo.raise("You can only add TreeNode widgets to a " + this.widgetType + " widget!");
- return;
- }
- if (this.isTreeNode) {
- if (!this.isFolder) {
- this.setFolder();
- }
- }
- var _this = this;
- dojo.lang.forEach(child.getDescendants(), function (elem) {
- elem.tree = _this.tree;
- });
- child.parent = this;
- if (this.isTreeNode) {
- this.state = this.loadStates.LOADED;
- }
- if (index < this.children.length) {
- dojo.html.insertBefore(child.domNode, this.children[index].domNode);
- } else {
- this.containerNode.appendChild(child.domNode);
- if (this.isExpanded && this.isTreeNode) {
- this.showChildren();
- }
- }
- this.children.splice(index, 0, child);
- if (child.domNodeInitialized) {
- var d = this.isTreeNode ? this.depth : -1;
- child.adjustDepth(d - child.depth + 1);
- child.updateIconTree();
- } else {
- child.depth = this.isTreeNode ? this.depth + 1 : 0;
- child.createDOMNode(child.tree, child.depth);
- }
- var prevSibling = child.getPreviousSibling();
- if (child.isLastChild() && prevSibling) {
- prevSibling.updateExpandGridColumn();
- }
- }, makeBlankImg:function () {
- var img = document.createElement("img");
- img.style.width = this.iconWidth + "px";
- img.style.height = this.iconHeight + "px";
- img.src = this.blankIconSrc;
- img.style.verticalAlign = "middle";
- return img;
- }, updateIconTree:function () {
- if (!this.isTree) {
- this.updateIcons();
- }
- for (var i = 0; i < this.children.length; i++) {
- this.children[i].updateIconTree();
- }
- }, toString:function () {
- return "[" + this.widgetType + " ID:" + this.widgetId + "]";
- }, move:function (child, newParent, index) {
- var oldParent = child.parent;
- var oldTree = child.tree;
- this.doMove.apply(this, arguments);
- var newParent = child.parent;
- var newTree = child.tree;
- var message = {oldParent:oldParent, oldTree:oldTree, newParent:newParent, newTree:newTree, child:child};
- dojo.event.topic.publish(oldTree.eventNames.moveFrom, message);
- dojo.event.topic.publish(newTree.eventNames.moveTo, message);
- }, doMove:function (child, newParent, index) {
- child.parent.doRemoveNode(child);
- newParent.doAddChild(child, index);
- }, removeNode:function (child) {
- if (!child.parent) {
- return;
- }
- var oldTree = child.tree;
- var oldParent = child.parent;
- var removedChild = this.doRemoveNode.apply(this, arguments);
- dojo.event.topic.publish(this.tree.eventNames.removeNode, {child:removedChild, tree:oldTree, parent:oldParent});
- return removedChild;
- }, doRemoveNode:function (child) {
- if (!child.parent) {
- return;
- }
- var parent = child.parent;
- var children = parent.children;
- var index = child.getParentIndex();
- if (index < 0) {
- dojo.raise("Couldn't find node " + child + " for removal");
- }
- children.splice(index, 1);
- dojo.html.removeNode(child.domNode);
- if (parent.children.length == 0 && !parent.isTree) {
- parent.containerNode.style.display = "none";
- }
- if (index == children.length && index > 0) {
- children[index - 1].updateExpandGridColumn();
- }
- if (parent instanceof dojo.widget.Tree && index == 0 && children.length > 0) {
- children[0].updateExpandGrid();
- }
- child.parent = child.tree = null;
- return child;
- }, markLoading:function () {
- }, unMarkLoading:function () {
- }, lock:function () {
- !this.lockLevel && this.markLoading();
- this.lockLevel++;
- }, unlock:function () {
- if (!this.lockLevel) {
- dojo.raise("unlock: not locked");
- }
- this.lockLevel--;
- !this.lockLevel && this.unMarkLoading();
- }, isLocked:function () {
- var node = this;
- while (true) {
- if (node.lockLevel) {
- return true;
- }
- if (node instanceof dojo.widget.Tree) {
- break;
- }
- node = node.parent;
- }
- return false;
- }, flushLock:function () {
- this.lockLevel = 0;
- this.unMarkLoading();
- }});