Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1372 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.collections.Store");
13
dojo.provide("dojo.collections.Store");
12
dojo.require("dojo.lang.common");
14
dojo.require("dojo.lang.common");
13
dojo.collections.Store = function (jsonArray) {
15
dojo.collections.Store = function (jsonArray) {
14
	var data = [];
16
	var data = [];
15
	var items = {};
17
	var items = {};
16
	this.keyField = "Id";
18
	this.keyField = "Id";
17
	this.get = function () {
19
	this.get = function () {
18
		return data;
20
		return data;
19
	};
21
	};
20
	this.getByKey = function (key) {
22
	this.getByKey = function (key) {
21
		return items[key];
23
		return items[key];
22
	};
24
	};
23
	this.getByIndex = function (idx) {
25
	this.getByIndex = function (idx) {
24
		return data[idx];
26
		return data[idx];
25
	};
27
	};
26
	this.getIndexOf = function (key) {
28
	this.getIndexOf = function (key) {
27
		for (var i = 0; i < data.length; i++) {
29
		for (var i = 0; i < data.length; i++) {
28
			if (data[i].key == key) {
30
			if (data[i].key == key) {
29
				return i;
31
				return i;
30
			}
32
			}
31
		}
33
		}
32
		return -1;
34
		return -1;
33
	};
35
	};
34
	this.getData = function () {
36
	this.getData = function () {
35
		var arr = [];
37
		var arr = [];
36
		for (var i = 0; i < data.length; i++) {
38
		for (var i = 0; i < data.length; i++) {
37
			arr.push(data[i].src);
39
			arr.push(data[i].src);
38
		}
40
		}
39
		return arr;
41
		return arr;
40
	};
42
	};
41
	this.getDataByKey = function (key) {
43
	this.getDataByKey = function (key) {
42
		if (items[key] != null) {
44
		if (items[key] != null) {
43
			return items[key].src;
45
			return items[key].src;
44
		}
46
		}
45
		return null;
47
		return null;
46
	};
48
	};
47
	this.getIndexOfData = function (obj) {
49
	this.getIndexOfData = function (obj) {
48
		for (var i = 0; i < data.length; i++) {
50
		for (var i = 0; i < data.length; i++) {
49
			if (data[i].src == obj) {
51
			if (data[i].src == obj) {
50
				return i;
52
				return i;
51
			}
53
			}
52
		}
54
		}
53
		return -1;
55
		return -1;
54
	};
56
	};
55
	this.getDataByIndex = function (idx) {
57
	this.getDataByIndex = function (idx) {
56
		if (data[idx]) {
58
		if (data[idx]) {
57
			return data[idx].src;
59
			return data[idx].src;
58
		}
60
		}
59
		return null;
61
		return null;
60
	};
62
	};
61
	this.update = function (obj, fieldPath, val, bDontFire) {
63
	this.update = function (obj, fieldPath, val, bDontFire) {
62
		var parts = fieldPath.split("."), i = 0, o = obj, field;
64
		var parts = fieldPath.split("."), i = 0, o = obj, field;
63
		if (parts.length > 1) {
65
		if (parts.length > 1) {
64
			field = parts.pop();
66
			field = parts.pop();
65
			do {
67
			do {
66
				if (parts[i].indexOf("()") > -1) {
68
				if (parts[i].indexOf("()") > -1) {
67
					var temp = parts[i++].split("()")[0];
69
					var temp = parts[i++].split("()")[0];
68
					if (!o[temp]) {
70
					if (!o[temp]) {
69
						dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
71
						dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
70
					} else {
72
					} else {
71
						o = o[temp]();
73
						o = o[temp]();
72
					}
74
					}
73
				} else {
75
				} else {
74
					o = o[parts[i++]];
76
					o = o[parts[i++]];
75
				}
77
				}
76
			} while (i < parts.length && o != null);
78
			} while (i < parts.length && o != null);
77
		} else {
79
		} else {
78
			field = parts[0];
80
			field = parts[0];
79
		}
81
		}
80
		obj[field] = val;
82
		obj[field] = val;
81
		if (!bDontFire) {
83
		if (!bDontFire) {
82
			this.onUpdateField(obj, fieldPath, val);
84
			this.onUpdateField(obj, fieldPath, val);
83
		}
85
		}
84
	};
86
	};
85
	this.forEach = function (fn) {
87
	this.forEach = function (fn) {
86
		if (Array.forEach) {
88
		if (Array.forEach) {
87
			Array.forEach(data, fn, this);
89
			Array.forEach(data, fn, this);
88
		} else {
90
		} else {
89
			for (var i = 0; i < data.length; i++) {
91
			for (var i = 0; i < data.length; i++) {
90
				fn.call(this, data[i]);
92
				fn.call(this, data[i]);
91
			}
93
			}
92
		}
94
		}
93
	};
95
	};
94
	this.forEachData = function (fn) {
96
	this.forEachData = function (fn) {
95
		if (Array.forEach) {
97
		if (Array.forEach) {
96
			Array.forEach(this.getData(), fn, this);
98
			Array.forEach(this.getData(), fn, this);
97
		} else {
99
		} else {
98
			var a = this.getData();
100
			var a = this.getData();
99
			for (var i = 0; i < a.length; i++) {
101
			for (var i = 0; i < a.length; i++) {
100
				fn.call(this, a[i]);
102
				fn.call(this, a[i]);
101
			}
103
			}
102
		}
104
		}
103
	};
105
	};
104
	this.setData = function (arr, bDontFire) {
106
	this.setData = function (arr, bDontFire) {
105
		data = [];
107
		data = [];
106
		for (var i = 0; i < arr.length; i++) {
108
		for (var i = 0; i < arr.length; i++) {
107
			var o = {key:arr[i][this.keyField], src:arr[i]};
109
			var o = {key:arr[i][this.keyField], src:arr[i]};
108
			data.push(o);
110
			data.push(o);
109
			items[o.key] = o;
111
			items[o.key] = o;
110
		}
112
		}
111
		if (!bDontFire) {
113
		if (!bDontFire) {
112
			this.onSetData();
114
			this.onSetData();
113
		}
115
		}
114
	};
116
	};
115
	this.clearData = function (bDontFire) {
117
	this.clearData = function (bDontFire) {
116
		data = [];
118
		data = [];
117
		items = {};
119
		items = {};
118
		if (!bDontFire) {
120
		if (!bDontFire) {
119
			this.onClearData();
121
			this.onClearData();
120
		}
122
		}
121
	};
123
	};
122
	this.addData = function (obj, key, bDontFire) {
124
	this.addData = function (obj, key, bDontFire) {
123
		var k = key || obj[this.keyField];
125
		var k = key || obj[this.keyField];
124
		if (items[k] != null) {
126
		if (items[k] != null) {
125
			var o = items[k];
127
			var o = items[k];
126
			o.src = obj;
128
			o.src = obj;
127
		} else {
129
		} else {
128
			var o = {key:k, src:obj};
130
			var o = {key:k, src:obj};
129
			data.push(o);
131
			data.push(o);
130
			items[o.key] = o;
132
			items[o.key] = o;
131
		}
133
		}
132
		if (!bDontFire) {
134
		if (!bDontFire) {
133
			this.onAddData(o);
135
			this.onAddData(o);
134
		}
136
		}
135
	};
137
	};
136
	this.addDataRange = function (arr, bDontFire) {
138
	this.addDataRange = function (arr, bDontFire) {
137
		var objects = [];
139
		var objects = [];
138
		for (var i = 0; i < arr.length; i++) {
140
		for (var i = 0; i < arr.length; i++) {
139
			var k = arr[i][this.keyField];
141
			var k = arr[i][this.keyField];
140
			if (items[k] != null) {
142
			if (items[k] != null) {
141
				var o = items[k];
143
				var o = items[k];
142
				o.src = arr[i];
144
				o.src = arr[i];
143
			} else {
145
			} else {
144
				var o = {key:k, src:arr[i]};
146
				var o = {key:k, src:arr[i]};
145
				data.push(o);
147
				data.push(o);
146
				items[k] = o;
148
				items[k] = o;
147
			}
149
			}
148
			objects.push(o);
150
			objects.push(o);
149
		}
151
		}
150
		if (!bDontFire) {
152
		if (!bDontFire) {
151
			this.onAddDataRange(objects);
153
			this.onAddDataRange(objects);
152
		}
154
		}
153
	};
155
	};
154
	this.addDataByIndex = function (obj, idx, key, bDontFire) {
156
	this.addDataByIndex = function (obj, idx, key, bDontFire) {
155
		var k = key || obj[this.keyField];
157
		var k = key || obj[this.keyField];
156
		if (items[k] != null) {
158
		if (items[k] != null) {
157
			var i = this.getIndexOf(k);
159
			var i = this.getIndexOf(k);
158
			var o = data.splice(i, 1);
160
			var o = data.splice(i, 1);
159
			o.src = obj;
161
			o.src = obj;
160
		} else {
162
		} else {
161
			var o = {key:k, src:obj};
163
			var o = {key:k, src:obj};
162
			items[k] = o;
164
			items[k] = o;
163
		}
165
		}
164
		data.splice(idx, 0, o);
166
		data.splice(idx, 0, o);
165
		if (!bDontFire) {
167
		if (!bDontFire) {
166
			this.onAddData(o);
168
			this.onAddData(o);
167
		}
169
		}
168
	};
170
	};
169
	this.addDataRangeByIndex = function (arr, idx, bDontFire) {
171
	this.addDataRangeByIndex = function (arr, idx, bDontFire) {
170
		var objects = [];
172
		var objects = [];
171
		for (var i = 0; i < arr.length; i++) {
173
		for (var i = 0; i < arr.length; i++) {
172
			var k = arr[i][this.keyField];
174
			var k = arr[i][this.keyField];
173
			if (items[k] != null) {
175
			if (items[k] != null) {
174
				var j = this.getIndexOf(k);
176
				var j = this.getIndexOf(k);
175
				var o = data.splice(j, 1);
177
				var o = data.splice(j, 1);
176
				o.src = arr[i];
178
				o.src = arr[i];
177
			} else {
179
			} else {
178
				var o = {key:k, src:arr[i]};
180
				var o = {key:k, src:arr[i]};
179
				items[k] = o;
181
				items[k] = o;
180
			}
182
			}
181
			objects.push(o);
183
			objects.push(o);
182
		}
184
		}
183
		data.splice(idx, 0, objects);
185
		data.splice(idx, 0, objects);
184
		if (!bDontFire) {
186
		if (!bDontFire) {
185
			this.onAddDataRange(objects);
187
			this.onAddDataRange(objects);
186
		}
188
		}
187
	};
189
	};
188
	this.removeData = function (obj, bDontFire) {
190
	this.removeData = function (obj, bDontFire) {
189
		var idx = -1;
191
		var idx = -1;
190
		var o = null;
192
		var o = null;
191
		for (var i = 0; i < data.length; i++) {
193
		for (var i = 0; i < data.length; i++) {
192
			if (data[i].src == obj) {
194
			if (data[i].src == obj) {
193
				idx = i;
195
				idx = i;
194
				o = data[i];
196
				o = data[i];
195
				break;
197
				break;
196
			}
198
			}
197
		}
199
		}
198
		if (!bDontFire) {
200
		if (!bDontFire) {
199
			this.onRemoveData(o);
201
			this.onRemoveData(o);
200
		}
202
		}
201
		if (idx > -1) {
203
		if (idx > -1) {
202
			data.splice(idx, 1);
204
			data.splice(idx, 1);
203
			delete items[o.key];
205
			delete items[o.key];
204
		}
206
		}
205
	};
207
	};
206
	this.removeDataRange = function (idx, range, bDontFire) {
208
	this.removeDataRange = function (idx, range, bDontFire) {
207
		var ret = data.splice(idx, range);
209
		var ret = data.splice(idx, range);
208
		for (var i = 0; i < ret.length; i++) {
210
		for (var i = 0; i < ret.length; i++) {
209
			delete items[ret[i].key];
211
			delete items[ret[i].key];
210
		}
212
		}
211
		if (!bDontFire) {
213
		if (!bDontFire) {
212
			this.onRemoveDataRange(ret);
214
			this.onRemoveDataRange(ret);
213
		}
215
		}
214
		return ret;
216
		return ret;
215
	};
217
	};
216
	this.removeDataByKey = function (key, bDontFire) {
218
	this.removeDataByKey = function (key, bDontFire) {
217
		this.removeData(this.getDataByKey(key), bDontFire);
219
		this.removeData(this.getDataByKey(key), bDontFire);
218
	};
220
	};
219
	this.removeDataByIndex = function (idx, bDontFire) {
221
	this.removeDataByIndex = function (idx, bDontFire) {
220
		this.removeData(this.getDataByIndex(idx), bDontFire);
222
		this.removeData(this.getDataByIndex(idx), bDontFire);
221
	};
223
	};
222
	if (jsonArray && jsonArray.length && jsonArray[0]) {
224
	if (jsonArray && jsonArray.length && jsonArray[0]) {
223
		this.setData(jsonArray, true);
225
		this.setData(jsonArray, true);
224
	}
226
	}
225
};
227
};
226
dojo.extend(dojo.collections.Store, {getField:function (obj, field) {
228
dojo.extend(dojo.collections.Store, {getField:function (obj, field) {
227
	var parts = field.split("."), i = 0, o = obj;
229
	var parts = field.split("."), i = 0, o = obj;
228
	do {
230
	do {
229
		if (parts[i].indexOf("()") > -1) {
231
		if (parts[i].indexOf("()") > -1) {
230
			var temp = parts[i++].split("()")[0];
232
			var temp = parts[i++].split("()")[0];
231
			if (!o[temp]) {
233
			if (!o[temp]) {
232
				dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
234
				dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + temp + "' is not a property of the passed object.");
233
			} else {
235
			} else {
234
				o = o[temp]();
236
				o = o[temp]();
235
			}
237
			}
236
		} else {
238
		} else {
237
			o = o[parts[i++]];
239
			o = o[parts[i++]];
238
		}
240
		}
239
	} while (i < parts.length && o != null);
241
	} while (i < parts.length && o != null);
240
	if (i < parts.length) {
242
	if (i < parts.length) {
241
		dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
243
		dojo.raise("dojo.collections.Store.getField(obj, '" + field + "'): '" + field + "' is not a property of the passed object.");
242
	}
244
	}
243
	return o;
245
	return o;
244
}, getFromHtml:function (meta, body, fnMod) {
246
}, getFromHtml:function (meta, body, fnMod) {
245
	var rows = body.rows;
247
	var rows = body.rows;
246
	var ctor = function (row) {
248
	var ctor = function (row) {
247
		var obj = {};
249
		var obj = {};
248
		for (var i = 0; i < meta.length; i++) {
250
		for (var i = 0; i < meta.length; i++) {
249
			var o = obj;
251
			var o = obj;
250
			var data = row.cells[i].innerHTML;
252
			var data = row.cells[i].innerHTML;
251
			var p = meta[i].getField();
253
			var p = meta[i].getField();
252
			if (p.indexOf(".") > -1) {
254
			if (p.indexOf(".") > -1) {
253
				p = p.split(".");
255
				p = p.split(".");
254
				while (p.length > 1) {
256
				while (p.length > 1) {
255
					var pr = p.shift();
257
					var pr = p.shift();
256
					o[pr] = {};
258
					o[pr] = {};
257
					o = o[pr];
259
					o = o[pr];
258
				}
260
				}
259
				p = p[0];
261
				p = p[0];
260
			}
262
			}
261
			var type = meta[i].getType();
263
			var type = meta[i].getType();
262
			if (type == String) {
264
			if (type == String) {
263
				o[p] = data;
265
				o[p] = data;
264
			} else {
266
			} else {
265
				if (data) {
267
				if (data) {
266
					o[p] = new type(data);
268
					o[p] = new type(data);
267
				} else {
269
				} else {
268
					o[p] = new type();
270
					o[p] = new type();
269
				}
271
				}
270
			}
272
			}
271
		}
273
		}
272
		return obj;
274
		return obj;
273
	};
275
	};
274
	var arr = [];
276
	var arr = [];
275
	for (var i = 0; i < rows.length; i++) {
277
	for (var i = 0; i < rows.length; i++) {
276
		var o = ctor(rows[i]);
278
		var o = ctor(rows[i]);
277
		if (fnMod) {
279
		if (fnMod) {
278
			fnMod(o, rows[i]);
280
			fnMod(o, rows[i]);
279
		}
281
		}
280
		arr.push(o);
282
		arr.push(o);
281
	}
283
	}
282
	return arr;
284
	return arr;
283
}, onSetData:function () {
285
}, onSetData:function () {
284
}, onClearData:function () {
286
}, onClearData:function () {
285
}, onAddData:function (obj) {
287
}, onAddData:function (obj) {
286
}, onAddDataRange:function (arr) {
288
}, onAddDataRange:function (arr) {
287
}, onRemoveData:function (obj) {
289
}, onRemoveData:function (obj) {
288
}, onRemoveDataRange:function (arr) {
290
}, onRemoveDataRange:function (arr) {
289
}, onUpdateField:function (obj, field, val) {
291
}, onUpdateField:function (obj, field, val) {
290
}});
292
}});
291
 
293