Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var Timer = function (a, b) {
- return this._init(a, b)
- };
- Timer.prototype = {
- VERSION: 1,
- _init: function (a, b) {
- this._interval = 1000;
- this._timer = null;
- this._cbs = [];
- this._multipliers = [];
- this._tickCounts = [];
- this._canRun = [];
- this._stoppedThreads = 0;
- this._runOnce = false;
- this._startedAt = -1;
- this._pausedAt = -1;
- if (typeof (a) == "number") {
- this._interval = a
- }
- this.addCallback(b);
- return this
- },
- _preset: function () {
- this._stoppedThreads = 0;
- this._startedAt = -1;
- this._pausedAt = -1;
- for (var a = 0; a < this._cbs.length; a++) {
- this._canRun[a] = true;
- this._tickCounts[a] = 0
- }
- },
- _ticks: function (b) {
- var c = this;
- for (var a = 0; a < this._cbs.length; a++) {
- if (typeof (this._cbs[a]) == "function" && this._canRun[a]) {
- this._tickCounts[a]++;
- if (this._tickCounts[a] == this._multipliers[a]) {
- this._tickCounts[a] = 0;
- if (this.runOnce()) {
- this._canRun[a] = false;
- this._stoppedThreads++
- }
- window.setTimeout(c._cbs[a], 0)
- }
- }
- }
- if (this.runOnce() && this._stoppedThreads == this._cbs.length) {
- this.stop()
- }
- if (typeof (b) == "number") {
- this.stop().start(null, true)
- }
- },
- runOnce: function (a) {
- if (typeof (a) == "undefined") {
- return this._runOnce
- } else {
- if (typeof (a) == "boolean") {
- this._runOnce = a
- } else {
- alert("Invalid argument for runOnce(...).\n\nUsage: runOnce(true | false) /*Default value: false*/\nor, runOnce() to get status")
- }
- }
- return this
- },
- interval: function (a) {
- if (typeof (a) == "undefined") {
- return this._interval
- } else {
- if (typeof (a) == "number") {
- this._interval = Math.floor(a)
- }
- }
- return this
- },
- stop: function (a) {
- if (this._timer) {
- if (!a) {
- this._pausedAt = -1
- }
- try {
- window.clearInterval(this._timer)
- } catch (b) {}
- this._timer = null
- }
- return this
- },
- isStopped: function () {
- return ((this._timer == null) && !this.isPaused())
- },
- start: function (c, a) {
- if (this.isPaused()) {
- return this.resume()
- }
- if (!this.isStopped()) {
- return this
- }
- if (!a) {
- this._preset()
- }
- var b = this._interval;
- if (typeof (c) == "number") {
- b = c
- }
- var d = this;
- this._timer = window.setInterval(function () {
- d._ticks(c)
- }, b);
- this._startedAt = (new Date()).getTime();
- this._startedAt -= (this._interval - b);
- return this
- },
- pause: function () {
- if (this._timer) {
- this._pausedAt = (new Date()).getTime();
- this.stop(true)
- }
- return this
- },
- isPaused: function () {
- return (this._pausedAt >= 0)
- },
- resume: function () {
- if (this.isPaused()) {
- var a = this._interval - ((this._pausedAt - this._startedAt) % this._interval);
- this._pausedAt = -1;
- this.start(a, true)
- }
- return this
- },
- restart: function () {
- return this.stop().start()
- },
- addCallback: function (b, a) {
- if (typeof (b) == "function") {
- this._cbs.push(b);
- if (typeof (a) == "number") {
- a = Math.floor(a);
- this._multipliers.push((a < 1 ? 1 : a))
- } else {
- this._multipliers.push(1)
- }
- this._tickCounts.push(0);
- this._canRun.push(true)
- }
- return this
- },
- clearCallbacks: function () {
- this._cbs.length = 0;
- this._multipliers.length = 0;
- this._canRun.length = 0;
- this._tickCounts.length = 0;
- this._stoppedThreads = 0;
- return this
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement