TreeSelectorV3.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:5k
源码类别:
OA系统
开发平台:
Java
- /*
- 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.TreeSelectorV3");
- dojo.require("dojo.widget.HtmlWidget");
- dojo.require("dojo.widget.TreeCommon");
- dojo.widget.defineWidget("dojo.widget.TreeSelectorV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
- this.eventNames = {};
- this.listenedTrees = {};
- this.selectedNodes = [];
- this.lastClicked = {};
- }, {listenTreeEvents:["afterTreeCreate", "afterCollapse", "afterChangeTree", "afterDetach", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
- return elem instanceof dojo.widget.Widget;
- }, allowedMulti:true, dblselectTimeout:300, eventNamesDefault:{select:"select", deselect:"deselect", dblselect:"dblselect"}, onAfterTreeCreate:function (message) {
- var tree = message.source;
- dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
- if (dojo.render.html.ie) {
- dojo.event.browser.addListener(tree.domNode, "ondblclick", dojo.lang.hitch(this, this.onTreeDblClick));
- }
- dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
- }, onKey:function (e) {
- if (!e.key || e.ctrkKey || e.altKey) {
- return;
- }
- switch (e.key) {
- case e.KEY_ENTER:
- var node = this.domElement2TreeNode(e.target);
- if (node) {
- this.processNode(node, e);
- }
- }
- }, onAfterChangeTree:function (message) {
- if (!message.oldTree && message.node.selected) {
- this.select(message.node);
- }
- if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {
- if (this.selectedNode && message.node.children) {
- this.deselectIfAncestorMatch(message.node);
- }
- }
- }, initialize:function (args) {
- for (var name in this.eventNamesDefault) {
- if (dojo.lang.isUndefined(this.eventNames[name])) {
- this.eventNames[name] = this.widgetId + "/" + this.eventNamesDefault[name];
- }
- }
- }, onBeforeTreeDestroy:function (message) {
- this.unlistenTree(message.source);
- }, onAfterCollapse:function (message) {
- this.deselectIfAncestorMatch(message.source);
- }, onTreeDblClick:function (event) {
- this.onTreeClick(event);
- }, checkSpecialEvent:function (event) {
- return event.shiftKey || event.ctrlKey;
- }, onTreeClick:function (event) {
- var node = this.domElement2TreeNode(event.target);
- if (!node) {
- return;
- }
- var checkLabelClick = function (domElement) {
- return domElement === node.labelNode;
- };
- if (this.checkPathCondition(event.target, checkLabelClick)) {
- this.processNode(node, event);
- }
- }, processNode:function (node, event) {
- if (node.actionIsDisabled(node.actions.SELECT)) {
- return;
- }
- if (dojo.lang.inArray(this.selectedNodes, node)) {
- if (this.checkSpecialEvent(event)) {
- this.deselect(node);
- return;
- }
- var _this = this;
- var i = 0;
- var selectedNode;
- while (this.selectedNodes.length > i) {
- selectedNode = this.selectedNodes[i];
- if (selectedNode !== node) {
- this.deselect(selectedNode);
- continue;
- }
- i++;
- }
- var wasJustClicked = this.checkRecentClick(node);
- eventName = wasJustClicked ? this.eventNames.dblselect : this.eventNames.select;
- if (wasJustClicked) {
- eventName = this.eventNames.dblselect;
- this.forgetLastClicked();
- } else {
- eventName = this.eventNames.select;
- this.setLastClicked(node);
- }
- dojo.event.topic.publish(eventName, {node:node});
- return;
- }
- this.deselectIfNoMulti(event);
- this.setLastClicked(node);
- this.select(node);
- }, forgetLastClicked:function () {
- this.lastClicked = {};
- }, setLastClicked:function (node) {
- this.lastClicked.date = new Date();
- this.lastClicked.node = node;
- }, checkRecentClick:function (node) {
- var diff = new Date() - this.lastClicked.date;
- if (this.lastClicked.node && diff < this.dblselectTimeout) {
- return true;
- } else {
- return false;
- }
- }, deselectIfNoMulti:function (event) {
- if (!this.checkSpecialEvent(event) || !this.allowedMulti) {
- this.deselectAll();
- }
- }, deselectIfAncestorMatch:function (ancestor) {
- var _this = this;
- dojo.lang.forEach(this.selectedNodes, function (node) {
- var selectedNode = node;
- node = node.parent;
- while (node && node.isTreeNode) {
- if (node === ancestor) {
- _this.deselect(selectedNode);
- return;
- }
- node = node.parent;
- }
- });
- }, onAfterDetach:function (message) {
- this.deselectIfAncestorMatch(message.child);
- }, select:function (node) {
- var index = dojo.lang.find(this.selectedNodes, node, true);
- if (index >= 0) {
- return;
- }
- this.selectedNodes.push(node);
- dojo.event.topic.publish(this.eventNames.select, {node:node});
- }, deselect:function (node) {
- var index = dojo.lang.find(this.selectedNodes, node, true);
- if (index < 0) {
- return;
- }
- this.selectedNodes.splice(index, 1);
- dojo.event.topic.publish(this.eventNames.deselect, {node:node});
- }, deselectAll:function () {
- while (this.selectedNodes.length) {
- this.deselect(this.selectedNodes[0]);
- }
- }});