mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 10:07:48 +00:00
Sync _.isFinite changes with Underscore and update vendor/underscore and vendor/backbone.
Former-commit-id: 9acb93a276a11da8186da76bd82f1fd6f89c27dd
This commit is contained in:
32
vendor/backbone/backbone.js
vendored
32
vendor/backbone/backbone.js
vendored
@@ -10,7 +10,7 @@
|
||||
// Initial Setup
|
||||
// -------------
|
||||
|
||||
// Save a reference to the global object (`window` in the browser, `global`
|
||||
// Save a reference to the global object (`window` in the browser, `exports`
|
||||
// on the server).
|
||||
var root = this;
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
var defaults;
|
||||
var attrs = attributes || {};
|
||||
if (options && options.collection) this.collection = options.collection;
|
||||
if (options && options.parse) attributes = this.parse(attributes);
|
||||
if (options && options.parse) attrs = this.parse(attrs);
|
||||
if (defaults = _.result(this, 'defaults')) {
|
||||
attrs = _.extend({}, defaults, attrs);
|
||||
}
|
||||
@@ -946,12 +946,10 @@
|
||||
// routes can be defined at the bottom of the route map.
|
||||
_bindRoutes: function() {
|
||||
if (!this.routes) return;
|
||||
var routes = [];
|
||||
for (var route in this.routes) {
|
||||
routes.unshift([route, this.routes[route]]);
|
||||
}
|
||||
for (var i = 0, l = routes.length; i < l; i++) {
|
||||
this.route(routes[i][0], routes[i][1], this[routes[i][1]]);
|
||||
var route, routes = _.keys(this.routes);
|
||||
while ((route = routes.pop()) != null) {
|
||||
var name = this.routes[route];
|
||||
this.route(route, name, this[name]);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1393,14 +1391,14 @@
|
||||
|
||||
// For older servers, emulate HTTP by mimicking the HTTP method with `_method`
|
||||
// And an `X-HTTP-Method-Override` header.
|
||||
if (Backbone.emulateHTTP) {
|
||||
if (type === 'PUT' || type === 'DELETE') {
|
||||
if (Backbone.emulateJSON) params.data._method = type;
|
||||
params.type = 'POST';
|
||||
params.beforeSend = function(xhr) {
|
||||
xhr.setRequestHeader('X-HTTP-Method-Override', type);
|
||||
};
|
||||
}
|
||||
if (Backbone.emulateHTTP && (type === 'PUT' || type === 'DELETE')) {
|
||||
params.type = 'POST';
|
||||
if (Backbone.emulateJSON) params.data._method = type;
|
||||
var beforeSend = options.beforeSend;
|
||||
options.beforeSend = function(xhr) {
|
||||
xhr.setRequestHeader('X-HTTP-Method-Override', type);
|
||||
if (beforeSend) return beforeSend.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
// Don't process data on a non-GET request.
|
||||
@@ -1469,7 +1467,7 @@
|
||||
};
|
||||
|
||||
// Set up inheritance for the model, collection, router, and view.
|
||||
Model.extend = Collection.extend = Router.extend = View.extend = extend;
|
||||
Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;
|
||||
|
||||
// Throw an error when a URL is needed, and none is supplied.
|
||||
var urlError = function() {
|
||||
|
||||
11
vendor/backbone/test/model.js
vendored
11
vendor/backbone/test/model.js
vendored
@@ -55,6 +55,17 @@ $(document).ready(function() {
|
||||
equal(model.get('value'), 2);
|
||||
});
|
||||
|
||||
test("parse can return null", 1, function() {
|
||||
var Model = Backbone.Model.extend({
|
||||
parse: function(obj) {
|
||||
obj.value += 1;
|
||||
return null;
|
||||
}
|
||||
});
|
||||
var model = new Model({value: 1}, {parse: true});
|
||||
equal(JSON.stringify(model.toJSON()), "{}");
|
||||
});
|
||||
|
||||
test("url", 3, function() {
|
||||
doc.urlRoot = null;
|
||||
equal(doc.url(), '/collection/1-the-tempest');
|
||||
|
||||
11
vendor/backbone/test/router.js
vendored
11
vendor/backbone/test/router.js
vendored
@@ -481,4 +481,15 @@ $(document).ready(function() {
|
||||
});
|
||||
});
|
||||
|
||||
test("#1746 - Router allows empty route.", 1, function() {
|
||||
var Router = Backbone.Router.extend({
|
||||
routes: {'': 'empty'},
|
||||
empty: function(){},
|
||||
route: function(route){
|
||||
strictEqual(route, '');
|
||||
}
|
||||
});
|
||||
new Router;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
24
vendor/backbone/test/sync.js
vendored
24
vendor/backbone/test/sync.js
vendored
@@ -17,6 +17,11 @@ $(document).ready(function() {
|
||||
Environment.prototype.setup.apply(this, arguments);
|
||||
library = new Library;
|
||||
library.create(attrs, {wait: false});
|
||||
},
|
||||
|
||||
teardown: function() {
|
||||
Environment.prototype.teardown.apply(this, arguments);
|
||||
Backbone.emulateHTTP = false;
|
||||
}
|
||||
|
||||
}));
|
||||
@@ -157,4 +162,23 @@ $(document).ready(function() {
|
||||
this.ajaxSettings.error();
|
||||
});
|
||||
|
||||
test("#1756 - Call user provided beforeSend function.", 4, function() {
|
||||
Backbone.emulateHTTP = true;
|
||||
var model = new Backbone.Model;
|
||||
model.url = '/test';
|
||||
var xhr = {
|
||||
setRequestHeader: function(header, value) {
|
||||
strictEqual(header, 'X-HTTP-Method-Override');
|
||||
strictEqual(value, 'DELETE');
|
||||
}
|
||||
};
|
||||
model.sync('delete', model, {
|
||||
beforeSend: function(_xhr) {
|
||||
ok(_xhr === xhr);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
strictEqual(this.ajaxSettings.beforeSend(xhr), false);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
41
vendor/benchmark.js/benchmark.js
vendored
41
vendor/benchmark.js/benchmark.js
vendored
@@ -320,6 +320,7 @@
|
||||
/** Math shortcuts */
|
||||
var abs = Math.abs,
|
||||
floor = Math.floor,
|
||||
log = Math.log,
|
||||
max = Math.max,
|
||||
min = Math.min,
|
||||
pow = Math.pow,
|
||||
@@ -945,6 +946,20 @@
|
||||
(/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the geometric mean (log-average) of a sample.
|
||||
* See http://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_arithmetic_mean_of_logarithms.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} sample The sample.
|
||||
* @returns {Number} The geometric mean.
|
||||
*/
|
||||
function getGeometricMean(sample) {
|
||||
return pow(Math.E, reduce(sample, function(sum, x) {
|
||||
return sum + log(x);
|
||||
}) / sample.length) || 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the arithmetic mean of a sample.
|
||||
*
|
||||
@@ -953,9 +968,9 @@
|
||||
* @returns {Number} The mean.
|
||||
*/
|
||||
function getMean(sample) {
|
||||
return reduce(sample, function(sum, x) {
|
||||
return (reduce(sample, function(sum, x) {
|
||||
return sum + x;
|
||||
}) / sample.length || 0;
|
||||
}) / sample.length) || 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2076,6 +2091,10 @@
|
||||
event.aborted = me.aborted;
|
||||
},
|
||||
'onComplete': function(event) {
|
||||
me.score = getGeometricMean(map(me, function(bench) {
|
||||
return bench.reference / (bench.times.period * 1e6);
|
||||
})) || 0;
|
||||
|
||||
me.running = false;
|
||||
me.emit(event);
|
||||
}
|
||||
@@ -3169,7 +3188,15 @@
|
||||
* @memberOf Benchmark.options
|
||||
* @type Function
|
||||
*/
|
||||
'onStart': undefined
|
||||
'onStart': undefined,
|
||||
|
||||
/**
|
||||
* The reference time taken to execute the test once (usecs).
|
||||
*
|
||||
* @memberOf Benchmark.options
|
||||
* @type Number
|
||||
*/
|
||||
'reference': 0
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -3726,6 +3753,14 @@
|
||||
*/
|
||||
'length': 0,
|
||||
|
||||
/**
|
||||
* A score computed using the normalized result of each benchmark in the suite.
|
||||
*
|
||||
* @memberOf Benchmark.Suite
|
||||
* @type Number
|
||||
*/
|
||||
'score': 0,
|
||||
|
||||
/**
|
||||
* A flag to indicate if the suite is aborted.
|
||||
*
|
||||
|
||||
4
vendor/underscore/test/objects.js
vendored
4
vendor/underscore/test/objects.js
vendored
@@ -485,7 +485,9 @@ $(document).ready(function() {
|
||||
ok(!_.isFinite(NaN), 'NaN is not Finite');
|
||||
ok(!_.isFinite(Infinity), 'Infinity is not Finite');
|
||||
ok(!_.isFinite(-Infinity), '-Infinity is not Finite');
|
||||
ok(!_.isFinite('12'), 'Strings are not numbers');
|
||||
ok(_.isFinite('12'), 'Numeric strings are numbers');
|
||||
ok(!_.isFinite('1a'), 'Non numeric strings are not numbers');
|
||||
ok(!_.isFinite(''), 'Empty strings are not numbers');
|
||||
var obj = new Number(5);
|
||||
ok(_.isFinite(obj), 'Number instances can be finite');
|
||||
ok(_.isFinite(0), '0 is Finite');
|
||||
|
||||
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
2
vendor/underscore/underscore.js
vendored
2
vendor/underscore/underscore.js
vendored
@@ -951,7 +951,7 @@
|
||||
|
||||
// Is a given object a finite number?
|
||||
_.isFinite = function(obj) {
|
||||
return _.isNumber(obj) && isFinite(obj);
|
||||
return isFinite( obj ) && !isNaN( parseFloat(obj) );
|
||||
};
|
||||
|
||||
// Is the given value `NaN`? (NaN is the only number which does not equal itself).
|
||||
|
||||
Reference in New Issue
Block a user