Skip to content

Commit 257408b

Browse files
committed
gapminder, timeFilter
1 parent 7f90871 commit 257408b

File tree

7 files changed

+1933
-4
lines changed

7 files changed

+1933
-4
lines changed

src/plot.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {arrayify, isDomainSort, isScaleOptions, keyword, map, maybeNamed, range,
99
import {Scales, ScaleFunctions, autoScaleRange, exposeScales} from "./scales.js";
1010
import {position, registry as scaleRegistry} from "./scales/index.js";
1111
import {applyInlineStyles, maybeClassName, maybeClip, styles} from "./style.js";
12+
import {maybeTimeFilter} from "./time.js";
1213
import {basic, initializer} from "./transforms/basic.js";
1314
import {maybeInterval} from "./transforms/interval.js";
1415
import {consumeWarnings} from "./warnings.js";
@@ -233,12 +234,12 @@ export function plot(options = {}) {
233234
const {mark, node} = timeMark;
234235
const {channels, values, facets} = stateByMark.get(mark);
235236
const facet = facets ? mark.filter(facets[0], channels, values) : null;
236-
const index = facet.filter(i => channels.time.value[i] <= time);
237+
const index = mark.timeFilter(facet, values.time, time);
237238
const timeNode = mark.render(index, scales, values, dimensions, context);
238239
node.replaceWith(timeNode);
239240
timeMark.node = timeNode;
240241
}
241-
requestAnimationFrame(tick);
242+
setTimeout(tick, 1500 / times.length); // TODO
242243
});
243244
}
244245
}
@@ -280,12 +281,13 @@ export function plot(options = {}) {
280281

281282
export class Mark {
282283
constructor(data, channels = {}, options = {}, defaults) {
283-
const {facet = "auto", sort, time, dx, dy, clip, channels: extraChannels} = options;
284+
const {facet = "auto", sort, time, timeFilter, dx, dy, clip, channels: extraChannels} = options;
284285
this.data = data;
285286
this.sort = isDomainSort(sort) ? sort : null;
286287
this.initializer = initializer(options).initializer;
287288
this.transform = this.initializer ? options.transform : basic(options).transform;
288289
this.facet = facet == null || facet === false ? null : keyword(facet === true ? "include" : facet, "facet", ["auto", "include", "exclude"]);
290+
this.timeFilter = maybeTimeFilter(timeFilter);
289291
channels = maybeNamed(channels);
290292
if (extraChannels !== undefined) channels = {...maybeNamed(extraChannels), ...channels};
291293
if (defaults !== undefined) channels = {...styles(this, options, defaults), ...channels};

src/time.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
export function maybeTimeFilter(filter = "eq") {
2+
switch (`${filter}`.toLowerCase()) {
3+
case "lt": return timeLt;
4+
case "lte": return timeLte;
5+
case "gt": return timeGt;
6+
case "gte": return timeGte;
7+
case "eq": return timeEq;
8+
}
9+
throw new Error(`invalid time filter: ${filter}`);
10+
}
11+
12+
function timeLt(I, T, time) {
13+
return I.filter(i => T[i] < time);
14+
}
15+
16+
function timeLte(I, T, time) {
17+
return I.filter(i => T[i] <= time);
18+
}
19+
20+
function timeGt(I, T, time) {
21+
return I.filter(i => T[i] > time);
22+
}
23+
24+
function timeGte(I, T, time) {
25+
return I.filter(i => T[i] >= time);
26+
}
27+
28+
function timeEq(I, T, time) {
29+
return I.filter(i => T[i] === time);
30+
}

0 commit comments

Comments
 (0)