underscore-source 1.1.5 → 1.1.6
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Underscore.js 1.1.
|
|
1
|
+
// Underscore.js 1.1.6
|
|
2
2
|
// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
|
|
3
3
|
// Underscore is freely distributable under the MIT license.
|
|
4
4
|
// Portions of Underscore are inspired or borrowed from Prototype,
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// Current version.
|
|
62
|
-
_.VERSION = '1.1.
|
|
62
|
+
_.VERSION = '1.1.6';
|
|
63
63
|
|
|
64
64
|
// Collection Functions
|
|
65
65
|
// --------------------
|
|
@@ -168,7 +168,6 @@
|
|
|
168
168
|
// Delegates to **ECMAScript 5**'s native `every` if available.
|
|
169
169
|
// Aliased as `all`.
|
|
170
170
|
_.every = _.all = function(obj, iterator, context) {
|
|
171
|
-
iterator = iterator || _.identity;
|
|
172
171
|
var result = true;
|
|
173
172
|
if (obj == null) return result;
|
|
174
173
|
if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
|
|
@@ -182,7 +181,7 @@
|
|
|
182
181
|
// Delegates to **ECMAScript 5**'s native `some` if available.
|
|
183
182
|
// Aliased as `any`.
|
|
184
183
|
var any = _.some = _.any = function(obj, iterator, context) {
|
|
185
|
-
iterator
|
|
184
|
+
iterator || (iterator = _.identity);
|
|
186
185
|
var result = false;
|
|
187
186
|
if (obj == null) return result;
|
|
188
187
|
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
|
|
@@ -208,7 +207,7 @@
|
|
|
208
207
|
_.invoke = function(obj, method) {
|
|
209
208
|
var args = slice.call(arguments, 2);
|
|
210
209
|
return _.map(obj, function(value) {
|
|
211
|
-
return (method ?
|
|
210
|
+
return (method.call ? method || value : value[method]).apply(value, args);
|
|
212
211
|
});
|
|
213
212
|
};
|
|
214
213
|
|
|
@@ -255,7 +254,7 @@
|
|
|
255
254
|
// Use a comparator function to figure out at what index an object should
|
|
256
255
|
// be inserted so as to maintain order. Uses binary search.
|
|
257
256
|
_.sortedIndex = function(array, obj, iterator) {
|
|
258
|
-
iterator
|
|
257
|
+
iterator || (iterator = _.identity);
|
|
259
258
|
var low = 0, high = array.length;
|
|
260
259
|
while (low < high) {
|
|
261
260
|
var mid = (low + high) >> 1;
|
|
@@ -408,8 +407,9 @@
|
|
|
408
407
|
// Create a function bound to a given object (assigning `this`, and arguments,
|
|
409
408
|
// optionally). Binding with arguments is also known as `curry`.
|
|
410
409
|
// Delegates to **ECMAScript 5**'s native `Function.bind` if available.
|
|
410
|
+
// We check for `func.bind` first, to fail fast when `func` is undefined.
|
|
411
411
|
_.bind = function(func, obj) {
|
|
412
|
-
if (
|
|
412
|
+
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
|
413
413
|
var args = slice.call(arguments, 2);
|
|
414
414
|
return function() {
|
|
415
415
|
return func.apply(obj, args.concat(slice.call(arguments)));
|
|
@@ -428,7 +428,7 @@
|
|
|
428
428
|
// Memoize an expensive function by storing its results.
|
|
429
429
|
_.memoize = function(func, hasher) {
|
|
430
430
|
var memo = {};
|
|
431
|
-
hasher
|
|
431
|
+
hasher || (hasher = _.identity);
|
|
432
432
|
return function() {
|
|
433
433
|
var key = hasher.apply(this, arguments);
|
|
434
434
|
return hasOwnProperty.call(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
|
|
@@ -509,6 +509,14 @@
|
|
|
509
509
|
};
|
|
510
510
|
};
|
|
511
511
|
|
|
512
|
+
// Returns a function that will only be executed after being called N times.
|
|
513
|
+
_.after = function(times, func) {
|
|
514
|
+
return function() {
|
|
515
|
+
if (--times < 1) { return func.apply(this, arguments); }
|
|
516
|
+
};
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
|
|
512
520
|
// Object Functions
|
|
513
521
|
// ----------------
|
|
514
522
|
|
|
@@ -535,7 +543,9 @@
|
|
|
535
543
|
// Extend a given object with all the properties in passed-in object(s).
|
|
536
544
|
_.extend = function(obj) {
|
|
537
545
|
each(slice.call(arguments, 1), function(source) {
|
|
538
|
-
for (var prop in source)
|
|
546
|
+
for (var prop in source) {
|
|
547
|
+
if (source[prop] !== void 0) obj[prop] = source[prop];
|
|
548
|
+
}
|
|
539
549
|
});
|
|
540
550
|
return obj;
|
|
541
551
|
};
|
|
@@ -543,7 +553,9 @@
|
|
|
543
553
|
// Fill in a given object with default properties.
|
|
544
554
|
_.defaults = function(obj) {
|
|
545
555
|
each(slice.call(arguments, 1), function(source) {
|
|
546
|
-
for (var prop in source)
|
|
556
|
+
for (var prop in source) {
|
|
557
|
+
if (obj[prop] == null) obj[prop] = source[prop];
|
|
558
|
+
}
|
|
547
559
|
});
|
|
548
560
|
return obj;
|
|
549
561
|
};
|