Skip to content

Commit 37b46d0

Browse files
committed
Merge branch 'master' of https://github.com/plotly/plotly.js into fix-choropleth-interactions-for-firefox
2 parents ff60f21 + 9a583b4 commit 37b46d0

File tree

91 files changed

+628
-2059
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+628
-2059
lines changed

package-lock.json

+428-1,961
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+14-14
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
"ndarray-linear-interpolate": "^1.0.0",
115115
"parse-svg-path": "^0.1.2",
116116
"polybooljs": "^1.2.0",
117-
"probe-image-size": "^6.0.0",
117+
"probe-image-size": "^7.1.0",
118118
"regl": "^1.6.1",
119119
"regl-error2d": "^2.0.11",
120120
"regl-line2d": "^3.1.0",
@@ -137,47 +137,47 @@
137137
"browserify-transform-tools": "^1.7.0",
138138
"bubleify": "^2.0.0",
139139
"canvas": "^2.7.0",
140-
"check-node-version": "^4.0.3",
140+
"check-node-version": "^4.1.0",
141141
"chttps": "^1.0.6",
142142
"deep-equal": "^2.0.5",
143143
"derequire": "^2.1.1",
144144
"ecstatic": "^4.1.4",
145-
"eslint": "^7.17.0",
145+
"eslint": "^7.25.0",
146146
"espree": "^7.3.1",
147-
"extra-iterable": "^2.5.14",
147+
"extra-iterable": "^2.5.22",
148148
"falafel": "^2.2.4",
149-
"fs-extra": "^9.0.1",
150-
"fuse.js": "^6.4.5",
149+
"fs-extra": "^10.0.0",
150+
"fuse.js": "^6.4.6",
151151
"glob": "^7.1.6",
152152
"gzip-size": "^6.0.0",
153153
"into-stream": "^6.0.0",
154154
"jasmine-core": "^3.5.0",
155-
"jsdom": "^16.4.0",
156-
"karma": "^5.2.3",
157-
"karma-browserify": "^7.0.0",
155+
"jsdom": "^16.5.3",
156+
"karma": "^6.3.2",
157+
"karma-browserify": "^8.0.0",
158158
"karma-chrome-launcher": "^3.1.0",
159159
"karma-firefox-launcher": "^1.3.0",
160160
"karma-ie-launcher": "^1.0.0",
161161
"karma-jasmine": "^3.3.1",
162162
"karma-jasmine-spec-tags": "^1.3.0",
163163
"karma-spec-reporter": "0.0.32",
164164
"karma-verbose-reporter": "0.0.6",
165-
"karma-viewport": "^1.0.7",
166-
"lodash": "^4.17.20",
165+
"karma-viewport": "^1.0.8",
166+
"lodash": "^4.17.21",
167167
"madge": "^4.0.2",
168168
"mathjax": "2.7.5",
169169
"minify-stream": "^2.1.0",
170170
"mkdirp": "^1.0.4",
171171
"node-sass": "^5.0.0",
172172
"npm-link-check": "^4.0.0",
173-
"open": "^7.3.0",
173+
"open": "^8.0.7",
174174
"prepend-file": "^2.0.0",
175175
"prettysize": "^2.0.0",
176-
"read-last-lines": "^1.7.2",
176+
"read-last-lines": "^1.8.0",
177177
"run-series": "^1.1.9",
178178
"sane-topojson": "^4.0.0",
179179
"through2": "^4.0.2",
180180
"true-case-path": "^2.2.1",
181-
"watchify": "^3.11.1"
181+
"watchify": "^4.0.0"
182182
}
183183
}

src/components/color/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var tinycolor = require('tinycolor2');
44
var isNumeric = require('fast-isnumeric');
5+
var isTypedArray = require('../../lib/array').isTypedArray;
56

67
var color = module.exports = {};
78

@@ -116,7 +117,7 @@ color.clean = function(container) {
116117
if(!Array.isArray(el0) && el0 && typeof el0 === 'object') {
117118
for(j = 0; j < val.length; j++) color.clean(val[j]);
118119
}
119-
} else if(val && typeof val === 'object') color.clean(val);
120+
} else if(val && typeof val === 'object' && !isTypedArray(val)) color.clean(val);
120121
}
121122
};
122123

