Skip to content

Commit 07d73df

Browse files
authoredDec 11, 2018
Merge pull request #3300 from plotly/multicategory
Multicategory axis type
2 parents 1fdfc73 + 4b82426 commit 07d73df

File tree

76 files changed

+2251
-577
lines changed

Some content is hidden

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

76 files changed

+2251
-577
lines changed
 

‎src/components/legend/defaults.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
8686
coerce('orientation');
8787
if(containerOut.orientation === 'h') {
8888
var xaxis = layoutIn.xaxis;
89-
if(xaxis && xaxis.rangeslider && xaxis.rangeslider.visible) {
89+
if(Registry.getComponentMethod('rangeslider', 'isVisible')(xaxis)) {
9090
defaultX = 0;
9191
defaultXAnchor = 'left';
9292
defaultY = 1.1;

‎src/components/rangeslider/draw.js

+25-53
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,21 @@ var Color = require('../color');
1919
var Titles = require('../titles');
2020

2121
var Cartesian = require('../../plots/cartesian');
22-
var Axes = require('../../plots/cartesian/axes');
22+
var axisIDs = require('../../plots/cartesian/axis_ids');
2323

2424
var dragElement = require('../dragelement');
2525
var setCursor = require('../../lib/setcursor');
2626

2727
var constants = require('./constants');
2828

2929
module.exports = function(gd) {
30-
var fullLayout = gd._fullLayout,
31-
rangeSliderData = makeRangeSliderData(fullLayout);
30+
var fullLayout = gd._fullLayout;
31+
var rangeSliderData = fullLayout._rangeSliderData;
32+
for(var i = 0; i < rangeSliderData.length; i++) {
33+
var opts = rangeSliderData[i][constants.name];
34+
// fullLayout._uid may not exist when we call makeData
35+
opts._clipId = opts._id + '-' + fullLayout._uid;
36+
}
3237

3338
/*
3439
* <g container />
@@ -55,10 +60,6 @@ module.exports = function(gd) {
5560
.selectAll('g.' + constants.containerClassName)
5661
.data(rangeSliderData, keyFunction);
5762

58-
rangeSliders.enter().append('g')
59-
.classed(constants.containerClassName, true)
60-
.attr('pointer-events', 'all');
61-
6263
// remove exiting sliders and their corresponding clip paths
6364
rangeSliders.exit().each(function(axisOpts) {
6465
var opts = axisOpts[constants.name];
@@ -68,12 +69,16 @@ module.exports = function(gd) {
6869
// return early if no range slider is visible
6970
if(rangeSliderData.length === 0) return;
7071

72+
rangeSliders.enter().append('g')
73+
.classed(constants.containerClassName, true)
74+
.attr('pointer-events', 'all');
75+
7176
// for all present range sliders
7277
rangeSliders.each(function(axisOpts) {
73-
var rangeSlider = d3.select(this),
74-
opts = axisOpts[constants.name],
75-
oppAxisOpts = fullLayout[Axes.id2name(axisOpts.anchor)],
76-
oppAxisRangeOpts = opts[Axes.id2name(axisOpts.anchor)];
78+
var rangeSlider = d3.select(this);
79+
var opts = axisOpts[constants.name];
80+
var oppAxisOpts = fullLayout[axisIDs.id2name(axisOpts.anchor)];
81+
var oppAxisRangeOpts = opts[axisIDs.id2name(axisOpts.anchor)];
7782

7883
// update range
7984
// Expand slider range to the axis range
@@ -97,19 +102,9 @@ module.exports = function(gd) {
97102
var domain = axisOpts.domain;
98103
var tickHeight = (axisOpts._boundingBox || {}).height || 0;
99104

100-
var oppBottom = Infinity;
101-
var subplotData = Axes.getSubplots(gd, axisOpts);
102-
for(var i = 0; i < subplotData.length; i++) {
103-
var oppAxis = Axes.getFromId(gd, subplotData[i].substr(subplotData[i].indexOf('y')));
104-
oppBottom = Math.min(oppBottom, oppAxis.domain[0]);
105-
}
106-
107-
opts._id = constants.name + axisOpts._id;
108-
opts._clipId = opts._id + '-' + fullLayout._uid;
105+
var oppBottom = opts._oppBottom;
109106

110107
opts._width = graphSize.w * (domain[1] - domain[0]);
111-
opts._height = (fullLayout.height - margin.b - margin.t) * opts.thickness;
112-
opts._offsetShift = Math.floor(opts.borderwidth / 2);
113108

114109
var x = Math.round(margin.l + (graphSize.w * domain[0]));
115110

@@ -177,36 +172,9 @@ module.exports = function(gd) {
177172
}
178173
});
179174
}
180-
181-
// update margins
182-
Plots.autoMargin(gd, opts._id, {
183-
x: domain[0],
184-
y: oppBottom,
185-
l: 0,
186-
r: 0,
187-
t: 0,
188-
b: opts._height + margin.b + tickHeight,
189-
pad: constants.extraPad + opts._offsetShift * 2
190-
});
191175
});
192176
};
193177

194-
function makeRangeSliderData(fullLayout) {
195-
var axes = Axes.list({ _fullLayout: fullLayout }, 'x', true),
196-
name = constants.name,
197-
out = [];
198-
199-
if(fullLayout._has('gl2d')) return out;
200-
201-
for(var i = 0; i < axes.length; i++) {
202-
var ax = axes[i];
203-
204-
if(ax[name] && ax[name].visible) out.push(ax);
205-
}
206-
207-
return out;
208-
}
209-
210178
function setupDragElement(rangeSlider, gd, axisOpts, opts) {
211179
var slideBox = rangeSlider.select('rect.' + constants.slideBoxClassName).node(),
212180
grabAreaMin = rangeSlider.select('rect.' + constants.grabAreaMinClassName).node(),
@@ -393,11 +361,10 @@ function addClipPath(rangeSlider, gd, axisOpts, opts) {
393361
}
394362

395363
function drawRangePlot(rangeSlider, gd, axisOpts, opts) {
396-
var subplotData = Axes.getSubplots(gd, axisOpts),
397-
calcData = gd.calcdata;
364+
var calcData = gd.calcdata;
398365

399366
var rangePlots = rangeSlider.selectAll('g.' + constants.rangePlotClassName)
400-
.data(subplotData, Lib.identity);
367+
.data(axisOpts._subplotsWith, Lib.identity);
401368

402369
rangePlots.enter().append('g')
403370
.attr('class', function(id) { return constants.rangePlotClassName + ' ' + id; })
@@ -413,7 +380,7 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) {
413380
var plotgroup = d3.select(this),
414381
isMainPlot = (i === 0);
415382

416-
var oppAxisOpts = Axes.getFromId(gd, id, 'y'),
383+
var oppAxisOpts = axisIDs.getFromId(gd, id, 'y'),
417384
oppAxisName = oppAxisOpts._name,
418385
oppAxisRangeOpts = opts[oppAxisName];
419386

@@ -445,6 +412,11 @@ function drawRangePlot(rangeSlider, gd, axisOpts, opts) {
445412
var xa = mockFigure._fullLayout.xaxis;
446413
var ya = mockFigure._fullLayout[oppAxisName];
447414

415+
xa.clearCalc();
416+
xa.setScale();
417+
ya.clearCalc();
418+
ya.setScale();
419+
448420
var plotinfo = {
449421
id: id,
450422
plotgroup: plotgroup,

0 commit comments

Comments
 (0)
Please sign in to comment.