diff options
author | Andreas Gohr <andi@splitbrain.org> | 2010-08-29 14:22:01 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2010-08-29 14:22:01 +0200 |
commit | 2c053ed58376c6709596ab48fc40dceb90d4e89d (patch) | |
tree | c8d0f78c2f47f373473419396d3c0855ec671eca /lib/scripts/delay.js | |
parent | cb4a07568e84d853fbcd9d5eca37f572fa10786f (diff) | |
parent | 5479a8c3341247ca228026819f20f3ab5c34a80f (diff) | |
download | rpg-2c053ed58376c6709596ab48fc40dceb90d4e89d.tar.gz rpg-2c053ed58376c6709596ab48fc40dceb90d4e89d.tar.bz2 |
Merge branch 'master' into stable
Conflicts:
conf/msg
lib/plugins/acl/ajax.php
Diffstat (limited to 'lib/scripts/delay.js')
-rw-r--r-- | lib/scripts/delay.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/scripts/delay.js b/lib/scripts/delay.js new file mode 100644 index 000000000..2ef9f8846 --- /dev/null +++ b/lib/scripts/delay.js @@ -0,0 +1,69 @@ +/** + * Manage delayed and timed actions + * + * @license GPL2 (http://www.gnu.org/licenses/gpl.html) + * @author Adrian Lang <lang@cosmocode.de> + */ + +/** + * Provide a global callback for window.setTimeout + * + * To get a timeout for non-global functions, just call + * delay.add(func, timeout). + */ +var timer = { + _cur_id: 0, + _handlers: {}, + + execDispatch: function (id) { + timer._handlers[id](); + }, + + add: function (func, timeout) { + var id = ++timer._cur_id; + timer._handlers[id] = func; + return window.setTimeout('timer.execDispatch(' + id + ')', timeout); + } +}; + +/** + * Provide a delayed start + * + * To call a function with a delay, just create a new Delay(func, timeout) and + * call that object’s method “start”. + */ +function Delay (func, timeout) { + this.func = func; + if (timeout) { + this.timeout = timeout; + } +} + +Delay.prototype = { + func: null, + timeout: 500, + + delTimer: function () { + if (this.timer !== null) { + window.clearTimeout(this.timer); + this.timer = null; + } + }, + + start: function () { + this.delTimer(); + var _this = this; + this.timer = timer.add(function () { _this.exec.call(_this); }, + this.timeout); + + this._data = { + _this: arguments[0], + _params: Array.prototype.slice.call(arguments, 2) + }; + }, + + exec: function () { + this.delTimer(); + this.func.call(this._data._this, this._data._params); + } +}; |