src/components/colorbar/defaults.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,21 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) {
4848

4949
handleTickValueDefaults(colorbarIn, colorbarOut, coerce, 'linear');
5050

51-
var opts = {outerTicks: false, font: layout.font};
51+
var font = layout.font;
52+
var opts = {outerTicks: false, font: font};
5253
if(ticklabelposition.indexOf('inside') !== -1) {
5354
opts.bgColor = 'black'; // could we instead use the average of colors in the scale?
5455
}
5556
handleTickLabelDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts);
5657
handleTickMarkDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts);
5758

5859
coerce('title.text', layout._dfltTitle.colorbar);
59-
Lib.coerceFont(coerce, 'title.font', layout.font);
60+
61+
var tickFont = colorbarOut.tickfont;
62+
var dfltTitleFont = Lib.extendFlat({}, tickFont, {
63+
color: font.color,
64+
size: Lib.bigFont(tickFont.size)
65+
});
66+
Lib.coerceFont(coerce, 'title.font', dfltTitleFont);
6067
coerce('title.side');
6168
};

src/components/drawing/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,8 @@ drawing.textPointStyle = function(s, trace, gd) {
943943
}
944944

945945
if(texttemplate) {
946-
var labels = trace._module.formatLabels ? trace._module.formatLabels(d, trace, fullLayout) : {};
946+
var fn = trace._module.formatLabels;
947+
var labels = fn ? fn(d, trace, fullLayout) : {};
947948
var pointValues = {};
948949
appendArrayPointValue(pointValues, trace, d.i);
949950
var meta = trace._meta || {};

src/components/legend/attributes.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ module.exports = {
189189
font: fontAttrs({
190190
editType: 'legend',
191191
description: [
192-
'Sets this legend\'s title font.'
192+
'Sets this legend\'s title font.',
193+
'Defaults to `legend.font` with its size increased about 20%.'
193194
].join(' '),
194195
}),
195196
side: {

src/components/legend/defaults.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,13 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
7777
coerce('bgcolor', layoutOut.paper_bgcolor);
7878
coerce('bordercolor');
7979
coerce('borderwidth');
80-
Lib.coerceFont(coerce, 'font', layoutOut.font);
80+
var itemFont = Lib.coerceFont(coerce, 'font', layoutOut.font);
8181

8282
var orientation = coerce('orientation');
83+
var isHorizontal = orientation === 'h';
8384
var defaultX, defaultY, defaultYAnchor;
8485

85-
if(orientation === 'h') {
86+
if(isHorizontal) {
8687
defaultX = 0;
8788

8889
if(Registry.getComponentMethod('rangeslider', 'isVisible')(layoutIn.xaxis)) {
@@ -119,7 +120,11 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
119120

120121
var titleText = coerce('title.text');
121122
if(titleText) {
122-
coerce('title.side', orientation === 'h' ? 'left' : 'top');
123-
Lib.coerceFont(coerce, 'title.font', layoutOut.font);
123+
coerce('title.side', isHorizontal ? 'left' : 'top');
124+
var dfltTitleFont = Lib.extendFlat({}, itemFont, {
125+
size: Lib.bigFont(itemFont.size)
126+
});
127+
128+
Lib.coerceFont(coerce, 'title.font', dfltTitleFont);
124129
}
125130
};

src/components/legend/draw.js

+5
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,11 @@ function computeTextDimensions(g, gd, legendObj, aTitle) {
539539
// approximation to height offset to center the font
540540
// to avoid getBoundingClientRect
541541
if(aTitle === MAIN_TITLE) {
542+
if(legendObj.title.side === 'left') {
543+
// add extra space between legend title and itmes
544+
width += constants.itemGap * 2;
545+
}
546+
542547
svgTextUtils.positionText(textEl,
543548
bw + constants.titlePad,
544549
bw + lineHeight

src/constants/numerical.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = {
1515
* to avoid glitches: Make sure that even when you multiply it by the
1616
* number of pixels on a giant screen it still works
1717
*/
18-
FP_SAFE: Number.MAX_VALUE / 10000,
18+
FP_SAFE: Number.MAX_VALUE * 1e-4,
1919

2020
/*
2121
* conversion of date units to milliseconds

src/lib/index.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ var utcFormat = require('d3-time-format').utcFormat;
55
var isNumeric = require('fast-isnumeric');
66

77
var numConstants = require('../constants/numerical');
8-
var FP_SAFE = numConstants.FP_SAFE;
8+
var MAX_SAFE = numConstants.FP_SAFE;
9+
var MIN_SAFE = -MAX_SAFE;
910
var BADNUM = numConstants.BADNUM;
1011

1112
var lib = module.exports = {};
@@ -166,8 +167,7 @@ lib.cleanNumber = require('./clean_number');
166167
lib.ensureNumber = function ensureNumber(v) {
167168
if(!isNumeric(v)) return BADNUM;
168169
v = Number(v);
169-
if(v < -FP_SAFE || v > FP_SAFE) return BADNUM;
170-
return isNumeric(v) ? Number(v) : BADNUM;
170+
return (v > MAX_SAFE || v < MIN_SAFE) ? BADNUM : v;
171171
};
172172

173173
/**
@@ -1276,6 +1276,10 @@ lib.join2 = function(arr, mainSeparator, lastSeparator) {
12761276
return arr.join(mainSeparator);
12771277
};
12781278

1279+
lib.bigFont = function(size) {
1280+
return Math.round(1.2 * size);
1281+
};
1282+
12791283
/**
12801284
* Return the mouse position from the last event registered by D3.
12811285
* @returns An array with two numbers, representing the x and y coordinates of the mouse pointer

src/plots/cartesian/autorange.js

+20-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
'use strict';
22

3+
var d3 = require('@plotly/d3');
34
var isNumeric = require('fast-isnumeric');
45

56
var Lib = require('../../lib');
67
var FP_SAFE = require('../../constants/numerical').FP_SAFE;
78
var Registry = require('../../registry');
9+
var Drawing = require('../../components/drawing');
810

911
var axIds = require('./axis_ids');
1012
var getFromId = axIds.getFromId;
@@ -266,12 +268,27 @@ function padInsideLabelsOnAnchorAxis(fullLayout, ax, max) {
266268
var cosA = Math.abs(Math.cos(rad));
267269
var sinA = Math.abs(Math.sin(rad));
268270

271+
// no stashed bounding boxes - stash bounding boxes
272+
if(!anchorAxis._vals[0].bb) {
273+
var cls = anchorAxis._id + 'tick';
274+
var tickLabels = anchorAxis._selections[cls];
275+
tickLabels.each(function(d) {
276+
var thisLabel = d3.select(this);
277+
var mathjaxGroup = thisLabel.select('.text-math-group');
278+
if(mathjaxGroup.empty()) {
279+
d.bb = Drawing.bBox(thisLabel.node());
280+
}
281+
});
282+
}
283+
269284
// use bounding boxes
270285
for(var i = 0; i < anchorAxis._vals.length; i++) {
271286
var t = anchorAxis._vals[i];
272-
if(t.bb) {
273-
var w = 2 * TEXTPAD + t.bb.width;
274-
var h = 2 * TEXTPAD + t.bb.height;
287+
var bb = t.bb;
288+
289+
if(bb) {
290+
var w = 2 * TEXTPAD + bb.width;
291+
var h = 2 * TEXTPAD + bb.height;
275292

276293
pad = Math.max(pad, isX ?
277294
Math.max(w * cosA, h * sinA) :

src/plots/cartesian/axes.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ axes.prepTicks = function(ax, opts) {
554554

555555
if(!nt) {
556556
if(ax.type === 'category' || ax.type === 'multicategory') {
557-
minPx = ax.tickfont ? (ax.tickfont.size || 12) * 1.2 : 15;
557+
minPx = ax.tickfont ? Lib.bigFont(ax.tickfont.size || 12) : 15;
558558
nt = ax._length / minPx;
559559
} else {
560560
minPx = ax._id.charAt(0) === 'y' ? 40 : 80;
@@ -3329,7 +3329,10 @@ axes.drawLabels = function(gd, ax, opts) {
33293329
function computeFinalTickLabelBoundingBoxes() {
33303330
tickLabels.each(function(d, i) {
33313331
var thisLabel = selectTickLabel(this);
3332-
ax._vals[i].bb = Drawing.bBox(thisLabel.node());
3332+
var mathjaxGroup = thisLabel.select('.text-math-group');
3333+
if(mathjaxGroup.empty()) {
3334+
ax._vals[i].bb = Drawing.bBox(thisLabel.node());
3335+
}
33333336
});
33343337
}
33353338
);

src/plots/cartesian/axis_defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce,
116116
coerce('title.text', dfltTitle);
117117
Lib.coerceFont(coerce, 'title.font', {
118118
family: font.family,
119-
size: Math.round(font.size * 1.2),
119+
size: Lib.bigFont(font.size),
120120
color: dfltFontColor
121121
});
122122

src/plots/polar/layout_defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ function handleDefaults(contIn, contOut, coerce, opts) {
9898
coerceAxis('title.text');
9999
Lib.coerceFont(coerceAxis, 'title.font', {
100100
family: opts.font.family,
101-
size: Math.round(opts.font.size * 1.2),
101+
size: Lib.bigFont(opts.font.size),
102102
color: dfltFontColor
103103
});
104104
}

src/plots/ternary/layout_defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut
8282

8383
Lib.coerceFont(coerce, 'title.font', {
8484
family: options.font.family,
85-
size: Math.round(options.font.size * 1.2),
85+
size: Lib.bigFont(options.font.size),
8686
color: dfltFontColor
8787
});
8888

src/traces/bar/plot.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -647,11 +647,11 @@ function calcTexttemplate(fullLayout, cd, index, xa, ya) {
647647
}
648648

649649
function formatLabel(u) {
650-
return tickText(pAxis, u, true).text;
650+
return tickText(pAxis, pAxis.c2l(u), true).text;
651651
}
652652

653653
function formatNumber(v) {
654-
return tickText(vAxis, +v, true).text;
654+
return tickText(vAxis, vAxis.c2l(v), true).text;
655655
}
656656

657657
var cdi = cd[index];

src/traces/carpet/axis_defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, options)
110110
if(title) {
111111
Lib.coerceFont(coerce, 'title.font', {
112112
family: font.family,
113-
size: Math.round(font.size * 1.2),
113+
size: Lib.bigFont(font.size),
114114
color: dfltFontColor
115115
});
116116
coerce('title.offset');

src/traces/scatter/format_labels.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module.exports = function formatLabels(cdi, trace, fullLayout) {
99
var xa = Axes.getFromTrace(mockGd, trace, 'x');
1010
var ya = Axes.getFromTrace(mockGd, trace, 'y');
1111

12-
labels.xLabel = Axes.tickText(xa, cdi.x, true).text;
13-
labels.yLabel = Axes.tickText(ya, cdi.y, true).text;
12+
labels.xLabel = Axes.tickText(xa, xa.c2l(cdi.x), true).text;
13+
labels.yLabel = Axes.tickText(ya, ya.c2l(cdi.y), true).text;
1414

1515
return labels;
1616
};

src/traces/scattergl/calc.js

+7-9
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module.exports = function calc(gd, trace) {
2727
var hasTooManyPoints = len >= TOO_MANY_POINTS;
2828
var len2 = len * 2;
2929
var stash = {};
30-
var i, xx, yy;
30+
var i;
3131

3232
var origX = xa.makeCalcdata(trace, 'x');
3333
var origY = ya.makeCalcdata(trace, 'y');
@@ -42,11 +42,12 @@ module.exports = function calc(gd, trace) {
4242
// we need hi-precision for scatter2d,
4343
// regl-scatter2d uses NaNs for bad/missing values
4444
var positions = new Array(len2);
45+
var _ids = new Array(len);
4546
for(i = 0; i < len; i++) {
46-
xx = x[i];
47-
yy = y[i];
48-
positions[i * 2] = xx === BADNUM ? NaN : xx;
49-
positions[i * 2 + 1] = yy === BADNUM ? NaN : yy;
47+
positions[i * 2] = x[i] === BADNUM ? NaN : x[i];
48+
positions[i * 2 + 1] = y[i] === BADNUM ? NaN : y[i];
49+
// Pre-compute ids.
50+
_ids[i] = i;
5051
}
5152

5253
if(xa.type === 'log') {
@@ -66,10 +67,7 @@ module.exports = function calc(gd, trace) {
6667
// FIXME: delegate this to webworker
6768
stash.tree = cluster(positions);
6869
} else {
69-
var ids = stash.ids = new Array(len);
70-
for(i = 0; i < len; i++) {
71-
ids[i] = i;
72-
}
70+
stash.ids = _ids;
7371
}
7472

7573
// create scene options and scene

0 commit comments

Comments
 (0)