Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a5b3722

Browse files
committed
(POC) add support for expendData trace module method:
- to add the ability for custom trace types to generate multiple 'full' traces at the default step!
1 parent 894bbad commit a5b3722

File tree

1 file changed

+49
-21
lines changed

1 file changed

+49
-21
lines changed

src/plots/plots.js

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,7 @@ plots.supplyDefaults = function(gd) {
449449
newData = gd.data || [],
450450
modules = gd._modules = [];
451451

452-
var i, trace, fullTrace, _module, axList, ax;
453-
452+
var i, trace, _module, axList, ax;
454453

455454
// first fill in what we can of layout without looking at data
456455
// because fullData needs a few things from layout
@@ -460,24 +459,7 @@ plots.supplyDefaults = function(gd) {
460459
newFullLayout._dataLength = newData.length;
461460

462461
// then do the data
463-
for(i = 0; i < newData.length; i++) {
464-
trace = newData[i];
465-
466-
fullTrace = plots.supplyDataDefaults(trace, i, newFullLayout);
467-
newFullData.push(fullTrace);
468-
469-
// detect plot type
470-
if(plots.traceIs(fullTrace, 'cartesian')) newFullLayout._hasCartesian = true;
471-
else if(plots.traceIs(fullTrace, 'gl3d')) newFullLayout._hasGL3D = true;
472-
else if(plots.traceIs(fullTrace, 'geo')) newFullLayout._hasGeo = true;
473-
else if(plots.traceIs(fullTrace, 'pie')) newFullLayout._hasPie = true;
474-
else if(plots.traceIs(fullTrace, 'gl2d')) newFullLayout._hasGL2D = true;
475-
else if(plots.traceIs(fullTrace, 'ternary')) newFullLayout._hasTernary = true;
476-
else if('r' in fullTrace) newFullLayout._hasPolar = true;
477-
478-
_module = fullTrace._module;
479-
if(_module && modules.indexOf(_module)===-1) modules.push(_module);
480-
}
462+
plots.supplyDataDefaults(newData, newFullData, newFullLayout, modules);
481463

482464
// special cases that introduce interactions between traces
483465
for(i = 0; i < modules.length; i++) {
@@ -609,7 +591,53 @@ function relinkPrivateKeys(toLayout, fromLayout) {
609591
}
610592
}
611593

612-
plots.supplyDataDefaults = function(traceIn, i, layout) {
594+
plots.supplyDataDefaults = function(dataIn, dataOut, layout, modules) {
595+
var cnt = 0;
596+
597+
// push to array if item isn't already in array
598+
function fill(arr, item) {
599+
if(item && arr.indexOf(item) === -1) return arr.push(item);
600+
}
601+
602+
// detect plot type
603+
function detect(trace) {
604+
if(plots.traceIs(trace, 'cartesian')) layout._hasCartesian = true;
605+
else if(plots.traceIs(trace, 'gl3d')) layout._hasGL3D = true;
606+
else if(plots.traceIs(trace, 'geo')) layout._hasGeo = true;
607+
else if(plots.traceIs(trace, 'pie')) layout._hasPie = true;
608+
else if(plots.traceIs(trace, 'gl2d')) layout._hasGL2D = true;
609+
else if(plots.traceIs(trace, 'ternary')) layout._hasTernary = true;
610+
else if('r' in trace) layout._hasPolar = true;
611+
}
612+
613+
for(var i = 0; i < dataIn.length; i++) {
614+
var trace = dataIn[i];
615+
616+
var fullTrace = plots.supplyTraceDefaults(trace, cnt, layout);
617+
618+
if(fullTrace._module && fullTrace._module.expandData) {
619+
var expandedTraces = fullTrace._module.expandData(fullTrace, layout);
620+
621+
for(var j = 0; j < expandedTraces.length; j++) {
622+
var expandedTrace = expandedTraces[j];
623+
var fullExpandedTrace = plots.supplyTraceDefaults(expandedTrace, cnt, layout);
624+
625+
fill(dataOut, fullExpandedTrace);
626+
fill(modules, fullExpandedTrace._module);
627+
detect(fullExpandedTrace);
628+
cnt++;
629+
}
630+
}
631+
else {
632+
fill(dataOut, fullTrace);
633+
fill(modules, fullTrace._module);
634+
detect(trace);
635+
cnt++;
636+
}
637+
}
638+
};
639+
640+
plots.supplyTraceDefaults = function(traceIn, i, layout) {
613641
var traceOut = {},
614642
defaultColor = Color.defaults[i % Color.defaults.length];
615643

0 commit comments

Comments
 (0)