From 38dc4659b6ee944520ed071a5e338aa03766f12a Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 24 Sep 2026 01:48:17 +0200 Subject: [PATCH 1/4] fix numeric marker variant detection issue in scattergl --- src/traces/scattergl/helpers.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/traces/scattergl/helpers.js b/src/traces/scattergl/helpers.js index e9567c998d2..870d37e4497 100644 --- a/src/traces/scattergl/helpers.js +++ b/src/traces/scattergl/helpers.js @@ -3,13 +3,11 @@ var constants = require('./constants'); exports.isOpenSymbol = function(symbol) { - return (typeof symbol === 'string') ? - constants.OPEN_RE.test(symbol) : - symbol % 200 > 100; + return (typeof symbol === 'string' && constants.OPEN_RE.test(symbol)) || + symbol % 200 >= 100; }; exports.isDotSymbol = function(symbol) { - return (typeof symbol === 'string') ? - constants.DOT_RE.test(symbol) : - symbol > 200; + return (typeof symbol === 'string' && constants.DOT_RE.test(symbol)) || + symbol >= 200; }; From 3e604cfe64f93d8e24672eac2b0d7bae0a01fba8 Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 24 Sep 2026 01:55:51 +0200 Subject: [PATCH 2/4] add draftlog --- draftlogs/8071_fix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/8071_fix.md diff --git a/draftlogs/8071_fix.md b/draftlogs/8071_fix.md new file mode 100644 index 00000000000..230de8da9a3 --- /dev/null +++ b/draftlogs/8071_fix.md @@ -0,0 +1 @@ +Fix numeric and numeric-string marker symbol variant detection in `scattergl` [[#8071](https://github.com/plotly/plotly.js/pull/8071)] From 691dad1097e1b75dd3144ec940225a6fbc89a7d7 Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Thu, 24 Sep 2026 01:58:12 +0200 Subject: [PATCH 3/4] edit draftlog --- draftlogs/8071_fix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draftlogs/8071_fix.md b/draftlogs/8071_fix.md index 230de8da9a3..19e60820b57 100644 --- a/draftlogs/8071_fix.md +++ b/draftlogs/8071_fix.md @@ -1 +1 @@ -Fix numeric and numeric-string marker symbol variant detection in `scattergl` [[#8071](https://github.com/plotly/plotly.js/pull/8071)] +- Fix numeric and numeric-string marker symbol variant detection in `scattergl` [[#8071](https://github.com/plotly/plotly.js/pull/8071)] From 9c3d0389e8229cab543e7d2c6810dce6d9d6791a Mon Sep 17 00:00:00 2001 From: Ya-Fan Chen <20377719+Lexachoc@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:11:43 +0200 Subject: [PATCH 4/4] Apply suggestions from code review and add unit test --- src/traces/scattergl/constants.ts | 3 --- src/traces/scattergl/helpers.js | 12 +++-------- test/jasmine/tests/scattergl_test.js | 32 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/traces/scattergl/constants.ts b/src/traces/scattergl/constants.ts index 1fb11728471..08f9de956a4 100644 --- a/src/traces/scattergl/constants.ts +++ b/src/traces/scattergl/constants.ts @@ -6,9 +6,6 @@ export const SYMBOL_SDF_SIZE = 200; export const SYMBOL_SIZE = 20; export const SYMBOL_STROKE = SYMBOL_SIZE / 20; -export const DOT_RE = /-dot/; -export const OPEN_RE = /-open/; - export const DASHES = { solid: [1], dot: [1, 1], diff --git a/src/traces/scattergl/helpers.js b/src/traces/scattergl/helpers.js index 870d37e4497..6fc4b7b729e 100644 --- a/src/traces/scattergl/helpers.js +++ b/src/traces/scattergl/helpers.js @@ -1,13 +1,7 @@ 'use strict'; -var constants = require('./constants'); +const { symbolNumber } = require('../../components/drawing'); -exports.isOpenSymbol = function(symbol) { - return (typeof symbol === 'string' && constants.OPEN_RE.test(symbol)) || - symbol % 200 >= 100; -}; +exports.isOpenSymbol = (symbol) => symbolNumber(symbol) % 200 >= 100; -exports.isDotSymbol = function(symbol) { - return (typeof symbol === 'string' && constants.DOT_RE.test(symbol)) || - symbol >= 200; -}; +exports.isDotSymbol = (symbol) => symbolNumber(symbol) >= 200; diff --git a/test/jasmine/tests/scattergl_test.js b/test/jasmine/tests/scattergl_test.js index 8e3595ffd15..6d36a6be66c 100644 --- a/test/jasmine/tests/scattergl_test.js +++ b/test/jasmine/tests/scattergl_test.js @@ -2,6 +2,7 @@ var Plotly = require('../../../lib/index'); var Lib = require('../../../src/lib'); var ScatterGl = require('../../../src/traces/scattergl'); +var ScatterGlHelpers = require('../../../src/traces/scattergl/helpers'); var TOO_MANY_POINTS = require('../../../src/traces/scattergl/constants').TOO_MANY_POINTS; var createGraphDiv = require('../assets/create_graph_div'); @@ -11,6 +12,37 @@ var delay = require('../assets/delay'); var readPixel = require('../assets/read_pixel'); var checkTextTemplate = require('../assets/check_texttemplate'); +describe('scattergl marker symbol variants', function() { + var symbolCases = [ + {symbols: ['circle', 0, '0'], isOpen: false, isDot: false}, + {symbols: ['circle-open', 100, '100'], isOpen: true, isDot: false}, + {symbols: ['circle-dot', 200, '200'], isOpen: false, isDot: true}, + {symbols: ['circle-open-dot', 300, '300'], isOpen: true, isDot: true} + ]; + + it('should detect open symbol variants', function() { + symbolCases.forEach(function(symbolCase) { + symbolCase.symbols.forEach(function(symbol) { + expect(ScatterGlHelpers.isOpenSymbol(symbol)).toBe( + symbolCase.isOpen, + 'symbol: ' + JSON.stringify(symbol) + ); + }); + }); + }); + + it('should detect dot symbol variants', function() { + symbolCases.forEach(function(symbolCase) { + symbolCase.symbols.forEach(function(symbol) { + expect(ScatterGlHelpers.isDotSymbol(symbol)).toBe( + symbolCase.isDot, + 'symbol: ' + JSON.stringify(symbol) + ); + }); + }); + }); +}); + describe('end-to-end scattergl tests', function() { var gd;