diff --git a/src/plots/cartesian/tick_value_defaults.js b/src/plots/cartesian/tick_value_defaults.js index 8f662757140..62268bf01c2 100644 --- a/src/plots/cartesian/tick_value_defaults.js +++ b/src/plots/cartesian/tick_value_defaults.js @@ -9,6 +9,7 @@ 'use strict'; var cleanTicks = require('./clean_ticks'); +var isArrayOrTypedArray = require('../../lib').isArrayOrTypedArray; module.exports = function handleTickValueDefaults(containerIn, containerOut, coerce, axType) { function readInput(attr) { @@ -21,18 +22,11 @@ module.exports = function handleTickValueDefaults(containerIn, containerOut, coe var _tick0 = readInput('tick0'); var _dtick = readInput('dtick'); var _tickvals = readInput('tickvals'); - var _tickmode = readInput('tickmode'); - var tickmode; - if(_tickmode === 'array' && - (axType === 'log' || axType === 'date')) { - tickmode = containerOut.tickmode = 'auto'; - } else { - var tickmodeDefault = Array.isArray(_tickvals) ? 'array' : - _dtick ? 'linear' : - 'auto'; - tickmode = coerce('tickmode', tickmodeDefault); - } + var tickmodeDefault = isArrayOrTypedArray(_tickvals) ? 'array' : + _dtick ? 'linear' : + 'auto'; + var tickmode = coerce('tickmode', tickmodeDefault); if(tickmode === 'auto') coerce('nticks'); else if(tickmode === 'linear') { diff --git a/test/image/baselines/axes_custom-ticks_log-date.png b/test/image/baselines/axes_custom-ticks_log-date.png new file mode 100644 index 00000000000..b52373b8516 Binary files /dev/null and b/test/image/baselines/axes_custom-ticks_log-date.png differ diff --git a/test/image/mocks/axes_custom-ticks_log-date.json b/test/image/mocks/axes_custom-ticks_log-date.json new file mode 100644 index 00000000000..261015f32d1 --- /dev/null +++ b/test/image/mocks/axes_custom-ticks_log-date.json @@ -0,0 +1,58 @@ +{ + "data": [{ + "type": "scatter", + "x": [ + "2010-01-01", + "2010-02-01", + "2010-03-01" + ], + "y": [ + 1, + 100, + 10 + ] + }], + "layout": { + "width": 500, + "height": 300, + "title": { + "text": "custom ticks on date & log axes" + }, + "paper_bgcolor": "lightblue", + "plot_bgcolor": "#ddd", + "yaxis": { + "type": "log", + "tickmode": "array", + "tickvals": [ + 1, + 10, + 100 + ], + "ticktext": [ + "one", + "ten", + "one
hundred" + ], + "gridwidth": 2, + "tickwidth": 15, + "tickcolor": "green", + "gridcolor": "green" + }, + "xaxis": { + "type": "date", + "tickmode": "array", + "tickvals": [ + "2010-01-16", + "2010-02-14" + ], + "ticktext": [ + "Jan 16", + "Feb 14" + ], + "gridwidth": 10, + "tickwidth": 50, + "tickcolor": "rgba(255,0,0,0.75)", + "gridcolor": "rgba(255,0,0,0.25)" + } + } +} diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index 45b1bff36bd..45fe6e87444 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -1887,10 +1887,16 @@ describe('Test axes', function() { expect(axOut.tickmode).toBe('auto'); expect(axIn.tickmode).toBe('array'); + axIn = {tickvals: [1, 2, 3]}; + axOut = {}; + mockSupplyDefaults(axIn, axOut, 'date'); + expect(axOut.tickmode).toBe('array'); + expect(axIn.tickmode).toBeUndefined(); + axIn = {tickmode: 'array', tickvals: [1, 2, 3]}; axOut = {}; mockSupplyDefaults(axIn, axOut, 'date'); - expect(axOut.tickmode).toBe('auto'); + expect(axOut.tickmode).toBe('array'); expect(axIn.tickmode).toBe('array'); axIn = {tickvals: [1, 2, 3]}; @@ -1899,6 +1905,15 @@ describe('Test axes', function() { expect(axOut.tickmode).toBe('array'); expect(axIn.tickmode).toBeUndefined(); + var arr = new Float32Array(2); + arr[0] = 0; + arr[1] = 1; + axIn = {tickvals: arr}; + axOut = {}; + mockSupplyDefaults(axIn, axOut, 'linear'); + expect(axOut.tickmode).toBe('array'); + expect(axIn.tickmode).toBeUndefined(); + axIn = {dtick: 1}; axOut = {}; mockSupplyDefaults(axIn, axOut, 'linear'); diff --git a/test/jasmine/tests/mock_test.js b/test/jasmine/tests/mock_test.js index 0685d8f6001..c6054d51bbb 100644 --- a/test/jasmine/tests/mock_test.js +++ b/test/jasmine/tests/mock_test.js @@ -73,6 +73,7 @@ var list = [ 'axes_category_descending', 'axes_category_descending_with_gaps', 'axes_category_null', + 'axes_custom-ticks_log-date', 'axes_enumerated_ticks', 'axes_free_default', 'axes_labels', @@ -1108,6 +1109,7 @@ figs['axes_category_categoryarray_truncated_tails'] = require('@mocks/axes_categ // figs['axes_category_descending'] = require('@mocks/axes_category_descending'); // figs['axes_category_descending_with_gaps'] = require('@mocks/axes_category_descending_with_gaps'); figs['axes_category_null'] = require('@mocks/axes_category_null'); +figs['axes_custom-ticks_log-date'] = require('@mocks/axes_custom-ticks_log-date'); figs['axes_enumerated_ticks'] = require('@mocks/axes_enumerated_ticks'); figs['axes_free_default'] = require('@mocks/axes_free_default'); // figs['axes_labels'] = require('@mocks/axes_labels');