esphinx-rails 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +21 -0
- data/config/environments/production.rb +1 -0
- data/config/environments/staging.rb +1 -0
- data/config/initializers/assets.rb +7 -0
- data/esphinx.gemspec +19 -0
- data/lib/assets/javascripts/esphinx/element.js +256 -0
- data/lib/assets/javascripts/esphinx/event.js +227 -0
- data/lib/assets/javascripts/esphinx/index.js +3 -0
- data/lib/assets/javascripts/esphinx/lib/collection.js +51 -0
- data/lib/assets/javascripts/esphinx/lib/comparable.js +54 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/array.js +541 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/function.js +46 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/index.js +1 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/location.js +111 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/map.js +29 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/number.js +42 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/object.js +502 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/string.js +130 -0
- data/lib/assets/javascripts/esphinx/lib/extensions/x_path_result.js +31 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/flyweight/factory.js +115 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/flyweight/flyweight.js +12 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/iterator.js +332 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/context.js +42 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs/element.js +78 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs/object.js +83 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/graphs/bfs.js +19 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/search.js +24 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/gof/strategies/search/search_proxy.js +52 -0
- data/lib/assets/javascripts/esphinx/lib/patterns/index.js +1 -0
- data/lib/assets/javascripts/esphinx/main.js +361 -0
- data/lib/assets/javascripts/esphinx/node.js +276 -0
- data/lib/assets/javascripts/esphinx/properties/forms.js +161 -0
- data/lib/assets/javascripts/esphinx/properties/inputs/text.js +29 -0
- data/lib/assets/javascripts/esphinx/property.js +308 -0
- data/lib/assets/javascripts/esphinx/query.js +347 -0
- data/lib/assets/javascripts/esphinx/samples/sort.js +30 -0
- data/lib/assets/javascripts/esphinx/style.js +342 -0
- data/lib/assets/javascripts/esphinx/util/ajax.js +152 -0
- data/lib/assets/javascripts/esphinx/util/autocomplete.js +356 -0
- data/lib/assets/javascripts/esphinx/util/browser.js +66 -0
- data/lib/assets/javascripts/esphinx/util/cookie.js +167 -0
- data/lib/assets/javascripts/esphinx/util/keyboard.js +110 -0
- data/lib/assets/javascripts/esphinx/util/loader.js +84 -0
- data/lib/assets/javascripts/esphinx/util/observer.js +58 -0
- data/lib/assets/javascripts/esphinx/util/promise.js +127 -0
- data/lib/assets/javascripts/esphinx/util/protector.js +142 -0
- data/lib/assets/javascripts/esphinx/util/range.js +6 -0
- data/lib/assets/javascripts/esphinx/util/scrollbar.js +22 -0
- data/lib/esphinx/rails/engine.rb +7 -0
- data/lib/esphinx/rails/version.rb +5 -0
- data/lib/esphinx-rails.rb +1 -0
- data/vendor/assets/javascripts/jquery-2.2.2.min.js +1 -0
- metadata +99 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
var
|
2
|
+
Flyweight;
|
3
|
+
|
4
|
+
|
5
|
+
(function($) {
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
|
9
|
+
try {
|
10
|
+
|
11
|
+
Object.defineProperties($.prototype, {
|
12
|
+
buildConstructor: {
|
13
|
+
value: function(args) {
|
14
|
+
// this won't be more necessary with Ecam Script 6
|
15
|
+
if (!(args instanceof Array)) {
|
16
|
+
args = Array.from(args);
|
17
|
+
}
|
18
|
+
|
19
|
+
// "bind" is a instance method of Function. It creates a new
|
20
|
+
// function for be called after.
|
21
|
+
// Apply calls the bind method
|
22
|
+
return $.prototype.bind.apply(this, [null].concat(args)
|
23
|
+
.flatten());
|
24
|
+
}
|
25
|
+
},
|
26
|
+
|
27
|
+
functionalSingleton: {
|
28
|
+
value: function() {
|
29
|
+
// delegator = Delegator.apply(this);
|
30
|
+
// delegator.object(Singleton.new);
|
31
|
+
return Flyweight.Factory.new.apply(this, Array
|
32
|
+
.from(arguments));
|
33
|
+
}
|
34
|
+
},
|
35
|
+
|
36
|
+
implementsMethods: {
|
37
|
+
value: function(name) {
|
38
|
+
return Object.implementsMethods(this, name);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
});
|
43
|
+
|
44
|
+
} catch(e) {}
|
45
|
+
|
46
|
+
})(Function);
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_directory .
|
@@ -0,0 +1,111 @@
|
|
1
|
+
var
|
2
|
+
Location;
|
3
|
+
|
4
|
+
|
5
|
+
(function($) {
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
var
|
9
|
+
self = window.location,
|
10
|
+
|
11
|
+
escape = function(parameter) {
|
12
|
+
return parameter.replace(/\$/, "\\$");
|
13
|
+
},
|
14
|
+
|
15
|
+
pattern = function(parameter) {
|
16
|
+
parameter = escape(parameter);
|
17
|
+
// better solution for now in JS, but select the catch (?, &)
|
18
|
+
// (?:[?&])foo(?:=([^&#]+))?\b
|
19
|
+
return new RegExp("(?:[?&])" + parameter +
|
20
|
+
"(?:=([^&#]+))?\\b", "g");
|
21
|
+
},
|
22
|
+
|
23
|
+
separator = function(captured) {
|
24
|
+
return captured[0] ? captured[0] : "?";
|
25
|
+
},
|
26
|
+
|
27
|
+
clean = function(parameter) {
|
28
|
+
return self.search.replace(pattern(parameter), function(captured) {
|
29
|
+
return separator(captured) + parameter;
|
30
|
+
});
|
31
|
+
};
|
32
|
+
|
33
|
+
|
34
|
+
try {
|
35
|
+
|
36
|
+
Object.defineProperties($.prototype, {
|
37
|
+
queryParameter: {
|
38
|
+
value: function(parameter, value) {
|
39
|
+
if (parameter) parameter = parameter.trim();
|
40
|
+
|
41
|
+
var
|
42
|
+
uri = self.href,
|
43
|
+
search = self.search,
|
44
|
+
results,
|
45
|
+
regexp = pattern(parameter),
|
46
|
+
|
47
|
+
set = function(parameter, value) {
|
48
|
+
value = encodeURIComponent(value.toString().trim());
|
49
|
+
|
50
|
+
if (regexp.test(search)) {
|
51
|
+
if (value) {
|
52
|
+
search = search.replace(regexp,
|
53
|
+
function(captured, i, string) {
|
54
|
+
return separator(captured) + parameter +
|
55
|
+
"=" + value;
|
56
|
+
});
|
57
|
+
} else {
|
58
|
+
search = clean(parameter);
|
59
|
+
}
|
60
|
+
uri = self.origin + self
|
61
|
+
.pathname + search + self.hash;
|
62
|
+
} else {
|
63
|
+
uri = window.location.origin + window.location
|
64
|
+
.pathname + window.location.search +
|
65
|
+
separator(search) + parameter + "=" +
|
66
|
+
value + window.location.hash;
|
67
|
+
}
|
68
|
+
|
69
|
+
window.history.pushState("", "", uri);
|
70
|
+
};
|
71
|
+
|
72
|
+
if (value || typeof value == "string") {
|
73
|
+
set(parameter, value);
|
74
|
+
return self;
|
75
|
+
}
|
76
|
+
|
77
|
+
results = regexp.exec(search);
|
78
|
+
if (!results) return null;
|
79
|
+
return decodeURIComponent(results[1].replace(/\+/g, " "));
|
80
|
+
}
|
81
|
+
},
|
82
|
+
|
83
|
+
unsetParameter: {
|
84
|
+
value: function(parameter) {
|
85
|
+
var
|
86
|
+
uri = self.href,
|
87
|
+
search = self.search;
|
88
|
+
|
89
|
+
if (parameter) parameter = parameter.trim();
|
90
|
+
|
91
|
+
if (pattern(parameter).test(search)) {
|
92
|
+
search = clean(parameter);
|
93
|
+
uri = self.origin + self
|
94
|
+
.pathname + search + self.hash;
|
95
|
+
}
|
96
|
+
|
97
|
+
window.history.pushState("", "", uri);
|
98
|
+
|
99
|
+
return self;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
});
|
103
|
+
|
104
|
+
} catch(e) {}
|
105
|
+
|
106
|
+
})(Location);
|
107
|
+
|
108
|
+
// the solution with positive lookbehind. Works in Python.
|
109
|
+
// (?<=(?:[?&]))foo(?:=[^&#]+)?\b
|
110
|
+
// the string for test
|
111
|
+
// ?foo=bar&foo=bar&foo&nonfoo=bar&nonfoo&foo#foo=bar
|
@@ -0,0 +1,29 @@
|
|
1
|
+
(function($) {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
try {
|
5
|
+
|
6
|
+
Object.defineProperties($.prototype, {
|
7
|
+
|
8
|
+
hasEquivalence: {
|
9
|
+
value: function(key) {
|
10
|
+
var
|
11
|
+
iterator = this.keys(),
|
12
|
+
tuple = iterator.next();
|
13
|
+
|
14
|
+
while (!tuple.done) {
|
15
|
+
if (Object.areEquivalents(tuple.value, key)) {
|
16
|
+
return true;
|
17
|
+
}
|
18
|
+
|
19
|
+
tuple = iterator.next();
|
20
|
+
}
|
21
|
+
|
22
|
+
return false;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
});
|
27
|
+
} catch(e) {}
|
28
|
+
|
29
|
+
})(Map);
|
@@ -0,0 +1,42 @@
|
|
1
|
+
(function($) {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
|
5
|
+
try {
|
6
|
+
|
7
|
+
Object.defineProperties($, {
|
8
|
+
unit: {
|
9
|
+
value: function(number) {
|
10
|
+
var
|
11
|
+
pattern = /[^0-9\.]+/;
|
12
|
+
|
13
|
+
return number.match(pattern)[0];
|
14
|
+
}
|
15
|
+
}
|
16
|
+
});
|
17
|
+
|
18
|
+
Object.defineProperties($.prototype, {
|
19
|
+
// usage: (m)[".."](n)
|
20
|
+
'..': {
|
21
|
+
value: function(until, step) {
|
22
|
+
if (typeof step != "number") {step = 1;}
|
23
|
+
|
24
|
+
var
|
25
|
+
range = [],
|
26
|
+
self = this;
|
27
|
+
|
28
|
+
while (self <= until) {
|
29
|
+
range.push(self);
|
30
|
+
self += step;
|
31
|
+
}
|
32
|
+
|
33
|
+
return range;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
});
|
37
|
+
|
38
|
+
} catch(e) {}
|
39
|
+
|
40
|
+
})(Number);
|
41
|
+
|
42
|
+
// console.log((0)[".."](5, 0.5))
|
@@ -0,0 +1,502 @@
|
|
1
|
+
//= require ./array
|
2
|
+
|
3
|
+
|
4
|
+
var
|
5
|
+
Iterable;
|
6
|
+
|
7
|
+
|
8
|
+
(function($) {
|
9
|
+
"use strict";
|
10
|
+
|
11
|
+
|
12
|
+
var
|
13
|
+
areEquivalents = function(object1, object2) {
|
14
|
+
var
|
15
|
+
object1Attributes,
|
16
|
+
object2Attributes,
|
17
|
+
object1Methods,
|
18
|
+
object2Methods,
|
19
|
+
object1AttributeValue,
|
20
|
+
object2AttributeValue,
|
21
|
+
iterator,
|
22
|
+
amount = 0,
|
23
|
+
primitiveTypes =
|
24
|
+
/(number|string|boolean|null|undefined|symbol)/,
|
25
|
+
|
26
|
+
callback = function(attribute) {
|
27
|
+
object1AttributeValue = object1[attribute];
|
28
|
+
object2AttributeValue = object2[attribute];
|
29
|
+
|
30
|
+
if ($.hasSameClass(object1AttributeValue,
|
31
|
+
object2AttributeValue)) {
|
32
|
+
if (typeof object1AttributeValue ==
|
33
|
+
"object") {
|
34
|
+
// recursivity
|
35
|
+
if ($.areEquivalents(
|
36
|
+
object1AttributeValue,
|
37
|
+
object2AttributeValue)) {
|
38
|
+
amount += 1;
|
39
|
+
}
|
40
|
+
} else
|
41
|
+
if (object1AttributeValue ==
|
42
|
+
object2AttributeValue) {
|
43
|
+
amount += 1;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
};
|
47
|
+
|
48
|
+
if (object1 === object2) {
|
49
|
+
return true;
|
50
|
+
} else if ($.hasSameClass(object1, object2)) {
|
51
|
+
if (typeof object1 == "object") {
|
52
|
+
if (object1 instanceof Node) {
|
53
|
+
if (object1.isEqualNode(object2)) {
|
54
|
+
return true;
|
55
|
+
}
|
56
|
+
} else {
|
57
|
+
object1Attributes = $.attributes(object1);
|
58
|
+
object2Attributes = $.attributes(object2);
|
59
|
+
object1Methods = $.methods(object1);
|
60
|
+
object2Methods = $.methods(object2);
|
61
|
+
|
62
|
+
// if doesn't have attributes
|
63
|
+
if (!object1Attributes.length) {
|
64
|
+
if (object1Methods.length ==
|
65
|
+
object2Methods.length &&
|
66
|
+
// recursivity
|
67
|
+
$.areEquivalents(object1Methods,
|
68
|
+
object2Methods)) {
|
69
|
+
return true;
|
70
|
+
}
|
71
|
+
} else if (object1Attributes.length ==
|
72
|
+
object2Attributes.length) {
|
73
|
+
|
74
|
+
iterator = Iterable.Proxy.new(object1Attributes);
|
75
|
+
|
76
|
+
iterator.each(callback);
|
77
|
+
|
78
|
+
return amount == object1Attributes.length;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
} else {
|
82
|
+
if (primitiveTypes.test(typeof object1)) {
|
83
|
+
return object1 === object2;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
return false;
|
89
|
+
};
|
90
|
+
|
91
|
+
|
92
|
+
try {
|
93
|
+
$.defineProperties($, {
|
94
|
+
|
95
|
+
clone: {
|
96
|
+
value: function(object, includeNonEnumerable) {
|
97
|
+
if (typeof includeNonEnumerable != "boolean") {
|
98
|
+
includeNonEnumerable = true;
|
99
|
+
}
|
100
|
+
|
101
|
+
var
|
102
|
+
clone = {},
|
103
|
+
properties = $.getOwnPropertyNames(object),
|
104
|
+
|
105
|
+
callback = function(p) {
|
106
|
+
clone[p] = object[p];
|
107
|
+
};
|
108
|
+
|
109
|
+
if (!includeNonEnumerable) {
|
110
|
+
return Object.assign(clone, object);
|
111
|
+
}
|
112
|
+
|
113
|
+
try {
|
114
|
+
properties.forEach(callback);
|
115
|
+
} catch(e) {}
|
116
|
+
|
117
|
+
return clone;
|
118
|
+
}
|
119
|
+
},
|
120
|
+
|
121
|
+
className: {
|
122
|
+
value: function(object) {
|
123
|
+
var
|
124
|
+
pattern = /[a-zA-Z$_][^\]]+/g,
|
125
|
+
string = $.prototype.toString.call(object);
|
126
|
+
|
127
|
+
if (typeof object == "object" &&
|
128
|
+
$.implementsMethods(object, "toString")) {
|
129
|
+
// if implements, then calls it
|
130
|
+
string = object.toString();
|
131
|
+
}
|
132
|
+
|
133
|
+
return pattern.exec(string)[0].split(" ")[1];
|
134
|
+
}
|
135
|
+
},
|
136
|
+
|
137
|
+
classForName: {
|
138
|
+
value: function(name) {
|
139
|
+
return window[name];
|
140
|
+
}
|
141
|
+
},
|
142
|
+
|
143
|
+
hasSameClass: {
|
144
|
+
value: function(objects) {
|
145
|
+
var
|
146
|
+
argumentsAsArray = Array.from(arguments),
|
147
|
+
compared = argumentsAsArray[0],
|
148
|
+
amount = 0,
|
149
|
+
|
150
|
+
callback = function(object) {
|
151
|
+
if (!object) {
|
152
|
+
if ($.className(object) ==
|
153
|
+
$.className(compared)) {
|
154
|
+
amount++;
|
155
|
+
}
|
156
|
+
} else if ($.getPrototypeOf(compared) ==
|
157
|
+
$.getPrototypeOf(object)) {
|
158
|
+
amount++;
|
159
|
+
}
|
160
|
+
};
|
161
|
+
|
162
|
+
argumentsAsArray = argumentsAsArray.slice(1,
|
163
|
+
argumentsAsArray.length);
|
164
|
+
argumentsAsArray.forEach(callback);
|
165
|
+
|
166
|
+
return amount == argumentsAsArray.length;
|
167
|
+
}
|
168
|
+
},
|
169
|
+
|
170
|
+
belongToClass: {
|
171
|
+
value: function(objects, classFunction) {
|
172
|
+
var
|
173
|
+
iterator,
|
174
|
+
argumentsAsArray = Array.from(arguments),
|
175
|
+
amount = 0,
|
176
|
+
|
177
|
+
callback = function(object) {
|
178
|
+
if ($.classForName($.className(object)) ==
|
179
|
+
classFunction) {
|
180
|
+
amount++;
|
181
|
+
}
|
182
|
+
};
|
183
|
+
|
184
|
+
classFunction = argumentsAsArray.last();
|
185
|
+
argumentsAsArray.pop();
|
186
|
+
|
187
|
+
iterator = Iterable.Proxy.new(argumentsAsArray);
|
188
|
+
iterator.each(callback);
|
189
|
+
|
190
|
+
return amount == argumentsAsArray.length;
|
191
|
+
}
|
192
|
+
},
|
193
|
+
|
194
|
+
firstKey: {
|
195
|
+
value: function(object) {
|
196
|
+
var
|
197
|
+
// Object: javascript literal object
|
198
|
+
keys = Object.keys(object);
|
199
|
+
|
200
|
+
|
201
|
+
return keys[0];
|
202
|
+
}
|
203
|
+
},
|
204
|
+
|
205
|
+
lastKey: {
|
206
|
+
value: function(object) {
|
207
|
+
var
|
208
|
+
keys = Object.keys(object);
|
209
|
+
|
210
|
+
|
211
|
+
return keys[keys.length - 1];
|
212
|
+
}
|
213
|
+
},
|
214
|
+
|
215
|
+
normalizedAsLowerCase: {
|
216
|
+
value: function(object) {
|
217
|
+
var
|
218
|
+
iterator,
|
219
|
+
attributes = Object.attributes(object),
|
220
|
+
clone = {},
|
221
|
+
|
222
|
+
callback = function(v, k) {
|
223
|
+
if (typeof v == "string") {
|
224
|
+
clone[k] = v.toLowerCase();
|
225
|
+
}
|
226
|
+
};
|
227
|
+
|
228
|
+
Object.assign(clone, object);
|
229
|
+
object.length = attributes.length;
|
230
|
+
iterator = Iterable.Proxy.new(clone);
|
231
|
+
|
232
|
+
iterator.each(callback);
|
233
|
+
|
234
|
+
return clone;
|
235
|
+
}
|
236
|
+
},
|
237
|
+
|
238
|
+
firstFromASlice: {
|
239
|
+
value: function(object, slice, startingIndex, caseSensitive) {
|
240
|
+
var
|
241
|
+
iterator,
|
242
|
+
key,
|
243
|
+
regexp,
|
244
|
+
attributes = Object.attributes(object),
|
245
|
+
|
246
|
+
callback = function(k, i) {
|
247
|
+
if (!isNaN(i)) {
|
248
|
+
if (typeof object[k] == "string" &&
|
249
|
+
i >= startingIndex) {
|
250
|
+
if (object[k].search(regexp) != -1) {
|
251
|
+
key = k;
|
252
|
+
this.finalize();
|
253
|
+
}
|
254
|
+
}
|
255
|
+
} else if (typeof object[k] == "string") {
|
256
|
+
if (object[k].search(regexp) != -1) {
|
257
|
+
key = k;
|
258
|
+
this.finalize();
|
259
|
+
}
|
260
|
+
}
|
261
|
+
};
|
262
|
+
|
263
|
+
if (typeof startingIndex != "number") {
|
264
|
+
if (typeof startingIndex == "boolean") {
|
265
|
+
caseSensitive = startingIndex;
|
266
|
+
} else if (!caseSensitive || typeof caseSensitive !=
|
267
|
+
"boolean") {
|
268
|
+
caseSensitive = false;
|
269
|
+
}
|
270
|
+
|
271
|
+
startingIndex = 0;
|
272
|
+
}
|
273
|
+
|
274
|
+
slice = slice.trim();
|
275
|
+
|
276
|
+
if (!caseSensitive) {
|
277
|
+
regexp = new RegExp(slice, "i");
|
278
|
+
} else {
|
279
|
+
regexp = new RegExp(slice);
|
280
|
+
}
|
281
|
+
|
282
|
+
iterator = Iterable.Proxy.new(attributes);
|
283
|
+
iterator.each(callback);
|
284
|
+
|
285
|
+
if (key) {
|
286
|
+
return key;
|
287
|
+
}
|
288
|
+
|
289
|
+
return undefined;
|
290
|
+
}
|
291
|
+
},
|
292
|
+
|
293
|
+
asCountableLiteral: {
|
294
|
+
value: function(collection) {
|
295
|
+
return Iterable.parse(collection);
|
296
|
+
}
|
297
|
+
},
|
298
|
+
|
299
|
+
// The keys of associative arrays in JS only can be of integer or string kind. The associations that keys are of Integer kind, the items is sorted according the keys (works as HashSet of the Java); the associations that keys are String kind, works as LinkedHashMap, it implements a associative array and maintains the order of entrance on iterate.
|
300
|
+
// TreeMap implements a structure based red-black tree (binary search).
|
301
|
+
indexOf: {
|
302
|
+
value: function(object, value) {
|
303
|
+
var
|
304
|
+
key,
|
305
|
+
iterator,
|
306
|
+
properties = $.keys(object),
|
307
|
+
|
308
|
+
callback = function(p) {
|
309
|
+
if ($.areEquivalents(object[p], value)) {
|
310
|
+
key = p;
|
311
|
+
this.finalize();
|
312
|
+
}
|
313
|
+
};
|
314
|
+
|
315
|
+
iterator = Iterable.Proxy.new(properties);
|
316
|
+
iterator.each(callback);
|
317
|
+
|
318
|
+
if (key) {
|
319
|
+
return key;
|
320
|
+
}
|
321
|
+
|
322
|
+
return undefined;
|
323
|
+
}
|
324
|
+
},
|
325
|
+
|
326
|
+
amount: {
|
327
|
+
value: function(object, item) {
|
328
|
+
var
|
329
|
+
amount;
|
330
|
+
|
331
|
+
if (item) {
|
332
|
+
amount = $.values(object).amount(item);
|
333
|
+
} else {
|
334
|
+
amount = $.keys(object).length;
|
335
|
+
}
|
336
|
+
|
337
|
+
return amount;
|
338
|
+
}
|
339
|
+
},
|
340
|
+
|
341
|
+
empty: {
|
342
|
+
value: function(object) {
|
343
|
+
return $.amount(object) === 0;
|
344
|
+
}
|
345
|
+
},
|
346
|
+
|
347
|
+
some: {
|
348
|
+
value: function(object) {
|
349
|
+
return !$.empty(object);
|
350
|
+
}
|
351
|
+
},
|
352
|
+
|
353
|
+
delete: {
|
354
|
+
value: function(index, object) {
|
355
|
+
if (delete object[index]) {
|
356
|
+
if (object.hasOwnProperty("length")) {
|
357
|
+
object.length -= 1;
|
358
|
+
}
|
359
|
+
|
360
|
+
return true;
|
361
|
+
}
|
362
|
+
|
363
|
+
return false;
|
364
|
+
}
|
365
|
+
},
|
366
|
+
|
367
|
+
reverse: {
|
368
|
+
value: function(object) {
|
369
|
+
var
|
370
|
+
newObject = {},
|
371
|
+
|
372
|
+
callback = function(k) {
|
373
|
+
newObject[k] = object[k];
|
374
|
+
};
|
375
|
+
|
376
|
+
$.keys(object).reverse().forEach(callback);
|
377
|
+
|
378
|
+
return newObject;
|
379
|
+
}
|
380
|
+
},
|
381
|
+
|
382
|
+
attributes: {
|
383
|
+
value: function(object, includeNonEnumerable) {
|
384
|
+
if (typeof includeNonEnumerable != "boolean") {
|
385
|
+
includeNonEnumerable = false;
|
386
|
+
}
|
387
|
+
|
388
|
+
var
|
389
|
+
clone,
|
390
|
+
properties,
|
391
|
+
attributes = [],
|
392
|
+
|
393
|
+
callback = function(p) {
|
394
|
+
return typeof object[p] != "function";
|
395
|
+
};
|
396
|
+
|
397
|
+
if (!object) {
|
398
|
+
return [];
|
399
|
+
}
|
400
|
+
|
401
|
+
clone = Object.clone(object, includeNonEnumerable);
|
402
|
+
|
403
|
+
if (typeof object != "object" &&
|
404
|
+
typeof object != "function" &&
|
405
|
+
Object.getPrototypeOf(object)) {
|
406
|
+
clone = Object.getPrototypeOf(object);
|
407
|
+
}
|
408
|
+
|
409
|
+
properties = $.keys(clone);
|
410
|
+
|
411
|
+
if (includeNonEnumerable) {
|
412
|
+
properties = $.getOwnPropertyNames(clone);
|
413
|
+
}
|
414
|
+
|
415
|
+
try {
|
416
|
+
attributes = properties.filter(callback);
|
417
|
+
} catch(e) {}
|
418
|
+
|
419
|
+
return attributes;
|
420
|
+
}
|
421
|
+
},
|
422
|
+
|
423
|
+
methods: {
|
424
|
+
value: function(object, includeNonEnumerable) {
|
425
|
+
if (typeof includeNonEnumerable != "boolean") {
|
426
|
+
includeNonEnumerable = true;
|
427
|
+
}
|
428
|
+
|
429
|
+
var
|
430
|
+
clone,
|
431
|
+
properties;
|
432
|
+
|
433
|
+
// otherwise it will give a cascade error
|
434
|
+
if (!object) {
|
435
|
+
return [];
|
436
|
+
}
|
437
|
+
|
438
|
+
clone = Object.clone(object, includeNonEnumerable);
|
439
|
+
|
440
|
+
if (typeof object != "object" &&
|
441
|
+
typeof object != "function" &&
|
442
|
+
Object.getPrototypeOf(object)) {
|
443
|
+
clone = Object.getPrototypeOf(object);
|
444
|
+
}
|
445
|
+
|
446
|
+
properties = $.keys(clone);
|
447
|
+
|
448
|
+
if (includeNonEnumerable) {
|
449
|
+
properties = $.getOwnPropertyNames(clone);
|
450
|
+
}
|
451
|
+
|
452
|
+
return properties.difference($.attributes(object, true));
|
453
|
+
}
|
454
|
+
},
|
455
|
+
|
456
|
+
hasAttributes: {
|
457
|
+
value: function(object, attributes) {
|
458
|
+
var
|
459
|
+
amount = 0,
|
460
|
+
argumentsAsArray = Array.from(arguments),
|
461
|
+
researchedAttributes = argumentsAsArray
|
462
|
+
.slice(1, argumentsAsArray.length);
|
463
|
+
|
464
|
+
attributes = $.attributes(object, true);
|
465
|
+
|
466
|
+
researchedAttributes.forEach(function(attribute) {
|
467
|
+
if (attributes.includes(attribute)) {
|
468
|
+
amount++;
|
469
|
+
}
|
470
|
+
});
|
471
|
+
|
472
|
+
return amount == researchedAttributes.length;
|
473
|
+
}
|
474
|
+
},
|
475
|
+
|
476
|
+
implementsMethods: {
|
477
|
+
value: function(object, methods) {
|
478
|
+
var
|
479
|
+
amount = 0,
|
480
|
+
argumentsAsArray = Array.from(arguments),
|
481
|
+
researchedMethods = argumentsAsArray
|
482
|
+
.slice(1, argumentsAsArray.length);
|
483
|
+
|
484
|
+
methods = $.methods(object);
|
485
|
+
researchedMethods.forEach(function(method) {
|
486
|
+
if (methods.includes(method)) {
|
487
|
+
amount++;
|
488
|
+
}
|
489
|
+
});
|
490
|
+
|
491
|
+
return amount == researchedMethods.length;
|
492
|
+
}
|
493
|
+
},
|
494
|
+
|
495
|
+
areEquivalents: {
|
496
|
+
value: areEquivalents
|
497
|
+
}
|
498
|
+
|
499
|
+
});
|
500
|
+
} catch(e) {}
|
501
|
+
|
502
|
+
})(Object);
|