Spaces:
Runtime error
Runtime error
| // It's actually "debounce" | |
| ; | |
| var isValue = require("es5-ext/object/is-value") | |
| , callable = require("es5-ext/object/valid-callable") | |
| , nextTick = require("next-tick") | |
| , validTimeout = require("./valid-timeout"); | |
| var apply = Function.prototype.apply; | |
| module.exports = function (fn/*, timeout*/) { | |
| var scheduled, run, context, args, delay, timeout = arguments[1], handle; | |
| callable(fn); | |
| if (isValue(timeout)) { | |
| timeout = validTimeout(timeout); | |
| delay = setTimeout; | |
| } else { | |
| delay = nextTick; | |
| } | |
| run = function () { | |
| if (!scheduled) return; // IE8 tends to not clear immediate timeouts properly | |
| scheduled = false; | |
| handle = null; | |
| apply.call(fn, context, args); | |
| context = null; | |
| args = null; | |
| }; | |
| return function () { | |
| if (scheduled) { | |
| if (!isValue(handle)) { | |
| // 'nextTick' based, no room for debounce | |
| return; | |
| } | |
| clearTimeout(handle); | |
| } | |
| scheduled = true; | |
| context = this; | |
| args = arguments; | |
| handle = delay(run, timeout); | |
| }; | |
| }; | |