From 37efadc058a20e41cff02e0c283a323508ef7e01 Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Tue, 21 Mar 2017 22:05:30 +0100 Subject: [PATCH 1/2] Avoid color scale persistence on trace / fullTrace if the user hasn't specified one (as interpreted by has_colorscale.js) --- src/traces/parcoords/calc.js | 7 ------- src/traces/parcoords/defaults.js | 4 ++-- src/traces/parcoords/parcoords.js | 10 ++++++++-- test/jasmine/tests/parcoords_test.js | 16 +++------------- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/traces/parcoords/calc.js b/src/traces/parcoords/calc.js index 00fce2e51b7..a83f4ccaeca 100644 --- a/src/traces/parcoords/calc.js +++ b/src/traces/parcoords/calc.js @@ -10,16 +10,9 @@ var hasColorscale = require('../../components/colorscale/has_colorscale'); var calcColorscale = require('../../components/colorscale/calc'); -var Lib = require('../../lib'); module.exports = function calc(gd, trace) { - var cs = !!trace.line.colorscale && Lib.isArray(trace.line.color); - var color = cs ? trace.line.color : Array.apply(0, Array(trace.dimensions.reduce(function(p, n) {return Math.max(p, n.values.length);}, 0))).map(function() {return 0.5;}); - var cscale = cs ? trace.line.colorscale : [[0, trace.line.color], [1, trace.line.color]]; - - trace.line.color = color; - trace.line.colorscale = cscale; if(hasColorscale(trace, 'line')) { calcColorscale(trace, trace.line.color, 'line', 'c'); diff --git a/src/traces/parcoords/defaults.js b/src/traces/parcoords/defaults.js index a40877d175f..54769588341 100644 --- a/src/traces/parcoords/defaults.js +++ b/src/traces/parcoords/defaults.js @@ -17,9 +17,9 @@ var maxDimensionCount = require('./constants').maxDimensionCount; function handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce) { coerce('line.color', defaultColor); - coerce('line.colorscale'); - if(hasColorscale(traceIn, 'line')) { + if(hasColorscale(traceIn, 'line') && Lib.isArray(traceIn.line.color)) { + coerce('line.colorscale'); colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: 'line.', cLetter: 'c'}); } else { diff --git a/src/traces/parcoords/parcoords.js b/src/traces/parcoords/parcoords.js index 13250c8a074..7b6c16cf106 100644 --- a/src/traces/parcoords/parcoords.js +++ b/src/traces/parcoords/parcoords.js @@ -121,8 +121,14 @@ function model(layout, d, i) { dimensions = trace.dimensions, width = layout.width; + var cs = !!trace.line.colorscale && Lib.isArray(trace.line.color); + var lineColor = cs ? + trace.line.color : + Array.apply(0, Array(trace.dimensions.reduce(function(p, n) {return Math.max(p, n.values.length);}, 0))).map(function() {return 0.5;}); + var lineColorScale = cs ? trace.line.colorscale : [[0, trace.line.color], [1, trace.line.color]]; + var lines = Lib.extendDeep({}, line, { - color: line.color.map(domainToUnitScale({values: line.color, range: [line.cmin, line.cmax]})), + color: lineColor.map(domainToUnitScale({values: lineColor, range: [line.cmin, line.cmax]})), blockLineCount: c.blockLineCount, canvasOverdrag: c.overdrag * c.canvasPixelRatio }); @@ -139,7 +145,7 @@ function model(layout, d, i) { colCount: dimensions.filter(visible).length, dimensions: dimensions, tickDistance: c.tickDistance, - unitToColor: unitToColorScale(line.colorscale), + unitToColor: unitToColorScale(lineColorScale), lines: lines, translateX: domain.x[0] * width, translateY: layout.height - domain.y[1] * layout.height, diff --git a/test/jasmine/tests/parcoords_test.js b/test/jasmine/tests/parcoords_test.js index 74c3ac9ace4..0a15b3a4d5c 100644 --- a/test/jasmine/tests/parcoords_test.js +++ b/test/jasmine/tests/parcoords_test.js @@ -197,14 +197,11 @@ describe('parcoords initialization tests', function() { })); expect(fullTrace.line).toEqual({ - color: [0.5, 0.5, 0.5, 0.5], - colorscale: [[0, '#444'], [1, '#444']], - cmin: 0, - cmax: 1 + color: '#444' }); }); - it('use a singular \'color\' even if a \'colorscale\' is supplied', function() { + it('use a singular \'color\' even if a \'colorscale\' is supplied as \'color\' is not an array', function() { var fullTrace = _calc(Lib.extendDeep({}, base, { line: { @@ -218,14 +215,7 @@ describe('parcoords initialization tests', function() { })); expect(fullTrace.line).toEqual({ - color: [0.5, 0.5, 0.5, 0.5], - colorscale: [[0, '#444'], [1, '#444']], - autocolorscale: false, - showscale: false, - reversescale: false, - cauto: true, - cmin: 0, - cmax: 1 + color: '#444' }); }); }); From f150b9be027af6f1f4775c7dbe39a367dd710f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 22 Mar 2017 13:18:37 -0400 Subject: [PATCH 2/2] move back color computations in calc - but store results in calcdata items, instead of mutating the corresponding fullData items. --- src/traces/parcoords/calc.js | 9 ++++++++- src/traces/parcoords/parcoords.js | 13 +++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/traces/parcoords/calc.js b/src/traces/parcoords/calc.js index a83f4ccaeca..e9c756af988 100644 --- a/src/traces/parcoords/calc.js +++ b/src/traces/parcoords/calc.js @@ -10,13 +10,20 @@ var hasColorscale = require('../../components/colorscale/has_colorscale'); var calcColorscale = require('../../components/colorscale/calc'); +var Lib = require('../../lib'); module.exports = function calc(gd, trace) { + var cs = !!trace.line.colorscale && Lib.isArray(trace.line.color); + var color = cs ? trace.line.color : Array.apply(0, Array(trace.dimensions.reduce(function(p, n) {return Math.max(p, n.values.length);}, 0))).map(function() {return 0.5;}); + var cscale = cs ? trace.line.colorscale : [[0, trace.line.color], [1, trace.line.color]]; if(hasColorscale(trace, 'line')) { calcColorscale(trace, trace.line.color, 'line', 'c'); } - return [{}]; + return [{ + lineColor: color, + cscale: cscale + }]; }; diff --git a/src/traces/parcoords/parcoords.js b/src/traces/parcoords/parcoords.js index 7b6c16cf106..7c58aa1c9ef 100644 --- a/src/traces/parcoords/parcoords.js +++ b/src/traces/parcoords/parcoords.js @@ -115,18 +115,15 @@ function unwrap(d) { } function model(layout, d, i) { - var trace = unwrap(d).trace, + var cd0 = unwrap(d), + trace = cd0.trace, + lineColor = cd0.lineColor, + cscale = cd0.cscale, line = trace.line, domain = trace.domain, dimensions = trace.dimensions, width = layout.width; - var cs = !!trace.line.colorscale && Lib.isArray(trace.line.color); - var lineColor = cs ? - trace.line.color : - Array.apply(0, Array(trace.dimensions.reduce(function(p, n) {return Math.max(p, n.values.length);}, 0))).map(function() {return 0.5;}); - var lineColorScale = cs ? trace.line.colorscale : [[0, trace.line.color], [1, trace.line.color]]; - var lines = Lib.extendDeep({}, line, { color: lineColor.map(domainToUnitScale({values: lineColor, range: [line.cmin, line.cmax]})), blockLineCount: c.blockLineCount, @@ -145,7 +142,7 @@ function model(layout, d, i) { colCount: dimensions.filter(visible).length, dimensions: dimensions, tickDistance: c.tickDistance, - unitToColor: unitToColorScale(lineColorScale), + unitToColor: unitToColorScale(cscale), lines: lines, translateX: domain.x[0] * width, translateY: layout.height - domain.y[1] * layout.height,