mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-10 10:57:49 +00:00
Update vendor/backbone.
Former-commit-id: faf9ed71356e1ae8b5c4f65e7084243571cb7d82
This commit is contained in:
@@ -36,7 +36,8 @@
|
|||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
_.mixin({
|
_.mixin({
|
||||||
'debounce': lodash.debounce
|
'debounce': lodash.debounce,
|
||||||
|
'defer': lodash.defer
|
||||||
});
|
});
|
||||||
if (!_.chain) {
|
if (!_.chain) {
|
||||||
_.mixin({
|
_.mixin({
|
||||||
|
|||||||
42
vendor/backbone/backbone.js
vendored
42
vendor/backbone/backbone.js
vendored
@@ -1,4 +1,4 @@
|
|||||||
// Backbone.js 0.9.9
|
// Backbone.js 0.9.10
|
||||||
|
|
||||||
// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
||||||
// Backbone may be freely distributed under the MIT license.
|
// Backbone may be freely distributed under the MIT license.
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Current version of the library. Keep in sync with `package.json`.
|
// Current version of the library. Keep in sync with `package.json`.
|
||||||
Backbone.VERSION = '0.9.9';
|
Backbone.VERSION = '0.9.10';
|
||||||
|
|
||||||
// Require Underscore, if we're on the server, and it's not already present.
|
// Require Underscore, if we're on the server, and it's not already present.
|
||||||
var _ = root._;
|
var _ = root._;
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
|
|
||||||
// Optimized internal dispatch function for triggering events. Tries to
|
// Optimized internal dispatch function for triggering events. Tries to
|
||||||
// keep the usual cases speedy (most Backbone events have 3 arguments).
|
// keep the usual cases speedy (most Backbone events have 3 arguments).
|
||||||
var triggerEvents = function(obj, events, args) {
|
var triggerEvents = function(events, args) {
|
||||||
var ev, i = -1, l = events.length;
|
var ev, i = -1, l = events.length;
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);
|
case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);
|
||||||
@@ -184,32 +184,33 @@
|
|||||||
if (!eventsApi(this, 'trigger', name, args)) return this;
|
if (!eventsApi(this, 'trigger', name, args)) return this;
|
||||||
var events = this._events[name];
|
var events = this._events[name];
|
||||||
var allEvents = this._events.all;
|
var allEvents = this._events.all;
|
||||||
if (events) triggerEvents(this, events, args);
|
if (events) triggerEvents(events, args);
|
||||||
if (allEvents) triggerEvents(this, allEvents, arguments);
|
if (allEvents) triggerEvents(allEvents, arguments);
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
// An inversion-of-control version of `on`. Tell *this* object to listen to
|
// An inversion-of-control version of `on`. Tell *this* object to listen to
|
||||||
// an event in another object ... keeping track of what it's listening to.
|
// an event in another object ... keeping track of what it's listening to.
|
||||||
listenTo: function(object, events, callback) {
|
listenTo: function(obj, name, callback) {
|
||||||
var listeners = this._listeners || (this._listeners = {});
|
var listeners = this._listeners || (this._listeners = {});
|
||||||
var id = object._listenerId || (object._listenerId = _.uniqueId('l'));
|
var id = obj._listenerId || (obj._listenerId = _.uniqueId('l'));
|
||||||
listeners[id] = object;
|
listeners[id] = obj;
|
||||||
object.on(events, callback || this, this);
|
obj.on(name, typeof name === 'object' ? this : callback, this);
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Tell this object to stop listening to either specific events ... or
|
// Tell this object to stop listening to either specific events ... or
|
||||||
// to every object it's currently listening to.
|
// to every object it's currently listening to.
|
||||||
stopListening: function(object, events, callback) {
|
stopListening: function(obj, name, callback) {
|
||||||
var listeners = this._listeners;
|
var listeners = this._listeners;
|
||||||
if (!listeners) return;
|
if (!listeners) return;
|
||||||
if (object) {
|
if (obj) {
|
||||||
object.off(events, callback, this);
|
obj.off(name, typeof name === 'object' ? this : callback, this);
|
||||||
if (!events && !callback) delete listeners[object._listenerId];
|
if (!name && !callback) delete listeners[obj._listenerId];
|
||||||
} else {
|
} else {
|
||||||
|
if (typeof name === 'object') callback = this;
|
||||||
for (var id in listeners) {
|
for (var id in listeners) {
|
||||||
listeners[id].off(null, null, this);
|
listeners[id].off(name, callback, this);
|
||||||
}
|
}
|
||||||
this._listeners = {};
|
this._listeners = {};
|
||||||
}
|
}
|
||||||
@@ -465,7 +466,7 @@
|
|||||||
|
|
||||||
// Finish configuring and sending the Ajax request.
|
// Finish configuring and sending the Ajax request.
|
||||||
method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');
|
method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');
|
||||||
if (method == 'patch') options.attrs = attrs;
|
if (method === 'patch') options.attrs = attrs;
|
||||||
xhr = this.sync(method, this, options);
|
xhr = this.sync(method, this, options);
|
||||||
|
|
||||||
// Restore attributes.
|
// Restore attributes.
|
||||||
@@ -532,8 +533,8 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Run validation against the next complete set of model attributes,
|
// Run validation against the next complete set of model attributes,
|
||||||
// returning `true` if all is well. Otherwise, fire a general
|
// returning `true` if all is well. Otherwise, fire an
|
||||||
// `"error"` event and call the error callback, if specified.
|
// `"invalid"` event and call the invalid callback, if specified.
|
||||||
_validate: function(attrs, options) {
|
_validate: function(attrs, options) {
|
||||||
if (!options.validate || !this.validate) return true;
|
if (!options.validate || !this.validate) return true;
|
||||||
attrs = _.extend({}, this.attributes, attrs);
|
attrs = _.extend({}, this.attributes, attrs);
|
||||||
@@ -555,7 +556,6 @@
|
|||||||
options || (options = {});
|
options || (options = {});
|
||||||
if (options.model) this.model = options.model;
|
if (options.model) this.model = options.model;
|
||||||
if (options.comparator !== void 0) this.comparator = options.comparator;
|
if (options.comparator !== void 0) this.comparator = options.comparator;
|
||||||
this.models = [];
|
|
||||||
this._reset();
|
this._reset();
|
||||||
this.initialize.apply(this, arguments);
|
this.initialize.apply(this, arguments);
|
||||||
if (models) this.reset(models, _.extend({silent: true}, options));
|
if (models) this.reset(models, _.extend({silent: true}, options));
|
||||||
@@ -590,7 +590,7 @@
|
|||||||
var i, l, model, attrs, existing, doSort, add, at, sort, sortAttr;
|
var i, l, model, attrs, existing, doSort, add, at, sort, sortAttr;
|
||||||
add = [];
|
add = [];
|
||||||
at = options.at;
|
at = options.at;
|
||||||
sort = this.comparator && (at == null) && options.sort != false;
|
sort = this.comparator && (at == null) && options.sort !== false;
|
||||||
sortAttr = _.isString(this.comparator) ? this.comparator : null;
|
sortAttr = _.isString(this.comparator) ? this.comparator : null;
|
||||||
|
|
||||||
// Turn bare objects into model references, and prevent invalid models
|
// Turn bare objects into model references, and prevent invalid models
|
||||||
@@ -796,7 +796,7 @@
|
|||||||
for (var i = 0, l = this.models.length; i < l; i++) {
|
for (var i = 0, l = this.models.length; i < l; i++) {
|
||||||
this._removeReference(this.models[i]);
|
this._removeReference(this.models[i]);
|
||||||
}
|
}
|
||||||
options.previousModels = this.models.slice();
|
options.previousModels = this.models;
|
||||||
this._reset();
|
this._reset();
|
||||||
if (models) this.add(models, _.extend({silent: true}, options));
|
if (models) this.add(models, _.extend({silent: true}, options));
|
||||||
if (!options.silent) this.trigger('reset', this, options);
|
if (!options.silent) this.trigger('reset', this, options);
|
||||||
@@ -849,7 +849,7 @@
|
|||||||
// Reset all internal state. Called when the collection is reset.
|
// Reset all internal state. Called when the collection is reset.
|
||||||
_reset: function() {
|
_reset: function() {
|
||||||
this.length = 0;
|
this.length = 0;
|
||||||
this.models.length = 0;
|
this.models = [];
|
||||||
this._byId = {};
|
this._byId = {};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
21
vendor/backbone/test/collection.js
vendored
21
vendor/backbone/test/collection.js
vendored
@@ -511,7 +511,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
test("reset", 10, function() {
|
test("reset", 10, function() {
|
||||||
var resetCount = 0;
|
var resetCount = 0;
|
||||||
var models = col.models.slice();
|
var models = col.models;
|
||||||
col.on('reset', function() { resetCount += 1; });
|
col.on('reset', function() { resetCount += 1; });
|
||||||
col.reset([]);
|
col.reset([]);
|
||||||
equal(resetCount, 1);
|
equal(resetCount, 1);
|
||||||
@@ -675,13 +675,28 @@ $(document).ready(function() {
|
|||||||
col.create(m, opts);
|
col.create(m, opts);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1412 - Trigger 'sync' event.", 2, function() {
|
test("#1412 - Trigger 'request' and 'sync' events.", 4, function() {
|
||||||
var collection = new Backbone.Collection;
|
var collection = new Backbone.Collection;
|
||||||
collection.url = '/test';
|
collection.url = '/test';
|
||||||
collection.on('sync', function() { ok(true); });
|
|
||||||
Backbone.ajax = function(settings){ settings.success(); };
|
Backbone.ajax = function(settings){ settings.success(); };
|
||||||
|
|
||||||
|
collection.on('request', function(obj, xhr, options) {
|
||||||
|
ok(obj === collection, "collection has correct 'request' event after fetching");
|
||||||
|
});
|
||||||
|
collection.on('sync', function(obj, response, options) {
|
||||||
|
ok(obj === collection, "collection has correct 'sync' event after fetching");
|
||||||
|
});
|
||||||
collection.fetch();
|
collection.fetch();
|
||||||
|
collection.off();
|
||||||
|
|
||||||
|
collection.on('request', function(obj, xhr, options) {
|
||||||
|
ok(obj === collection.get(1), "collection has correct 'request' event after one of its models save");
|
||||||
|
});
|
||||||
|
collection.on('sync', function(obj, response, options) {
|
||||||
|
ok(obj === collection.get(1), "collection has correct 'sync' event after one of its models save");
|
||||||
|
});
|
||||||
collection.create({id: 1});
|
collection.create({id: 1});
|
||||||
|
collection.off();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("#1447 - create with wait adds model.", 1, function() {
|
test("#1447 - create with wait adds model.", 1, function() {
|
||||||
|
|||||||
32
vendor/backbone/test/events.js
vendored
32
vendor/backbone/test/events.js
vendored
@@ -76,14 +76,29 @@ $(document).ready(function() {
|
|||||||
b.trigger('anything');
|
b.trigger('anything');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo and stopListening with event maps", 1, function() {
|
test("listenTo and stopListening with event maps", 4, function() {
|
||||||
var a = _.extend({}, Backbone.Events);
|
var a = _.extend({}, Backbone.Events);
|
||||||
var b = _.extend({}, Backbone.Events);
|
var b = _.extend({}, Backbone.Events);
|
||||||
a.listenTo(b, {change: function(){ ok(true); }});
|
var cb = function(){ ok(true); };
|
||||||
b.trigger('change');
|
a.listenTo(b, {event: cb});
|
||||||
a.listenTo(b, {change: function(){ ok(false); }});
|
b.trigger('event');
|
||||||
|
a.listenTo(b, {event2: cb});
|
||||||
|
b.on('event2', cb);
|
||||||
|
a.stopListening(b, {event2: cb});
|
||||||
|
b.trigger('event event2');
|
||||||
a.stopListening();
|
a.stopListening();
|
||||||
b.trigger('change');
|
b.trigger('event event2');
|
||||||
|
});
|
||||||
|
|
||||||
|
test("stopListening with omitted args", 2, function () {
|
||||||
|
var a = _.extend({}, Backbone.Events);
|
||||||
|
var b = _.extend({}, Backbone.Events);
|
||||||
|
var cb = function () { ok(true); };
|
||||||
|
a.listenTo(b, 'event', cb);
|
||||||
|
b.on('event', cb);
|
||||||
|
a.listenTo(b, 'event2', cb);
|
||||||
|
a.stopListening(null, {event: cb});
|
||||||
|
b.trigger('event event2');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("listenTo yourself", 1, function(){
|
test("listenTo yourself", 1, function(){
|
||||||
@@ -100,6 +115,13 @@ $(document).ready(function() {
|
|||||||
e.trigger("foo");
|
e.trigger("foo");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("listenTo with empty callback doesn't throw an error", 1, function(){
|
||||||
|
var e = _.extend({}, Backbone.Events);
|
||||||
|
e.listenTo(e, "foo", null);
|
||||||
|
e.trigger("foo");
|
||||||
|
ok(true);
|
||||||
|
});
|
||||||
|
|
||||||
test("trigger all for each event", 3, function() {
|
test("trigger all for each event", 3, function() {
|
||||||
var a, b, obj = { counter: 0 };
|
var a, b, obj = { counter: 0 };
|
||||||
_.extend(obj, Backbone.Events);
|
_.extend(obj, Backbone.Events);
|
||||||
|
|||||||
Reference in New Issue
Block a user