Skip to content
This repository has been archived by the owner on Jun 17, 2023. It is now read-only.

Commit

Permalink
Oops, don’t overwrite d3-timer 0.3.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Feb 19, 2016
1 parent 09201f5 commit 536b0ad
Show file tree
Hide file tree
Showing 4 changed files with 155 additions and 25 deletions.
32 changes: 8 additions & 24 deletions d3-timer.v0.3.js
Expand Up @@ -57,6 +57,12 @@
return t;
}

function timerOnce(callback, delay, time) {
var t = new Timer;
t.restart(function(elapsed) { t.stop(); callback(elapsed); }, delay, time);
return t;
}

function timerFlush() {
now(); // Get the current time, if not already set.
++frame; // Pretend we’ve set an alarm, if we haven’t already.
Expand Down Expand Up @@ -112,34 +118,12 @@
}
}

function timeout$1(callback, delay, time) {
var t = new Timer;
delay = delay == null ? 0 : +delay;
t.restart(function(elapsed) {
t.stop();
callback(elapsed + delay);
}, delay, time);
return t;
}

function interval$1(callback, delay, time) {
var t = new Timer, d = delay;
if (delay == null) return t.restart(callback, delay, time), t;
delay = +delay, time = time == null ? now() : +time;
t.restart(function tick(elapsed) {
t.restart(tick, d += delay, time);
callback(elapsed - delay + d);
}, d, time);
return t;
}

var version = "0.4.0";
var version = "0.3.2";

exports.version = version;
exports.now = now;
exports.timer = timer;
exports.timerOnce = timerOnce;
exports.timerFlush = timerFlush;
exports.timeout = timeout$1;
exports.interval = interval$1;

}));
2 changes: 1 addition & 1 deletion d3-timer.v0.3.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

145 changes: 145 additions & 0 deletions d3-timer.v0.4.js
@@ -0,0 +1,145 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.d3_timer = {})));
}(this, function (exports) { 'use strict';

var frame = 0;
var timeout = 0;
var interval = 0;
var pokeDelay = 1000;
var taskHead;
var taskTail;
var clockLast = 0;
var clockNow = 0;
var clockSkew = 0;
var clock = typeof performance === "object" ? performance : Date;
var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(callback) { return setTimeout(callback, 17); };
function now() {
return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
}

function clearNow() {
clockNow = 0;
}

function Timer() {
this._call =
this._time =
this._next = null;
}

Timer.prototype = timer.prototype = {
restart: function(callback, delay, time) {
if (typeof callback !== "function") throw new TypeError("callback is not a function");
time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
if (!this._call) {
if (taskTail) taskTail._next = this;
else taskHead = this;
taskTail = this;
}
this._call = callback;
this._time = time;
sleep();
},
stop: function() {
if (this._call) {
this._call = null;
this._time = Infinity;
sleep();
}
}
};

function timer(callback, delay, time) {
var t = new Timer;
t.restart(callback, delay, time);
return t;
}

function timerFlush() {
now(); // Get the current time, if not already set.
++frame; // Pretend we’ve set an alarm, if we haven’t already.
var t = taskHead, e;
while (t) {
if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
t = t._next;
}
--frame;
}

function wake(time) {
clockNow = (clockLast = time || clock.now()) + clockSkew;
frame = timeout = 0;
try {
timerFlush();
} finally {
frame = 0;
nap();
clockNow = 0;
}
}

function poke() {
var now = clock.now(), delay = now - clockLast;
if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
}

function nap() {
var t0, t1 = taskHead, time = Infinity;
while (t1) {
if (t1._call) {
if (time > t1._time) time = t1._time;
t1 = (t0 = t1)._next;
} else {
t1 = t0 ? t0._next = t1._next : taskHead = t1._next;
}
}
taskTail = t0;
sleep(time);
}

function sleep(time) {
if (frame) return; // Soonest alarm already set, or will be.
if (timeout) timeout = clearTimeout(timeout);
var delay = time - clockNow;
if (delay > 24) {
if (time < Infinity) timeout = setTimeout(wake, delay);
if (interval) interval = clearInterval(interval);
} else {
if (!interval) interval = setInterval(poke, pokeDelay);
frame = 1, setFrame(wake);
}
}

function timeout$1(callback, delay, time) {
var t = new Timer;
delay = delay == null ? 0 : +delay;
t.restart(function(elapsed) {
t.stop();
callback(elapsed + delay);
}, delay, time);
return t;
}

function interval$1(callback, delay, time) {
var t = new Timer, d = delay;
if (delay == null) return t.restart(callback, delay, time), t;
delay = +delay, time = time == null ? now() : +time;
t.restart(function tick(elapsed) {
t.restart(tick, d += delay, time);
callback(elapsed - delay + d);
}, d, time);
return t;
}

var version = "0.4.0";

exports.version = version;
exports.now = now;
exports.timer = timer;
exports.timerFlush = timerFlush;
exports.timeout = timeout$1;
exports.interval = interval$1;

}));
1 change: 1 addition & 0 deletions d3-timer.v0.4.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 536b0ad

Please sign in to comment.