From 608a2b6b823bc5e9af0b9768f49324c8b5626528 Mon Sep 17 00:00:00 2001
From: Adam Pearce <1wheel@gmail.com>
Date: Mon, 11 Dec 2017 23:41:51 -0500
Subject: [PATCH] adds namespaced timers - closes #55
---
README.md | 7 +++++--
build/d3-jetpack.js | 44 +++++++++++++++++++++++++++++++++++++++----
build/d3v4+jetpack.js | 39 +++++++++++++++++++++++++++++++++++---
d3-index.js | 5 ++++-
index.js | 5 ++++-
package.json | 5 +++--
src/interval.js | 12 ++++++++++++
src/timeout.js | 12 ++++++++++++
src/timer.js | 12 ++++++++++++
test/index.html | 3 +++
10 files changed, 131 insertions(+), 13 deletions(-)
create mode 100644 src/interval.js
create mode 100644 src/timeout.js
create mode 100644 src/timer.js
diff --git a/README.md b/README.md
index b6f1675..633c6f7 100644
--- a/README.md
+++ b/README.md
@@ -201,8 +201,11 @@ var fruits = [{ name: "Apple", color: "green" }, { name: "Banana", color: "yello
fruits.sort(d3.ascendingKey('color'));
```
-# d3.nestBy(array, key) [<>](https://github.com/gka/d3-jetpack/blob/master/src/nestBy.js "Source")
+# d3.timer(callback[, delay[, time[, namespace]]]) [<>](https://github.com/gka/d3-jetpack/blob/master/src/timer.js "Source")
+
+`d3.timer`, `d3.timeout` and `d3.interval` all now take an optional namespace argument. Previous timers with the same namespace as a new timer are stopped.
+
+# d3.nestBy(array, key) [<>](https://github.com/gka/d3-jetpack/blob/master/src/nestBy.js "Source")
Shorthand for `d3.nest().key(key).entries(array)`. Returns an array of arrays, instead of a `key`/`value` pairs. The `key` property of each array is equal the value returned by the `key` function when it is called with element of the array.
diff --git a/build/d3-jetpack.js b/build/d3-jetpack.js
index 03ded30..95d74ea 100644
--- a/build/d3-jetpack.js
+++ b/build/d3-jetpack.js
@@ -1,9 +1,9 @@
// https://github.com/gka/d3-jetpack#readme Version 2.0.15. Copyright 2017 Gregor Aisch.
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-selection'), require('d3-transition'), require('d3-array'), require('d3-axis'), require('d3-scale'), require('d3-collection'), require('d3-queue'), require('d3-request')) :
- typeof define === 'function' && define.amd ? define(['exports', 'd3-selection', 'd3-transition', 'd3-array', 'd3-axis', 'd3-scale', 'd3-collection', 'd3-queue', 'd3-request'], factory) :
- (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));
-}(this, (function (exports,d3Selection,d3Transition,d3Array,d3Axis,d3Scale,d3Collection,d3Queue,d3Request) { 'use strict';
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-selection'), require('d3-transition'), require('d3-array'), require('d3-axis'), require('d3-scale'), require('d3-collection'), require('d3-queue'), require('d3-request'), require('d3-timer')) :
+ typeof define === 'function' && define.amd ? define(['exports', 'd3-selection', 'd3-transition', 'd3-array', 'd3-axis', 'd3-scale', 'd3-collection', 'd3-queue', 'd3-request', 'd3-timer'], factory) :
+ (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));
+}(this, (function (exports,d3Selection,d3Transition,d3Array,d3Axis,d3Scale,d3Collection,d3Queue,d3Request,d3Timer) { 'use strict';
var translateSelection = function(xy, dim) {
var node = this.node();
@@ -486,6 +486,39 @@ function polygonClosed(coordinates) {
return !(a[0] - b[0] || a[1] - b[1]);
}
+var prev = {};
+
+var timer$1 = function(fn, delay, time, name){
+ if (prev[name]) prev[name].stop();
+
+ var newTimer = d3Timer.timer(fn, delay, time, name);
+ if (name) prev[name] = newTimer;
+
+ return newTimer
+};
+
+var prev$1 = {};
+
+var interval$1 = function(fn, delay, time, name){
+ if (prev$1[name]) prev$1[name].stop();
+
+ var newTimer = d3Timer.interval(fn, delay, time, name);
+ if (name) prev$1[name] = newTimer;
+
+ return newTimer
+};
+
+var prev$2 = {};
+
+var timeout$1 = function(fn, delay, time, name){
+ if (prev$2[name]) prev$2[name].stop();
+
+ var newTimer = d3Timer.timeout(fn, delay, time, name);
+ if (name) prev$2[name] = newTimer;
+
+ return newTimer
+};
+
d3Selection.selection.prototype.translate = translateSelection;
d3Transition.transition.prototype.translate = translateSelection;
d3Selection.selection.prototype.append = append;
@@ -513,6 +546,9 @@ exports.nestBy = nestBy;
exports.round = round;
exports.clamp = clamp;
exports.polygonClip = polygonClip;
+exports.timer = timer$1;
+exports.interval = interval$1;
+exports.timeout = timeout$1;
Object.defineProperty(exports, '__esModule', { value: true });
diff --git a/build/d3v4+jetpack.js b/build/d3v4+jetpack.js
index 8f925a2..3bf6771 100644
--- a/build/d3v4+jetpack.js
+++ b/build/d3v4+jetpack.js
@@ -17326,6 +17326,39 @@ function polygonClosed(coordinates) {
return !(a[0] - b[0] || a[1] - b[1]);
}
+var prev = {};
+
+var timer$1 = function(fn, delay, time, name){
+ if (prev[name]) prev[name].stop();
+
+ var newTimer = timer(fn, delay, time, name);
+ if (name) prev[name] = newTimer;
+
+ return newTimer
+};
+
+var prev$1 = {};
+
+var interval$2 = function(fn, delay, time, name){
+ if (prev$1[name]) prev$1[name].stop();
+
+ var newTimer = interval$1(fn, delay, time, name);
+ if (name) prev$1[name] = newTimer;
+
+ return newTimer
+};
+
+var prev$2 = {};
+
+var timeout$2 = function(fn, delay, time, name){
+ if (prev$2[name]) prev$2[name].stop();
+
+ var newTimer = timeout$1(fn, delay, time, name);
+ if (name) prev$2[name] = newTimer;
+
+ return newTimer
+};
+
selection.prototype.translate = translateSelection;
transition.prototype.translate = translateSelection;
selection.prototype.append = append;
@@ -17357,6 +17390,9 @@ exports.nestBy = nestBy;
exports.round = round;
exports.clamp = clamp;
exports.polygonClip = polygonClip;
+exports.timer = timer$1;
+exports.timeout = timeout$2;
+exports.interval = interval$2;
exports.version = version;
exports.bisect = bisectRight;
exports.bisectRight = bisectRight;
@@ -17741,10 +17777,7 @@ exports.timeFormatLocale = formatLocale$1;
exports.isoFormat = formatIso;
exports.isoParse = parseIso;
exports.now = now;
-exports.timer = timer;
exports.timerFlush = timerFlush;
-exports.timeout = timeout$1;
-exports.interval = interval$1;
exports.transition = transition;
exports.active = active;
exports.interrupt = interrupt;
diff --git a/d3-index.js b/d3-index.js
index d75b7c3..a3e604f 100644
--- a/d3-index.js
+++ b/d3-index.js
@@ -20,5 +20,8 @@ export {
nestBy,
round,
clamp,
- polygonClip
+ polygonClip,
+ timer,
+ timeout,
+ interval
} from "./index.js";
diff --git a/index.js b/index.js
index a14fb04..f16e095 100644
--- a/index.js
+++ b/index.js
@@ -37,4 +37,7 @@ export {default as loadData} from "./src/loadData";
export {default as nestBy} from "./src/nestBy";
export {default as round} from "./src/round";
export {default as clamp} from "./src/clamp";
-export {default as polygonClip} from "./src/polygonClip";
\ No newline at end of file
+export {default as polygonClip} from "./src/polygonClip";
+export {default as timer} from "./src/timer";
+export {default as interval} from "./src/interval";
+export {default as timeout} from "./src/timeout";
diff --git a/package.json b/package.json
index 5b006ec..aa983ea 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"jsnext:main": "index",
"module": "index",
"scripts": {
- "pretest": "rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-selection:d3,d3-transition:d3,d3-axis:d3,d3-scale:d3,d3-queue:d3,d3-array:d3,d3-collection:d3,d3-request:d3 -n d3 -o build/d3-jetpack.js -- index.js",
+ "pretest": "rm -rf build && mkdir build && rollup --banner \"$(preamble)\" -f umd -g d3-selection:d3,d3-transition:d3,d3-axis:d3,d3-scale:d3,d3-queue:d3,d3-array:d3,d3-collection:d3,d3-request:d3,d3-timer:d3 -n d3 -o build/d3-jetpack.js -- index.js",
"test": "tape 'test/test-*.js'",
"prepublish": "npm run pretest && bin/rollup"
},
@@ -19,8 +19,8 @@
"rollup": "0.41",
"rollup-plugin-ascii": "0.0",
"rollup-plugin-node-resolve": "2",
- "tape": "4",
"svgdom": "^0.0.15",
+ "tape": "4",
"uglify-js": "2"
},
"repository": {
@@ -60,6 +60,7 @@
"d3-request": "1",
"d3-scale": "1",
"d3-selection": "1",
+ "d3-timer": "1",
"d3-transition": "1"
}
}
diff --git a/src/interval.js b/src/interval.js
new file mode 100644
index 0000000..6ee34b7
--- /dev/null
+++ b/src/interval.js
@@ -0,0 +1,12 @@
+import {interval} from "d3-timer";
+
+var prev = {}
+
+export default function(fn, delay, time, name){
+ if (prev[name]) prev[name].stop()
+
+ var newTimer = interval(fn, delay, time, name)
+ if (name) prev[name] = newTimer
+
+ return newTimer
+}
\ No newline at end of file
diff --git a/src/timeout.js b/src/timeout.js
new file mode 100644
index 0000000..c8b9182
--- /dev/null
+++ b/src/timeout.js
@@ -0,0 +1,12 @@
+import {timeout} from "d3-timer";
+
+var prev = {}
+
+export default function(fn, delay, time, name){
+ if (prev[name]) prev[name].stop()
+
+ var newTimer = timeout(fn, delay, time, name)
+ if (name) prev[name] = newTimer
+
+ return newTimer
+}
\ No newline at end of file
diff --git a/src/timer.js b/src/timer.js
new file mode 100644
index 0000000..d77a30d
--- /dev/null
+++ b/src/timer.js
@@ -0,0 +1,12 @@
+import {timer} from "d3-timer";
+
+var prev = {}
+
+export default function(fn, delay, time, name){
+ if (prev[name]) prev[name].stop()
+
+ var newTimer = timer(fn, delay, time, name)
+ if (name) prev[name] = newTimer
+
+ return newTimer
+}
\ No newline at end of file
diff --git a/test/index.html b/test/index.html
index 818100b..a99a620 100644
--- a/test/index.html
+++ b/test/index.html
@@ -116,4 +116,7 @@
drawCicle([c.width/2, c.height/2])
+
+// d3.timer(() => console.log('hell0'), 0, 0, 'hello-timer')
+
\ No newline at end of file