Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
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:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.data.OpmlStore");
13
dojo.provide("dojo.data.OpmlStore");
12
dojo.require("dojo.data.core.Read");
14
dojo.require("dojo.data.core.Read");
13
dojo.require("dojo.data.core.Result");
15
dojo.require("dojo.data.core.Result");
14
dojo.require("dojo.lang.assert");
16
dojo.require("dojo.lang.assert");
15
dojo.require("dojo.json");
17
dojo.require("dojo.json");
16
dojo.require("dojo.experimental");
18
dojo.require("dojo.experimental");
17
dojo.experimental("dojo.data.OpmlStore");
19
dojo.experimental("dojo.data.OpmlStore");
18
dojo.declare("dojo.data.OpmlStore", dojo.data.core.Read, {initializer:function (keywordParameters) {
20
dojo.declare("dojo.data.OpmlStore", dojo.data.core.Read, {initializer:function (keywordParameters) {
19
	this._arrayOfTopLevelItems = [];
21
	this._arrayOfTopLevelItems = [];
20
	this._metadataNodes = null;
22
	this._metadataNodes = null;
21
	this._loadFinished = false;
23
	this._loadFinished = false;
22
	this._opmlFileUrl = keywordParameters["url"];
24
	this._opmlFileUrl = keywordParameters["url"];
23
}, _assertIsItem:function (item) {
25
}, _assertIsItem:function (item) {
24
	if (!this.isItem(item)) {
26
	if (!this.isItem(item)) {
25
		throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
27
		throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
26
	}
28
	}
27
}, _removeChildNodesThatAreNotElementNodes:function (node, recursive) {
29
}, _removeChildNodesThatAreNotElementNodes:function (node, recursive) {
28
	var childNodes = node.childNodes;
30
	var childNodes = node.childNodes;
29
	if (childNodes.length == 0) {
31
	if (childNodes.length == 0) {
30
		return;
32
		return;
31
	}
33
	}
32
	var nodesToRemove = [];
34
	var nodesToRemove = [];
33
	var i, childNode;
35
	var i, childNode;
34
	for (i = 0; i < childNodes.length; ++i) {
36
	for (i = 0; i < childNodes.length; ++i) {
35
		childNode = childNodes[i];
37
		childNode = childNodes[i];
36
		if (childNode.nodeType != Node.ELEMENT_NODE) {
38
		if (childNode.nodeType != Node.ELEMENT_NODE) {
37
			nodesToRemove.push(childNode);
39
			nodesToRemove.push(childNode);
38
		}
40
		}
39
	}
41
	}
40
	for (i = 0; i < nodesToRemove.length; ++i) {
42
	for (i = 0; i < nodesToRemove.length; ++i) {
41
		childNode = nodesToRemove[i];
43
		childNode = nodesToRemove[i];
42
		node.removeChild(childNode);
44
		node.removeChild(childNode);
43
	}
45
	}
44
	if (recursive) {
46
	if (recursive) {
45
		for (i = 0; i < childNodes.length; ++i) {
47
		for (i = 0; i < childNodes.length; ++i) {
46
			childNode = childNodes[i];
48
			childNode = childNodes[i];
47
			this._removeChildNodesThatAreNotElementNodes(childNode, recursive);
49
			this._removeChildNodesThatAreNotElementNodes(childNode, recursive);
48
		}
50
		}
49
	}
51
	}
50
}, _processRawXmlTree:function (rawXmlTree) {
52
}, _processRawXmlTree:function (rawXmlTree) {
51
	var headNodes = rawXmlTree.getElementsByTagName("head");
53
	var headNodes = rawXmlTree.getElementsByTagName("head");
52
	var headNode = headNodes[0];
54
	var headNode = headNodes[0];
53
	this._removeChildNodesThatAreNotElementNodes(headNode);
55
	this._removeChildNodesThatAreNotElementNodes(headNode);
54
	this._metadataNodes = headNode.childNodes;
56
	this._metadataNodes = headNode.childNodes;
55
	var bodyNodes = rawXmlTree.getElementsByTagName("body");
57
	var bodyNodes = rawXmlTree.getElementsByTagName("body");
56
	var bodyNode = bodyNodes[0];
58
	var bodyNode = bodyNodes[0];
57
	this._removeChildNodesThatAreNotElementNodes(bodyNode, true);
59
	this._removeChildNodesThatAreNotElementNodes(bodyNode, true);
58
	var bodyChildNodes = bodyNodes[0].childNodes;
60
	var bodyChildNodes = bodyNodes[0].childNodes;
59
	for (var i = 0; i < bodyChildNodes.length; ++i) {
61
	for (var i = 0; i < bodyChildNodes.length; ++i) {
60
		var node = bodyChildNodes[i];
62
		var node = bodyChildNodes[i];
61
		if (node.tagName == "outline") {
63
		if (node.tagName == "outline") {
62
			this._arrayOfTopLevelItems.push(node);
64
			this._arrayOfTopLevelItems.push(node);
63
		}
65
		}
64
	}
66
	}
65
}, get:function (item, attribute, defaultValue) {
67
}, get:function (item, attribute, defaultValue) {
66
	this._assertIsItem(item);
68
	this._assertIsItem(item);
67
	if (attribute == "children") {
69
	if (attribute == "children") {
68
		return (item.firstChild || defaultValue);
70
		return (item.firstChild || defaultValue);
69
	} else {
71
	} else {
70
		var value = item.getAttribute(attribute);
72
		var value = item.getAttribute(attribute);
71
		value = (value != undefined) ? value : defaultValue;
73
		value = (value != undefined) ? value : defaultValue;
72
		return value;
74
		return value;
73
	}
75
	}
74
}, getValues:function (item, attribute) {
76
}, getValues:function (item, attribute) {
75
	this._assertIsItem(item);
77
	this._assertIsItem(item);
76
	if (attribute == "children") {
78
	if (attribute == "children") {
77
		var array = [];
79
		var array = [];
78
		for (var i = 0; i < item.childNodes.length; ++i) {
80
		for (var i = 0; i < item.childNodes.length; ++i) {
79
			array.push(item.childNodes[i]);
81
			array.push(item.childNodes[i]);
80
		}
82
		}
81
		return array;
83
		return array;
82
	} else {
84
	} else {
83
		return [item.getAttribute(attribute)];
85
		return [item.getAttribute(attribute)];
84
	}
86
	}
85
}, getAttributes:function (item) {
87
}, getAttributes:function (item) {
86
	this._assertIsItem(item);
88
	this._assertIsItem(item);
87
	var attributes = [];
89
	var attributes = [];
88
	var xmlNode = item;
90
	var xmlNode = item;
89
	var xmlAttributes = xmlNode.attributes;
91
	var xmlAttributes = xmlNode.attributes;
90
	for (var i = 0; i < xmlAttributes.length; ++i) {
92
	for (var i = 0; i < xmlAttributes.length; ++i) {
91
		var xmlAttribute = xmlAttributes.item(i);
93
		var xmlAttribute = xmlAttributes.item(i);
92
		attributes.push(xmlAttribute.nodeName);
94
		attributes.push(xmlAttribute.nodeName);
93
	}
95
	}
94
	if (xmlNode.childNodes.length > 0) {
96
	if (xmlNode.childNodes.length > 0) {
95
		attributes.push("children");
97
		attributes.push("children");
96
	}
98
	}
97
	return attributes;
99
	return attributes;
98
}, hasAttribute:function (item, attribute) {
100
}, hasAttribute:function (item, attribute) {
99
	return (this.getValues(item, attribute).length > 0);
101
	return (this.getValues(item, attribute).length > 0);
100
}, containsValue:function (item, attribute, value) {
102
}, containsValue:function (item, attribute, value) {
101
	var values = this.getValues(item, attribute);
103
	var values = this.getValues(item, attribute);
102
	for (var i = 0; i < values.length; ++i) {
104
	for (var i = 0; i < values.length; ++i) {
103
		var possibleValue = values[i];
105
		var possibleValue = values[i];
104
		if (value == possibleValue) {
106
		if (value == possibleValue) {
105
			return true;
107
			return true;
106
		}
108
		}
107
	}
109
	}
108
	return false;
110
	return false;
109
}, isItem:function (something) {
111
}, isItem:function (something) {
110
	return (something && something.nodeType == Node.ELEMENT_NODE && something.tagName == "outline");
112
	return (something && something.nodeType == Node.ELEMENT_NODE && something.tagName == "outline");
111
}, isItemAvailable:function (something) {
113
}, isItemAvailable:function (something) {
112
	return this.isItem(something);
114
	return this.isItem(something);
113
}, find:function (keywordArgs) {
115
}, find:function (keywordArgs) {
114
	var result = null;
116
	var result = null;
115
	if (keywordArgs instanceof dojo.data.core.Result) {
117
	if (keywordArgs instanceof dojo.data.core.Result) {
116
		result = keywordArgs;
118
		result = keywordArgs;
117
		result.store = this;
119
		result.store = this;
118
	} else {
120
	} else {
119
		result = new dojo.data.core.Result(keywordArgs, this);
121
		result = new dojo.data.core.Result(keywordArgs, this);
120
	}
122
	}
121
	var self = this;
123
	var self = this;
122
	var bindHandler = function (type, data, evt) {
124
	var bindHandler = function (type, data, evt) {
123
		var scope = result.scope || dj_global;
125
		var scope = result.scope || dj_global;
124
		if (type == "load") {
126
		if (type == "load") {
125
			self._processRawXmlTree(data);
127
			self._processRawXmlTree(data);
126
			if (result.saveResult) {
128
			if (result.saveResult) {
127
				result.items = self._arrayOfTopLevelItems;
129
				result.items = self._arrayOfTopLevelItems;
128
			}
130
			}
129
			if (result.onbegin) {
131
			if (result.onbegin) {
130
				result.onbegin.call(scope, result);
132
				result.onbegin.call(scope, result);
131
			}
133
			}
132
			for (var i = 0; i < self._arrayOfTopLevelItems.length; i++) {
134
			for (var i = 0; i < self._arrayOfTopLevelItems.length; i++) {
133
				var item = self._arrayOfTopLevelItems[i];
135
				var item = self._arrayOfTopLevelItems[i];
134
				if (result.onnext && !result._aborted) {
136
				if (result.onnext && !result._aborted) {
135
					result.onnext.call(scope, item, result);
137
					result.onnext.call(scope, item, result);
136
				}
138
				}
137
			}
139
			}
138
			if (result.oncompleted && !result._aborted) {
140
			if (result.oncompleted && !result._aborted) {
139
				result.oncompleted.call(scope, result);
141
				result.oncompleted.call(scope, result);
140
			}
142
			}
141
		} else {
143
		} else {
142
			if (type == "error" || type == "timeout") {
144
			if (type == "error" || type == "timeout") {
143
				var errorObject = data;
145
				var errorObject = data;
144
				if (result.onerror) {
146
				if (result.onerror) {
145
					result.onerror.call(scope, data);
147
					result.onerror.call(scope, data);
146
				}
148
				}
147
			}
149
			}
148
		}
150
		}
149
	};
151
	};
150
	if (!this._loadFinished) {
152
	if (!this._loadFinished) {
151
		if (this._opmlFileUrl) {
153
		if (this._opmlFileUrl) {
152
			var bindRequest = dojo.io.bind({url:this._opmlFileUrl, handle:bindHandler, mimetype:"text/xml", sync:(result.sync || false)});
154
			var bindRequest = dojo.io.bind({url:this._opmlFileUrl, handle:bindHandler, mimetype:"text/xml", sync:(result.sync || false)});
153
			result._abortFunc = bindRequest.abort;
155
			result._abortFunc = bindRequest.abort;
154
		}
156
		}
155
	}
157
	}
156
	return result;
158
	return result;
157
}, getIdentity:function (item) {
159
}, getIdentity:function (item) {
158
	dojo.unimplemented("dojo.data.OpmlStore.getIdentity()");
160
	dojo.unimplemented("dojo.data.OpmlStore.getIdentity()");
159
	return null;
161
	return null;
160
}, findByIdentity:function (identity) {
162
}, findByIdentity:function (identity) {
161
	dojo.unimplemented("dojo.data.OpmlStore.findByIdentity()");
163
	dojo.unimplemented("dojo.data.OpmlStore.findByIdentity()");
162
	return null;
164
	return null;
163
}});
165
}});
164
 
166