Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 7 additions & 12 deletions src/channel.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,18 @@ export function Channel(data, {scale, type, value, filter, hint}) {
};
}

export function channelObject(channelDescriptors, data) {
const channels = {};
for (const channel of channelDescriptors) {
channels[channel.name] = Channel(data, channel);
}
return channels;
export function Channels(descriptors, data) {
return Object.fromEntries(Object.entries(descriptors).map(([name, channel]) => {
return [name, Channel(data, channel)];
}));
}

// TODO Use Float64Array for scales with numeric ranges, e.g. position?
export function valueObject(channels, scales) {
const values = {};
for (const channelName in channels) {
const {scale: scaleName, value} = channels[channelName];
return Object.fromEntries(Object.entries(channels).map(([name, {scale: scaleName, value}]) => {
const scale = scales[scaleName];
values[channelName] = scale === undefined ? value : map(value, scale);
}
return values;
return [name, scale === undefined ? value : map(value, scale)];
}));
}

// Note: mutates channel.domain! This is set to a function so that it is lazily
Expand Down
14 changes: 7 additions & 7 deletions src/marks/area.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ export class Area extends Mark {
const {x1, y1, x2, y2, z, curve, tension} = options;
super(
data,
[
{name: "x1", value: x1, scale: "x"},
{name: "y1", value: y1, scale: "y"},
{name: "x2", value: x2, scale: "x", optional: true},
{name: "y2", value: y2, scale: "y", optional: true},
{name: "z", value: maybeZ(options), optional: true}
],
{
x1: {value: x1, scale: "x"},
y1: {value: y1, scale: "y"},
x2: {value: x2, scale: "x", optional: true},
y2: {value: y2, scale: "y", optional: true},
z: {value: maybeZ(options), optional: true}
},
options,
defaults
);
Expand Down
12 changes: 6 additions & 6 deletions src/marks/arrow.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ export class Arrow extends Mark {
} = options;
super(
data,
[
{name: "x1", value: x1, scale: "x"},
{name: "y1", value: y1, scale: "y"},
{name: "x2", value: x2, scale: "x", optional: true},
{name: "y2", value: y2, scale: "y", optional: true}
],
{
x1: {value: x1, scale: "x"},
y1: {value: y1, scale: "y"},
x2: {value: x2, scale: "x", optional: true},
y2: {value: y2, scale: "y", optional: true}
},
options,
defaults
);
Expand Down
20 changes: 10 additions & 10 deletions src/marks/bar.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@ export class BarX extends AbstractBar {
const {x1, x2, y} = options;
super(
data,
[
{name: "x1", value: x1, scale: "x"},
{name: "x2", value: x2, scale: "x"},
{name: "y", value: y, scale: "y", type: "band", optional: true}
],
{
x1: {value: x1, scale: "x"},
x2: {value: x2, scale: "x"},
y: {value: y, scale: "y", type: "band", optional: true}
},
options,
defaults
);
Expand All @@ -93,11 +93,11 @@ export class BarY extends AbstractBar {
const {x, y1, y2} = options;
super(
data,
[
{name: "y1", value: y1, scale: "y"},
{name: "y2", value: y2, scale: "y"},
{name: "x", value: x, scale: "x", type: "band", optional: true}
],
{
y1: {value: y1, scale: "y"},
y2: {value: y2, scale: "y"},
x: {value: x, scale: "x", type: "band", optional: true}
},
options,
defaults
);
Expand Down
8 changes: 4 additions & 4 deletions src/marks/cell.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ export class Cell extends AbstractBar {
constructor(data, {x, y, ...options} = {}) {
super(
data,
[
{name: "x", value: x, scale: "x", type: "band", optional: true},
{name: "y", value: y, scale: "y", type: "band", optional: true}
],
{
x: {value: x, scale: "x", type: "band", optional: true},
y: {value: y, scale: "y", type: "band", optional: true}
},
options,
defaults
);
Expand Down
30 changes: 15 additions & 15 deletions src/marks/delaunay.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ class DelaunayLink extends Mark {
const {x, y, z, curve, tension} = options;
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "z", value: z, optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
z: {value: z, optional: true}
},
options,
delaunayLinkDefaults
);
Expand Down Expand Up @@ -129,11 +129,11 @@ class AbstractDelaunayMark extends Mark {
const {x, y} = options;
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "z", value: zof(options), optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
z: {value: zof(options), optional: true}
},
options,
defaults
);
Expand Down Expand Up @@ -188,11 +188,11 @@ class Voronoi extends Mark {
const {x, y, z} = options;
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "z", value: z, optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
z: {value: z, optional: true}
},
options,
voronoiDefaults
);
Expand Down
12 changes: 6 additions & 6 deletions src/marks/density.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ export class Density extends Mark {
const strokeDensity = isDensity(stroke) && (stroke = "currentColor", true);
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "z", value: maybeZ({z, fill, stroke}), optional: true},
{name: "weight", value: weight, optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
z: {value: maybeZ({z, fill, stroke}), optional: true},
weight: {value: weight, optional: true}
},
densityInitializer({...options, fill, stroke}, fillDensity, strokeDensity),
defaults
);
Expand Down
19 changes: 9 additions & 10 deletions src/marks/dot.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ export class Dot extends Mark {
const [vr, cr] = maybeNumberChannel(r, vsymbol == null ? 3 : 4.5);
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "r", value: vr, scale: "r", filter: positive, optional: true},
{name: "rotate", value: vrotate, optional: true},
{name: "symbol", value: vsymbol, scale: "symbol", optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
r: {value: vr, scale: "r", filter: positive, optional: true},
rotate: {value: vrotate, optional: true},
symbol: {value: vsymbol, scale: "symbol", optional: true}
},
options.sort === undefined && options.reverse === undefined ? sort({channel: "r", order: "descending"}, options) : options,
defaults
);
Expand All @@ -42,10 +42,9 @@ export class Dot extends Mark {
// appropriate default symbols based on whether the dots are filled or
// stroked, and for the symbol legend to match the appearance of the dots.
const {channels} = this;
const symbolChannel = channels.find(({scale}) => scale === "symbol");
const {symbol: symbolChannel} = channels;
if (symbolChannel) {
const fillChannel = channels.find(({name}) => name === "fill");
const strokeChannel = channels.find(({name}) => name === "stroke");
const {fill: fillChannel, stroke: strokeChannel} = channels;
symbolChannel.hint = {
fill: fillChannel ? (fillChannel.value === symbolChannel.value ? "color" : "currentColor") : this.fill,
stroke: strokeChannel ? (strokeChannel.value === symbolChannel.value ? "color" : "currentColor") : this.stroke
Expand Down
14 changes: 7 additions & 7 deletions src/marks/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ export class Image extends Mark {
const [vh, ch] = maybeNumberChannel(height, 16);
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "width", value: vw, filter: positive, optional: true},
{name: "height", value: vh, filter: positive, optional: true},
{name: "src", value: vs, optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
width: {value: vw, filter: positive, optional: true},
height: {value: vh, filter: positive, optional: true},
src: {value: vs, optional: true}
},
options,
defaults
);
Expand Down
10 changes: 5 additions & 5 deletions src/marks/line.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ export class Line extends Mark {
const {x, y, z, curve, tension} = options;
super(
data,
[
{name: "x", value: x, scale: "x"},
{name: "y", value: y, scale: "y"},
{name: "z", value: maybeZ(options), optional: true}
],
{
x: {value: x, scale: "x"},
y: {value: y, scale: "y"},
z: {value: maybeZ(options), optional: true}
},
options,
defaults
);
Expand Down
10 changes: 5 additions & 5 deletions src/marks/linearRegression.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ class LinearRegression extends Mark {
const {x, y, z, ci = 0.95, precision = 4} = options;
super(
data,
[
{name: "x", value: x, scale: "x"},
{name: "y", value: y, scale: "y"},
{name: "z", value: maybeZ(options), optional: true}
],
{
x: {value: x, scale: "x"},
y: {value: y, scale: "y"},
z: {value: maybeZ(options), optional: true}
},
options,
defaults
);
Expand Down
12 changes: 6 additions & 6 deletions src/marks/link.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ export class Link extends Mark {
const {x1, y1, x2, y2, curve, tension} = options;
super(
data,
[
{name: "x1", value: x1, scale: "x"},
{name: "y1", value: y1, scale: "y"},
{name: "x2", value: x2, scale: "x", optional: true},
{name: "y2", value: y2, scale: "y", optional: true}
],
{
x1: {value: x1, scale: "x"},
y1: {value: y1, scale: "y"},
x2: {value: x2, scale: "x", optional: true},
y2: {value: y2, scale: "y", optional: true}
},
options,
defaults
);
Expand Down
12 changes: 6 additions & 6 deletions src/marks/rect.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ export class Rect extends Mark {
} = options;
super(
data,
[
{name: "x1", value: x1, scale: "x", optional: true},
{name: "y1", value: y1, scale: "y", optional: true},
{name: "x2", value: x2, scale: "x", optional: true},
{name: "y2", value: y2, scale: "y", optional: true}
],
{
x1: {value: x1, scale: "x", optional: true},
y1: {value: y1, scale: "y", optional: true},
x2: {value: x2, scale: "x", optional: true},
y2: {value: y2, scale: "y", optional: true}
},
options,
defaults
);
Expand Down
20 changes: 10 additions & 10 deletions src/marks/rule.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ export class RuleX extends Mark {
} = options;
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y1", value: y1, scale: "y", optional: true},
{name: "y2", value: y2, scale: "y", optional: true}
],
{
x: {value: x, scale: "x", optional: true},
y1: {value: y1, scale: "y", optional: true},
y2: {value: y2, scale: "y", optional: true}
},
options,
defaults
);
Expand Down Expand Up @@ -68,11 +68,11 @@ export class RuleY extends Mark {
} = options;
super(
data,
[
{name: "y", value: y, scale: "y", optional: true},
{name: "x1", value: x1, scale: "x", optional: true},
{name: "x2", value: x2, scale: "x", optional: true}
],
{
y: {value: y, scale: "y", optional: true},
x1: {value: x1, scale: "x", optional: true},
x2: {value: x2, scale: "x", optional: true}
},
options,
defaults
);
Expand Down
14 changes: 7 additions & 7 deletions src/marks/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ export class Text extends Mark {
const [vfontSize, cfontSize] = maybeFontSizeChannel(fontSize);
super(
data,
[
{name: "x", value: x, scale: "x", optional: true},
{name: "y", value: y, scale: "y", optional: true},
{name: "fontSize", value: vfontSize, optional: true},
{name: "rotate", value: numberChannel(vrotate), optional: true},
{name: "text", value: text, filter: nonempty}
],
{
x: {value: x, scale: "x", optional: true},
y: {value: y, scale: "y", optional: true},
fontSize: {value: vfontSize, optional: true},
rotate: {value: numberChannel(vrotate), optional: true},
text: {value: text, filter: nonempty}
},
options,
defaults
);
Expand Down
Loading