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.lang.array");
13
dojo.provide("dojo.lang.array");
12
dojo.require("dojo.lang.common");
14
dojo.require("dojo.lang.common");
13
dojo.lang.mixin(dojo.lang, {has:function (obj, name) {
15
dojo.lang.mixin(dojo.lang, {has:function (obj, name) {
14
	try {
16
	try {
15
		return typeof obj[name] != "undefined";
17
		return typeof obj[name] != "undefined";
16
	}
18
	}
17
	catch (e) {
19
	catch (e) {
18
		return false;
20
		return false;
19
	}
21
	}
20
}, isEmpty:function (obj) {
22
}, isEmpty:function (obj) {
21
	if (dojo.lang.isObject(obj)) {
23
	if (dojo.lang.isObject(obj)) {
22
		var tmp = {};
24
		var tmp = {};
23
		var count = 0;
25
		var count = 0;
24
		for (var x in obj) {
26
		for (var x in obj) {
25
			if (obj[x] && (!tmp[x])) {
27
			if (obj[x] && (!tmp[x])) {
26
				count++;
28
				count++;
27
				break;
29
				break;
28
			}
30
			}
29
		}
31
		}
30
		return count == 0;
32
		return count == 0;
31
	} else {
33
	} else {
32
		if (dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
34
		if (dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
33
			return obj.length == 0;
35
			return obj.length == 0;
34
		}
36
		}
35
	}
37
	}
36
}, map:function (arr, obj, unary_func) {
38
}, map:function (arr, obj, unary_func) {
37
	var isString = dojo.lang.isString(arr);
39
	var isString = dojo.lang.isString(arr);
38
	if (isString) {
40
	if (isString) {
39
		arr = arr.split("");
41
		arr = arr.split("");
40
	}
42
	}
41
	if (dojo.lang.isFunction(obj) && (!unary_func)) {
43
	if (dojo.lang.isFunction(obj) && (!unary_func)) {
42
		unary_func = obj;
44
		unary_func = obj;
43
		obj = dj_global;
45
		obj = dj_global;
44
	} else {
46
	} else {
45
		if (dojo.lang.isFunction(obj) && unary_func) {
47
		if (dojo.lang.isFunction(obj) && unary_func) {
46
			var tmpObj = obj;
48
			var tmpObj = obj;
47
			obj = unary_func;
49
			obj = unary_func;
48
			unary_func = tmpObj;
50
			unary_func = tmpObj;
49
		}
51
		}
50
	}
52
	}
51
	if (Array.map) {
53
	if (Array.map) {
52
		var outArr = Array.map(arr, unary_func, obj);
54
		var outArr = Array.map(arr, unary_func, obj);
53
	} else {
55
	} else {
54
		var outArr = [];
56
		var outArr = [];
55
		for (var i = 0; i < arr.length; ++i) {
57
		for (var i = 0; i < arr.length; ++i) {
56
			outArr.push(unary_func.call(obj, arr[i]));
58
			outArr.push(unary_func.call(obj, arr[i]));
57
		}
59
		}
58
	}
60
	}
59
	if (isString) {
61
	if (isString) {
60
		return outArr.join("");
62
		return outArr.join("");
61
	} else {
63
	} else {
62
		return outArr;
64
		return outArr;
63
	}
65
	}
64
}, reduce:function (arr, initialValue, obj, binary_func) {
66
}, reduce:function (arr, initialValue, obj, binary_func) {
65
	var reducedValue = initialValue;
67
	var reducedValue = initialValue;
66
	if (arguments.length == 2) {
68
	if (arguments.length == 2) {
67
		binary_func = initialValue;
69
		binary_func = initialValue;
68
		reducedValue = arr[0];
70
		reducedValue = arr[0];
69
		arr = arr.slice(1);
71
		arr = arr.slice(1);
70
	} else {
72
	} else {
71
		if (arguments.length == 3) {
73
		if (arguments.length == 3) {
72
			if (dojo.lang.isFunction(obj)) {
74
			if (dojo.lang.isFunction(obj)) {
73
				binary_func = obj;
75
				binary_func = obj;
74
				obj = null;
76
				obj = null;
75
			}
77
			}
76
		} else {
78
		} else {
77
			if (dojo.lang.isFunction(obj)) {
79
			if (dojo.lang.isFunction(obj)) {
78
				var tmp = binary_func;
80
				var tmp = binary_func;
79
				binary_func = obj;
81
				binary_func = obj;
80
				obj = tmp;
82
				obj = tmp;
81
			}
83
			}
82
		}
84
		}
83
	}
85
	}
84
	var ob = obj || dj_global;
86
	var ob = obj || dj_global;
85
	dojo.lang.map(arr, function (val) {
87
	dojo.lang.map(arr, function (val) {
86
		reducedValue = binary_func.call(ob, reducedValue, val);
88
		reducedValue = binary_func.call(ob, reducedValue, val);
87
	});
89
	});
88
	return reducedValue;
90
	return reducedValue;
89
}, forEach:function (anArray, callback, thisObject) {
91
}, forEach:function (anArray, callback, thisObject) {
90
	if (dojo.lang.isString(anArray)) {
92
	if (dojo.lang.isString(anArray)) {
91
		anArray = anArray.split("");
93
		anArray = anArray.split("");
92
	}
94
	}
93
	if (Array.forEach) {
95
	if (Array.forEach) {
94
		Array.forEach(anArray, callback, thisObject);
96
		Array.forEach(anArray, callback, thisObject);
95
	} else {
97
	} else {
96
		if (!thisObject) {
98
		if (!thisObject) {
97
			thisObject = dj_global;
99
			thisObject = dj_global;
98
		}
100
		}
99
		for (var i = 0, l = anArray.length; i < l; i++) {
101
		for (var i = 0, l = anArray.length; i < l; i++) {
100
			callback.call(thisObject, anArray[i], i, anArray);
102
			callback.call(thisObject, anArray[i], i, anArray);
101
		}
103
		}
102
	}
104
	}
103
}, _everyOrSome:function (every, arr, callback, thisObject) {
105
}, _everyOrSome:function (every, arr, callback, thisObject) {
104
	if (dojo.lang.isString(arr)) {
106
	if (dojo.lang.isString(arr)) {
105
		arr = arr.split("");
107
		arr = arr.split("");
106
	}
108
	}
107
	if (Array.every) {
109
	if (Array.every) {
108
		return Array[every ? "every" : "some"](arr, callback, thisObject);
110
		return Array[every ? "every" : "some"](arr, callback, thisObject);
109
	} else {
111
	} else {
110
		if (!thisObject) {
112
		if (!thisObject) {
111
			thisObject = dj_global;
113
			thisObject = dj_global;
112
		}
114
		}
113
		for (var i = 0, l = arr.length; i < l; i++) {
115
		for (var i = 0, l = arr.length; i < l; i++) {
114
			var result = callback.call(thisObject, arr[i], i, arr);
116
			var result = callback.call(thisObject, arr[i], i, arr);
115
			if (every && !result) {
117
			if (every && !result) {
116
				return false;
118
				return false;
117
			} else {
119
			} else {
118
				if ((!every) && (result)) {
120
				if ((!every) && (result)) {
119
					return true;
121
					return true;
120
				}
122
				}
121
			}
123
			}
122
		}
124
		}
123
		return Boolean(every);
125
		return Boolean(every);
124
	}
126
	}
125
}, every:function (arr, callback, thisObject) {
127
}, every:function (arr, callback, thisObject) {
126
	return this._everyOrSome(true, arr, callback, thisObject);
128
	return this._everyOrSome(true, arr, callback, thisObject);
127
}, some:function (arr, callback, thisObject) {
129
}, some:function (arr, callback, thisObject) {
128
	return this._everyOrSome(false, arr, callback, thisObject);
130
	return this._everyOrSome(false, arr, callback, thisObject);
129
}, filter:function (arr, callback, thisObject) {
131
}, filter:function (arr, callback, thisObject) {
130
	var isString = dojo.lang.isString(arr);
132
	var isString = dojo.lang.isString(arr);
131
	if (isString) {
133
	if (isString) {
132
		arr = arr.split("");
134
		arr = arr.split("");
133
	}
135
	}
134
	var outArr;
136
	var outArr;
135
	if (Array.filter) {
137
	if (Array.filter) {
136
		outArr = Array.filter(arr, callback, thisObject);
138
		outArr = Array.filter(arr, callback, thisObject);
137
	} else {
139
	} else {
138
		if (!thisObject) {
140
		if (!thisObject) {
139
			if (arguments.length >= 3) {
141
			if (arguments.length >= 3) {
140
				dojo.raise("thisObject doesn't exist!");
142
				dojo.raise("thisObject doesn't exist!");
141
			}
143
			}
142
			thisObject = dj_global;
144
			thisObject = dj_global;
143
		}
145
		}
144
		outArr = [];
146
		outArr = [];
145
		for (var i = 0; i < arr.length; i++) {
147
		for (var i = 0; i < arr.length; i++) {
146
			if (callback.call(thisObject, arr[i], i, arr)) {
148
			if (callback.call(thisObject, arr[i], i, arr)) {
147
				outArr.push(arr[i]);
149
				outArr.push(arr[i]);
148
			}
150
			}
149
		}
151
		}
150
	}
152
	}
151
	if (isString) {
153
	if (isString) {
152
		return outArr.join("");
154
		return outArr.join("");
153
	} else {
155
	} else {
154
		return outArr;
156
		return outArr;
155
	}
157
	}
156
}, unnest:function () {
158
}, unnest:function () {
157
	var out = [];
159
	var out = [];
158
	for (var i = 0; i < arguments.length; i++) {
160
	for (var i = 0; i < arguments.length; i++) {
159
		if (dojo.lang.isArrayLike(arguments[i])) {
161
		if (dojo.lang.isArrayLike(arguments[i])) {
160
			var add = dojo.lang.unnest.apply(this, arguments[i]);
162
			var add = dojo.lang.unnest.apply(this, arguments[i]);
161
			out = out.concat(add);
163
			out = out.concat(add);
162
		} else {
164
		} else {
163
			out.push(arguments[i]);
165
			out.push(arguments[i]);
164
		}
166
		}
165
	}
167
	}
166
	return out;
168
	return out;
167
}, toArray:function (arrayLike, startOffset) {
169
}, toArray:function (arrayLike, startOffset) {
168
	var array = [];
170
	var array = [];
169
	for (var i = startOffset || 0; i < arrayLike.length; i++) {
171
	for (var i = startOffset || 0; i < arrayLike.length; i++) {
170
		array.push(arrayLike[i]);
172
		array.push(arrayLike[i]);
171
	}
173
	}
172
	return array;
174
	return array;
173
}});
175
}});
174
 
176