From b4951310055409e57a01fc05f263852afa8c70b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 20 Aug 2018 11:29:23 -0400 Subject: [PATCH 1/4] fix and :lock: ternary showticklabels --- src/plots/ternary/ternary.js | 6 +++++ test/image/baselines/ternary_noticks.png | Bin 0 -> 23959 bytes test/image/mocks/ternary_noticks.json | 31 +++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 test/image/baselines/ternary_noticks.png create mode 100644 test/image/mocks/ternary_noticks.json diff --git a/src/plots/ternary/ternary.js b/src/plots/ternary/ternary.js index 8d0cfd9cc41..4effa8fa868 100644 --- a/src/plots/ternary/ternary.js +++ b/src/plots/ternary/ternary.js @@ -254,6 +254,8 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { domain: [yDomain0, yDomain0 + yDomainFinal * w_over_h], _axislayer: _this.layers.aaxis, _gridlayer: _this.layers.agrid, + anchor: 'free', + position: 0, _pos: 0, // _this.xaxis.domain[0] * graphSize.w, _id: 'y', _length: w, @@ -274,6 +276,8 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { _axislayer: _this.layers.baxis, _gridlayer: _this.layers.bgrid, _counteraxis: _this.aaxis, + anchor: 'free', + position: 0, _pos: 0, // (1 - yDomain0) * graphSize.h, _id: 'x', _length: w, @@ -296,6 +300,8 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { _axislayer: _this.layers.caxis, _gridlayer: _this.layers.cgrid, _counteraxis: _this.baxis, + anchor: 'free', + position: 0, _pos: 0, // _this.xaxis.domain[1] * graphSize.w, _id: 'y', _length: w, diff --git a/test/image/baselines/ternary_noticks.png b/test/image/baselines/ternary_noticks.png new file mode 100644 index 0000000000000000000000000000000000000000..e643f587845d8580f19f07f5f9082653a8663c93 GIT binary patch literal 23959 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

J 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/ternary_noticks.json b/test/image/mocks/ternary_noticks.json new file mode 100644 index 00000000000..bb0f110a3ab --- /dev/null +++ b/test/image/mocks/ternary_noticks.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "a": [2, 1, 1], + "b": [1, 2, 1], + "c": [1, 1, 2.12345], + "type": "scatterternary" + } + ], + "layout": { + "ternary": { + "aaxis": { + "showticklabels": false, + "showline": false, + "title": "no labels / no line" + }, + "baxis": { + "ticks": "", + "showticklabels": false, + "title": "no ticks / no labels" + }, + "caxis": { + "showticklabels": false, + "showgrid": false, + "title": "no grid / no labels" + } + }, + "height": 450, + "width": 700 + } +} From 05f58ce3e40c6625467040689fea76f8ff9a1504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 10 Sep 2018 17:35:40 -0400 Subject: [PATCH 2/4] mv ternary/layout/* to layout_defaults.js and layout_attributes.js - like more 'recent' subplot types. --- src/plots/ternary/index.js | 20 ++- src/plots/ternary/layout/attributes.js | 25 ---- src/plots/ternary/layout/axis_defaults.js | 76 ----------- src/plots/ternary/layout/defaults.js | 63 --------- src/plots/ternary/layout/layout_attributes.js | 38 ------ ...xis_attributes.js => layout_attributes.js} | 34 ++++- src/plots/ternary/layout_defaults.js | 128 ++++++++++++++++++ test/jasmine/tests/ternary_test.js | 2 +- 8 files changed, 175 insertions(+), 211 deletions(-) delete mode 100644 src/plots/ternary/layout/attributes.js delete mode 100644 src/plots/ternary/layout/axis_defaults.js delete mode 100644 src/plots/ternary/layout/defaults.js delete mode 100644 src/plots/ternary/layout/layout_attributes.js rename src/plots/ternary/{layout/axis_attributes.js => layout_attributes.js} (67%) create mode 100644 src/plots/ternary/layout_defaults.js diff --git a/src/plots/ternary/index.js b/src/plots/ternary/index.js index fa5a265cb01..fd119f5f336 100644 --- a/src/plots/ternary/index.js +++ b/src/plots/ternary/index.js @@ -17,17 +17,29 @@ var TERNARY = 'ternary'; exports.name = TERNARY; -exports.attr = 'subplot'; +var attr = exports.attr = 'subplot'; exports.idRoot = TERNARY; exports.idRegex = exports.attrRegex = counterRegex(TERNARY); -exports.attributes = require('./layout/attributes'); +var attributes = exports.attributes = {}; +attributes[attr] = { + valType: 'subplotid', + role: 'info', + dflt: 'ternary', + editType: 'calc', + description: [ + 'Sets a reference between this trace\'s data coordinates and', + 'a ternary subplot.', + 'If *ternary* (the default value), the data refer to `layout.ternary`.', + 'If *ternary2*, the data refer to `layout.ternary2`, and so on.' + ].join(' ') +}; -exports.layoutAttributes = require('./layout/layout_attributes'); +exports.layoutAttributes = require('./layout_attributes'); -exports.supplyLayoutDefaults = require('./layout/defaults'); +exports.supplyLayoutDefaults = require('./layout_defaults'); exports.plot = function plotTernary(gd) { var fullLayout = gd._fullLayout; diff --git a/src/plots/ternary/layout/attributes.js b/src/plots/ternary/layout/attributes.js deleted file mode 100644 index 585b109cb10..00000000000 --- a/src/plots/ternary/layout/attributes.js +++ /dev/null @@ -1,25 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - -'use strict'; - - -module.exports = { - subplot: { - valType: 'subplotid', - role: 'info', - dflt: 'ternary', - editType: 'calc', - description: [ - 'Sets a reference between this trace\'s data coordinates and', - 'a ternary subplot.', - 'If *ternary* (the default value), the data refer to `layout.ternary`.', - 'If *ternary2*, the data refer to `layout.ternary2`, and so on.' - ].join(' ') - } -}; diff --git a/src/plots/ternary/layout/axis_defaults.js b/src/plots/ternary/layout/axis_defaults.js deleted file mode 100644 index aa4f984c22a..00000000000 --- a/src/plots/ternary/layout/axis_defaults.js +++ /dev/null @@ -1,76 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - -'use strict'; - -var Lib = require('../../../lib'); -var layoutAttributes = require('./axis_attributes'); -var handleTickLabelDefaults = require('../../cartesian/tick_label_defaults'); -var handleTickMarkDefaults = require('../../cartesian/tick_mark_defaults'); -var handleTickValueDefaults = require('../../cartesian/tick_value_defaults'); -var handleLineGridDefaults = require('../../cartesian/line_grid_defaults'); - -module.exports = function supplyLayoutDefaults(containerIn, containerOut, options) { - function coerce(attr, dflt) { - return Lib.coerce(containerIn, containerOut, layoutAttributes, attr, dflt); - } - - containerOut.type = 'linear'; // no other types allowed for ternary - - var dfltColor = coerce('color'); - // if axis.color was provided, use it for fonts too; otherwise, - // inherit from global font color in case that was provided. - var dfltFontColor = (dfltColor !== layoutAttributes.color.dflt) ? dfltColor : options.font.color; - - var axName = containerOut._name, - letterUpper = axName.charAt(0).toUpperCase(), - dfltTitle = 'Component ' + letterUpper; - - var title = coerce('title', dfltTitle); - containerOut._hovertitle = title === dfltTitle ? title : letterUpper; - - Lib.coerceFont(coerce, 'titlefont', { - family: options.font.family, - size: Math.round(options.font.size * 1.2), - color: dfltFontColor - }); - - // range is just set by 'min' - max is determined by the other axes mins - coerce('min'); - - handleTickValueDefaults(containerIn, containerOut, coerce, 'linear'); - handleTickLabelDefaults(containerIn, containerOut, coerce, 'linear', {}); - handleTickMarkDefaults(containerIn, containerOut, coerce, - { outerTicks: true }); - - var showTickLabels = coerce('showticklabels'); - if(showTickLabels) { - Lib.coerceFont(coerce, 'tickfont', { - family: options.font.family, - size: options.font.size, - color: dfltFontColor - }); - coerce('tickangle'); - coerce('tickformat'); - } - - handleLineGridDefaults(containerIn, containerOut, coerce, { - dfltColor: dfltColor, - bgColor: options.bgColor, - // default grid color is darker here (60%, vs cartesian default ~91%) - // because the grid is not square so the eye needs heavier cues to follow - blend: 60, - showLine: true, - showGrid: true, - noZeroLine: true, - attributes: layoutAttributes - }); - - coerce('hoverformat'); - coerce('layer'); -}; diff --git a/src/plots/ternary/layout/defaults.js b/src/plots/ternary/layout/defaults.js deleted file mode 100644 index 12bcdf22499..00000000000 --- a/src/plots/ternary/layout/defaults.js +++ /dev/null @@ -1,63 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var Color = require('../../../components/color'); -var Template = require('../../../plot_api/plot_template'); - -var handleSubplotDefaults = require('../../subplot_defaults'); -var layoutAttributes = require('./layout_attributes'); -var handleAxisDefaults = require('./axis_defaults'); - -var axesNames = ['aaxis', 'baxis', 'caxis']; - -module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { - handleSubplotDefaults(layoutIn, layoutOut, fullData, { - type: 'ternary', - attributes: layoutAttributes, - handleDefaults: handleTernaryDefaults, - font: layoutOut.font, - paper_bgcolor: layoutOut.paper_bgcolor - }); -}; - -function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, options) { - var bgColor = coerce('bgcolor'); - var sum = coerce('sum'); - options.bgColor = Color.combine(bgColor, options.paper_bgcolor); - var axName, containerIn, containerOut; - - // TODO: allow most (if not all) axis attributes to be set - // in the outer container and used as defaults in the individual axes? - - for(var j = 0; j < axesNames.length; j++) { - axName = axesNames[j]; - containerIn = ternaryLayoutIn[axName] || {}; - containerOut = Template.newContainer(ternaryLayoutOut, axName); - containerOut._name = axName; - - handleAxisDefaults(containerIn, containerOut, options); - } - - // if the min values contradict each other, set them all to default (0) - // and delete *all* the inputs so the user doesn't get confused later by - // changing one and having them all change. - var aaxis = ternaryLayoutOut.aaxis, - baxis = ternaryLayoutOut.baxis, - caxis = ternaryLayoutOut.caxis; - if(aaxis.min + baxis.min + caxis.min >= sum) { - aaxis.min = 0; - baxis.min = 0; - caxis.min = 0; - if(ternaryLayoutIn.aaxis) delete ternaryLayoutIn.aaxis.min; - if(ternaryLayoutIn.baxis) delete ternaryLayoutIn.baxis.min; - if(ternaryLayoutIn.caxis) delete ternaryLayoutIn.caxis.min; - } -} diff --git a/src/plots/ternary/layout/layout_attributes.js b/src/plots/ternary/layout/layout_attributes.js deleted file mode 100644 index 77c06326974..00000000000 --- a/src/plots/ternary/layout/layout_attributes.js +++ /dev/null @@ -1,38 +0,0 @@ -/** -* Copyright 2012-2018, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - -'use strict'; - -var colorAttrs = require('../../../components/color/attributes'); -var domainAttrs = require('../../domain').attributes; -var ternaryAxesAttrs = require('./axis_attributes'); -var overrideAll = require('../../../plot_api/edit_types').overrideAll; - -module.exports = overrideAll({ - domain: domainAttrs({name: 'ternary'}), - - bgcolor: { - valType: 'color', - role: 'style', - dflt: colorAttrs.background, - description: 'Set the background color of the subplot' - }, - sum: { - valType: 'number', - role: 'info', - dflt: 1, - min: 0, - description: [ - 'The number each triplet should sum to,', - 'and the maximum range of each axis' - ].join(' ') - }, - aaxis: ternaryAxesAttrs, - baxis: ternaryAxesAttrs, - caxis: ternaryAxesAttrs -}, 'plot', 'from-root'); diff --git a/src/plots/ternary/layout/axis_attributes.js b/src/plots/ternary/layout_attributes.js similarity index 67% rename from src/plots/ternary/layout/axis_attributes.js rename to src/plots/ternary/layout_attributes.js index 2ed0bcc74e2..72397f0f876 100644 --- a/src/plots/ternary/layout/axis_attributes.js +++ b/src/plots/ternary/layout_attributes.js @@ -8,12 +8,14 @@ 'use strict'; +var colorAttrs = require('../../components/color/attributes'); +var domainAttrs = require('../domain').attributes; +var axesAttrs = require('../cartesian/layout_attributes'); -var axesAttrs = require('../../cartesian/layout_attributes'); -var extendFlat = require('../../../lib/extend').extendFlat; +var overrideAll = require('../../plot_api/edit_types').overrideAll; +var extendFlat = require('../../lib/extend').extendFlat; - -module.exports = { +var ternaryAxesAttrs = { title: axesAttrs.title, titlefont: axesAttrs.titlefont, color: axesAttrs.color, @@ -63,3 +65,27 @@ module.exports = { ].join(' ') } }; + +module.exports = overrideAll({ + domain: domainAttrs({name: 'ternary'}), + + bgcolor: { + valType: 'color', + role: 'style', + dflt: colorAttrs.background, + description: 'Set the background color of the subplot' + }, + sum: { + valType: 'number', + role: 'info', + dflt: 1, + min: 0, + description: [ + 'The number each triplet should sum to,', + 'and the maximum range of each axis' + ].join(' ') + }, + aaxis: ternaryAxesAttrs, + baxis: ternaryAxesAttrs, + caxis: ternaryAxesAttrs +}, 'plot', 'from-root'); diff --git a/src/plots/ternary/layout_defaults.js b/src/plots/ternary/layout_defaults.js new file mode 100644 index 00000000000..7952a4559a5 --- /dev/null +++ b/src/plots/ternary/layout_defaults.js @@ -0,0 +1,128 @@ +/** +* Copyright 2012-2018, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + +'use strict'; + +var Color = require('../../components/color'); +var Template = require('../../plot_api/plot_template'); +var Lib = require('../../lib'); + +var handleSubplotDefaults = require('../subplot_defaults'); +var handleTickLabelDefaults = require('../cartesian/tick_label_defaults'); +var handleTickMarkDefaults = require('../cartesian/tick_mark_defaults'); +var handleTickValueDefaults = require('../cartesian/tick_value_defaults'); +var handleLineGridDefaults = require('../cartesian/line_grid_defaults'); +var layoutAttributes = require('./layout_attributes'); + +var axesNames = ['aaxis', 'baxis', 'caxis']; + +module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { + handleSubplotDefaults(layoutIn, layoutOut, fullData, { + type: 'ternary', + attributes: layoutAttributes, + handleDefaults: handleTernaryDefaults, + font: layoutOut.font, + paper_bgcolor: layoutOut.paper_bgcolor + }); +}; + +function handleTernaryDefaults(ternaryLayoutIn, ternaryLayoutOut, coerce, options) { + var bgColor = coerce('bgcolor'); + var sum = coerce('sum'); + options.bgColor = Color.combine(bgColor, options.paper_bgcolor); + var axName, containerIn, containerOut; + + // TODO: allow most (if not all) axis attributes to be set + // in the outer container and used as defaults in the individual axes? + + for(var j = 0; j < axesNames.length; j++) { + axName = axesNames[j]; + containerIn = ternaryLayoutIn[axName] || {}; + containerOut = Template.newContainer(ternaryLayoutOut, axName); + containerOut._name = axName; + + handleAxisDefaults(containerIn, containerOut, options); + } + + // if the min values contradict each other, set them all to default (0) + // and delete *all* the inputs so the user doesn't get confused later by + // changing one and having them all change. + var aaxis = ternaryLayoutOut.aaxis, + baxis = ternaryLayoutOut.baxis, + caxis = ternaryLayoutOut.caxis; + if(aaxis.min + baxis.min + caxis.min >= sum) { + aaxis.min = 0; + baxis.min = 0; + caxis.min = 0; + if(ternaryLayoutIn.aaxis) delete ternaryLayoutIn.aaxis.min; + if(ternaryLayoutIn.baxis) delete ternaryLayoutIn.baxis.min; + if(ternaryLayoutIn.caxis) delete ternaryLayoutIn.caxis.min; + } +} + +function handleAxisDefaults(containerIn, containerOut, options) { + var axAttrs = layoutAttributes[containerOut._name]; + + function coerce(attr, dflt) { + return Lib.coerce(containerIn, containerOut, axAttrs, attr, dflt); + } + + containerOut.type = 'linear'; // no other types allowed for ternary + + var dfltColor = coerce('color'); + // if axis.color was provided, use it for fonts too; otherwise, + // inherit from global font color in case that was provided. + var dfltFontColor = (dfltColor !== axAttrs.color.dflt) ? dfltColor : options.font.color; + + var axName = containerOut._name, + letterUpper = axName.charAt(0).toUpperCase(), + dfltTitle = 'Component ' + letterUpper; + + var title = coerce('title', dfltTitle); + containerOut._hovertitle = title === dfltTitle ? title : letterUpper; + + Lib.coerceFont(coerce, 'titlefont', { + family: options.font.family, + size: Math.round(options.font.size * 1.2), + color: dfltFontColor + }); + + // range is just set by 'min' - max is determined by the other axes mins + coerce('min'); + + handleTickValueDefaults(containerIn, containerOut, coerce, 'linear'); + handleTickLabelDefaults(containerIn, containerOut, coerce, 'linear', {}); + handleTickMarkDefaults(containerIn, containerOut, coerce, + { outerTicks: true }); + + var showTickLabels = coerce('showticklabels'); + if(showTickLabels) { + Lib.coerceFont(coerce, 'tickfont', { + family: options.font.family, + size: options.font.size, + color: dfltFontColor + }); + coerce('tickangle'); + coerce('tickformat'); + } + + handleLineGridDefaults(containerIn, containerOut, coerce, { + dfltColor: dfltColor, + bgColor: options.bgColor, + // default grid color is darker here (60%, vs cartesian default ~91%) + // because the grid is not square so the eye needs heavier cues to follow + blend: 60, + showLine: true, + showGrid: true, + noZeroLine: true, + attributes: axAttrs + }); + + coerce('hoverformat'); + coerce('layer'); +} diff --git a/test/jasmine/tests/ternary_test.js b/test/jasmine/tests/ternary_test.js index 8bd9847049a..da1d3d93a5c 100644 --- a/test/jasmine/tests/ternary_test.js +++ b/test/jasmine/tests/ternary_test.js @@ -1,7 +1,7 @@ var Plotly = require('@lib'); var Lib = require('@src/lib'); -var supplyLayoutDefaults = require('@src/plots/ternary/layout/defaults'); +var supplyLayoutDefaults = require('@src/plots/ternary/layout_defaults'); var d3 = require('d3'); var createGraphDiv = require('../assets/create_graph_div'); From 937f5cf4d4dde046aa8390c0f14bc14b036acfd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 10 Sep 2018 19:07:30 -0400 Subject: [PATCH 3/4] fix and :lock: ticks and tick labels hide/show edits --- src/plots/ternary/ternary.js | 44 ++++++++++++++++--- test/jasmine/tests/ternary_test.js | 70 ++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 6 deletions(-) diff --git a/src/plots/ternary/ternary.js b/src/plots/ternary/ternary.js index 4effa8fa868..a4ec4a7427c 100644 --- a/src/plots/ternary/ternary.js +++ b/src/plots/ternary/ternary.js @@ -34,6 +34,12 @@ function Ternary(options, fullLayout) { this.graphDiv = options.graphDiv; this.init(fullLayout); this.makeFramework(fullLayout); + + // unfortunately, we have to keep track of some axis tick settings + // as ternary subplots do not implement the 'ticks' editType + this.aTickLayout = null; + this.bTickLayout = null; + this.cTickLayout = null; } module.exports = Ternary; @@ -375,12 +381,33 @@ proto.adjustLayout = function(ternaryLayout, graphSize) { }; proto.drawAxes = function(doTitles) { - var _this = this, - gd = _this.graphDiv, - titlesuffix = _this.id.substr(7) + 'title', - aaxis = _this.aaxis, - baxis = _this.baxis, - caxis = _this.caxis; + var _this = this; + var gd = _this.graphDiv; + var titlesuffix = _this.id.substr(7) + 'title'; + var layers = _this.layers; + var aaxis = _this.aaxis; + var baxis = _this.baxis; + var caxis = _this.caxis; + var newTickLayout; + + newTickLayout = strTickLayout(aaxis); + if(_this.aTickLayout !== newTickLayout) { + layers.aaxis.selectAll('.ytick').remove(); + _this.aTickLayout = newTickLayout; + } + + newTickLayout = strTickLayout(baxis); + if(_this.bTickLayout !== newTickLayout) { + layers.baxis.selectAll('.xtick').remove(); + _this.bTickLayout = newTickLayout; + } + + newTickLayout = strTickLayout(caxis); + if(_this.cTickLayout !== newTickLayout) { + layers.caxis.selectAll('.ytick').remove(); + _this.cTickLayout = newTickLayout; + } + // 3rd arg true below skips titles, so we can configure them // correctly later on. Axes.doTicksSingle(gd, aaxis, true); @@ -430,6 +457,11 @@ proto.drawAxes = function(doTitles) { } }; +function strTickLayout(axLayout) { + return axLayout.ticks + String(axLayout.ticklen) + String(axLayout.showticklabels); +} + + // hard coded paths for zoom corners // uses the same sizing as cartesian, length is MINZOOM/2, width is 3px var CLEN = constants.MINZOOM / 2 + 0.87; diff --git a/test/jasmine/tests/ternary_test.js b/test/jasmine/tests/ternary_test.js index da1d3d93a5c..076685bb3b2 100644 --- a/test/jasmine/tests/ternary_test.js +++ b/test/jasmine/tests/ternary_test.js @@ -382,6 +382,76 @@ describe('ternary plots', function() { .then(done); }); + it('should be able to hide/show ticks and tick labels', function(done) { + var gd = createGraphDiv(); + var fig = Lib.extendDeep({}, require('@mocks/ternary_simple.json')); + + function assertCnt(selector, expected, msg) { + var sel = d3.select(gd).selectAll(selector); + expect(sel.size()).toBe(expected, msg); + } + + function toggle(selector, astr, vals, exps) { + return Plotly.relayout(gd, astr, vals[0]).then(function() { + assertCnt(selector, exps[0], astr + ' ' + vals[0]); + return Plotly.relayout(gd, astr, vals[1]); + }) + .then(function() { + assertCnt(selector, exps[1], astr + ' ' + vals[1]); + return Plotly.relayout(gd, astr, vals[0]); + }) + .then(function() { + assertCnt(selector, exps[0], astr + ' ' + vals[0]); + }); + } + + Plotly.plot(gd, fig) + .then(function() { + return toggle( + '.aaxis > .ytick > text', + 'ternary.aaxis.showticklabels', + [true, false], [4, 0] + ); + }) + .then(function() { + return toggle( + '.baxis > .xtick > text', + 'ternary.baxis.showticklabels', + [true, false], [5, 0] + ); + }) + .then(function() { + return toggle( + '.caxis > .ytick > text', + 'ternary.caxis.showticklabels', + [true, false], [4, 0] + ); + }) + .then(function() { + return toggle( + '.aaxis > path.ytick', + 'ternary.aaxis.ticks', + ['outside', ''], [4, 0] + ); + }) + .then(function() { + return toggle( + '.baxis > path.xtick', + 'ternary.baxis.ticks', + ['outside', ''], [5, 0] + ); + }) + .then(function() { + return toggle( + '.caxis > path.ytick', + 'ternary.caxis.ticks', + ['outside', ''], [4, 0] + ); + }) + .catch(failTest) + .then(done); + }); + it('should render a-axis and c-axis with negative offsets', function(done) { var gd = createGraphDiv(); From 68e0628b20e2bf8f05eaac28e094e60584669f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 11 Sep 2018 10:20:25 -0400 Subject: [PATCH 4/4] wrap toggle() test functions --- test/jasmine/tests/polar_test.js | 121 +++++++++++++---------------- test/jasmine/tests/ternary_test.js | 90 +++++++++------------ 2 files changed, 91 insertions(+), 120 deletions(-) diff --git a/test/jasmine/tests/polar_test.js b/test/jasmine/tests/polar_test.js index f241d155088..84565b145d7 100644 --- a/test/jasmine/tests/polar_test.js +++ b/test/jasmine/tests/polar_test.js @@ -381,75 +381,62 @@ describe('Test relayout on polar subplots:', function() { } function toggle(astr, vals, exps, selector, fn) { - return Plotly.relayout(gd, astr, vals[0]).then(function() { - fn(selector, exps[0], astr + ' ' + vals[0]); - return Plotly.relayout(gd, astr, vals[1]); - }) - .then(function() { - fn(selector, exps[1], astr + ' ' + vals[1]); - return Plotly.relayout(gd, astr, vals[0]); - }) - .then(function() { - fn(selector, exps[0], astr + ' ' + vals[0]); - }); + return function() { + return Plotly.relayout(gd, astr, vals[0]).then(function() { + fn(selector, exps[0], astr + ' ' + vals[0]); + return Plotly.relayout(gd, astr, vals[1]); + }) + .then(function() { + fn(selector, exps[1], astr + ' ' + vals[1]); + return Plotly.relayout(gd, astr, vals[0]); + }) + .then(function() { + fn(selector, exps[0], astr + ' ' + vals[0]); + }); + }; } - Plotly.plot(gd, fig).then(function() { - return toggle( - 'polar.radialaxis.showline', - [true, false], [null, 'none'], - '.radial-line > line', assertDisplay - ); - }) - .then(function() { - return toggle( - 'polar.radialaxis.showgrid', - [true, false], [null, 'none'], - '.radial-grid', assertDisplay - ); - }) - .then(function() { - return toggle( - 'polar.radialaxis.showticklabels', - [true, false], [6, 0], - '.radial-axis > .xtick > text', assertCnt - ); - }) - .then(function() { - return toggle( - 'polar.radialaxis.ticks', - ['outside', ''], [6, 0], - '.radial-axis > path.xtick', assertCnt - ); - }) - .then(function() { - return toggle( - 'polar.angularaxis.showline', - [true, false], [null, 'none'], - '.angular-line > path', assertDisplay - ); - }) - .then(function() { - return toggle( - 'polar.angularaxis.showgrid', - [true, false], [8, 0], - '.angular-grid > .angularaxis > path', assertCnt - ); - }) - .then(function() { - return toggle( - 'polar.angularaxis.showticklabels', - [true, false], [8, 0], - '.angular-axis > .angularaxistick > text', assertCnt - ); - }) - .then(function() { - return toggle( - 'polar.angularaxis.ticks', - ['outside', ''], [8, 0], - '.angular-axis > path.angularaxistick', assertCnt - ); - }) + Plotly.plot(gd, fig) + .then(toggle( + 'polar.radialaxis.showline', + [true, false], [null, 'none'], + '.radial-line > line', assertDisplay + )) + .then(toggle( + 'polar.radialaxis.showgrid', + [true, false], [null, 'none'], + '.radial-grid', assertDisplay + )) + .then(toggle( + 'polar.radialaxis.showticklabels', + [true, false], [6, 0], + '.radial-axis > .xtick > text', assertCnt + )) + .then(toggle( + 'polar.radialaxis.ticks', + ['outside', ''], [6, 0], + '.radial-axis > path.xtick', assertCnt + )) + .then(toggle( + 'polar.angularaxis.showline', + [true, false], [null, 'none'], + '.angular-line > path', assertDisplay + )) + .then(toggle( + 'polar.angularaxis.showgrid', + [true, false], [8, 0], + '.angular-grid > .angularaxis > path', assertCnt + )) + .then(toggle( + 'polar.angularaxis.showticklabels', + [true, false], [8, 0], + '.angular-axis > .angularaxistick > text', assertCnt + )) + .then(toggle( + 'polar.angularaxis.ticks', + ['outside', ''], [8, 0], + '.angular-axis > path.angularaxistick', assertCnt + )) .catch(failTest) .then(done); }); diff --git a/test/jasmine/tests/ternary_test.js b/test/jasmine/tests/ternary_test.js index 076685bb3b2..f202749ed3b 100644 --- a/test/jasmine/tests/ternary_test.js +++ b/test/jasmine/tests/ternary_test.js @@ -392,62 +392,46 @@ describe('ternary plots', function() { } function toggle(selector, astr, vals, exps) { - return Plotly.relayout(gd, astr, vals[0]).then(function() { - assertCnt(selector, exps[0], astr + ' ' + vals[0]); - return Plotly.relayout(gd, astr, vals[1]); - }) - .then(function() { - assertCnt(selector, exps[1], astr + ' ' + vals[1]); - return Plotly.relayout(gd, astr, vals[0]); - }) - .then(function() { - assertCnt(selector, exps[0], astr + ' ' + vals[0]); - }); + return function() { + return Plotly.relayout(gd, astr, vals[0]).then(function() { + assertCnt(selector, exps[0], astr + ' ' + vals[0]); + return Plotly.relayout(gd, astr, vals[1]); + }) + .then(function() { + assertCnt(selector, exps[1], astr + ' ' + vals[1]); + return Plotly.relayout(gd, astr, vals[0]); + }) + .then(function() { + assertCnt(selector, exps[0], astr + ' ' + vals[0]); + }); + }; } Plotly.plot(gd, fig) - .then(function() { - return toggle( - '.aaxis > .ytick > text', - 'ternary.aaxis.showticklabels', - [true, false], [4, 0] - ); - }) - .then(function() { - return toggle( - '.baxis > .xtick > text', - 'ternary.baxis.showticklabels', - [true, false], [5, 0] - ); - }) - .then(function() { - return toggle( - '.caxis > .ytick > text', - 'ternary.caxis.showticklabels', - [true, false], [4, 0] - ); - }) - .then(function() { - return toggle( - '.aaxis > path.ytick', - 'ternary.aaxis.ticks', - ['outside', ''], [4, 0] - ); - }) - .then(function() { - return toggle( - '.baxis > path.xtick', - 'ternary.baxis.ticks', - ['outside', ''], [5, 0] - ); - }) - .then(function() { - return toggle( - '.caxis > path.ytick', - 'ternary.caxis.ticks', - ['outside', ''], [4, 0] - ); - }) + .then(toggle( + '.aaxis > .ytick > text', 'ternary.aaxis.showticklabels', + [true, false], [4, 0] + )) + .then(toggle( + '.baxis > .xtick > text', 'ternary.baxis.showticklabels', + [true, false], [5, 0] + )) + .then(toggle( + '.caxis > .ytick > text', 'ternary.caxis.showticklabels', + [true, false], [4, 0] + )) + .then(toggle( + '.aaxis > path.ytick', 'ternary.aaxis.ticks', + ['outside', ''], [4, 0] + )) + .then(toggle( + '.baxis > path.xtick', 'ternary.baxis.ticks', + ['outside', ''], [5, 0] + )) + .then(toggle( + '.caxis > path.ytick', 'ternary.caxis.ticks', + ['outside', ''], [4, 0] + )) .catch(failTest) .then(done); });