| /* |
| 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.TreeCommon"); |
| dojo.require("dojo.widget.*"); |
| dojo.declare("dojo.widget.TreeCommon", null, {listenTreeEvents:[], listenedTrees:{}, listenNodeFilter:null, listenTree:function (tree) { |
| var _this = this; |
| if (this.listenedTrees[tree.widgetId]) { |
| return; |
| } |
| dojo.lang.forEach(this.listenTreeEvents, function (event) { |
| var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1); |
| dojo.event.topic.subscribe(tree.eventNames[event], _this, eventHandler); |
| }); |
| var filter; |
| if (this.listenNodeFilter) { |
| this.processDescendants(tree, this.listenNodeFilter, this.listenNode, true); |
| } |
| this.listenedTrees[tree.widgetId] = true; |
| }, listenNode:function () { |
| }, unlistenNode:function () { |
| }, unlistenTree:function (tree, nodeFilter) { |
| var _this = this; |
| if (!this.listenedTrees[tree.widgetId]) { |
| return; |
| } |
| dojo.lang.forEach(this.listenTreeEvents, function (event) { |
| var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1); |
| dojo.event.topic.unsubscribe(tree.eventNames[event], _this, eventHandler); |
| }); |
| if (this.listenNodeFilter) { |
| this.processDescendants(tree, this.listenNodeFilter, this.unlistenNode, true); |
| } |
| delete this.listenedTrees[tree.widgetId]; |
| }, checkPathCondition:function (domElement, condition) { |
| while (domElement && !domElement.widgetId) { |
| if (condition.call(null, domElement)) { |
| return true; |
| } |
| domElement = domElement.parentNode; |
| } |
| return false; |
| }, domElement2TreeNode:function (domElement) { |
| while (domElement && !domElement.widgetId) { |
| domElement = domElement.parentNode; |
| } |
| if (!domElement) { |
| return null; |
| } |
| var widget = dojo.widget.byId(domElement.widgetId); |
| if (!widget.isTreeNode) { |
| return null; |
| } |
| return widget; |
| }, processDescendants:function (elem, filter, func, skipFirst) { |
| var _this = this; |
| if (!skipFirst) { |
| if (!filter.call(_this, elem)) { |
| return; |
| } |
| func.call(_this, elem); |
| } |
| var stack = [elem]; |
| while (elem = stack.pop()) { |
| dojo.lang.forEach(elem.children, function (elem) { |
| if (filter.call(_this, elem)) { |
| func.call(_this, elem); |
| stack.push(elem); |
| } |
| }); |
| } |
| }}); |
| |