Subversion Repositories Applications.papyrus

Rev

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