underscore-source 1.2.3 → 1.2.4
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,5 +1,5 @@
|
|
1
|
-
// Underscore.js 1.2.
|
2
|
-
// (c) 2009-
|
1
|
+
// Underscore.js 1.2.4
|
2
|
+
// (c) 2009-2012 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,
|
5
5
|
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
@@ -25,7 +25,6 @@
|
|
25
25
|
|
26
26
|
// Create quick reference variables for speed access to core prototypes.
|
27
27
|
var slice = ArrayProto.slice,
|
28
|
-
concat = ArrayProto.concat,
|
29
28
|
unshift = ArrayProto.unshift,
|
30
29
|
toString = ObjProto.toString,
|
31
30
|
hasOwnProperty = ObjProto.hasOwnProperty;
|
@@ -68,7 +67,7 @@
|
|
68
67
|
}
|
69
68
|
|
70
69
|
// Current version.
|
71
|
-
_.VERSION = '1.2.
|
70
|
+
_.VERSION = '1.2.4';
|
72
71
|
|
73
72
|
// Collection Functions
|
74
73
|
// --------------------
|
@@ -102,6 +101,7 @@
|
|
102
101
|
each(obj, function(value, index, list) {
|
103
102
|
results[results.length] = iterator.call(context, value, index, list);
|
104
103
|
});
|
104
|
+
if (obj.length === +obj.length) results.length = obj.length;
|
105
105
|
return results;
|
106
106
|
};
|
107
107
|
|
@@ -218,7 +218,7 @@
|
|
218
218
|
_.invoke = function(obj, method) {
|
219
219
|
var args = slice.call(arguments, 2);
|
220
220
|
return _.map(obj, function(value) {
|
221
|
-
return (method
|
221
|
+
return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
|
222
222
|
});
|
223
223
|
};
|
224
224
|
|
@@ -583,7 +583,7 @@
|
|
583
583
|
// conditionally execute the original function.
|
584
584
|
_.wrap = function(func, wrapper) {
|
585
585
|
return function() {
|
586
|
-
var args = concat.
|
586
|
+
var args = [func].concat(slice.call(arguments, 0));
|
587
587
|
return wrapper.apply(this, args);
|
588
588
|
};
|
589
589
|
};
|
@@ -892,6 +892,11 @@
|
|
892
892
|
escape : /<%-([\s\S]+?)%>/g
|
893
893
|
};
|
894
894
|
|
895
|
+
// When customizing `templateSettings`, if you don't want to define an
|
896
|
+
// interpolation, evaluation or escaping regex, we need one that is
|
897
|
+
// guaranteed not to match.
|
898
|
+
var noMatch = /.^/;
|
899
|
+
|
895
900
|
// JavaScript micro-templating, similar to John Resig's implementation.
|
896
901
|
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
897
902
|
// and correctly escapes quotes within interpolated code.
|
@@ -901,15 +906,16 @@
|
|
901
906
|
'with(obj||{}){__p.push(\'' +
|
902
907
|
str.replace(/\\/g, '\\\\')
|
903
908
|
.replace(/'/g, "\\'")
|
904
|
-
.replace(c.escape, function(match, code) {
|
909
|
+
.replace(c.escape || noMatch, function(match, code) {
|
905
910
|
return "',_.escape(" + code.replace(/\\'/g, "'") + "),'";
|
906
911
|
})
|
907
|
-
.replace(c.interpolate, function(match, code) {
|
912
|
+
.replace(c.interpolate || noMatch, function(match, code) {
|
908
913
|
return "'," + code.replace(/\\'/g, "'") + ",'";
|
909
914
|
})
|
910
|
-
.replace(c.evaluate ||
|
915
|
+
.replace(c.evaluate || noMatch, function(match, code) {
|
911
916
|
return "');" + code.replace(/\\'/g, "'")
|
912
|
-
.replace(/[\r\n\t]/g, ' ')
|
917
|
+
.replace(/[\r\n\t]/g, ' ')
|
918
|
+
.replace(/\\\\/g, '\\') + ";__p.push('";
|
913
919
|
})
|
914
920
|
.replace(/\r/g, '\\r')
|
915
921
|
.replace(/\n/g, '\\n')
|
@@ -922,6 +928,11 @@
|
|
922
928
|
};
|
923
929
|
};
|
924
930
|
|
931
|
+
// Add a "chain" function, which will delegate to the wrapper.
|
932
|
+
_.chain = function(obj) {
|
933
|
+
return _(obj).chain();
|
934
|
+
};
|
935
|
+
|
925
936
|
// The OOP Wrapper
|
926
937
|
// ---------------
|
927
938
|
|
@@ -954,8 +965,11 @@
|
|
954
965
|
each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
|
955
966
|
var method = ArrayProto[name];
|
956
967
|
wrapper.prototype[name] = function() {
|
957
|
-
|
958
|
-
|
968
|
+
var wrapped = this._wrapped;
|
969
|
+
method.apply(wrapped, arguments);
|
970
|
+
var length = wrapped.length;
|
971
|
+
if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
|
972
|
+
return result(wrapped, this._chain);
|
959
973
|
};
|
960
974
|
});
|
961
975
|
|