mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 10:07:48 +00:00
Update vendors, minified builds, and rebuild docs.
Former-commit-id: 9be99ca3c78a1a35fd13138398c48ab4a4b35f11
This commit is contained in:
49
vendor/backbone/backbone.js
vendored
49
vendor/backbone/backbone.js
vendored
@@ -142,7 +142,7 @@
|
||||
|
||||
// Remove one or many callbacks. If `context` is null, removes all
|
||||
// callbacks with that function. If `callback` is null, removes all
|
||||
// callbacks for the event. If `events` is null, removes all bound
|
||||
// callbacks for the event. If `name` is null, removes all bound
|
||||
// callbacks for all events.
|
||||
off: function(name, callback, context) {
|
||||
var list, ev, events, names, i, l, j, k;
|
||||
@@ -425,7 +425,7 @@
|
||||
// If the server returns an attributes hash that differs, the model's
|
||||
// state will be `set` again.
|
||||
save: function(key, val, options) {
|
||||
var attrs, model, success, method, xhr, attributes = this.attributes;
|
||||
var attrs, success, method, xhr, attributes = this.attributes;
|
||||
|
||||
// Handle both `"key", value` and `{key: value}` -style arguments.
|
||||
if (key == null || typeof key === 'object') {
|
||||
@@ -450,6 +450,7 @@
|
||||
|
||||
// After a successful server-side save, the client is (optionally)
|
||||
// updated with the server-side state.
|
||||
if (options.parse === void 0) options.parse = true;
|
||||
success = options.success;
|
||||
options.success = function(model, resp, options) {
|
||||
// Ensure attributes are restored during synchronous saves.
|
||||
@@ -554,6 +555,7 @@
|
||||
options || (options = {});
|
||||
if (options.model) this.model = options.model;
|
||||
if (options.comparator !== void 0) this.comparator = options.comparator;
|
||||
this.models = [];
|
||||
this._reset();
|
||||
this.initialize.apply(this, arguments);
|
||||
if (models) this.reset(models, _.extend({silent: true}, options));
|
||||
@@ -585,21 +587,19 @@
|
||||
add: function(models, options) {
|
||||
models = _.isArray(models) ? models.slice() : [models];
|
||||
options || (options = {});
|
||||
var i, l, model, attrs, existing, sort, doSort, sortAttr, at, add;
|
||||
var i, l, model, attrs, existing, doSort, add, at, sort, sortAttr;
|
||||
add = [];
|
||||
at = options.at;
|
||||
sort = this.comparator && (at == null) && (options.sort == null || options.sort);
|
||||
sort = this.comparator && (at == null) && options.sort != false;
|
||||
sortAttr = _.isString(this.comparator) ? this.comparator : null;
|
||||
|
||||
// Turn bare objects into model references, and prevent invalid models
|
||||
// from being added.
|
||||
for (i = 0, l = models.length; i < l; i++) {
|
||||
attrs = models[i];
|
||||
if(!(model = this._prepareModel(attrs, options))) {
|
||||
if (!(model = this._prepareModel(attrs = models[i], options))) {
|
||||
this.trigger('invalid', this, attrs, options);
|
||||
continue;
|
||||
}
|
||||
models[i] = model;
|
||||
|
||||
// If a duplicate is found, prevent it from being added and
|
||||
// optionally merge it into the existing model.
|
||||
@@ -796,7 +796,7 @@
|
||||
for (var i = 0, l = this.models.length; i < l; i++) {
|
||||
this._removeReference(this.models[i]);
|
||||
}
|
||||
options.previousModels = this.models;
|
||||
options.previousModels = this.models.slice();
|
||||
this._reset();
|
||||
if (models) this.add(models, _.extend({silent: true}, options));
|
||||
if (!options.silent) this.trigger('reset', this, options);
|
||||
@@ -804,8 +804,8 @@
|
||||
},
|
||||
|
||||
// Fetch the default set of models for this collection, resetting the
|
||||
// collection when they arrive. If `add: true` is passed, appends the
|
||||
// models to the collection instead of resetting.
|
||||
// collection when they arrive. If `update: true` is passed, the response
|
||||
// data will be passed through the `update` method instead of `reset`.
|
||||
fetch: function(options) {
|
||||
options = options ? _.clone(options) : {};
|
||||
if (options.parse === void 0) options.parse = true;
|
||||
@@ -823,10 +823,9 @@
|
||||
// wait for the server to agree.
|
||||
create: function(model, options) {
|
||||
options = options ? _.clone(options) : {};
|
||||
model = this._prepareModel(model, options);
|
||||
if (!(model = this._prepareModel(model, options))) return false;
|
||||
if (!options.wait) this.add(model, options);
|
||||
var collection = this;
|
||||
if (!model) return false;
|
||||
if (!options.wait) collection.add(model, options);
|
||||
var success = options.success;
|
||||
options.success = function(model, resp, options) {
|
||||
if (options.wait) collection.add(model, options);
|
||||
@@ -847,17 +846,10 @@
|
||||
return new this.constructor(this.models);
|
||||
},
|
||||
|
||||
// Proxy to _'s chain. Can't be proxied the same way the rest of the
|
||||
// underscore methods are proxied because it relies on the underscore
|
||||
// constructor.
|
||||
chain: function() {
|
||||
return _(this.models).chain();
|
||||
},
|
||||
|
||||
// Reset all internal state. Called when the collection is reset.
|
||||
_reset: function() {
|
||||
this.length = 0;
|
||||
this.models = [];
|
||||
this.models.length = 0;
|
||||
this._byId = {};
|
||||
},
|
||||
|
||||
@@ -892,6 +884,14 @@
|
||||
if (model.id != null) this._byId[model.id] = model;
|
||||
}
|
||||
this.trigger.apply(this, arguments);
|
||||
},
|
||||
|
||||
sortedIndex: function (model, value, context) {
|
||||
value || (value = this.comparator);
|
||||
var iterator = _.isFunction(value) ? value : function(model) {
|
||||
return model.get(value);
|
||||
};
|
||||
return _.sortedIndex(this.models, model, iterator, context);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -900,9 +900,9 @@
|
||||
var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl',
|
||||
'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',
|
||||
'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke',
|
||||
'max', 'min', 'sortedIndex', 'toArray', 'size', 'first', 'head', 'take',
|
||||
'initial', 'rest', 'tail', 'drop', 'last', 'without', 'indexOf', 'shuffle',
|
||||
'lastIndexOf', 'isEmpty'];
|
||||
'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest',
|
||||
'tail', 'drop', 'last', 'without', 'indexOf', 'shuffle', 'lastIndexOf',
|
||||
'isEmpty', 'chain'];
|
||||
|
||||
// Mix in each Underscore method as a proxy to `Collection#models`.
|
||||
_.each(methods, function(method) {
|
||||
@@ -965,6 +965,7 @@
|
||||
var args = this._extractParameters(route, fragment);
|
||||
callback && callback.apply(this, args);
|
||||
this.trigger.apply(this, ['route:' + name].concat(args));
|
||||
this.trigger('route', name, args);
|
||||
Backbone.history.trigger('route', this, name, args);
|
||||
}, this));
|
||||
return this;
|
||||
|
||||
14
vendor/backbone/test/collection.js
vendored
14
vendor/backbone/test/collection.js
vendored
@@ -497,9 +497,21 @@ $(document).ready(function() {
|
||||
[4, 0]);
|
||||
});
|
||||
|
||||
test("sortedIndex", function () {
|
||||
var model = new Backbone.Model({key: 2});
|
||||
var collection = new (Backbone.Collection.extend({
|
||||
comparator: 'key'
|
||||
}))([model, {key: 1}]);
|
||||
equal(collection.sortedIndex(model), 1);
|
||||
equal(collection.sortedIndex(model, 'key'), 1);
|
||||
equal(collection.sortedIndex(model, function (model) {
|
||||
return model.get('key');
|
||||
}), 1);
|
||||
});
|
||||
|
||||
test("reset", 10, function() {
|
||||
var resetCount = 0;
|
||||
var models = col.models;
|
||||
var models = col.models.slice();
|
||||
col.on('reset', function() { resetCount += 1; });
|
||||
col.reset([]);
|
||||
equal(resetCount, 1);
|
||||
|
||||
14
vendor/backbone/test/events.js
vendored
14
vendor/backbone/test/events.js
vendored
@@ -86,6 +86,20 @@ $(document).ready(function() {
|
||||
b.trigger('change');
|
||||
});
|
||||
|
||||
test("listenTo yourself", 1, function(){
|
||||
var e = _.extend({}, Backbone.Events);
|
||||
e.listenTo(e, "foo", function(){ ok(true); });
|
||||
e.trigger("foo");
|
||||
});
|
||||
|
||||
test("listenTo yourself cleans yourself up with stopListening", 1, function(){
|
||||
var e = _.extend({}, Backbone.Events);
|
||||
e.listenTo(e, "foo", function(){ ok(true); });
|
||||
e.trigger("foo");
|
||||
e.stopListening();
|
||||
e.trigger("foo");
|
||||
});
|
||||
|
||||
test("trigger all for each event", 3, function() {
|
||||
var a, b, obj = { counter: 0 };
|
||||
_.extend(obj, Backbone.Events);
|
||||
|
||||
7
vendor/backbone/test/model.js
vendored
7
vendor/backbone/test/model.js
vendored
@@ -734,6 +734,13 @@ $(document).ready(function() {
|
||||
model.save({x: 1}, {wait: true});
|
||||
});
|
||||
|
||||
test("save turns on parse flag", function () {
|
||||
var Model = Backbone.Model.extend({
|
||||
sync: function(method, model, options) { ok(options.parse); }
|
||||
});
|
||||
new Model().save();
|
||||
});
|
||||
|
||||
test("nested `set` during `'change:attr'`", 2, function() {
|
||||
var events = [];
|
||||
var model = new Backbone.Model();
|
||||
|
||||
13
vendor/backbone/test/router.js
vendored
13
vendor/backbone/test/router.js
vendored
@@ -69,6 +69,7 @@ $(document).ready(function() {
|
||||
"contacts": "contacts",
|
||||
"contacts/new": "newContact",
|
||||
"contacts/:id": "loadContact",
|
||||
"route-event/:arg": "routeEvent",
|
||||
"optional(/:item)": "optionalItem",
|
||||
"named/optional/(y:z)": "namedOptional",
|
||||
"splat/*args/end": "splat",
|
||||
@@ -132,6 +133,9 @@ $(document).ready(function() {
|
||||
|
||||
namedOptional: function(z) {
|
||||
this.z = z;
|
||||
},
|
||||
|
||||
routeEvent: function(arg) {
|
||||
}
|
||||
|
||||
});
|
||||
@@ -516,4 +520,13 @@ $(document).ready(function() {
|
||||
strictEqual(router.z, '123');
|
||||
});
|
||||
|
||||
test("#2062 - Trigger 'route' event on router instance.", 2, function() {
|
||||
router.on('route', function(name, args) {
|
||||
strictEqual(name, 'routeEvent');
|
||||
deepEqual(args, ['x']);
|
||||
});
|
||||
location.replace('http://example.com#route-event/x');
|
||||
Backbone.history.checkUrl();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
2
vendor/underscore/underscore-min.js
vendored
2
vendor/underscore/underscore-min.js
vendored
File diff suppressed because one or more lines are too long
3
vendor/underscore/underscore.js
vendored
3
vendor/underscore/underscore.js
vendored
@@ -224,8 +224,9 @@
|
||||
// Invoke a method (with arguments) on every item in a collection.
|
||||
_.invoke = function(obj, method) {
|
||||
var args = slice.call(arguments, 2);
|
||||
var isFunc = _.isFunction(method);
|
||||
return _.map(obj, function(value) {
|
||||
return (_.isFunction(method) ? method : value[method]).apply(value, args);
|
||||
return (isFunc ? method : value[method]).apply(value, args);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user