lodash.debounce
Advanced tools
Comparing version 4.0.3 to 4.0.4
251
index.js
/** | ||
* lodash 4.0.3 (Custom Build) <https://lodash.com/> | ||
* lodash 4.0.4 (Custom Build) <https://lodash.com/> | ||
* Build: `lodash modularize exports="npm" -o ./` | ||
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> | ||
* Copyright jQuery Foundation and other contributors <https://jquery.org/> | ||
* Released under MIT license <https://lodash.com/license> | ||
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> | ||
* Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors | ||
* Available under MIT license <https://lodash.com/license> | ||
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors | ||
*/ | ||
@@ -18,3 +18,4 @@ | ||
var funcTag = '[object Function]', | ||
genTag = '[object GeneratorFunction]'; | ||
genTag = '[object GeneratorFunction]', | ||
symbolTag = '[object Symbol]'; | ||
@@ -46,3 +47,4 @@ /** Used to match leading and trailing whitespace. */ | ||
/* Built-in method references for those with the same name as other `lodash` methods. */ | ||
var nativeMax = Math.max; | ||
var nativeMax = Math.max, | ||
nativeMin = Math.min; | ||
@@ -55,2 +57,3 @@ /** | ||
* @memberOf _ | ||
* @since 2.4.0 | ||
* @type {Function} | ||
@@ -64,3 +67,3 @@ * @category Date | ||
* }, _.now()); | ||
* // => logs the number of milliseconds it took for the deferred function to be invoked | ||
* // => Logs the number of milliseconds it took for the deferred function to be invoked. | ||
*/ | ||
@@ -88,12 +91,13 @@ var now = Date.now; | ||
* @memberOf _ | ||
* @since 0.1.0 | ||
* @category Function | ||
* @param {Function} func The function to debounce. | ||
* @param {number} [wait=0] The number of milliseconds to delay. | ||
* @param {Object} [options] The options object. | ||
* @param {boolean} [options.leading=false] Specify invoking on the leading | ||
* edge of the timeout. | ||
* @param {number} [options.maxWait] The maximum time `func` is allowed to be | ||
* delayed before it's invoked. | ||
* @param {boolean} [options.trailing=true] Specify invoking on the trailing | ||
* edge of the timeout. | ||
* @param {Object} [options={}] The options object. | ||
* @param {boolean} [options.leading=false] | ||
* Specify invoking on the leading edge of the timeout. | ||
* @param {number} [options.maxWait] | ||
* The maximum time `func` is allowed to be delayed before it's invoked. | ||
* @param {boolean} [options.trailing=true] | ||
* Specify invoking on the trailing edge of the timeout. | ||
* @returns {Function} Returns the new debounced function. | ||
@@ -120,10 +124,8 @@ * @example | ||
function debounce(func, wait, options) { | ||
var args, | ||
maxTimeoutId, | ||
var lastArgs, | ||
lastThis, | ||
result, | ||
stamp, | ||
thisArg, | ||
timeoutId, | ||
trailingCall, | ||
lastCalled = 0, | ||
timerId, | ||
lastCallTime = 0, | ||
lastInvokeTime = 0, | ||
leading = false, | ||
@@ -143,89 +145,91 @@ maxWait = false, | ||
function cancel() { | ||
if (timeoutId) { | ||
clearTimeout(timeoutId); | ||
} | ||
if (maxTimeoutId) { | ||
clearTimeout(maxTimeoutId); | ||
} | ||
lastCalled = 0; | ||
args = maxTimeoutId = thisArg = timeoutId = trailingCall = undefined; | ||
function invokeFunc(time) { | ||
var args = lastArgs, | ||
thisArg = lastThis; | ||
lastArgs = lastThis = undefined; | ||
lastInvokeTime = time; | ||
result = func.apply(thisArg, args); | ||
return result; | ||
} | ||
function complete(isCalled, id) { | ||
if (id) { | ||
clearTimeout(id); | ||
} | ||
maxTimeoutId = timeoutId = trailingCall = undefined; | ||
if (isCalled) { | ||
lastCalled = now(); | ||
result = func.apply(thisArg, args); | ||
if (!timeoutId && !maxTimeoutId) { | ||
args = thisArg = undefined; | ||
} | ||
} | ||
function leadingEdge(time) { | ||
// Reset any `maxWait` timer. | ||
lastInvokeTime = time; | ||
// Start the timer for the trailing edge. | ||
timerId = setTimeout(timerExpired, wait); | ||
// Invoke the leading edge. | ||
return leading ? invokeFunc(time) : result; | ||
} | ||
function delayed() { | ||
var remaining = wait - (now() - stamp); | ||
if (remaining <= 0 || remaining > wait) { | ||
complete(trailingCall, maxTimeoutId); | ||
} else { | ||
timeoutId = setTimeout(delayed, remaining); | ||
function remainingWait(time) { | ||
var timeSinceLastCall = time - lastCallTime, | ||
timeSinceLastInvoke = time - lastInvokeTime, | ||
result = wait - timeSinceLastCall; | ||
return maxWait === false ? result : nativeMin(result, maxWait - timeSinceLastInvoke); | ||
} | ||
function shouldInvoke(time) { | ||
var timeSinceLastCall = time - lastCallTime, | ||
timeSinceLastInvoke = time - lastInvokeTime; | ||
// Either this is the first call, activity has stopped and we're at the | ||
// trailing edge, the system time has gone backwards and we're treating | ||
// it as the trailing edge, or we've hit the `maxWait` limit. | ||
return (!lastCallTime || (timeSinceLastCall >= wait) || | ||
(timeSinceLastCall < 0) || (maxWait !== false && timeSinceLastInvoke >= maxWait)); | ||
} | ||
function timerExpired() { | ||
var time = now(); | ||
if (shouldInvoke(time)) { | ||
return trailingEdge(time); | ||
} | ||
// Restart the timer. | ||
timerId = setTimeout(timerExpired, remainingWait(time)); | ||
} | ||
function flush() { | ||
if ((timeoutId && trailingCall) || (maxTimeoutId && trailing)) { | ||
result = func.apply(thisArg, args); | ||
function trailingEdge(time) { | ||
clearTimeout(timerId); | ||
timerId = undefined; | ||
// Only invoke if we have `lastArgs` which means `func` has been | ||
// debounced at least once. | ||
if (trailing && lastArgs) { | ||
return invokeFunc(time); | ||
} | ||
cancel(); | ||
lastArgs = lastThis = undefined; | ||
return result; | ||
} | ||
function maxDelayed() { | ||
complete(trailing, timeoutId); | ||
function cancel() { | ||
if (timerId !== undefined) { | ||
clearTimeout(timerId); | ||
} | ||
lastCallTime = lastInvokeTime = 0; | ||
lastArgs = lastThis = timerId = undefined; | ||
} | ||
function flush() { | ||
return timerId === undefined ? result : trailingEdge(now()); | ||
} | ||
function debounced() { | ||
args = arguments; | ||
stamp = now(); | ||
thisArg = this; | ||
trailingCall = trailing && (timeoutId || !leading); | ||
var time = now(), | ||
isInvoking = shouldInvoke(time); | ||
if (maxWait === false) { | ||
var leadingCall = leading && !timeoutId; | ||
} else { | ||
if (!lastCalled && !maxTimeoutId && !leading) { | ||
lastCalled = stamp; | ||
} | ||
var remaining = maxWait - (stamp - lastCalled); | ||
lastArgs = arguments; | ||
lastThis = this; | ||
lastCallTime = time; | ||
var isCalled = (remaining <= 0 || remaining > maxWait) && | ||
(leading || maxTimeoutId); | ||
if (isCalled) { | ||
if (maxTimeoutId) { | ||
maxTimeoutId = clearTimeout(maxTimeoutId); | ||
} | ||
lastCalled = stamp; | ||
result = func.apply(thisArg, args); | ||
if (isInvoking) { | ||
if (timerId === undefined) { | ||
return leadingEdge(lastCallTime); | ||
} | ||
else if (!maxTimeoutId) { | ||
maxTimeoutId = setTimeout(maxDelayed, remaining); | ||
} | ||
// Handle invocations in a tight loop. | ||
clearTimeout(timerId); | ||
timerId = setTimeout(timerExpired, wait); | ||
return invokeFunc(lastCallTime); | ||
} | ||
if (isCalled && timeoutId) { | ||
timeoutId = clearTimeout(timeoutId); | ||
} | ||
else if (!timeoutId && wait !== maxWait) { | ||
timeoutId = setTimeout(delayed, wait); | ||
} | ||
if (leadingCall) { | ||
isCalled = true; | ||
result = func.apply(thisArg, args); | ||
} | ||
if (isCalled && !timeoutId && !maxTimeoutId) { | ||
args = thisArg = undefined; | ||
} | ||
return result; | ||
@@ -243,5 +247,7 @@ } | ||
* @memberOf _ | ||
* @since 0.1.0 | ||
* @category Lang | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. | ||
* @returns {boolean} Returns `true` if `value` is correctly classified, | ||
* else `false`. | ||
* @example | ||
@@ -257,4 +263,4 @@ * | ||
// The use of `Object#toString` avoids issues with the `typeof` operator | ||
// in Safari 8 which returns 'object' for typed array constructors, and | ||
// PhantomJS 1.9 which returns 'function' for `NodeList` instances. | ||
// in Safari 8 which returns 'object' for typed array and weak map constructors, | ||
// and PhantomJS 1.9 which returns 'function' for `NodeList` instances. | ||
var tag = isObject(value) ? objectToString.call(value) : ''; | ||
@@ -270,2 +276,3 @@ return tag == funcTag || tag == genTag; | ||
* @memberOf _ | ||
* @since 0.1.0 | ||
* @category Lang | ||
@@ -294,2 +301,53 @@ * @param {*} value The value to check. | ||
/** | ||
* Checks if `value` is object-like. A value is object-like if it's not `null` | ||
* and has a `typeof` result of "object". | ||
* | ||
* @static | ||
* @memberOf _ | ||
* @since 4.0.0 | ||
* @category Lang | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is object-like, else `false`. | ||
* @example | ||
* | ||
* _.isObjectLike({}); | ||
* // => true | ||
* | ||
* _.isObjectLike([1, 2, 3]); | ||
* // => true | ||
* | ||
* _.isObjectLike(_.noop); | ||
* // => false | ||
* | ||
* _.isObjectLike(null); | ||
* // => false | ||
*/ | ||
function isObjectLike(value) { | ||
return !!value && typeof value == 'object'; | ||
} | ||
/** | ||
* Checks if `value` is classified as a `Symbol` primitive or object. | ||
* | ||
* @static | ||
* @memberOf _ | ||
* @since 4.0.0 | ||
* @category Lang | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is correctly classified, | ||
* else `false`. | ||
* @example | ||
* | ||
* _.isSymbol(Symbol.iterator); | ||
* // => true | ||
* | ||
* _.isSymbol('abc'); | ||
* // => false | ||
*/ | ||
function isSymbol(value) { | ||
return typeof value == 'symbol' || | ||
(isObjectLike(value) && objectToString.call(value) == symbolTag); | ||
} | ||
/** | ||
* Converts `value` to a number. | ||
@@ -299,2 +357,3 @@ * | ||
* @memberOf _ | ||
* @since 4.0.0 | ||
* @category Lang | ||
@@ -318,2 +377,8 @@ * @param {*} value The value to process. | ||
function toNumber(value) { | ||
if (typeof value == 'number') { | ||
return value; | ||
} | ||
if (isSymbol(value)) { | ||
return NAN; | ||
} | ||
if (isObject(value)) { | ||
@@ -320,0 +385,0 @@ var other = isFunction(value.valueOf) ? value.valueOf() : value; |
{ | ||
"name": "lodash.debounce", | ||
"version": "4.0.3", | ||
"version": "4.0.4", | ||
"description": "The lodash method `_.debounce` exported as a module.", | ||
@@ -12,3 +12,3 @@ "homepage": "https://lodash.com/", | ||
"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)", | ||
"Blaine Bublitz <blaine@iceddev.com> (https://github.com/phated)", | ||
"Blaine Bublitz <blaine.bublitz@gmail.com> (https://github.com/phated)", | ||
"Mathias Bynens <mathias@qiwi.be> (https://mathiasbynens.be/)" | ||
@@ -15,0 +15,0 @@ ], |
@@ -1,2 +0,2 @@ | ||
# lodash.debounce v4.0.3 | ||
# lodash.debounce v4.0.4 | ||
@@ -18,2 +18,2 @@ The [lodash](https://lodash.com/) method `_.debounce` exported as a [Node.js](https://nodejs.org/) module. | ||
See the [documentation](https://lodash.com/docs#debounce) or [package source](https://github.com/lodash/lodash/blob/4.0.3-npm-packages/lodash.debounce) for more details. | ||
See the [documentation](https://lodash.com/docs#debounce) or [package source](https://github.com/lodash/lodash/blob/4.0.4-npm-packages/lodash.debounce) for more details. |
Sorry, the diff of this file is not supported yet
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license
Found 1 instance in 1 package
14084
350
1
80