Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.widget.TreeCommon");
12
dojo.require("dojo.widget.*");
13
dojo.declare("dojo.widget.TreeCommon", null, {listenTreeEvents:[], listenedTrees:{}, listenNodeFilter:null, listenTree:function (tree) {
14
	var _this = this;
15
	if (this.listenedTrees[tree.widgetId]) {
16
		return;
17
	}
18
	dojo.lang.forEach(this.listenTreeEvents, function (event) {
19
		var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1);
20
		dojo.event.topic.subscribe(tree.eventNames[event], _this, eventHandler);
21
	});
22
	var filter;
23
	if (this.listenNodeFilter) {
24
		this.processDescendants(tree, this.listenNodeFilter, this.listenNode, true);
25
	}
26
	this.listenedTrees[tree.widgetId] = true;
27
}, listenNode:function () {
28
}, unlistenNode:function () {
29
}, unlistenTree:function (tree, nodeFilter) {
30
	var _this = this;
31
	if (!this.listenedTrees[tree.widgetId]) {
32
		return;
33
	}
34
	dojo.lang.forEach(this.listenTreeEvents, function (event) {
35
		var eventHandler = "on" + event.charAt(0).toUpperCase() + event.substr(1);
36
		dojo.event.topic.unsubscribe(tree.eventNames[event], _this, eventHandler);
37
	});
38
	if (this.listenNodeFilter) {
39
		this.processDescendants(tree, this.listenNodeFilter, this.unlistenNode, true);
40
	}
41
	delete this.listenedTrees[tree.widgetId];
42
}, checkPathCondition:function (domElement, condition) {
43
	while (domElement && !domElement.widgetId) {
44
		if (condition.call(null, domElement)) {
45
			return true;
46
		}
47
		domElement = domElement.parentNode;
48
	}
49
	return false;
50
}, domElement2TreeNode:function (domElement) {
51
	while (domElement && !domElement.widgetId) {
52
		domElement = domElement.parentNode;
53
	}
54
	if (!domElement) {
55
		return null;
56
	}
57
	var widget = dojo.widget.byId(domElement.widgetId);
58
	if (!widget.isTreeNode) {
59
		return null;
60
	}
61
	return widget;
62
}, processDescendants:function (elem, filter, func, skipFirst) {
63
	var _this = this;
64
	if (!skipFirst) {
65
		if (!filter.call(_this, elem)) {
66
			return;
67
		}
68
		func.call(_this, elem);
69
	}
70
	var stack = [elem];
71
	while (elem = stack.pop()) {
72
		dojo.lang.forEach(elem.children, function (elem) {
73
			if (filter.call(_this, elem)) {
74
				func.call(_this, elem);
75
				stack.push(elem);
76
			}
77
		});
78
	}
79
}});
80