diff --git a/src/components/colorbar/defaults.js b/src/components/colorbar/defaults.js index 666fcfe7ca1..b8878e099cb 100644 --- a/src/components/colorbar/defaults.js +++ b/src/components/colorbar/defaults.js @@ -6,6 +6,7 @@ var Template = require('../../plot_api/plot_template'); var handleTickValueDefaults = require('../../plots/cartesian/tick_value_defaults'); var handleTickMarkDefaults = require('../../plots/cartesian/tick_mark_defaults'); var handleTickLabelDefaults = require('../../plots/cartesian/tick_label_defaults'); +var handlePrefixSuffixDefaults = require('../../plots/cartesian/prefix_suffix_defaults'); var attributes = require('./attributes'); @@ -53,6 +54,7 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) { if(ticklabelposition.indexOf('inside') !== -1) { opts.bgColor = 'black'; // could we instead use the average of colors in the scale? } + handlePrefixSuffixDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); handleTickLabelDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); handleTickMarkDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts); diff --git a/src/plots/cartesian/axis_defaults.js b/src/plots/cartesian/axis_defaults.js index 2b67a5162cf..434b076a845 100644 --- a/src/plots/cartesian/axis_defaults.js +++ b/src/plots/cartesian/axis_defaults.js @@ -11,6 +11,7 @@ var layoutAttributes = require('./layout_attributes'); var handleTickValueDefaults = require('./tick_value_defaults'); var handleTickMarkDefaults = require('./tick_mark_defaults'); var handleTickLabelDefaults = require('./tick_label_defaults'); +var handlePrefixSuffixDefaults = require('./prefix_suffix_defaults'); var handleCategoryOrderDefaults = require('./category_order_defaults'); var handleLineGridDefaults = require('./line_grid_defaults'); var setConvert = require('./set_convert'); @@ -110,7 +111,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, // try to get default title from splom trace, fallback to graph-wide value var dfltTitle = splomStash.label || layoutOut._dfltTitle[letter]; - handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options, {pass: 1}); + handlePrefixSuffixDefaults(containerIn, containerOut, coerce, axType, options); if(!visible) return containerOut; coerce('title.text', dfltTitle); @@ -121,7 +122,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce, }); handleTickValueDefaults(containerIn, containerOut, coerce, axType); - handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options, {pass: 2}); + handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options); handleTickMarkDefaults(containerIn, containerOut, coerce, options); handleLineGridDefaults(containerIn, containerOut, coerce, { dfltColor: dfltColor, diff --git a/src/plots/cartesian/prefix_suffix_defaults.js b/src/plots/cartesian/prefix_suffix_defaults.js new file mode 100644 index 00000000000..c645e58d5ad --- /dev/null +++ b/src/plots/cartesian/prefix_suffix_defaults.js @@ -0,0 +1,16 @@ +'use strict'; + +var getShowAttrDflt = require('./show_dflt'); + +module.exports = function handlePrefixSuffixDefaults(containerIn, containerOut, coerce, axType, options) { + if(!options) options = {}; + var tickSuffixDflt = options.tickSuffixDflt; + + var showAttrDflt = getShowAttrDflt(containerIn); + + var tickPrefix = coerce('tickprefix'); + if(tickPrefix) coerce('showtickprefix', showAttrDflt); + + var tickSuffix = coerce('ticksuffix', tickSuffixDflt); + if(tickSuffix) coerce('showticksuffix', showAttrDflt); +}; diff --git a/src/plots/cartesian/show_dflt.js b/src/plots/cartesian/show_dflt.js new file mode 100644 index 00000000000..7b486211807 --- /dev/null +++ b/src/plots/cartesian/show_dflt.js @@ -0,0 +1,29 @@ +'use strict'; + +/* + * Attributes 'showexponent', 'showtickprefix' and 'showticksuffix' + * share values. + * + * If only 1 attribute is set, + * the remaining attributes inherit that value. + * + * If 2 attributes are set to the same value, + * the remaining attribute inherits that value. + * + * If 2 attributes are set to different values, + * the remaining is set to its dflt value. + * + */ +module.exports = function getShowAttrDflt(containerIn) { + var showAttrsAll = ['showexponent', 'showtickprefix', 'showticksuffix']; + var showAttrs = showAttrsAll.filter(function(a) { + return containerIn[a] !== undefined; + }); + var sameVal = function(a) { + return containerIn[a] === containerIn[showAttrs[0]]; + }; + + if(showAttrs.every(sameVal) || showAttrs.length === 1) { + return containerIn[showAttrs[0]]; + } +}; diff --git a/src/plots/cartesian/tick_label_defaults.js b/src/plots/cartesian/tick_label_defaults.js index 9b4b9089641..ce09aba6a04 100644 --- a/src/plots/cartesian/tick_label_defaults.js +++ b/src/plots/cartesian/tick_label_defaults.js @@ -3,29 +3,11 @@ var Lib = require('../../lib'); var contrast = require('../../components/color').contrast; var layoutAttributes = require('./layout_attributes'); +var getShowAttrDflt = require('./show_dflt'); var handleArrayContainerDefaults = require('../array_container_defaults'); -module.exports = function handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options, config) { - if(!config || config.pass === 1) { - handlePrefixSuffix(containerIn, containerOut, coerce, axType, options); - } - - if(!config || config.pass === 2) { - handleOtherDefaults(containerIn, containerOut, coerce, axType, options); - } -}; - -function handlePrefixSuffix(containerIn, containerOut, coerce, axType, options) { - var showAttrDflt = getShowAttrDflt(containerIn); - - var tickPrefix = coerce('tickprefix'); - if(tickPrefix) coerce('showtickprefix', showAttrDflt); - - var tickSuffix = coerce('ticksuffix', options.tickSuffixDflt); - if(tickSuffix) coerce('showticksuffix', showAttrDflt); -} - -function handleOtherDefaults(containerIn, containerOut, coerce, axType, options) { +module.exports = function handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options) { + if(!options) options = {}; var showAttrDflt = getShowAttrDflt(containerIn); var showTickLabels = coerce('showticklabels'); @@ -67,35 +49,7 @@ function handleOtherDefaults(containerIn, containerOut, coerce, axType, options) } } } -} - -/* - * Attributes 'showexponent', 'showtickprefix' and 'showticksuffix' - * share values. - * - * If only 1 attribute is set, - * the remaining attributes inherit that value. - * - * If 2 attributes are set to the same value, - * the remaining attribute inherits that value. - * - * If 2 attributes are set to different values, - * the remaining is set to its dflt value. - * - */ -function getShowAttrDflt(containerIn) { - var showAttrsAll = ['showexponent', 'showtickprefix', 'showticksuffix']; - var showAttrs = showAttrsAll.filter(function(a) { - return containerIn[a] !== undefined; - }); - var sameVal = function(a) { - return containerIn[a] === containerIn[showAttrs[0]]; - }; - - if(showAttrs.every(sameVal) || showAttrs.length === 1) { - return containerIn[showAttrs[0]]; - } -} +}; function tickformatstopDefaults(valueIn, valueOut) { function coerce(attr, dflt) { diff --git a/src/plots/polar/layout_defaults.js b/src/plots/polar/layout_defaults.js index a3ad091932e..9a7c609ed2b 100644 --- a/src/plots/polar/layout_defaults.js +++ b/src/plots/polar/layout_defaults.js @@ -10,6 +10,7 @@ var getSubplotData = require('../get_data').getSubplotData; var handleTickValueDefaults = require('../cartesian/tick_value_defaults'); var handleTickMarkDefaults = require('../cartesian/tick_mark_defaults'); var handleTickLabelDefaults = require('../cartesian/tick_label_defaults'); +var handlePrefixSuffixDefaults = require('../cartesian/prefix_suffix_defaults'); var handleCategoryOrderDefaults = require('../cartesian/category_order_defaults'); var handleLineGridDefaults = require('../cartesian/line_grid_defaults'); var autoType = require('../cartesian/axis_autotype'); @@ -138,9 +139,10 @@ function handleDefaults(contIn, contOut, coerce, opts) { if(visible) { handleTickValueDefaults(axIn, axOut, coerceAxis, axOut.type); - handleTickLabelDefaults(axIn, axOut, coerceAxis, axOut.type, { + handlePrefixSuffixDefaults(axIn, axOut, coerceAxis, axOut.type, { tickSuffixDflt: axOut.thetaunit === 'degrees' ? '°' : undefined }); + handleTickLabelDefaults(axIn, axOut, coerceAxis, axOut.type); handleTickMarkDefaults(axIn, axOut, coerceAxis, {outerTicks: true}); var showTickLabels = coerceAxis('showticklabels'); diff --git a/src/plots/ternary/layout_defaults.js b/src/plots/ternary/layout_defaults.js index 0223bc79be9..7994b04da00 100644 --- a/src/plots/ternary/layout_defaults.js +++ b/src/plots/ternary/layout_defaults.js @@ -6,6 +6,7 @@ var Lib = require('../../lib'); var handleSubplotDefaults = require('../subplot_defaults'); var handleTickLabelDefaults = require('../cartesian/tick_label_defaults'); +var handlePrefixSuffixDefaults = require('../cartesian/prefix_suffix_defaults'); var handleTickMarkDefaults = require('../cartesian/tick_mark_defaults'); var handleTickValueDefaults = require('../cartesian/tick_value_defaults'); var handleLineGridDefaults = require('../cartesian/line_grid_defaults'); @@ -90,7 +91,8 @@ function handleAxisDefaults(containerIn, containerOut, options, ternaryLayoutOut coerce('min'); handleTickValueDefaults(containerIn, containerOut, coerce, 'linear'); - handleTickLabelDefaults(containerIn, containerOut, coerce, 'linear', {}); + handlePrefixSuffixDefaults(containerIn, containerOut, coerce, 'linear'); + handleTickLabelDefaults(containerIn, containerOut, coerce, 'linear'); handleTickMarkDefaults(containerIn, containerOut, coerce, { outerTicks: true }); diff --git a/src/traces/carpet/axis_defaults.js b/src/traces/carpet/axis_defaults.js index 3572d9a5f8d..f58bb3786e2 100644 --- a/src/traces/carpet/axis_defaults.js +++ b/src/traces/carpet/axis_defaults.js @@ -7,6 +7,7 @@ var Registry = require('../../registry'); var Lib = require('../../lib'); var handleTickValueDefaults = require('../../plots/cartesian/tick_value_defaults'); var handleTickLabelDefaults = require('../../plots/cartesian/tick_label_defaults'); +var handlePrefixSuffixDefaults = require('../../plots/cartesian/prefix_suffix_defaults'); var handleCategoryOrderDefaults = require('../../plots/cartesian/category_order_defaults'); var setConvert = require('../../plots/cartesian/set_convert'); var autoType = require('../../plots/cartesian/axis_autotype'); @@ -128,6 +129,7 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, options) coerce('fixedrange'); handleTickValueDefaults(containerIn, containerOut, coerce, axType); + handlePrefixSuffixDefaults(containerIn, containerOut, coerce, axType, options); handleTickLabelDefaults(containerIn, containerOut, coerce, axType, options); handleCategoryOrderDefaults(containerIn, containerOut, coerce, { data: options.data, diff --git a/src/traces/indicator/defaults.js b/src/traces/indicator/defaults.js index 2b664ff3914..3d93848af32 100644 --- a/src/traces/indicator/defaults.js +++ b/src/traces/indicator/defaults.js @@ -10,6 +10,7 @@ var cn = require('./constants.js'); var handleTickValueDefaults = require('../../plots/cartesian/tick_value_defaults'); var handleTickMarkDefaults = require('../../plots/cartesian/tick_mark_defaults'); var handleTickLabelDefaults = require('../../plots/cartesian/tick_label_defaults'); +var handlePrefixSuffixDefaults = require('../../plots/cartesian/prefix_suffix_defaults'); function supplyDefaults(traceIn, traceOut, defaultColor, layout) { function coerce(attr, dflt) { @@ -128,6 +129,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { var opts = {outerTicks: true}; handleTickValueDefaults(axisIn, axisOut, coerceGaugeAxis, 'linear'); + handlePrefixSuffixDefaults(axisIn, axisOut, coerceGaugeAxis, 'linear', opts); handleTickLabelDefaults(axisIn, axisOut, coerceGaugeAxis, 'linear', opts); handleTickMarkDefaults(axisIn, axisOut, coerceGaugeAxis, opts); } else {