Update NPM dependencies

This commit is contained in:
Christopher C. Wells 2020-07-21 19:25:01 -07:00
parent 72c157c661
commit 73b89886e7
25 changed files with 3225 additions and 2849 deletions

1256
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -20,16 +20,16 @@
"gulp-stylelint": "^13.0.0", "gulp-stylelint": "^13.0.0",
"gulp-uglify": "^3.0.2", "gulp-uglify": "^3.0.2",
"jquery": "^3.5.1", "jquery": "^3.5.1",
"moment": "^2.25.3", "moment": "^2.27.0",
"moment-timezone": "^0.5.30", "moment-timezone": "^0.5.31",
"plotly.js": "^1.54.1", "plotly.js": "^1.54.6",
"popper.js": "^1.16.1", "popper.js": "^1.16.1",
"pulltorefreshjs": "^0.1.20", "pulltorefreshjs": "^0.1.20",
"pump": "^3.0.0", "pump": "^3.0.0",
"stylelint": "^13.4.0", "stylelint": "^13.6.1",
"stylelint-config-recommended-scss": "^4.2.0", "stylelint-config-recommended-scss": "^4.2.0",
"stylelint-order": "^4.0.0", "stylelint-order": "^4.1.0",
"stylelint-scss": "^3.17.2", "stylelint-scss": "^3.18.0",
"tempusdominus-bootstrap-4": "^5.1.2", "tempusdominus-bootstrap-4": "^5.1.2",
"tempusdominus-core": "^5.0.3" "tempusdominus-core": "^5.0.3"
}, },

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,5 +1,5 @@
/** /**
* plotly.js (cartesian) v1.54.1 * plotly.js (cartesian) v1.54.6
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
* Licensed under the MIT license * Licensed under the MIT license
@ -26043,6 +26043,8 @@ module.exports = function draw(gd, opts) {
.text(title.text); .text(title.text);
textLayout(titleEl, scrollBox, gd, opts); // handle mathjax or multi-line text and compute title height textLayout(titleEl, scrollBox, gd, opts); // handle mathjax or multi-line text and compute title height
} else {
scrollBox.selectAll('.legendtitletext').remove();
} }
var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) { var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) {
@ -37439,58 +37441,81 @@ exports.valObjectMeta = {
* as a convenience, returns the value it finally set * as a convenience, returns the value it finally set
*/ */
exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt) { exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt) {
var opts = nestedProperty(attributes, attribute).get(); return _coerce(containerIn, containerOut, attributes, attribute, dflt).val;
};
function _coerce(containerIn, containerOut, attributes, attribute, dflt, opts) {
var shouldValidate = (opts || {}).shouldValidate;
var attr = nestedProperty(attributes, attribute).get();
if(dflt === undefined) dflt = attr.dflt;
var src = false;
var propIn = nestedProperty(containerIn, attribute); var propIn = nestedProperty(containerIn, attribute);
var propOut = nestedProperty(containerOut, attribute); var propOut = nestedProperty(containerOut, attribute);
var v = propIn.get(); var valIn = propIn.get();
var template = containerOut._template; var template = containerOut._template;
if(v === undefined && template) { if(valIn === undefined && template) {
v = nestedProperty(template, attribute).get(); valIn = nestedProperty(template, attribute).get();
src = (valIn !== undefined);
// already used the template value, so short-circuit the second check // already used the template value, so short-circuit the second check
template = 0; template = 0;
} }
if(dflt === undefined) dflt = opts.dflt;
/** /**
* arrayOk: value MAY be an array, then we do no value checking * arrayOk: value MAY be an array, then we do no value checking
* at this point, because it can be more complicated than the * at this point, because it can be more complicated than the
* individual form (eg. some array vals can be numbers, even if the * individual form (eg. some array vals can be numbers, even if the
* single values must be color strings) * single values must be color strings)
*/ */
if(opts.arrayOk && isArrayOrTypedArray(v)) { if(attr.arrayOk && isArrayOrTypedArray(valIn)) {
propOut.set(v); propOut.set(valIn);
return v; return {
inp: valIn,
val: valIn,
src: true
};
} }
var coerceFunction = exports.valObjectMeta[opts.valType].coerceFunction; var coerceFunction = exports.valObjectMeta[attr.valType].coerceFunction;
coerceFunction(v, propOut, dflt, opts); coerceFunction(valIn, propOut, dflt, attr);
var valOut = propOut.get();
src = (valOut !== undefined) && shouldValidate && validate(valIn, attr);
var out = propOut.get();
// in case v was provided but invalid, try the template again so it still // in case v was provided but invalid, try the template again so it still
// overrides the regular default // overrides the regular default
if(template && out === dflt && !validate(v, opts)) { if(template && valOut === dflt && !validate(valIn, attr)) {
v = nestedProperty(template, attribute).get(); valIn = nestedProperty(template, attribute).get();
coerceFunction(v, propOut, dflt, opts); coerceFunction(valIn, propOut, dflt, attr);
out = propOut.get(); valOut = propOut.get();
src = (valOut !== undefined) && shouldValidate && validate(valIn, attr);
} }
return out;
}; return {
inp: valIn,
val: valOut,
src: src
};
}
/** /**
* Variation on coerce * Variation on coerce
* useful when setting an attribute to a valid value
* can change the default for another attribute.
* *
* Uses coerce to get attribute value if user input is valid, * Uses coerce to get attribute value if user input is valid,
* returns attribute default if user input it not valid or * returns attribute default if user input it not valid or
* returns false if there is no user input. * returns false if there is no user input.
*/ */
exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) { exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) {
var propIn = nestedProperty(containerIn, attribute); var out = _coerce(containerIn, containerOut, attributes, attribute, dflt, {
var propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt); shouldValidate: true
var valIn = propIn.get(); });
return (out.src && out.inp !== undefined) ? out.val : false;
return (valIn !== undefined && valIn !== null) ? propOut : false;
}; };
/* /*
@ -39187,10 +39212,10 @@ lib.bBoxIntersect = function(a, b, pad) {
* func: the function to apply * func: the function to apply
* x1, x2: optional extra args * x1, x2: optional extra args
*/ */
lib.simpleMap = function(array, func, x1, x2) { lib.simpleMap = function(array, func, x1, x2, opts) {
var len = array.length; var len = array.length;
var out = new Array(len); var out = new Array(len);
for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2); for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2, opts);
return out; return out;
}; };
@ -41745,9 +41770,8 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) {
var fromVal = fromContainer[k]; var fromVal = fromContainer[k];
var toVal = toContainer[k]; var toVal = toContainer[k];
if(toVal === fromVal) { if(toVal === fromVal) continue;
continue;
}
if(k.charAt(0) === '_' || typeof fromVal === 'function') { if(k.charAt(0) === '_' || typeof fromVal === 'function') {
// if it already exists at this point, it's something // if it already exists at this point, it's something
// that we recreate each time around, so ignore it // that we recreate each time around, so ignore it
@ -41791,6 +41815,7 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) {
var isNumeric = _dereq_('fast-isnumeric'); var isNumeric = _dereq_('fast-isnumeric');
var loggers = _dereq_('./loggers'); var loggers = _dereq_('./loggers');
var identity = _dereq_('./identity'); var identity = _dereq_('./identity');
var BADNUM = _dereq_('../constants/numerical').BADNUM;
// don't trust floating point equality - fraction of bin size to call // don't trust floating point equality - fraction of bin size to call
// "on the line" and ensure that they go the right way specified by // "on the line" and ensure that they go the right way specified by
@ -41851,22 +41876,35 @@ exports.sorterDes = function(a, b) { return b - a; };
*/ */
exports.distinctVals = function(valsIn) { exports.distinctVals = function(valsIn) {
var vals = valsIn.slice(); // otherwise we sort the original array... var vals = valsIn.slice(); // otherwise we sort the original array...
vals.sort(exports.sorterAsc); vals.sort(exports.sorterAsc); // undefined listed in the end - also works on IE11
var l = vals.length - 1; var last;
var minDiff = (vals[l] - vals[0]) || 1; for(last = vals.length - 1; last > -1; last--) {
var errDiff = minDiff / (l || 1) / 10000; if(vals[last] !== BADNUM) break;
var v2 = [vals[0]]; }
var minDiff = (vals[last] - vals[0]) || 1;
var errDiff = minDiff / (last || 1) / 10000;
var newVals = [];
var preV;
for(var i = 0; i <= last; i++) {
var v = vals[i];
for(var i = 0; i < l; i++) {
// make sure values aren't just off by a rounding error // make sure values aren't just off by a rounding error
if(vals[i + 1] > vals[i] + errDiff) { var diff = v - preV;
minDiff = Math.min(minDiff, vals[i + 1] - vals[i]);
v2.push(vals[i + 1]); if(preV === undefined) {
newVals.push(v);
preV = v;
} else if(diff > errDiff) {
minDiff = Math.min(minDiff, diff);
newVals.push(v);
preV = v;
} }
} }
return {vals: v2, minDiff: minDiff}; return {vals: newVals, minDiff: minDiff};
}; };
/** /**
@ -41963,7 +42001,7 @@ exports.findIndexOfMin = function(arr, fn) {
return ind; return ind;
}; };
},{"./identity":177,"./loggers":182,"fast-isnumeric":18}],197:[function(_dereq_,module,exports){ },{"../constants/numerical":158,"./identity":177,"./loggers":182,"fast-isnumeric":18}],197:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -44457,7 +44495,13 @@ function plot(gd, data, layout, config) {
fullLayout._replotting = true; fullLayout._replotting = true;
// make or remake the framework if we need to // make or remake the framework if we need to
if(graphWasEmpty) makePlotFramework(gd); if(graphWasEmpty || fullLayout._shouldCreateBgLayer) {
makePlotFramework(gd);
if(fullLayout._shouldCreateBgLayer) {
delete fullLayout._shouldCreateBgLayer;
}
}
// polar need a different framework // polar need a different framework
if(gd.framework !== makePlotFramework) { if(gd.framework !== makePlotFramework) {
@ -47011,6 +47055,16 @@ function react(gd, data, layout, config) {
applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout); applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout);
var allNames = Object.getOwnPropertyNames(oldFullLayout);
for(var q = 0; q < allNames.length; q++) {
var name = allNames[q];
var start = name.substring(0, 5);
if(start === 'xaxis' || start === 'yaxis') {
var emptyCategories = oldFullLayout[name]._emptyCategories;
if(emptyCategories) emptyCategories();
}
}
// "true" skips updating calcdata and remapping arrays from calcTransforms, // "true" skips updating calcdata and remapping arrays from calcTransforms,
// which supplyDefaults usually does at the end, but we may need to NOT do // which supplyDefaults usually does at the end, but we may need to NOT do
// if the diff (which we haven't determined yet) says we'll recalc // if the diff (which we haven't determined yet) says we'll recalc
@ -50977,6 +51031,9 @@ var isArrayOrTypedArray = Lib.isArrayOrTypedArray;
* error message (shown in console in logger config argument is enable) * error message (shown in console in logger config argument is enable)
*/ */
module.exports = function validate(data, layout) { module.exports = function validate(data, layout) {
if(data === undefined) data = [];
if(layout === undefined) layout = {};
var schema = PlotSchema.get(); var schema = PlotSchema.get();
var errorList = []; var errorList = [];
var gd = {_context: Lib.extendFlat({}, dfltConfig)}; var gd = {_context: Lib.extendFlat({}, dfltConfig)};
@ -52311,6 +52368,15 @@ var autorange = _dereq_('./autorange');
axes.getAutoRange = autorange.getAutoRange; axes.getAutoRange = autorange.getAutoRange;
axes.findExtremes = autorange.findExtremes; axes.findExtremes = autorange.findExtremes;
var epsilon = 0.0001;
function expandRange(range) {
var delta = (range[1] - range[0]) * epsilon;
return [
range[0] - delta,
range[1] + delta
];
}
/* /*
* find the list of possible axes to reference with an xref or yref attribute * find the list of possible axes to reference with an xref or yref attribute
* and coerce it to that list * and coerce it to that list
@ -52755,8 +52821,8 @@ function autoShiftMonthBins(binStart, data, dtick, dataMin, calendar) {
// ---------------------------------------------------- // ----------------------------------------------------
// ensure we have tick0, dtick, and tick rounding calculated // ensure we have tick0, dtick, and tick rounding calculated
axes.prepTicks = function(ax) { axes.prepTicks = function(ax, opts) {
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l, undefined, undefined, opts);
// calculate max number of (auto) ticks to display based on plot size // calculate max number of (auto) ticks to display based on plot size
if(ax.tickmode === 'auto' || !ax.dtick) { if(ax.tickmode === 'auto' || !ax.dtick) {
@ -52809,20 +52875,21 @@ axes.prepTicks = function(ax) {
// if ticks are set to automatic, determine the right values (tick0,dtick) // if ticks are set to automatic, determine the right values (tick0,dtick)
// in any case, set tickround to # of digits to round tick labels to, // in any case, set tickround to # of digits to round tick labels to,
// or codes to this effect for log and date scales // or codes to this effect for log and date scales
axes.calcTicks = function calcTicks(ax) { axes.calcTicks = function calcTicks(ax, opts) {
axes.prepTicks(ax); axes.prepTicks(ax, opts);
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l, undefined, undefined, opts);
// now that we've figured out the auto values for formatting // now that we've figured out the auto values for formatting
// in case we're missing some ticktext, we can break out for array ticks // in case we're missing some ticktext, we can break out for array ticks
if(ax.tickmode === 'array') return arrayTicks(ax); if(ax.tickmode === 'array') return arrayTicks(ax);
// find the first tick // find the first tick
ax._tmin = axes.tickFirst(ax); ax._tmin = axes.tickFirst(ax, opts);
// add a tiny bit so we get ticks which may have rounded out // add a tiny bit so we get ticks which may have rounded out
var startTick = rng[0] * 1.0001 - rng[1] * 0.0001; var exRng = expandRange(rng);
var endTick = rng[1] * 1.0001 - rng[0] * 0.0001; var startTick = exRng[0];
var endTick = exRng[1];
// check for reversed axis // check for reversed axis
var axrev = (rng[1] < rng[0]); var axrev = (rng[1] < rng[0]);
@ -52867,26 +52934,15 @@ axes.calcTicks = function calcTicks(ax) {
if(ax.rangebreaks) { if(ax.rangebreaks) {
// replace ticks inside breaks that would get a tick // replace ticks inside breaks that would get a tick
if(ax.tickmode === 'auto') { // and reduce ticks
for(var t = 0; t < tickVals.length; t++) {
var value = tickVals[t].value;
if(ax.maskBreaks(value) === BADNUM) {
// find which break we are in
for(var k = 0; k < ax._rangebreaks.length; k++) {
var brk = ax._rangebreaks[k];
if(value >= brk.min && value < brk.max) {
tickVals[t].value = brk.max; // replace with break end
break;
}
}
}
}
}
// reduce ticks
var len = tickVals.length; var len = tickVals.length;
if(len > 2) { if(len) {
var tf2 = 2 * (ax.tickfont ? ax.tickfont.size : 12); var tf = 0;
if(ax.tickmode === 'auto') {
tf =
(ax._id.charAt(0) === 'y' ? 2 : 6) *
(ax.tickfont ? ax.tickfont.size : 12);
}
var newTickVals = []; var newTickVals = [];
var prevPos; var prevPos;
@ -52894,12 +52950,26 @@ axes.calcTicks = function calcTicks(ax) {
var dir = axrev ? 1 : -1; var dir = axrev ? 1 : -1;
var first = axrev ? 0 : len - 1; var first = axrev ? 0 : len - 1;
var last = axrev ? len - 1 : 0; var last = axrev ? len - 1 : 0;
for(var q = first; dir * q <= dir * last; q += dir) { // apply reverse loop to pick greater values in breaks first for(var q = first; dir * q <= dir * last; q += dir) {
var pos = ax.c2p(tickVals[q].value); var tickVal = tickVals[q];
if(ax.maskBreaks(tickVal.value) === BADNUM) {
tickVal.value = moveOutsideBreak(tickVal.value, ax);
if(prevPos === undefined || Math.abs(pos - prevPos) > tf2) { if(ax._rl && (
ax._rl[0] === tickVal.value ||
ax._rl[1] === tickVal.value
)) continue;
}
var pos = ax.c2p(tickVal.value);
if(pos === prevPos) {
if(newTickVals[newTickVals.length - 1].value < tickVal.value) {
newTickVals[newTickVals.length - 1] = tickVal;
}
} else if(prevPos === undefined || Math.abs(pos - prevPos) > tf) {
prevPos = pos; prevPos = pos;
newTickVals.push(tickVals[q]); newTickVals.push(tickVal);
} }
} }
tickVals = newTickVals.reverse(); tickVals = newTickVals.reverse();
@ -52946,10 +53016,9 @@ function arrayTicks(ax) {
var text = ax.ticktext; var text = ax.ticktext;
var ticksOut = new Array(vals.length); var ticksOut = new Array(vals.length);
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l);
var r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001; var exRng = expandRange(rng);
var r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001; var tickMin = Math.min(exRng[0], exRng[1]);
var tickMin = Math.min(r0expanded, r1expanded); var tickMax = Math.max(exRng[0], exRng[1]);
var tickMax = Math.max(r0expanded, r1expanded);
var j = 0; var j = 0;
// without a text array, just format the given values as any other ticks // without a text array, just format the given values as any other ticks
@ -53040,8 +53109,7 @@ axes.autoTicks = function(ax, roughDTick) {
roughDTick /= ONEAVGMONTH; roughDTick /= ONEAVGMONTH;
ax.dtick = 'M' + roundDTick(roughDTick, 1, roundBase24); ax.dtick = 'M' + roundDTick(roughDTick, 1, roundBase24);
} else if(roughX2 > ONEDAY) { } else if(roughX2 > ONEDAY) {
ax.dtick = roundDTick(roughDTick, ONEDAY, ax._hasDayOfWeekBreaks ? [1, 7, 14] : roundDays); ax.dtick = roundDTick(roughDTick, ONEDAY, ax._hasDayOfWeekBreaks ? [1, 2, 7, 14] : roundDays);
// get week ticks on sunday // get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is // this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it. // 2 or 3 days... but that's a weird enough case that we'll ignore it.
@ -53189,29 +53257,31 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) {
if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar); if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar);
// Log scales: Linear, Digits // Log scales: Linear, Digits
else if(tType === 'L') return Math.log(Math.pow(10, x) + dtSigned) / Math.LN10; if(tType === 'L') return Math.log(Math.pow(10, x) + dtSigned) / Math.LN10;
// log10 of 2,5,10, or all digits (logs just have to be // log10 of 2,5,10, or all digits (logs just have to be
// close enough to round) // close enough to round)
else if(tType === 'D') { if(tType === 'D') {
var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; var tickset = (dtick === 'D2') ? roundLog2 : roundLog1;
var x2 = x + axSign * 0.01; var x2 = x + axSign * 0.01;
var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev);
return Math.floor(x2) + return Math.floor(x2) +
Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10;
} else throw 'unrecognized dtick ' + String(dtick); }
throw 'unrecognized dtick ' + String(dtick);
}; };
// calculate the first tick on an axis // calculate the first tick on an axis
axes.tickFirst = function(ax) { axes.tickFirst = function(ax, opts) {
var r2l = ax.r2l || Number; var r2l = ax.r2l || Number;
var rng = Lib.simpleMap(ax.range, r2l); var rng = Lib.simpleMap(ax.range, r2l, undefined, undefined, opts);
var axrev = rng[1] < rng[0]; var axrev = rng[1] < rng[0];
var sRound = axrev ? Math.floor : Math.ceil; var sRound = axrev ? Math.floor : Math.ceil;
// add a tiny extra bit to make sure we get ticks // add a tiny extra bit to make sure we get ticks
// that may have been rounded out // that may have been rounded out
var r0 = rng[0] * 1.0001 - rng[1] * 0.0001; var r0 = expandRange(rng)[0];
var dtick = ax.dtick; var dtick = ax.dtick;
var tick0 = r2l(ax.tick0); var tick0 = r2l(ax.tick0);
@ -54342,6 +54412,8 @@ function getDividerVals(ax, vals) {
var out = []; var out = [];
var i, current; var i, current;
var reversed = (vals.length && vals[vals.length - 1].x < vals[0].x);
// never used for labels; // never used for labels;
// no need to worry about the other tickTextObj keys // no need to worry about the other tickTextObj keys
var _push = function(d, bndIndex) { var _push = function(d, bndIndex) {
@ -54355,11 +54427,11 @@ function getDividerVals(ax, vals) {
for(i = 0; i < vals.length; i++) { for(i = 0; i < vals.length; i++) {
var d = vals[i]; var d = vals[i];
if(d.text2 !== current) { if(d.text2 !== current) {
_push(d, 0); _push(d, reversed ? 1 : 0);
} }
current = d.text2; current = d.text2;
} }
_push(vals[i - 1], 1); _push(vals[i - 1], reversed ? 0 : 1);
} }
return out; return out;
@ -55414,6 +55486,17 @@ function isAngular(ax) {
return ax._id === 'angularaxis'; return ax._id === 'angularaxis';
} }
function moveOutsideBreak(v, ax) {
var len = ax._rangebreaks.length;
for(var k = 0; k < len; k++) {
var brk = ax._rangebreaks[k];
if(v >= brk.min && v < brk.max) {
return brk.max;
}
}
return v;
}
},{"../../components/color":52,"../../components/drawing":74,"../../components/titles":147,"../../constants/alignment":154,"../../constants/numerical":158,"../../lib":178,"../../lib/svg_text_utils":199,"../../plots/plots":256,"../../registry":269,"./autorange":221,"./axis_autotype":223,"./axis_ids":225,"./clean_ticks":227,"./layout_attributes":236,"./set_convert":242,"d3":16,"fast-isnumeric":18}],223:[function(_dereq_,module,exports){ },{"../../components/color":52,"../../components/drawing":74,"../../components/titles":147,"../../constants/alignment":154,"../../constants/numerical":158,"../../lib":178,"../../lib/svg_text_utils":199,"../../plots/plots":256,"../../registry":269,"./autorange":221,"./axis_autotype":223,"./axis_ids":225,"./clean_ticks":227,"./layout_attributes":236,"./set_convert":242,"d3":16,"fast-isnumeric":18}],223:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
@ -55824,7 +55907,7 @@ exports.name2id = function name2id(name) {
}; };
exports.cleanId = function cleanId(id, axLetter) { exports.cleanId = function cleanId(id, axLetter) {
if(!id.match(constants.AX_ID_PATTERN)) return; if(typeof id !== 'string' || !id.match(constants.AX_ID_PATTERN)) return;
if(axLetter && id.charAt(0) !== axLetter) return; if(axLetter && id.charAt(0) !== axLetter) return;
var axNum = id.substr(1).replace(/^0+/, ''); var axNum = id.substr(1).replace(/^0+/, '');
@ -57810,6 +57893,10 @@ function attachWheelEventHandler(element, handler) {
if(!supportsPassive) { if(!supportsPassive) {
if(element.onwheel !== undefined) element.onwheel = handler; if(element.onwheel !== undefined) element.onwheel = handler;
else if(element.onmousewheel !== undefined) element.onmousewheel = handler; else if(element.onmousewheel !== undefined) element.onmousewheel = handler;
else if(!element.isAddedWheelEvent) {
element.isAddedWheelEvent = true;
element.addEventListener('wheel', handler, {passive: false});
}
} else { } else {
var wheelEventName = element.onwheel !== undefined ? 'wheel' : 'mousewheel'; var wheelEventName = element.onwheel !== undefined ? 'wheel' : 'mousewheel';
@ -61156,7 +61243,7 @@ module.exports = function setConvert(ax, fullLayout) {
* - inserts a dummy arg so calendar is the 3rd arg (see notes below). * - inserts a dummy arg so calendar is the 3rd arg (see notes below).
* - defaults to ax.calendar * - defaults to ax.calendar
*/ */
function dt2ms(v, _, calendar) { function dt2ms(v, _, calendar, opts) {
// NOTE: Changed this behavior: previously we took any numeric value // NOTE: Changed this behavior: previously we took any numeric value
// to be a ms, even if it was a string that could be a bare year. // to be a ms, even if it was a string that could be a bare year.
// Now we convert it as a date if at all possible, and only try // Now we convert it as a date if at all possible, and only try
@ -61165,6 +61252,13 @@ module.exports = function setConvert(ax, fullLayout) {
if(ms === BADNUM) { if(ms === BADNUM) {
if(isNumeric(v)) { if(isNumeric(v)) {
v = +v; v = +v;
if((opts || {}).msUTC) {
// For now it is only used
// to fix bar length in milliseconds.
// It could be applied in other places in v2
return v;
}
// keep track of tenths of ms, that `new Date` will drop // keep track of tenths of ms, that `new Date` will drop
// same logic as in Lib.ms2DateTime // same logic as in Lib.ms2DateTime
var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10); var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10);
@ -61752,9 +61846,7 @@ module.exports = function setConvert(ax, fullLayout) {
var isNewBreak = true; var isNewBreak = true;
for(var j = 0; j < rangebreaksOut.length; j++) { for(var j = 0; j < rangebreaksOut.length; j++) {
var brkj = rangebreaksOut[j]; var brkj = rangebreaksOut[j];
if(min > brkj.max || max < brkj.min) { if(min < brkj.max && max >= brkj.min) {
// potentially a new break
} else {
if(min < brkj.min) { if(min < brkj.min) {
brkj.min = min; brkj.min = min;
} }
@ -61859,7 +61951,7 @@ module.exports = function setConvert(ax, fullLayout) {
// the first letter of ax._id?) // the first letter of ax._id?)
// in case the expected data isn't there, make a list of // in case the expected data isn't there, make a list of
// integers based on the opposite data // integers based on the opposite data
ax.makeCalcdata = function(trace, axLetter) { ax.makeCalcdata = function(trace, axLetter, opts) {
var arrayIn, arrayOut, i, len; var arrayIn, arrayOut, i, len;
var axType = ax.type; var axType = ax.type;
@ -61883,7 +61975,7 @@ module.exports = function setConvert(ax, fullLayout) {
arrayOut = new Array(len); arrayOut = new Array(len);
for(i = 0; i < len; i++) { for(i = 0; i < len; i++) {
arrayOut[i] = ax.d2c(arrayIn[i], 0, cal); arrayOut[i] = ax.d2c(arrayIn[i], 0, cal, opts);
} }
} else { } else {
var v0 = ((axLetter + '0') in trace) ? ax.d2c(trace[axLetter + '0'], 0, cal) : 0; var v0 = ((axLetter + '0') in trace) ? ax.d2c(trace[axLetter + '0'], 0, cal) : 0;
@ -61931,13 +62023,13 @@ module.exports = function setConvert(ax, fullLayout) {
} }
}; };
ax._emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
// should skip if not category nor multicategory // should skip if not category nor multicategory
ax.clearCalc = function() { ax.clearCalc = function() {
var emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
var matchGroups = fullLayout._axisMatchGroups; var matchGroups = fullLayout._axisMatchGroups;
if(matchGroups && matchGroups.length) { if(matchGroups && matchGroups.length) {
@ -61964,14 +62056,14 @@ module.exports = function setConvert(ax, fullLayout) {
ax._categories = categories; ax._categories = categories;
ax._categoriesMap = categoriesMap; ax._categoriesMap = categoriesMap;
} else { } else {
emptyCategories(); ax._emptyCategories();
} }
break; break;
} }
} }
if(!found) emptyCategories(); if(!found) ax._emptyCategories();
} else { } else {
emptyCategories(); ax._emptyCategories();
} }
if(ax._initialCategories) { if(ax._initialCategories) {
@ -61985,12 +62077,8 @@ module.exports = function setConvert(ax, fullLayout) {
// returns the indices of the traces affected by the reordering // returns the indices of the traces affected by the reordering
ax.sortByInitialCategories = function() { ax.sortByInitialCategories = function() {
var affectedTraces = []; var affectedTraces = [];
var emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
emptyCategories(); ax._emptyCategories();
if(ax._initialCategories) { if(ax._initialCategories) {
for(var j = 0; j < ax._initialCategories.length; j++) { for(var j = 0; j < ax._initialCategories.length; j++) {
@ -62198,6 +62286,7 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce,
'use strict'; 'use strict';
var cleanTicks = _dereq_('./clean_ticks'); var cleanTicks = _dereq_('./clean_ticks');
var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) { module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) {
function readInput(attr) { function readInput(attr) {
@ -62210,18 +62299,11 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe
var _tick0 = readInput('tick0'); var _tick0 = readInput('tick0');
var _dtick = readInput('dtick'); var _dtick = readInput('dtick');
var _tickvals = readInput('tickvals'); var _tickvals = readInput('tickvals');
var _tickmode = readInput('tickmode');
var tickmode;
if(_tickmode === 'array' && var tickmodeDefault = isArrayOrTypedArray(_tickvals) ? 'array' :
(axType === 'log' || axType === 'date')) { _dtick ? 'linear' :
tickmode = containerOut.tickmode = 'auto'; 'auto';
} else { var tickmode = coerce('tickmode', tickmodeDefault);
var tickmodeDefault = Array.isArray(_tickvals) ? 'array' :
_dtick ? 'linear' :
'auto';
tickmode = coerce('tickmode', tickmodeDefault);
}
if(tickmode === 'auto') coerce('nticks'); if(tickmode === 'auto') coerce('nticks');
else if(tickmode === 'linear') { else if(tickmode === 'linear') {
@ -62239,7 +62321,7 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe
} }
}; };
},{"./clean_ticks":227}],246:[function(_dereq_,module,exports){ },{"../../lib":178,"./clean_ticks":227}],246:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -64269,6 +64351,20 @@ plots.supplyDefaults = function(gd, opts) {
// clean subplots and other artifacts from previous plot calls // clean subplots and other artifacts from previous plot calls
plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout); plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout);
var hadGL2D = !!(oldFullLayout._has && oldFullLayout._has('gl2d'));
var hasGL2D = !!(newFullLayout._has && newFullLayout._has('gl2d'));
var hadCartesian = !!(oldFullLayout._has && oldFullLayout._has('cartesian'));
var hasCartesian = !!(newFullLayout._has && newFullLayout._has('cartesian'));
var hadBgLayer = hadCartesian || hadGL2D;
var hasBgLayer = hasCartesian || hasGL2D;
if(hadBgLayer && !hasBgLayer) {
// remove bgLayer
oldFullLayout._bgLayer.remove();
} else if(hasBgLayer && !hadBgLayer) {
// create bgLayer
newFullLayout._shouldCreateBgLayer = true;
}
// clear selection outline until we implement persistent selection, // clear selection outline until we implement persistent selection,
// don't clear them though when drag handlers (e.g. listening to // don't clear them though when drag handlers (e.g. listening to
// `plotly_selecting`) update the graph. // `plotly_selecting`) update the graph.
@ -65339,6 +65435,15 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) {
)(layoutIn, layoutOut, coerce); )(layoutIn, layoutOut, coerce);
}; };
function getComputedSize(attr) {
return (
(typeof attr === 'string') &&
(attr.substr(attr.length - 2) === 'px') &&
parseFloat(attr)
);
}
plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) {
var context = gd._context || {}; var context = gd._context || {};
var frameMargins = context.frameMargins; var frameMargins = context.frameMargins;
@ -65365,8 +65470,8 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) {
// but don't enforce any ratio restrictions // but don't enforce any ratio restrictions
var computedStyle = isPlotDiv ? window.getComputedStyle(gd) : {}; var computedStyle = isPlotDiv ? window.getComputedStyle(gd) : {};
newWidth = parseFloat(computedStyle.width) || parseFloat(computedStyle.maxWidth) || fullLayout.width; newWidth = getComputedSize(computedStyle.width) || getComputedSize(computedStyle.maxWidth) || fullLayout.width;
newHeight = parseFloat(computedStyle.height) || parseFloat(computedStyle.maxHeight) || fullLayout.height; newHeight = getComputedSize(computedStyle.height) || getComputedSize(computedStyle.maxHeight) || fullLayout.height;
if(isNumeric(frameMargins) && frameMargins > 0) { if(isNumeric(frameMargins) && frameMargins > 0) {
var factor = 1 - 2 * frameMargins; var factor = 1 - 2 * frameMargins;
@ -70032,7 +70137,7 @@ proto.initInteractions = function() {
b: mins0.b + (dxScaled + dyScaled) / 2, b: mins0.b + (dxScaled + dyScaled) / 2,
c: mins0.c - (dxScaled - dyScaled) / 2 c: mins0.c - (dxScaled - dyScaled) / 2
}; };
var minsorted = [mins.a, mins.b, mins.c].sort(); var minsorted = [mins.a, mins.b, mins.c].sort(Lib.sorterAsc);
var minindices = { var minindices = {
a: minsorted.indexOf(mins.a), a: minsorted.indexOf(mins.a),
b: minsorted.indexOf(mins.b), b: minsorted.indexOf(mins.b),
@ -71663,11 +71768,15 @@ module.exports = function calc(gd, trace) {
var ya = Axes.getFromId(gd, trace.yaxis || 'y'); var ya = Axes.getFromId(gd, trace.yaxis || 'y');
var size, pos; var size, pos;
var sizeOpts = {
msUTC: !!(trace.base || trace.base === 0)
};
if(trace.orientation === 'h') { if(trace.orientation === 'h') {
size = xa.makeCalcdata(trace, 'x'); size = xa.makeCalcdata(trace, 'x', sizeOpts);
pos = ya.makeCalcdata(trace, 'y'); pos = ya.makeCalcdata(trace, 'y');
} else { } else {
size = ya.makeCalcdata(trace, 'y'); size = ya.makeCalcdata(trace, 'y', sizeOpts);
pos = xa.makeCalcdata(trace, 'x'); pos = xa.makeCalcdata(trace, 'x');
} }
@ -76161,8 +76270,11 @@ function plot(gd, plotinfo, cdbox, boxLayer) {
} }
function plotBoxAndWhiskers(sel, axes, trace, t) { function plotBoxAndWhiskers(sel, axes, trace, t) {
var posAxis = axes.pos; var isHorizontal = trace.orientation === 'h';
var valAxis = axes.val; var valAxis = axes.val;
var posAxis = axes.pos;
var posHasRangeBreaks = !!posAxis.rangebreaks;
var bPos = t.bPos; var bPos = t.bPos;
var wdPos = t.wdPos || 0; var wdPos = t.wdPos || 0;
var bPosPxOffset = t.bPosPxOffset || 0; var bPosPxOffset = t.bPosPxOffset || 0;
@ -76196,11 +76308,15 @@ function plotBoxAndWhiskers(sel, axes, trace, t) {
if(d.empty) return 'M0,0Z'; if(d.empty) return 'M0,0Z';
var lcenter = posAxis.c2l(d.pos + bPos, true); var lcenter = posAxis.c2l(d.pos + bPos, true);
var posc = posAxis.l2p(lcenter) + bPosPxOffset;
var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset; var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset;
var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset; var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset;
var posw0 = posAxis.l2p(lcenter - wdPos) + bPosPxOffset; var posc = posHasRangeBreaks ? (pos0 + pos1) / 2 : posAxis.l2p(lcenter) + bPosPxOffset;
var posw1 = posAxis.l2p(lcenter + wdPos) + bPosPxOffset;
var r = trace.whiskerwidth;
var posw0 = posHasRangeBreaks ? pos0 * r + (1 - r) * posc : posAxis.l2p(lcenter - wdPos) + bPosPxOffset;
var posw1 = posHasRangeBreaks ? pos1 * r + (1 - r) * posc : posAxis.l2p(lcenter + wdPos) + bPosPxOffset;
var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset; var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset;
var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset;
var q1 = valAxis.c2p(d.q1, true); var q1 = valAxis.c2p(d.q1, true);
@ -76224,30 +76340,45 @@ function plotBoxAndWhiskers(sel, axes, trace, t) {
var ln = valAxis.c2p(d.ln, true); var ln = valAxis.c2p(d.ln, true);
var un = valAxis.c2p(d.un, true); var un = valAxis.c2p(d.un, true);
if(trace.orientation === 'h') { if(isHorizontal) {
d3.select(this).attr('d', d3.select(this).attr('d',
'M' + m + ',' + posm0 + 'V' + posm1 + // median line 'M' + m + ',' + posm0 + 'V' + posm1 + // median line
'M' + q1 + ',' + pos0 + 'V' + pos1 + // left edge 'M' + q1 + ',' + pos0 + 'V' + pos1 + // left edge
(notched ? 'H' + ln + 'L' + m + ',' + posm1 + 'L' + un + ',' + pos1 : '') + // top notched edge (notched ?
'H' + ln + 'L' + m + ',' + posm1 + 'L' + un + ',' + pos1 :
''
) + // top notched edge
'H' + q3 + // end of the top edge 'H' + q3 + // end of the top edge
'V' + pos0 + // right edge 'V' + pos0 + // right edge
(notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge (notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge
'Z' + // end of the box 'Z' + // end of the box
'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers
((whiskerWidth === 0) ? '' : // whisker caps (whiskerWidth === 0 ?
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1)); '' : // whisker caps
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1
)
);
} else { } else {
d3.select(this).attr('d', d3.select(this).attr('d',
'M' + posm0 + ',' + m + 'H' + posm1 + // median line 'M' + posm0 + ',' + m + 'H' + posm1 + // median line
'M' + pos0 + ',' + q1 + 'H' + pos1 + // top of the box 'M' + pos0 + ',' + q1 + 'H' + pos1 + // top of the box
(notched ? 'V' + ln + 'L' + posm1 + ',' + m + 'L' + pos1 + ',' + un : '') + // notched right edge (notched ?
'V' + ln + 'L' + posm1 + ',' + m + 'L' + pos1 + ',' + un :
''
) + // notched right edge
'V' + q3 + // end of the right edge 'V' + q3 + // end of the right edge
'H' + pos0 + // bottom of the box 'H' + pos0 + // bottom of the box
(notched ? 'V' + un + 'L' + posm0 + ',' + m + 'L' + pos0 + ',' + ln : '') + // notched left edge (notched ?
'V' + un + 'L' + posm0 + ',' + m + 'L' + pos0 + ',' + ln :
''
) + // notched left edge
'Z' + // end of the box 'Z' + // end of the box
'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers
((whiskerWidth === 0) ? '' : // whisker caps (whiskerWidth === 0 ?
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1)); '' : // whisker caps
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1
)
);
} }
}); });
} }
@ -76363,8 +76494,10 @@ function plotPoints(sel, axes, trace, t) {
} }
function plotBoxMean(sel, axes, trace, t) { function plotBoxMean(sel, axes, trace, t) {
var posAxis = axes.pos;
var valAxis = axes.val; var valAxis = axes.val;
var posAxis = axes.pos;
var posHasRangeBreaks = !!posAxis.rangebreaks;
var bPos = t.bPos; var bPos = t.bPos;
var bPosPxOffset = t.bPosPxOffset || 0; var bPosPxOffset = t.bPosPxOffset || 0;
@ -76398,9 +76531,11 @@ function plotBoxMean(sel, axes, trace, t) {
paths.each(function(d) { paths.each(function(d) {
var lcenter = posAxis.c2l(d.pos + bPos, true); var lcenter = posAxis.c2l(d.pos + bPos, true);
var posc = posAxis.l2p(lcenter) + bPosPxOffset;
var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset; var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset;
var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset; var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset;
var posc = posHasRangeBreaks ? (pos0 + pos1) / 2 : posAxis.l2p(lcenter) + bPosPxOffset;
var m = valAxis.c2p(d.mean, true); var m = valAxis.c2p(d.mean, true);
var sl = valAxis.c2p(d.mean - d.sd, true); var sl = valAxis.c2p(d.mean - d.sd, true);
var sh = valAxis.c2p(d.mean + d.sd, true); var sh = valAxis.c2p(d.mean + d.sd, true);
@ -79071,6 +79206,7 @@ var clean2dArray = _dereq_('./clean_2d_array');
var interp2d = _dereq_('./interp2d'); var interp2d = _dereq_('./interp2d');
var findEmpties = _dereq_('./find_empties'); var findEmpties = _dereq_('./find_empties');
var makeBoundArray = _dereq_('./make_bound_array'); var makeBoundArray = _dereq_('./make_bound_array');
var BADNUM = _dereq_('../../constants/numerical').BADNUM;
module.exports = function calc(gd, trace) { module.exports = function calc(gd, trace) {
// prepare the raw data // prepare the raw data
@ -79122,13 +79258,25 @@ module.exports = function calc(gd, trace) {
dy = trace.dy; dy = trace.dy;
z = clean2dArray(zIn, trace, xa, ya); z = clean2dArray(zIn, trace, xa, ya);
}
if(isContour || trace.connectgaps) { if(xa.rangebreaks || ya.rangebreaks) {
trace._emptypoints = findEmpties(z); z = dropZonBreaks(x, y, z);
interp2d(z, trace._emptypoints);
if(!isHist) {
x = skipBreaks(x);
y = skipBreaks(y);
trace._x = x;
trace._y = y;
} }
} }
if(!isHist && (isContour || trace.connectgaps)) {
trace._emptypoints = findEmpties(z);
interp2d(z, trace._emptypoints);
}
function noZsmooth(msg) { function noZsmooth(msg) {
zsmooth = trace._input.zsmooth = trace.zsmooth = false; zsmooth = trace._input.zsmooth = trace.zsmooth = false;
Lib.warn('cannot use zsmooth: "fast": ' + msg); Lib.warn('cannot use zsmooth: "fast": ' + msg);
@ -79209,7 +79357,33 @@ module.exports = function calc(gd, trace) {
return [cd0]; return [cd0];
}; };
},{"../../components/colorscale/calc":60,"../../lib":178,"../../plots/cartesian/axes":222,"../../registry":269,"../histogram2d/calc":359,"./clean_2d_array":332,"./convert_column_xyz":334,"./find_empties":336,"./interp2d":339,"./make_bound_array":340}],332:[function(_dereq_,module,exports){ function skipBreaks(a) {
var b = [];
var len = a.length;
for(var i = 0; i < len; i++) {
var v = a[i];
if(v !== BADNUM) b.push(v);
}
return b;
}
function dropZonBreaks(x, y, z) {
var newZ = [];
var k = -1;
for(var i = 0; i < z.length; i++) {
if(y[i] === BADNUM) continue;
k++;
newZ[k] = [];
for(var j = 0; j < z[i].length; j++) {
if(x[j] === BADNUM) continue;
newZ[k].push(z[i][j]);
}
}
return newZ;
}
},{"../../components/colorscale/calc":60,"../../constants/numerical":158,"../../lib":178,"../../plots/cartesian/axes":222,"../../registry":269,"../histogram2d/calc":359,"./clean_2d_array":332,"./convert_column_xyz":334,"./find_empties":336,"./interp2d":339,"./make_bound_array":340}],332:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -79335,18 +79509,21 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name,
var text; var text;
var hovertext; var hovertext;
var nI = col2vals.length;
var nJ = col1vals.length;
for(i = 0; i < arrayVarNames.length; i++) { for(i = 0; i < arrayVarNames.length; i++) {
newArrays[i] = Lib.init2dArray(col2vals.length, col1vals.length); newArrays[i] = Lib.init2dArray(nI, nJ);
} }
if(hasColumnText) { if(hasColumnText) {
text = Lib.init2dArray(col2vals.length, col1vals.length); text = Lib.init2dArray(nI, nJ);
} }
if(hasColumnHoverText) { if(hasColumnHoverText) {
hovertext = Lib.init2dArray(col2vals.length, col1vals.length); hovertext = Lib.init2dArray(nI, nJ);
} }
var after2before = Lib.init2dArray(col2vals.length, col1vals.length); var after2before = Lib.init2dArray(nI, nJ);
for(i = 0; i < colLen; i++) { for(i = 0; i < colLen; i++) {
if(col1[i] !== BADNUM && col2[i] !== BADNUM) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) {
@ -80410,6 +80587,11 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x
traceOut._length = null; traceOut._length = null;
} }
if(
traceIn.type === 'heatmapgl' ||
traceIn.type === 'contourgl'
) return true; // skip calendars until we handle them in those traces
var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults');
handleCalendarDefaults(traceIn, traceOut, [xName, yName], layout); handleCalendarDefaults(traceIn, traceOut, [xName, yName], layout);
@ -89838,7 +90020,7 @@ module.exports = function style(gd) {
'use strict'; 'use strict';
// package version injected by `npm run preprocess` // package version injected by `npm run preprocess`
exports.version = '1.54.1'; exports.version = '1.54.6';
},{}]},{},[11])(11) },{}]},{},[11])(11)
}); });

Binary file not shown.

View File

@ -1,5 +1,5 @@
/** /**
* plotly.js (cartesian) v1.54.1 * plotly.js (cartesian) v1.54.6
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
* Licensed under the MIT license * Licensed under the MIT license
@ -26043,6 +26043,8 @@ module.exports = function draw(gd, opts) {
.text(title.text); .text(title.text);
textLayout(titleEl, scrollBox, gd, opts); // handle mathjax or multi-line text and compute title height textLayout(titleEl, scrollBox, gd, opts); // handle mathjax or multi-line text and compute title height
} else {
scrollBox.selectAll('.legendtitletext').remove();
} }
var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) { var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) {
@ -37439,58 +37441,81 @@ exports.valObjectMeta = {
* as a convenience, returns the value it finally set * as a convenience, returns the value it finally set
*/ */
exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt) { exports.coerce = function(containerIn, containerOut, attributes, attribute, dflt) {
var opts = nestedProperty(attributes, attribute).get(); return _coerce(containerIn, containerOut, attributes, attribute, dflt).val;
};
function _coerce(containerIn, containerOut, attributes, attribute, dflt, opts) {
var shouldValidate = (opts || {}).shouldValidate;
var attr = nestedProperty(attributes, attribute).get();
if(dflt === undefined) dflt = attr.dflt;
var src = false;
var propIn = nestedProperty(containerIn, attribute); var propIn = nestedProperty(containerIn, attribute);
var propOut = nestedProperty(containerOut, attribute); var propOut = nestedProperty(containerOut, attribute);
var v = propIn.get(); var valIn = propIn.get();
var template = containerOut._template; var template = containerOut._template;
if(v === undefined && template) { if(valIn === undefined && template) {
v = nestedProperty(template, attribute).get(); valIn = nestedProperty(template, attribute).get();
src = (valIn !== undefined);
// already used the template value, so short-circuit the second check // already used the template value, so short-circuit the second check
template = 0; template = 0;
} }
if(dflt === undefined) dflt = opts.dflt;
/** /**
* arrayOk: value MAY be an array, then we do no value checking * arrayOk: value MAY be an array, then we do no value checking
* at this point, because it can be more complicated than the * at this point, because it can be more complicated than the
* individual form (eg. some array vals can be numbers, even if the * individual form (eg. some array vals can be numbers, even if the
* single values must be color strings) * single values must be color strings)
*/ */
if(opts.arrayOk && isArrayOrTypedArray(v)) { if(attr.arrayOk && isArrayOrTypedArray(valIn)) {
propOut.set(v); propOut.set(valIn);
return v; return {
inp: valIn,
val: valIn,
src: true
};
} }
var coerceFunction = exports.valObjectMeta[opts.valType].coerceFunction; var coerceFunction = exports.valObjectMeta[attr.valType].coerceFunction;
coerceFunction(v, propOut, dflt, opts); coerceFunction(valIn, propOut, dflt, attr);
var valOut = propOut.get();
src = (valOut !== undefined) && shouldValidate && validate(valIn, attr);
var out = propOut.get();
// in case v was provided but invalid, try the template again so it still // in case v was provided but invalid, try the template again so it still
// overrides the regular default // overrides the regular default
if(template && out === dflt && !validate(v, opts)) { if(template && valOut === dflt && !validate(valIn, attr)) {
v = nestedProperty(template, attribute).get(); valIn = nestedProperty(template, attribute).get();
coerceFunction(v, propOut, dflt, opts); coerceFunction(valIn, propOut, dflt, attr);
out = propOut.get(); valOut = propOut.get();
src = (valOut !== undefined) && shouldValidate && validate(valIn, attr);
} }
return out;
}; return {
inp: valIn,
val: valOut,
src: src
};
}
/** /**
* Variation on coerce * Variation on coerce
* useful when setting an attribute to a valid value
* can change the default for another attribute.
* *
* Uses coerce to get attribute value if user input is valid, * Uses coerce to get attribute value if user input is valid,
* returns attribute default if user input it not valid or * returns attribute default if user input it not valid or
* returns false if there is no user input. * returns false if there is no user input.
*/ */
exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) { exports.coerce2 = function(containerIn, containerOut, attributes, attribute, dflt) {
var propIn = nestedProperty(containerIn, attribute); var out = _coerce(containerIn, containerOut, attributes, attribute, dflt, {
var propOut = exports.coerce(containerIn, containerOut, attributes, attribute, dflt); shouldValidate: true
var valIn = propIn.get(); });
return (out.src && out.inp !== undefined) ? out.val : false;
return (valIn !== undefined && valIn !== null) ? propOut : false;
}; };
/* /*
@ -39187,10 +39212,10 @@ lib.bBoxIntersect = function(a, b, pad) {
* func: the function to apply * func: the function to apply
* x1, x2: optional extra args * x1, x2: optional extra args
*/ */
lib.simpleMap = function(array, func, x1, x2) { lib.simpleMap = function(array, func, x1, x2, opts) {
var len = array.length; var len = array.length;
var out = new Array(len); var out = new Array(len);
for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2); for(var i = 0; i < len; i++) out[i] = func(array[i], x1, x2, opts);
return out; return out;
}; };
@ -41745,9 +41770,8 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) {
var fromVal = fromContainer[k]; var fromVal = fromContainer[k];
var toVal = toContainer[k]; var toVal = toContainer[k];
if(toVal === fromVal) { if(toVal === fromVal) continue;
continue;
}
if(k.charAt(0) === '_' || typeof fromVal === 'function') { if(k.charAt(0) === '_' || typeof fromVal === 'function') {
// if it already exists at this point, it's something // if it already exists at this point, it's something
// that we recreate each time around, so ignore it // that we recreate each time around, so ignore it
@ -41791,6 +41815,7 @@ module.exports = function relinkPrivateKeys(toContainer, fromContainer) {
var isNumeric = _dereq_('fast-isnumeric'); var isNumeric = _dereq_('fast-isnumeric');
var loggers = _dereq_('./loggers'); var loggers = _dereq_('./loggers');
var identity = _dereq_('./identity'); var identity = _dereq_('./identity');
var BADNUM = _dereq_('../constants/numerical').BADNUM;
// don't trust floating point equality - fraction of bin size to call // don't trust floating point equality - fraction of bin size to call
// "on the line" and ensure that they go the right way specified by // "on the line" and ensure that they go the right way specified by
@ -41851,22 +41876,35 @@ exports.sorterDes = function(a, b) { return b - a; };
*/ */
exports.distinctVals = function(valsIn) { exports.distinctVals = function(valsIn) {
var vals = valsIn.slice(); // otherwise we sort the original array... var vals = valsIn.slice(); // otherwise we sort the original array...
vals.sort(exports.sorterAsc); vals.sort(exports.sorterAsc); // undefined listed in the end - also works on IE11
var l = vals.length - 1; var last;
var minDiff = (vals[l] - vals[0]) || 1; for(last = vals.length - 1; last > -1; last--) {
var errDiff = minDiff / (l || 1) / 10000; if(vals[last] !== BADNUM) break;
var v2 = [vals[0]]; }
var minDiff = (vals[last] - vals[0]) || 1;
var errDiff = minDiff / (last || 1) / 10000;
var newVals = [];
var preV;
for(var i = 0; i <= last; i++) {
var v = vals[i];
for(var i = 0; i < l; i++) {
// make sure values aren't just off by a rounding error // make sure values aren't just off by a rounding error
if(vals[i + 1] > vals[i] + errDiff) { var diff = v - preV;
minDiff = Math.min(minDiff, vals[i + 1] - vals[i]);
v2.push(vals[i + 1]); if(preV === undefined) {
newVals.push(v);
preV = v;
} else if(diff > errDiff) {
minDiff = Math.min(minDiff, diff);
newVals.push(v);
preV = v;
} }
} }
return {vals: v2, minDiff: minDiff}; return {vals: newVals, minDiff: minDiff};
}; };
/** /**
@ -41963,7 +42001,7 @@ exports.findIndexOfMin = function(arr, fn) {
return ind; return ind;
}; };
},{"./identity":177,"./loggers":182,"fast-isnumeric":18}],197:[function(_dereq_,module,exports){ },{"../constants/numerical":158,"./identity":177,"./loggers":182,"fast-isnumeric":18}],197:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -44457,7 +44495,13 @@ function plot(gd, data, layout, config) {
fullLayout._replotting = true; fullLayout._replotting = true;
// make or remake the framework if we need to // make or remake the framework if we need to
if(graphWasEmpty) makePlotFramework(gd); if(graphWasEmpty || fullLayout._shouldCreateBgLayer) {
makePlotFramework(gd);
if(fullLayout._shouldCreateBgLayer) {
delete fullLayout._shouldCreateBgLayer;
}
}
// polar need a different framework // polar need a different framework
if(gd.framework !== makePlotFramework) { if(gd.framework !== makePlotFramework) {
@ -47011,6 +47055,16 @@ function react(gd, data, layout, config) {
applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout); applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout);
var allNames = Object.getOwnPropertyNames(oldFullLayout);
for(var q = 0; q < allNames.length; q++) {
var name = allNames[q];
var start = name.substring(0, 5);
if(start === 'xaxis' || start === 'yaxis') {
var emptyCategories = oldFullLayout[name]._emptyCategories;
if(emptyCategories) emptyCategories();
}
}
// "true" skips updating calcdata and remapping arrays from calcTransforms, // "true" skips updating calcdata and remapping arrays from calcTransforms,
// which supplyDefaults usually does at the end, but we may need to NOT do // which supplyDefaults usually does at the end, but we may need to NOT do
// if the diff (which we haven't determined yet) says we'll recalc // if the diff (which we haven't determined yet) says we'll recalc
@ -50977,6 +51031,9 @@ var isArrayOrTypedArray = Lib.isArrayOrTypedArray;
* error message (shown in console in logger config argument is enable) * error message (shown in console in logger config argument is enable)
*/ */
module.exports = function validate(data, layout) { module.exports = function validate(data, layout) {
if(data === undefined) data = [];
if(layout === undefined) layout = {};
var schema = PlotSchema.get(); var schema = PlotSchema.get();
var errorList = []; var errorList = [];
var gd = {_context: Lib.extendFlat({}, dfltConfig)}; var gd = {_context: Lib.extendFlat({}, dfltConfig)};
@ -52311,6 +52368,15 @@ var autorange = _dereq_('./autorange');
axes.getAutoRange = autorange.getAutoRange; axes.getAutoRange = autorange.getAutoRange;
axes.findExtremes = autorange.findExtremes; axes.findExtremes = autorange.findExtremes;
var epsilon = 0.0001;
function expandRange(range) {
var delta = (range[1] - range[0]) * epsilon;
return [
range[0] - delta,
range[1] + delta
];
}
/* /*
* find the list of possible axes to reference with an xref or yref attribute * find the list of possible axes to reference with an xref or yref attribute
* and coerce it to that list * and coerce it to that list
@ -52755,8 +52821,8 @@ function autoShiftMonthBins(binStart, data, dtick, dataMin, calendar) {
// ---------------------------------------------------- // ----------------------------------------------------
// ensure we have tick0, dtick, and tick rounding calculated // ensure we have tick0, dtick, and tick rounding calculated
axes.prepTicks = function(ax) { axes.prepTicks = function(ax, opts) {
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l, undefined, undefined, opts);
// calculate max number of (auto) ticks to display based on plot size // calculate max number of (auto) ticks to display based on plot size
if(ax.tickmode === 'auto' || !ax.dtick) { if(ax.tickmode === 'auto' || !ax.dtick) {
@ -52809,20 +52875,21 @@ axes.prepTicks = function(ax) {
// if ticks are set to automatic, determine the right values (tick0,dtick) // if ticks are set to automatic, determine the right values (tick0,dtick)
// in any case, set tickround to # of digits to round tick labels to, // in any case, set tickround to # of digits to round tick labels to,
// or codes to this effect for log and date scales // or codes to this effect for log and date scales
axes.calcTicks = function calcTicks(ax) { axes.calcTicks = function calcTicks(ax, opts) {
axes.prepTicks(ax); axes.prepTicks(ax, opts);
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l, undefined, undefined, opts);
// now that we've figured out the auto values for formatting // now that we've figured out the auto values for formatting
// in case we're missing some ticktext, we can break out for array ticks // in case we're missing some ticktext, we can break out for array ticks
if(ax.tickmode === 'array') return arrayTicks(ax); if(ax.tickmode === 'array') return arrayTicks(ax);
// find the first tick // find the first tick
ax._tmin = axes.tickFirst(ax); ax._tmin = axes.tickFirst(ax, opts);
// add a tiny bit so we get ticks which may have rounded out // add a tiny bit so we get ticks which may have rounded out
var startTick = rng[0] * 1.0001 - rng[1] * 0.0001; var exRng = expandRange(rng);
var endTick = rng[1] * 1.0001 - rng[0] * 0.0001; var startTick = exRng[0];
var endTick = exRng[1];
// check for reversed axis // check for reversed axis
var axrev = (rng[1] < rng[0]); var axrev = (rng[1] < rng[0]);
@ -52867,26 +52934,15 @@ axes.calcTicks = function calcTicks(ax) {
if(ax.rangebreaks) { if(ax.rangebreaks) {
// replace ticks inside breaks that would get a tick // replace ticks inside breaks that would get a tick
if(ax.tickmode === 'auto') { // and reduce ticks
for(var t = 0; t < tickVals.length; t++) {
var value = tickVals[t].value;
if(ax.maskBreaks(value) === BADNUM) {
// find which break we are in
for(var k = 0; k < ax._rangebreaks.length; k++) {
var brk = ax._rangebreaks[k];
if(value >= brk.min && value < brk.max) {
tickVals[t].value = brk.max; // replace with break end
break;
}
}
}
}
}
// reduce ticks
var len = tickVals.length; var len = tickVals.length;
if(len > 2) { if(len) {
var tf2 = 2 * (ax.tickfont ? ax.tickfont.size : 12); var tf = 0;
if(ax.tickmode === 'auto') {
tf =
(ax._id.charAt(0) === 'y' ? 2 : 6) *
(ax.tickfont ? ax.tickfont.size : 12);
}
var newTickVals = []; var newTickVals = [];
var prevPos; var prevPos;
@ -52894,12 +52950,26 @@ axes.calcTicks = function calcTicks(ax) {
var dir = axrev ? 1 : -1; var dir = axrev ? 1 : -1;
var first = axrev ? 0 : len - 1; var first = axrev ? 0 : len - 1;
var last = axrev ? len - 1 : 0; var last = axrev ? len - 1 : 0;
for(var q = first; dir * q <= dir * last; q += dir) { // apply reverse loop to pick greater values in breaks first for(var q = first; dir * q <= dir * last; q += dir) {
var pos = ax.c2p(tickVals[q].value); var tickVal = tickVals[q];
if(ax.maskBreaks(tickVal.value) === BADNUM) {
tickVal.value = moveOutsideBreak(tickVal.value, ax);
if(prevPos === undefined || Math.abs(pos - prevPos) > tf2) { if(ax._rl && (
ax._rl[0] === tickVal.value ||
ax._rl[1] === tickVal.value
)) continue;
}
var pos = ax.c2p(tickVal.value);
if(pos === prevPos) {
if(newTickVals[newTickVals.length - 1].value < tickVal.value) {
newTickVals[newTickVals.length - 1] = tickVal;
}
} else if(prevPos === undefined || Math.abs(pos - prevPos) > tf) {
prevPos = pos; prevPos = pos;
newTickVals.push(tickVals[q]); newTickVals.push(tickVal);
} }
} }
tickVals = newTickVals.reverse(); tickVals = newTickVals.reverse();
@ -52946,10 +53016,9 @@ function arrayTicks(ax) {
var text = ax.ticktext; var text = ax.ticktext;
var ticksOut = new Array(vals.length); var ticksOut = new Array(vals.length);
var rng = Lib.simpleMap(ax.range, ax.r2l); var rng = Lib.simpleMap(ax.range, ax.r2l);
var r0expanded = rng[0] * 1.0001 - rng[1] * 0.0001; var exRng = expandRange(rng);
var r1expanded = rng[1] * 1.0001 - rng[0] * 0.0001; var tickMin = Math.min(exRng[0], exRng[1]);
var tickMin = Math.min(r0expanded, r1expanded); var tickMax = Math.max(exRng[0], exRng[1]);
var tickMax = Math.max(r0expanded, r1expanded);
var j = 0; var j = 0;
// without a text array, just format the given values as any other ticks // without a text array, just format the given values as any other ticks
@ -53040,8 +53109,7 @@ axes.autoTicks = function(ax, roughDTick) {
roughDTick /= ONEAVGMONTH; roughDTick /= ONEAVGMONTH;
ax.dtick = 'M' + roundDTick(roughDTick, 1, roundBase24); ax.dtick = 'M' + roundDTick(roughDTick, 1, roundBase24);
} else if(roughX2 > ONEDAY) { } else if(roughX2 > ONEDAY) {
ax.dtick = roundDTick(roughDTick, ONEDAY, ax._hasDayOfWeekBreaks ? [1, 7, 14] : roundDays); ax.dtick = roundDTick(roughDTick, ONEDAY, ax._hasDayOfWeekBreaks ? [1, 2, 7, 14] : roundDays);
// get week ticks on sunday // get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is // this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it. // 2 or 3 days... but that's a weird enough case that we'll ignore it.
@ -53189,29 +53257,31 @@ axes.tickIncrement = function(x, dtick, axrev, calendar) {
if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar); if(tType === 'M') return Lib.incrementMonth(x, dtSigned, calendar);
// Log scales: Linear, Digits // Log scales: Linear, Digits
else if(tType === 'L') return Math.log(Math.pow(10, x) + dtSigned) / Math.LN10; if(tType === 'L') return Math.log(Math.pow(10, x) + dtSigned) / Math.LN10;
// log10 of 2,5,10, or all digits (logs just have to be // log10 of 2,5,10, or all digits (logs just have to be
// close enough to round) // close enough to round)
else if(tType === 'D') { if(tType === 'D') {
var tickset = (dtick === 'D2') ? roundLog2 : roundLog1; var tickset = (dtick === 'D2') ? roundLog2 : roundLog1;
var x2 = x + axSign * 0.01; var x2 = x + axSign * 0.01;
var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev); var frac = Lib.roundUp(Lib.mod(x2, 1), tickset, axrev);
return Math.floor(x2) + return Math.floor(x2) +
Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10; Math.log(d3.round(Math.pow(10, frac), 1)) / Math.LN10;
} else throw 'unrecognized dtick ' + String(dtick); }
throw 'unrecognized dtick ' + String(dtick);
}; };
// calculate the first tick on an axis // calculate the first tick on an axis
axes.tickFirst = function(ax) { axes.tickFirst = function(ax, opts) {
var r2l = ax.r2l || Number; var r2l = ax.r2l || Number;
var rng = Lib.simpleMap(ax.range, r2l); var rng = Lib.simpleMap(ax.range, r2l, undefined, undefined, opts);
var axrev = rng[1] < rng[0]; var axrev = rng[1] < rng[0];
var sRound = axrev ? Math.floor : Math.ceil; var sRound = axrev ? Math.floor : Math.ceil;
// add a tiny extra bit to make sure we get ticks // add a tiny extra bit to make sure we get ticks
// that may have been rounded out // that may have been rounded out
var r0 = rng[0] * 1.0001 - rng[1] * 0.0001; var r0 = expandRange(rng)[0];
var dtick = ax.dtick; var dtick = ax.dtick;
var tick0 = r2l(ax.tick0); var tick0 = r2l(ax.tick0);
@ -54342,6 +54412,8 @@ function getDividerVals(ax, vals) {
var out = []; var out = [];
var i, current; var i, current;
var reversed = (vals.length && vals[vals.length - 1].x < vals[0].x);
// never used for labels; // never used for labels;
// no need to worry about the other tickTextObj keys // no need to worry about the other tickTextObj keys
var _push = function(d, bndIndex) { var _push = function(d, bndIndex) {
@ -54355,11 +54427,11 @@ function getDividerVals(ax, vals) {
for(i = 0; i < vals.length; i++) { for(i = 0; i < vals.length; i++) {
var d = vals[i]; var d = vals[i];
if(d.text2 !== current) { if(d.text2 !== current) {
_push(d, 0); _push(d, reversed ? 1 : 0);
} }
current = d.text2; current = d.text2;
} }
_push(vals[i - 1], 1); _push(vals[i - 1], reversed ? 0 : 1);
} }
return out; return out;
@ -55414,6 +55486,17 @@ function isAngular(ax) {
return ax._id === 'angularaxis'; return ax._id === 'angularaxis';
} }
function moveOutsideBreak(v, ax) {
var len = ax._rangebreaks.length;
for(var k = 0; k < len; k++) {
var brk = ax._rangebreaks[k];
if(v >= brk.min && v < brk.max) {
return brk.max;
}
}
return v;
}
},{"../../components/color":52,"../../components/drawing":74,"../../components/titles":147,"../../constants/alignment":154,"../../constants/numerical":158,"../../lib":178,"../../lib/svg_text_utils":199,"../../plots/plots":256,"../../registry":269,"./autorange":221,"./axis_autotype":223,"./axis_ids":225,"./clean_ticks":227,"./layout_attributes":236,"./set_convert":242,"d3":16,"fast-isnumeric":18}],223:[function(_dereq_,module,exports){ },{"../../components/color":52,"../../components/drawing":74,"../../components/titles":147,"../../constants/alignment":154,"../../constants/numerical":158,"../../lib":178,"../../lib/svg_text_utils":199,"../../plots/plots":256,"../../registry":269,"./autorange":221,"./axis_autotype":223,"./axis_ids":225,"./clean_ticks":227,"./layout_attributes":236,"./set_convert":242,"d3":16,"fast-isnumeric":18}],223:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
@ -55824,7 +55907,7 @@ exports.name2id = function name2id(name) {
}; };
exports.cleanId = function cleanId(id, axLetter) { exports.cleanId = function cleanId(id, axLetter) {
if(!id.match(constants.AX_ID_PATTERN)) return; if(typeof id !== 'string' || !id.match(constants.AX_ID_PATTERN)) return;
if(axLetter && id.charAt(0) !== axLetter) return; if(axLetter && id.charAt(0) !== axLetter) return;
var axNum = id.substr(1).replace(/^0+/, ''); var axNum = id.substr(1).replace(/^0+/, '');
@ -57810,6 +57893,10 @@ function attachWheelEventHandler(element, handler) {
if(!supportsPassive) { if(!supportsPassive) {
if(element.onwheel !== undefined) element.onwheel = handler; if(element.onwheel !== undefined) element.onwheel = handler;
else if(element.onmousewheel !== undefined) element.onmousewheel = handler; else if(element.onmousewheel !== undefined) element.onmousewheel = handler;
else if(!element.isAddedWheelEvent) {
element.isAddedWheelEvent = true;
element.addEventListener('wheel', handler, {passive: false});
}
} else { } else {
var wheelEventName = element.onwheel !== undefined ? 'wheel' : 'mousewheel'; var wheelEventName = element.onwheel !== undefined ? 'wheel' : 'mousewheel';
@ -61156,7 +61243,7 @@ module.exports = function setConvert(ax, fullLayout) {
* - inserts a dummy arg so calendar is the 3rd arg (see notes below). * - inserts a dummy arg so calendar is the 3rd arg (see notes below).
* - defaults to ax.calendar * - defaults to ax.calendar
*/ */
function dt2ms(v, _, calendar) { function dt2ms(v, _, calendar, opts) {
// NOTE: Changed this behavior: previously we took any numeric value // NOTE: Changed this behavior: previously we took any numeric value
// to be a ms, even if it was a string that could be a bare year. // to be a ms, even if it was a string that could be a bare year.
// Now we convert it as a date if at all possible, and only try // Now we convert it as a date if at all possible, and only try
@ -61165,6 +61252,13 @@ module.exports = function setConvert(ax, fullLayout) {
if(ms === BADNUM) { if(ms === BADNUM) {
if(isNumeric(v)) { if(isNumeric(v)) {
v = +v; v = +v;
if((opts || {}).msUTC) {
// For now it is only used
// to fix bar length in milliseconds.
// It could be applied in other places in v2
return v;
}
// keep track of tenths of ms, that `new Date` will drop // keep track of tenths of ms, that `new Date` will drop
// same logic as in Lib.ms2DateTime // same logic as in Lib.ms2DateTime
var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10); var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10);
@ -61752,9 +61846,7 @@ module.exports = function setConvert(ax, fullLayout) {
var isNewBreak = true; var isNewBreak = true;
for(var j = 0; j < rangebreaksOut.length; j++) { for(var j = 0; j < rangebreaksOut.length; j++) {
var brkj = rangebreaksOut[j]; var brkj = rangebreaksOut[j];
if(min > brkj.max || max < brkj.min) { if(min < brkj.max && max >= brkj.min) {
// potentially a new break
} else {
if(min < brkj.min) { if(min < brkj.min) {
brkj.min = min; brkj.min = min;
} }
@ -61859,7 +61951,7 @@ module.exports = function setConvert(ax, fullLayout) {
// the first letter of ax._id?) // the first letter of ax._id?)
// in case the expected data isn't there, make a list of // in case the expected data isn't there, make a list of
// integers based on the opposite data // integers based on the opposite data
ax.makeCalcdata = function(trace, axLetter) { ax.makeCalcdata = function(trace, axLetter, opts) {
var arrayIn, arrayOut, i, len; var arrayIn, arrayOut, i, len;
var axType = ax.type; var axType = ax.type;
@ -61883,7 +61975,7 @@ module.exports = function setConvert(ax, fullLayout) {
arrayOut = new Array(len); arrayOut = new Array(len);
for(i = 0; i < len; i++) { for(i = 0; i < len; i++) {
arrayOut[i] = ax.d2c(arrayIn[i], 0, cal); arrayOut[i] = ax.d2c(arrayIn[i], 0, cal, opts);
} }
} else { } else {
var v0 = ((axLetter + '0') in trace) ? ax.d2c(trace[axLetter + '0'], 0, cal) : 0; var v0 = ((axLetter + '0') in trace) ? ax.d2c(trace[axLetter + '0'], 0, cal) : 0;
@ -61931,13 +62023,13 @@ module.exports = function setConvert(ax, fullLayout) {
} }
}; };
ax._emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
// should skip if not category nor multicategory // should skip if not category nor multicategory
ax.clearCalc = function() { ax.clearCalc = function() {
var emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
var matchGroups = fullLayout._axisMatchGroups; var matchGroups = fullLayout._axisMatchGroups;
if(matchGroups && matchGroups.length) { if(matchGroups && matchGroups.length) {
@ -61964,14 +62056,14 @@ module.exports = function setConvert(ax, fullLayout) {
ax._categories = categories; ax._categories = categories;
ax._categoriesMap = categoriesMap; ax._categoriesMap = categoriesMap;
} else { } else {
emptyCategories(); ax._emptyCategories();
} }
break; break;
} }
} }
if(!found) emptyCategories(); if(!found) ax._emptyCategories();
} else { } else {
emptyCategories(); ax._emptyCategories();
} }
if(ax._initialCategories) { if(ax._initialCategories) {
@ -61985,12 +62077,8 @@ module.exports = function setConvert(ax, fullLayout) {
// returns the indices of the traces affected by the reordering // returns the indices of the traces affected by the reordering
ax.sortByInitialCategories = function() { ax.sortByInitialCategories = function() {
var affectedTraces = []; var affectedTraces = [];
var emptyCategories = function() {
ax._categories = [];
ax._categoriesMap = {};
};
emptyCategories(); ax._emptyCategories();
if(ax._initialCategories) { if(ax._initialCategories) {
for(var j = 0; j < ax._initialCategories.length; j++) { for(var j = 0; j < ax._initialCategories.length; j++) {
@ -62198,6 +62286,7 @@ module.exports = function handleTickDefaults(containerIn, containerOut, coerce,
'use strict'; 'use strict';
var cleanTicks = _dereq_('./clean_ticks'); var cleanTicks = _dereq_('./clean_ticks');
var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) { module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) {
function readInput(attr) { function readInput(attr) {
@ -62210,18 +62299,11 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe
var _tick0 = readInput('tick0'); var _tick0 = readInput('tick0');
var _dtick = readInput('dtick'); var _dtick = readInput('dtick');
var _tickvals = readInput('tickvals'); var _tickvals = readInput('tickvals');
var _tickmode = readInput('tickmode');
var tickmode;
if(_tickmode === 'array' && var tickmodeDefault = isArrayOrTypedArray(_tickvals) ? 'array' :
(axType === 'log' || axType === 'date')) { _dtick ? 'linear' :
tickmode = containerOut.tickmode = 'auto'; 'auto';
} else { var tickmode = coerce('tickmode', tickmodeDefault);
var tickmodeDefault = Array.isArray(_tickvals) ? 'array' :
_dtick ? 'linear' :
'auto';
tickmode = coerce('tickmode', tickmodeDefault);
}
if(tickmode === 'auto') coerce('nticks'); if(tickmode === 'auto') coerce('nticks');
else if(tickmode === 'linear') { else if(tickmode === 'linear') {
@ -62239,7 +62321,7 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe
} }
}; };
},{"./clean_ticks":227}],246:[function(_dereq_,module,exports){ },{"../../lib":178,"./clean_ticks":227}],246:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -64269,6 +64351,20 @@ plots.supplyDefaults = function(gd, opts) {
// clean subplots and other artifacts from previous plot calls // clean subplots and other artifacts from previous plot calls
plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout); plots.cleanPlot(newFullData, newFullLayout, oldFullData, oldFullLayout);
var hadGL2D = !!(oldFullLayout._has && oldFullLayout._has('gl2d'));
var hasGL2D = !!(newFullLayout._has && newFullLayout._has('gl2d'));
var hadCartesian = !!(oldFullLayout._has && oldFullLayout._has('cartesian'));
var hasCartesian = !!(newFullLayout._has && newFullLayout._has('cartesian'));
var hadBgLayer = hadCartesian || hadGL2D;
var hasBgLayer = hasCartesian || hasGL2D;
if(hadBgLayer && !hasBgLayer) {
// remove bgLayer
oldFullLayout._bgLayer.remove();
} else if(hasBgLayer && !hadBgLayer) {
// create bgLayer
newFullLayout._shouldCreateBgLayer = true;
}
// clear selection outline until we implement persistent selection, // clear selection outline until we implement persistent selection,
// don't clear them though when drag handlers (e.g. listening to // don't clear them though when drag handlers (e.g. listening to
// `plotly_selecting`) update the graph. // `plotly_selecting`) update the graph.
@ -65339,6 +65435,15 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) {
)(layoutIn, layoutOut, coerce); )(layoutIn, layoutOut, coerce);
}; };
function getComputedSize(attr) {
return (
(typeof attr === 'string') &&
(attr.substr(attr.length - 2) === 'px') &&
parseFloat(attr)
);
}
plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) { plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) {
var context = gd._context || {}; var context = gd._context || {};
var frameMargins = context.frameMargins; var frameMargins = context.frameMargins;
@ -65365,8 +65470,8 @@ plots.plotAutoSize = function plotAutoSize(gd, layout, fullLayout) {
// but don't enforce any ratio restrictions // but don't enforce any ratio restrictions
var computedStyle = isPlotDiv ? window.getComputedStyle(gd) : {}; var computedStyle = isPlotDiv ? window.getComputedStyle(gd) : {};
newWidth = parseFloat(computedStyle.width) || parseFloat(computedStyle.maxWidth) || fullLayout.width; newWidth = getComputedSize(computedStyle.width) || getComputedSize(computedStyle.maxWidth) || fullLayout.width;
newHeight = parseFloat(computedStyle.height) || parseFloat(computedStyle.maxHeight) || fullLayout.height; newHeight = getComputedSize(computedStyle.height) || getComputedSize(computedStyle.maxHeight) || fullLayout.height;
if(isNumeric(frameMargins) && frameMargins > 0) { if(isNumeric(frameMargins) && frameMargins > 0) {
var factor = 1 - 2 * frameMargins; var factor = 1 - 2 * frameMargins;
@ -70032,7 +70137,7 @@ proto.initInteractions = function() {
b: mins0.b + (dxScaled + dyScaled) / 2, b: mins0.b + (dxScaled + dyScaled) / 2,
c: mins0.c - (dxScaled - dyScaled) / 2 c: mins0.c - (dxScaled - dyScaled) / 2
}; };
var minsorted = [mins.a, mins.b, mins.c].sort(); var minsorted = [mins.a, mins.b, mins.c].sort(Lib.sorterAsc);
var minindices = { var minindices = {
a: minsorted.indexOf(mins.a), a: minsorted.indexOf(mins.a),
b: minsorted.indexOf(mins.b), b: minsorted.indexOf(mins.b),
@ -71663,11 +71768,15 @@ module.exports = function calc(gd, trace) {
var ya = Axes.getFromId(gd, trace.yaxis || 'y'); var ya = Axes.getFromId(gd, trace.yaxis || 'y');
var size, pos; var size, pos;
var sizeOpts = {
msUTC: !!(trace.base || trace.base === 0)
};
if(trace.orientation === 'h') { if(trace.orientation === 'h') {
size = xa.makeCalcdata(trace, 'x'); size = xa.makeCalcdata(trace, 'x', sizeOpts);
pos = ya.makeCalcdata(trace, 'y'); pos = ya.makeCalcdata(trace, 'y');
} else { } else {
size = ya.makeCalcdata(trace, 'y'); size = ya.makeCalcdata(trace, 'y', sizeOpts);
pos = xa.makeCalcdata(trace, 'x'); pos = xa.makeCalcdata(trace, 'x');
} }
@ -76161,8 +76270,11 @@ function plot(gd, plotinfo, cdbox, boxLayer) {
} }
function plotBoxAndWhiskers(sel, axes, trace, t) { function plotBoxAndWhiskers(sel, axes, trace, t) {
var posAxis = axes.pos; var isHorizontal = trace.orientation === 'h';
var valAxis = axes.val; var valAxis = axes.val;
var posAxis = axes.pos;
var posHasRangeBreaks = !!posAxis.rangebreaks;
var bPos = t.bPos; var bPos = t.bPos;
var wdPos = t.wdPos || 0; var wdPos = t.wdPos || 0;
var bPosPxOffset = t.bPosPxOffset || 0; var bPosPxOffset = t.bPosPxOffset || 0;
@ -76196,11 +76308,15 @@ function plotBoxAndWhiskers(sel, axes, trace, t) {
if(d.empty) return 'M0,0Z'; if(d.empty) return 'M0,0Z';
var lcenter = posAxis.c2l(d.pos + bPos, true); var lcenter = posAxis.c2l(d.pos + bPos, true);
var posc = posAxis.l2p(lcenter) + bPosPxOffset;
var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset; var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset;
var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset; var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset;
var posw0 = posAxis.l2p(lcenter - wdPos) + bPosPxOffset; var posc = posHasRangeBreaks ? (pos0 + pos1) / 2 : posAxis.l2p(lcenter) + bPosPxOffset;
var posw1 = posAxis.l2p(lcenter + wdPos) + bPosPxOffset;
var r = trace.whiskerwidth;
var posw0 = posHasRangeBreaks ? pos0 * r + (1 - r) * posc : posAxis.l2p(lcenter - wdPos) + bPosPxOffset;
var posw1 = posHasRangeBreaks ? pos1 * r + (1 - r) * posc : posAxis.l2p(lcenter + wdPos) + bPosPxOffset;
var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset; var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset;
var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset;
var q1 = valAxis.c2p(d.q1, true); var q1 = valAxis.c2p(d.q1, true);
@ -76224,30 +76340,45 @@ function plotBoxAndWhiskers(sel, axes, trace, t) {
var ln = valAxis.c2p(d.ln, true); var ln = valAxis.c2p(d.ln, true);
var un = valAxis.c2p(d.un, true); var un = valAxis.c2p(d.un, true);
if(trace.orientation === 'h') { if(isHorizontal) {
d3.select(this).attr('d', d3.select(this).attr('d',
'M' + m + ',' + posm0 + 'V' + posm1 + // median line 'M' + m + ',' + posm0 + 'V' + posm1 + // median line
'M' + q1 + ',' + pos0 + 'V' + pos1 + // left edge 'M' + q1 + ',' + pos0 + 'V' + pos1 + // left edge
(notched ? 'H' + ln + 'L' + m + ',' + posm1 + 'L' + un + ',' + pos1 : '') + // top notched edge (notched ?
'H' + ln + 'L' + m + ',' + posm1 + 'L' + un + ',' + pos1 :
''
) + // top notched edge
'H' + q3 + // end of the top edge 'H' + q3 + // end of the top edge
'V' + pos0 + // right edge 'V' + pos0 + // right edge
(notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge (notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge
'Z' + // end of the box 'Z' + // end of the box
'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers
((whiskerWidth === 0) ? '' : // whisker caps (whiskerWidth === 0 ?
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1)); '' : // whisker caps
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1
)
);
} else { } else {
d3.select(this).attr('d', d3.select(this).attr('d',
'M' + posm0 + ',' + m + 'H' + posm1 + // median line 'M' + posm0 + ',' + m + 'H' + posm1 + // median line
'M' + pos0 + ',' + q1 + 'H' + pos1 + // top of the box 'M' + pos0 + ',' + q1 + 'H' + pos1 + // top of the box
(notched ? 'V' + ln + 'L' + posm1 + ',' + m + 'L' + pos1 + ',' + un : '') + // notched right edge (notched ?
'V' + ln + 'L' + posm1 + ',' + m + 'L' + pos1 + ',' + un :
''
) + // notched right edge
'V' + q3 + // end of the right edge 'V' + q3 + // end of the right edge
'H' + pos0 + // bottom of the box 'H' + pos0 + // bottom of the box
(notched ? 'V' + un + 'L' + posm0 + ',' + m + 'L' + pos0 + ',' + ln : '') + // notched left edge (notched ?
'V' + un + 'L' + posm0 + ',' + m + 'L' + pos0 + ',' + ln :
''
) + // notched left edge
'Z' + // end of the box 'Z' + // end of the box
'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers
((whiskerWidth === 0) ? '' : // whisker caps (whiskerWidth === 0 ?
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1)); '' : // whisker caps
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1
)
);
} }
}); });
} }
@ -76363,8 +76494,10 @@ function plotPoints(sel, axes, trace, t) {
} }
function plotBoxMean(sel, axes, trace, t) { function plotBoxMean(sel, axes, trace, t) {
var posAxis = axes.pos;
var valAxis = axes.val; var valAxis = axes.val;
var posAxis = axes.pos;
var posHasRangeBreaks = !!posAxis.rangebreaks;
var bPos = t.bPos; var bPos = t.bPos;
var bPosPxOffset = t.bPosPxOffset || 0; var bPosPxOffset = t.bPosPxOffset || 0;
@ -76398,9 +76531,11 @@ function plotBoxMean(sel, axes, trace, t) {
paths.each(function(d) { paths.each(function(d) {
var lcenter = posAxis.c2l(d.pos + bPos, true); var lcenter = posAxis.c2l(d.pos + bPos, true);
var posc = posAxis.l2p(lcenter) + bPosPxOffset;
var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset; var pos0 = posAxis.l2p(lcenter - bdPos0) + bPosPxOffset;
var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset; var pos1 = posAxis.l2p(lcenter + bdPos1) + bPosPxOffset;
var posc = posHasRangeBreaks ? (pos0 + pos1) / 2 : posAxis.l2p(lcenter) + bPosPxOffset;
var m = valAxis.c2p(d.mean, true); var m = valAxis.c2p(d.mean, true);
var sl = valAxis.c2p(d.mean - d.sd, true); var sl = valAxis.c2p(d.mean - d.sd, true);
var sh = valAxis.c2p(d.mean + d.sd, true); var sh = valAxis.c2p(d.mean + d.sd, true);
@ -79071,6 +79206,7 @@ var clean2dArray = _dereq_('./clean_2d_array');
var interp2d = _dereq_('./interp2d'); var interp2d = _dereq_('./interp2d');
var findEmpties = _dereq_('./find_empties'); var findEmpties = _dereq_('./find_empties');
var makeBoundArray = _dereq_('./make_bound_array'); var makeBoundArray = _dereq_('./make_bound_array');
var BADNUM = _dereq_('../../constants/numerical').BADNUM;
module.exports = function calc(gd, trace) { module.exports = function calc(gd, trace) {
// prepare the raw data // prepare the raw data
@ -79122,13 +79258,25 @@ module.exports = function calc(gd, trace) {
dy = trace.dy; dy = trace.dy;
z = clean2dArray(zIn, trace, xa, ya); z = clean2dArray(zIn, trace, xa, ya);
}
if(isContour || trace.connectgaps) { if(xa.rangebreaks || ya.rangebreaks) {
trace._emptypoints = findEmpties(z); z = dropZonBreaks(x, y, z);
interp2d(z, trace._emptypoints);
if(!isHist) {
x = skipBreaks(x);
y = skipBreaks(y);
trace._x = x;
trace._y = y;
} }
} }
if(!isHist && (isContour || trace.connectgaps)) {
trace._emptypoints = findEmpties(z);
interp2d(z, trace._emptypoints);
}
function noZsmooth(msg) { function noZsmooth(msg) {
zsmooth = trace._input.zsmooth = trace.zsmooth = false; zsmooth = trace._input.zsmooth = trace.zsmooth = false;
Lib.warn('cannot use zsmooth: "fast": ' + msg); Lib.warn('cannot use zsmooth: "fast": ' + msg);
@ -79209,7 +79357,33 @@ module.exports = function calc(gd, trace) {
return [cd0]; return [cd0];
}; };
},{"../../components/colorscale/calc":60,"../../lib":178,"../../plots/cartesian/axes":222,"../../registry":269,"../histogram2d/calc":359,"./clean_2d_array":332,"./convert_column_xyz":334,"./find_empties":336,"./interp2d":339,"./make_bound_array":340}],332:[function(_dereq_,module,exports){ function skipBreaks(a) {
var b = [];
var len = a.length;
for(var i = 0; i < len; i++) {
var v = a[i];
if(v !== BADNUM) b.push(v);
}
return b;
}
function dropZonBreaks(x, y, z) {
var newZ = [];
var k = -1;
for(var i = 0; i < z.length; i++) {
if(y[i] === BADNUM) continue;
k++;
newZ[k] = [];
for(var j = 0; j < z[i].length; j++) {
if(x[j] === BADNUM) continue;
newZ[k].push(z[i][j]);
}
}
return newZ;
}
},{"../../components/colorscale/calc":60,"../../constants/numerical":158,"../../lib":178,"../../plots/cartesian/axes":222,"../../registry":269,"../histogram2d/calc":359,"./clean_2d_array":332,"./convert_column_xyz":334,"./find_empties":336,"./interp2d":339,"./make_bound_array":340}],332:[function(_dereq_,module,exports){
/** /**
* Copyright 2012-2020, Plotly, Inc. * Copyright 2012-2020, Plotly, Inc.
* All rights reserved. * All rights reserved.
@ -79335,18 +79509,21 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name,
var text; var text;
var hovertext; var hovertext;
var nI = col2vals.length;
var nJ = col1vals.length;
for(i = 0; i < arrayVarNames.length; i++) { for(i = 0; i < arrayVarNames.length; i++) {
newArrays[i] = Lib.init2dArray(col2vals.length, col1vals.length); newArrays[i] = Lib.init2dArray(nI, nJ);
} }
if(hasColumnText) { if(hasColumnText) {
text = Lib.init2dArray(col2vals.length, col1vals.length); text = Lib.init2dArray(nI, nJ);
} }
if(hasColumnHoverText) { if(hasColumnHoverText) {
hovertext = Lib.init2dArray(col2vals.length, col1vals.length); hovertext = Lib.init2dArray(nI, nJ);
} }
var after2before = Lib.init2dArray(col2vals.length, col1vals.length); var after2before = Lib.init2dArray(nI, nJ);
for(i = 0; i < colLen; i++) { for(i = 0; i < colLen; i++) {
if(col1[i] !== BADNUM && col2[i] !== BADNUM) { if(col1[i] !== BADNUM && col2[i] !== BADNUM) {
@ -80410,6 +80587,11 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, x
traceOut._length = null; traceOut._length = null;
} }
if(
traceIn.type === 'heatmapgl' ||
traceIn.type === 'contourgl'
) return true; // skip calendars until we handle them in those traces
var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults'); var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults');
handleCalendarDefaults(traceIn, traceOut, [xName, yName], layout); handleCalendarDefaults(traceIn, traceOut, [xName, yName], layout);
@ -89838,7 +90020,7 @@ module.exports = function style(gd) {
'use strict'; 'use strict';
// package version injected by `npm run preprocess` // package version injected by `npm run preprocess`
exports.version = '1.54.1'; exports.version = '1.54.6';
},{}]},{},[11])(11) },{}]},{},[11])(11)
}); });

Binary file not shown.

View File

@ -18332,7 +18332,7 @@ return Popper;
//# sourceMappingURL=bootstrap.js.map //# sourceMappingURL=bootstrap.js.map
//! moment.js //! moment.js
//! version : 2.25.3 //! version : 2.27.0
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT //! license : MIT
//! momentjs.com //! momentjs.com
@ -21096,8 +21096,6 @@ return Popper;
token = tokens[i]; token = tokens[i];
parsedInput = (string.match(getParseRegexForToken(token, config)) || parsedInput = (string.match(getParseRegexForToken(token, config)) ||
[])[0]; [])[0];
// console.log('token', token, 'parsedInput', parsedInput,
// 'regex', getParseRegexForToken(token, config));
if (parsedInput) { if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput)); skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) { if (skipped.length > 0) {
@ -23953,7 +23951,7 @@ return Popper;
//! moment.js //! moment.js
hooks.version = '2.25.3'; hooks.version = '2.27.0';
setHookCallback(createLocal); setHookCallback(createLocal);
@ -24023,6 +24021,7 @@ return Popper;
h: ['eine Stunde', 'einer Stunde'], h: ['eine Stunde', 'einer Stunde'],
d: ['ein Tag', 'einem Tag'], d: ['ein Tag', 'einem Tag'],
dd: [number + ' Tage', number + ' Tagen'], dd: [number + ' Tage', number + ' Tagen'],
w: ['eine Woche', 'einer Woche'],
M: ['ein Monat', 'einem Monat'], M: ['ein Monat', 'einem Monat'],
MM: [number + ' Monate', number + ' Monaten'], MM: [number + ' Monate', number + ' Monaten'],
y: ['ein Jahr', 'einem Jahr'], y: ['ein Jahr', 'einem Jahr'],
@ -24072,6 +24071,8 @@ return Popper;
hh: '%d Stunden', hh: '%d Stunden',
d: processRelativeTime, d: processRelativeTime,
dd: processRelativeTime, dd: processRelativeTime,
w: processRelativeTime,
ww: '%d Wochen',
M: processRelativeTime, M: processRelativeTime,
MM: processRelativeTime, MM: processRelativeTime,
y: processRelativeTime, y: processRelativeTime,
@ -24218,6 +24219,24 @@ return Popper;
//! moment.js locale configuration //! moment.js locale configuration
var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
monthsParse = [
/^janv/i,
/^févr/i,
/^mars/i,
/^avr/i,
/^mai/i,
/^juin/i,
/^juil/i,
/^août/i,
/^sept/i,
/^oct/i,
/^nov/i,
/^déc/i,
];
var fr = moment.defineLocale('fr', { var fr = moment.defineLocale('fr', {
months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
'_' '_'
@ -24225,7 +24244,13 @@ return Popper;
monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
'_' '_'
), ),
monthsParseExact: true, monthsRegex: monthsRegex,
monthsShortRegex: monthsRegex,
monthsStrictRegex: monthsStrictRegex,
monthsShortStrictRegex: monthsShortStrictRegex,
monthsParse: monthsParse,
longMonthsParse: monthsParse,
shortMonthsParse: monthsParse,
weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
@ -24420,6 +24445,17 @@ return Popper;
), ),
weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
meridiem: function (hours, minutes, isLower) {
if (hours < 12) {
return isLower ? 'öö' : 'ÖÖ';
} else {
return isLower ? 'ös' : 'ÖS';
}
},
meridiemParse: /öö|ÖÖ|ös|ÖS/,
isPM: function (input) {
return input === 'ös' || input === 'ÖS';
},
longDateFormat: { longDateFormat: {
LT: 'HH:mm', LT: 'HH:mm',
LTS: 'HH:mm:ss', LTS: 'HH:mm:ss',
@ -24481,7 +24517,7 @@ return Popper;
}))); })));
//! moment-timezone.js //! moment-timezone.js
//! version : 0.5.30 //! version : 0.5.31
//! Copyright (c) JS Foundation and other contributors //! Copyright (c) JS Foundation and other contributors
//! license : MIT //! license : MIT
//! github.com/moment/moment-timezone //! github.com/moment/moment-timezone
@ -24511,7 +24547,7 @@ return Popper;
// return moment; // return moment;
// } // }
var VERSION = "0.5.30", var VERSION = "0.5.31",
zones = {}, zones = {},
links = {}, links = {},
countries = {}, countries = {},

View File

@ -18332,7 +18332,7 @@ return Popper;
//# sourceMappingURL=bootstrap.js.map //# sourceMappingURL=bootstrap.js.map
//! moment.js //! moment.js
//! version : 2.25.3 //! version : 2.27.0
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT //! license : MIT
//! momentjs.com //! momentjs.com
@ -21096,8 +21096,6 @@ return Popper;
token = tokens[i]; token = tokens[i];
parsedInput = (string.match(getParseRegexForToken(token, config)) || parsedInput = (string.match(getParseRegexForToken(token, config)) ||
[])[0]; [])[0];
// console.log('token', token, 'parsedInput', parsedInput,
// 'regex', getParseRegexForToken(token, config));
if (parsedInput) { if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput)); skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) { if (skipped.length > 0) {
@ -23953,7 +23951,7 @@ return Popper;
//! moment.js //! moment.js
hooks.version = '2.25.3'; hooks.version = '2.27.0';
setHookCallback(createLocal); setHookCallback(createLocal);
@ -24023,6 +24021,7 @@ return Popper;
h: ['eine Stunde', 'einer Stunde'], h: ['eine Stunde', 'einer Stunde'],
d: ['ein Tag', 'einem Tag'], d: ['ein Tag', 'einem Tag'],
dd: [number + ' Tage', number + ' Tagen'], dd: [number + ' Tage', number + ' Tagen'],
w: ['eine Woche', 'einer Woche'],
M: ['ein Monat', 'einem Monat'], M: ['ein Monat', 'einem Monat'],
MM: [number + ' Monate', number + ' Monaten'], MM: [number + ' Monate', number + ' Monaten'],
y: ['ein Jahr', 'einem Jahr'], y: ['ein Jahr', 'einem Jahr'],
@ -24072,6 +24071,8 @@ return Popper;
hh: '%d Stunden', hh: '%d Stunden',
d: processRelativeTime, d: processRelativeTime,
dd: processRelativeTime, dd: processRelativeTime,
w: processRelativeTime,
ww: '%d Wochen',
M: processRelativeTime, M: processRelativeTime,
MM: processRelativeTime, MM: processRelativeTime,
y: processRelativeTime, y: processRelativeTime,
@ -24218,6 +24219,24 @@ return Popper;
//! moment.js locale configuration //! moment.js locale configuration
var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
monthsParse = [
/^janv/i,
/^févr/i,
/^mars/i,
/^avr/i,
/^mai/i,
/^juin/i,
/^juil/i,
/^août/i,
/^sept/i,
/^oct/i,
/^nov/i,
/^déc/i,
];
var fr = moment.defineLocale('fr', { var fr = moment.defineLocale('fr', {
months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
'_' '_'
@ -24225,7 +24244,13 @@ return Popper;
monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
'_' '_'
), ),
monthsParseExact: true, monthsRegex: monthsRegex,
monthsShortRegex: monthsRegex,
monthsStrictRegex: monthsStrictRegex,
monthsShortStrictRegex: monthsShortStrictRegex,
monthsParse: monthsParse,
longMonthsParse: monthsParse,
shortMonthsParse: monthsParse,
weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
@ -24420,6 +24445,17 @@ return Popper;
), ),
weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
meridiem: function (hours, minutes, isLower) {
if (hours < 12) {
return isLower ? 'öö' : 'ÖÖ';
} else {
return isLower ? 'ös' : 'ÖS';
}
},
meridiemParse: /öö|ÖÖ|ös|ÖS/,
isPM: function (input) {
return input === 'ös' || input === 'ÖS';
},
longDateFormat: { longDateFormat: {
LT: 'HH:mm', LT: 'HH:mm',
LTS: 'HH:mm:ss', LTS: 'HH:mm:ss',
@ -24481,7 +24517,7 @@ return Popper;
}))); })));
//! moment-timezone.js //! moment-timezone.js
//! version : 0.5.30 //! version : 0.5.31
//! Copyright (c) JS Foundation and other contributors //! Copyright (c) JS Foundation and other contributors
//! license : MIT //! license : MIT
//! github.com/moment/moment-timezone //! github.com/moment/moment-timezone
@ -24511,7 +24547,7 @@ return Popper;
// return moment; // return moment;
// } // }
var VERSION = "0.5.30", var VERSION = "0.5.31",
zones = {}, zones = {},
links = {}, links = {},
countries = {}, countries = {},

Binary file not shown.

File diff suppressed because one or more lines are too long