Skip to content

Commit 5f8b280

Browse files
committed
link rangebreaks and tickformatstops from template
1 parent 6de4c75 commit 5f8b280

File tree

5 files changed

+68
-4
lines changed

5 files changed

+68
-4
lines changed

src/plots/array_container_defaults.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ module.exports = function handleArrayContainerDefaults(parentObjIn, parentObjOut
4848

4949
var previousContOut = parentObjOut[name];
5050

51-
var contIn = Lib.isArrayOrTypedArray(parentObjIn[name]) ? parentObjIn[name] : [];
51+
var contIn = Lib.isArrayOrTypedArray(parentObjIn[name]) ? parentObjIn[name] : (opts.fromTemplate || []);
5252
var contOut = parentObjOut[name] = [];
5353
var templater = Template.arrayTemplater(parentObjOut, name, inclusionAttr);
5454
var i, itemOut;

src/plots/cartesian/axis_defaults.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce,
5151

5252
var visible = coerce('visible', !options.visibleDflt);
5353

54-
var axType = containerOut.type;
54+
var axType = containerOut.type || options.axTemplate.type || '-';
5555

5656
if(axType === 'date') {
5757
var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleDefaults');
@@ -125,9 +125,12 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce,
125125
}
126126

127127
if(containerOut.type === 'date') {
128-
var rangebreaks = containerIn.rangebreaks;
128+
var fromTemplate = (options.axTemplate || {}).rangebreaks;
129+
var rangebreaks = containerIn.rangebreaks || fromTemplate;
130+
129131
if(Array.isArray(rangebreaks) && rangebreaks.length) {
130132
handleArrayContainerDefaults(containerIn, containerOut, {
133+
fromTemplate: fromTemplate,
131134
name: 'rangebreaks',
132135
inclusionAttr: 'enabled',
133136
handleItemDefaults: rangebreaksDefaults

src/plots/cartesian/layout_defaults.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,13 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
230230
axHasImage[axName]
231231
));
232232

233+
var axTemplate;
234+
if(Lib.isPlainObject(layoutOut._template)) {
235+
axTemplate = layoutOut._template[axLayoutOut._name];
236+
}
237+
233238
var defaultOptions = {
239+
axTemplate: axTemplate || {},
234240
letter: axLetter,
235241
font: layoutOut.font,
236242
outerTicks: outerTicks[axName],
@@ -295,7 +301,13 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
295301
axLayoutOut = Template.newContainer(layoutOut, axName, axLetter + 'axis');
296302
newAxLayoutOut();
297303

304+
var axTemplate2;
305+
if(Lib.isPlainObject(layoutOut._template)) {
306+
axTemplate2 = layoutOut._template[axLayoutOut._name];
307+
}
308+
298309
var defaultOptions2 = {
310+
axTemplate: axTemplate2 || {},
299311
letter: axLetter,
300312
font: layoutOut.font,
301313
outerTicks: outerTicks[axName],

src/plots/cartesian/tick_label_defaults.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,12 @@ function handleOtherDefaults(containerIn, containerOut, coerce, axType, options)
5959

6060
if(axType !== 'category') {
6161
var tickFormat = coerce('tickformat');
62-
var tickformatStops = containerIn.tickformatstops;
62+
var fromTemplate = (options.axTemplate || {}).tickformatstops;
63+
var tickformatStops = containerIn.tickformatstops || fromTemplate;
64+
6365
if(Array.isArray(tickformatStops) && tickformatStops.length) {
6466
handleArrayContainerDefaults(containerIn, containerOut, {
67+
fromTemplate: fromTemplate,
6568
name: 'tickformatstops',
6669
inclusionAttr: 'enabled',
6770
handleItemDefaults: tickformatstopDefaults

test/jasmine/tests/axes_test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5411,3 +5411,49 @@ describe('Test tickformatstops:', function() {
54115411
.then(done);
54125412
});
54135413
});
5414+
5415+
describe('Test template:', function() {
5416+
'use strict';
5417+
5418+
var gd;
5419+
beforeEach(function() {
5420+
gd = createGraphDiv();
5421+
});
5422+
afterEach(destroyGraphDiv);
5423+
5424+
it('apply axis *type*, *rangebreaks* and *tickformatstops* from template', function(done) {
5425+
Plotly.newPlot(gd, {
5426+
data: [{
5427+
x: [1e10, 2e10, 3e10, 4e10, 5e10, 6e10, 7e10],
5428+
y: [1, 2, 3, 4, 5, 6, 7]
5429+
}],
5430+
layout: {
5431+
template: {
5432+
layout: {
5433+
xaxis: {
5434+
type: 'date',
5435+
rangebreaks: [{
5436+
bounds: ['sat', 'mon']
5437+
}],
5438+
tickformatstops: [{
5439+
enabled: true,
5440+
dtickrange: [1000, 60000],
5441+
value: '%H:%M:%S s'
5442+
}]
5443+
}
5444+
}
5445+
}
5446+
}
5447+
})
5448+
.then(function() {
5449+
var xaxis = gd._fullLayout.xaxis;
5450+
expect(xaxis.type).toBe('date');
5451+
expect(xaxis.rangebreaks).not.toBe(undefined, 'rangebreaks');
5452+
expect(xaxis.rangebreaks.length).toBe(1);
5453+
expect(xaxis.tickformatstops).not.toBe(undefined, 'tickformatstops');
5454+
expect(xaxis.tickformatstops.length).toBe(1);
5455+
})
5456+
.catch(failTest)
5457+
.then(done);
5458+
});
5459+
});

0 commit comments

Comments
 (0)