Skip to content

Commit 795d546

Browse files
authored
Merge pull request #7834 from plotly/remove-fullinput
Remove `_fullInput` and other dead transforms code
2 parents d01c5fe + b1dd513 commit 795d546

43 files changed

Lines changed: 85 additions & 1602 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

draftlogs/7834_remove.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Remove internal `trace._fullInput` property and other dead code related to the removed `transforms` feature. No user-facing changes expected [[#7834](https://github.com/plotly/plotly.js/pull/7834)]

src/components/fx/helpers.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,7 @@ exports.makeEventData = function (pt, trace, cd) {
122122
pointNumber: pointNumber
123123
};
124124

125-
if (trace._indexToPoints) {
126-
var pointIndices = trace._indexToPoints[pointNumber];
127-
128-
if (pointIndices.length === 1) {
129-
out.pointIndex = pointIndices[0];
130-
} else {
131-
out.pointIndices = pointIndices;
132-
}
133-
} else {
134-
out.pointIndex = pointNumber;
135-
}
125+
out.pointIndex = pointNumber;
136126

137127
if (trace._module.eventData) {
138128
out = trace._module.eventData(out, pt, trace, cd, pointNumber);

src/components/legend/draw.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ function drawOne(gd, opts) {
111111

112112
var shapeLegend = {
113113
_isShape: true,
114-
_fullInput: shape,
115114
index: shape._index,
116115
name: shape.name || shape.label.text || ('shape ' + shape._index),
117116
legend: shape.legend,
@@ -599,12 +598,11 @@ function drawTexts(g, gd, legendObj) {
599598
this.text(ensureLength(newName, maxNameLength))
600599
.call(textLayout, g, gd, legendObj);
601600

602-
var fullInput = legendItem.trace._fullInput || {};
603601
var update = {};
604602

605603
update.name = newName;
606604

607-
if(fullInput._isShape) {
605+
if(legendItem.trace._isShape) {
608606
return Registry.call('_guiRelayout', gd, 'shapes[' + trace.index + '].name', update.name);
609607
} else {
610608
return Registry.call('_guiRestyle', gd, update, trace.index);

src/components/legend/handle_click.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ exports.handleItemClick = function handleItemClick(g, gd, legendObj, mode) {
5050

5151
var fullTrace = legendItem.trace;
5252
if (fullTrace._isShape) {
53-
fullTrace = fullTrace._fullInput;
53+
fullTrace = fullLayout.shapes[fullTrace.index];
5454
}
5555

5656
var legendgroup = fullTrace.legendgroup;
@@ -92,15 +92,14 @@ exports.handleItemClick = function handleItemClick(g, gd, legendObj, mode) {
9292
function setVisibility(fullTrace, visibility) {
9393
if (legendItem.groupTitle && !toggleGroup) return;
9494

95-
var fullInput = fullTrace._fullInput || fullTrace;
96-
var isShape = fullInput._isShape;
97-
var index = fullInput.index;
98-
if (index === undefined) index = fullInput._index;
95+
var isShape = fullTrace._isShape;
96+
var index = fullTrace.index;
97+
if (index === undefined) index = fullTrace._index;
9998

10099
// false -> false (not possible since will not be visible in legend)
101100
// true -> legendonly
102101
// legendonly -> true
103-
var nextVisibility = fullInput.visible === false ? false : visibility;
102+
var nextVisibility = fullTrace.visible === false ? false : visibility;
104103

105104
if (isShape) {
106105
insertShapesUpdate(index, nextVisibility);
@@ -111,10 +110,7 @@ exports.handleItemClick = function handleItemClick(g, gd, legendObj, mode) {
111110

112111
var thisLegend = fullTrace.legend;
113112

114-
var fullInput = fullTrace._fullInput;
115-
var isShape = fullInput && fullInput._isShape;
116-
117-
if (!isShape && Registry.traceIs(fullTrace, 'pie-like')) {
113+
if (!fullTrace._isShape && Registry.traceIs(fullTrace, 'pie-like')) {
118114
var thisLabel = legendItem.label;
119115
var thisLabelIndex = hiddenSlices.indexOf(thisLabel);
120116

src/components/selections/select.js

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -940,51 +940,40 @@ function isOnlyOnePointSelected(searchTraces) {
940940

941941
function updateSelectedState(gd, searchTraces, eventData) {
942942
var i;
943+
var trace;
943944

944945
// before anything else, update preGUI if necessary
945946
for(i = 0; i < searchTraces.length; i++) {
946-
var fullInputTrace = searchTraces[i].cd[0].trace._fullInput;
947-
var tracePreGUI = gd._fullLayout._tracePreGUI[fullInputTrace.uid] || {};
947+
trace = searchTraces[i].cd[0].trace;
948+
var tracePreGUI = gd._fullLayout._tracePreGUI[trace.uid] || {};
948949
if(tracePreGUI.selectedpoints === undefined) {
949-
tracePreGUI.selectedpoints = fullInputTrace._input.selectedpoints || null;
950+
tracePreGUI.selectedpoints = trace._input.selectedpoints || null;
950951
}
951952
}
952953

953-
var trace;
954954
if(eventData) {
955955
var pts = eventData.points || [];
956956
for(i = 0; i < searchTraces.length; i++) {
957957
trace = searchTraces[i].cd[0].trace;
958-
trace._input.selectedpoints = trace._fullInput.selectedpoints = [];
959-
if(trace._fullInput !== trace) trace.selectedpoints = [];
958+
trace._input.selectedpoints = trace.selectedpoints = [];
960959
}
961960

962961
for(var k = 0; k < pts.length; k++) {
963962
var pt = pts[k];
964963
var data = pt.data;
965-
var fullData = pt.fullData;
966964
var pointIndex = pt.pointIndex;
967965
var pointIndices = pt.pointIndices;
968966
if(pointIndices) {
969967
[].push.apply(data.selectedpoints, pointIndices);
970-
if(trace._fullInput !== trace) {
971-
[].push.apply(fullData.selectedpoints, pointIndices);
972-
}
973968
} else {
974969
data.selectedpoints.push(pointIndex);
975-
if(trace._fullInput !== trace) {
976-
fullData.selectedpoints.push(pointIndex);
977-
}
978970
}
979971
}
980972
} else {
981973
for(i = 0; i < searchTraces.length; i++) {
982974
trace = searchTraces[i].cd[0].trace;
983975
delete trace.selectedpoints;
984976
delete trace._input.selectedpoints;
985-
if(trace._fullInput !== trace) {
986-
delete trace._fullInput.selectedpoints;
987-
}
988977
}
989978
}
990979

src/lib/index.js

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -585,39 +585,17 @@ lib.extractOption = function (calcPt, trace, calcKey, traceKey) {
585585
if (!Array.isArray(traceVal)) return traceVal;
586586
};
587587

588-
function makePtIndex2PtNumber(indexToPoints) {
589-
var ptIndex2ptNumber = {};
590-
for (var k in indexToPoints) {
591-
var pts = indexToPoints[k];
592-
for (var j = 0; j < pts.length; j++) {
593-
ptIndex2ptNumber[pts[j]] = +k;
594-
}
595-
}
596-
return ptIndex2ptNumber;
597-
}
598-
599588
/** Tag selected calcdata items
600-
*
601-
* N.B. note that point 'index' corresponds to input data array index
602-
* whereas 'number' is its post-transform version.
603589
*
604590
* @param {array} calcTrace
605591
* @param {object} trace
606592
* - selectedpoints {array}
607-
* - _indexToPoints {object}
608593
* @param {ptNumber2cdIndex} ptNumber2cdIndex (optional)
609594
* optional map object for trace types that do not have 1-to-1 point number to
610595
* calcdata item index correspondence (e.g. histogram)
611596
*/
612597
lib.tagSelected = function (calcTrace, trace, ptNumber2cdIndex) {
613598
var selectedpoints = trace.selectedpoints;
614-
var indexToPoints = trace._indexToPoints;
615-
var ptIndex2ptNumber;
616-
617-
// make pt index-to-number map object, which takes care of transformed traces
618-
if (indexToPoints) {
619-
ptIndex2ptNumber = makePtIndex2PtNumber(indexToPoints);
620-
}
621599

622600
function isCdIndexValid(v) {
623601
return v !== undefined && v < calcTrace.length;
@@ -630,7 +608,7 @@ lib.tagSelected = function (calcTrace, trace, ptNumber2cdIndex) {
630608
lib.isIndex(ptIndex) ||
631609
(lib.isArrayOrTypedArray(ptIndex) && lib.isIndex(ptIndex[0]) && lib.isIndex(ptIndex[1]))
632610
) {
633-
var ptNumber = ptIndex2ptNumber ? ptIndex2ptNumber[ptIndex] : ptIndex;
611+
var ptNumber = ptIndex;
634612
var cdIndex = ptNumber2cdIndex ? ptNumber2cdIndex[ptNumber] : ptNumber;
635613

636614
if (isCdIndexValid(cdIndex)) {
@@ -640,30 +618,6 @@ lib.tagSelected = function (calcTrace, trace, ptNumber2cdIndex) {
640618
}
641619
};
642620

643-
lib.selIndices2selPoints = function (trace) {
644-
var selectedpoints = trace.selectedpoints;
645-
var indexToPoints = trace._indexToPoints;
646-
647-
if (indexToPoints) {
648-
var ptIndex2ptNumber = makePtIndex2PtNumber(indexToPoints);
649-
var out = [];
650-
651-
for (var i = 0; i < selectedpoints.length; i++) {
652-
var ptIndex = selectedpoints[i];
653-
if (lib.isIndex(ptIndex)) {
654-
var ptNumber = ptIndex2ptNumber[ptIndex];
655-
if (lib.isIndex(ptNumber)) {
656-
out.push(ptNumber);
657-
}
658-
}
659-
}
660-
661-
return out;
662-
} else {
663-
return selectedpoints;
664-
}
665-
};
666-
667621
/** Returns target as set by 'target' transform attribute
668622
*
669623
* @param {object} trace : full trace object
@@ -956,8 +910,8 @@ lib.expandObjectPaths = function (data) {
956910
data[prop] = data[prop] || [];
957911

958912
if (match[3] === '.') {
959-
// This is the case where theere are subsequent properties into which
960-
// we must recurse, e.g. transforms[0].value
913+
// This is the case where there are subsequent properties into which
914+
// we must recurse, e.g. annotations[0].text
961915
trailingPath = match[4];
962916
dest = data[prop][idx] = data[prop][idx] || {};
963917

src/plot_api/plot_api.js

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,16 +1408,6 @@ function _restyle(gd, aobj, traces) {
14081408
return 'LAYOUT' + axName + '.range';
14091409
}
14101410

1411-
function getFullTrace(traceIndex) {
1412-
// usually fullData maps 1:1 onto data, but with groupby transforms
1413-
// the fullData index can be greater. Take the *first* matching trace.
1414-
for (var j = traceIndex; j < fullData.length; j++) {
1415-
if (fullData[j]._input === data[traceIndex]) return fullData[j];
1416-
}
1417-
// should never get here - and if we *do* it should cause an error
1418-
// later on undefined fullTrace is passed to nestedProperty.
1419-
}
1420-
14211411
// for attrs that interact (like scales & autoscales), save the
14221412
// old vals before making the change
14231413
// val=undefined will not set a value, just record what the value was.
@@ -1438,7 +1428,7 @@ function _restyle(gd, aobj, traces) {
14381428
extraparam = layoutNP(gd.layout, attr.replace('LAYOUT', ''));
14391429
} else {
14401430
var tracei = traces[i];
1441-
var preGUI = fullLayout._tracePreGUI[getFullTrace(tracei)._fullInput.uid];
1431+
var preGUI = fullLayout._tracePreGUI[fullData[tracei].uid];
14421432
extraparam = makeNP(preGUI, guiEditFlag)(data[tracei], attr);
14431433
}
14441434

@@ -1509,8 +1499,8 @@ function _restyle(gd, aobj, traces) {
15091499
undoit[ai] = a0();
15101500
for (i = 0; i < traces.length; i++) {
15111501
cont = data[traces[i]];
1512-
contFull = getFullTrace(traces[i]);
1513-
var preGUI = fullLayout._tracePreGUI[contFull._fullInput.uid];
1502+
contFull = fullData[traces[i]];
1503+
var preGUI = fullLayout._tracePreGUI[contFull.uid];
15141504
param = makeNP(preGUI, guiEditFlag)(cont, ai);
15151505
oldVal = param.get();
15161506
newVal = Array.isArray(vi) ? vi[i % vi.length] : vi;
@@ -2343,8 +2333,7 @@ var layoutUIControlPatterns = [
23432333
// or with no `attr` we use `trace.uirevision`
23442334
var traceUIControlPatterns = [
23452335
{ pattern: /^selectedpoints$/, attr: 'selectionrevision' },
2346-
// "visible" includes trace.transforms[i].styles[j].value.visible
2347-
{ pattern: /(^|value\.)visible$/, attr: 'legend.uirevision' },
2336+
{ pattern: /^visible$/, attr: 'legend.uirevision' },
23482337
{ pattern: /^dimensions\[\d+\]\.constraintrange/ },
23492338
{ pattern: /^node\.(x|y|groups)/ }, // for Sankey nodes
23502339
{ pattern: /^level$/ }, // for Sunburst, Treemap and Icicle traces
@@ -2354,8 +2343,7 @@ var traceUIControlPatterns = [
23542343
// reasonable or should these be `editrevision`?
23552344
// Also applies to axis titles up in the layout section
23562345

2357-
// "name" also includes transform.styles
2358-
{ pattern: /(^|value\.)name$/ },
2346+
{ pattern: /^name$/ },
23592347
// including nested colorbar attributes (ie marker.colorbar)
23602348
{ pattern: /colorbar\.title\.text$/ },
23612349
{ pattern: /colorbar\.(x|y)$/, attr: 'editrevision' }
@@ -2392,7 +2380,7 @@ function getNewRev(revAttr, container) {
23922380

23932381
function getFullTraceIndexFromUid(uid, fullData) {
23942382
for (var i = 0; i < fullData.length; i++) {
2395-
if (fullData[i]._fullInput.uid === uid) return i;
2383+
if (fullData[i].uid === uid) return i;
23962384
}
23972385
return -1;
23982386
}
@@ -2499,7 +2487,7 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
24992487
for (var uid in allTracePreGUI) {
25002488
var tracePreGUI = allTracePreGUI[uid];
25012489
var newTrace = null;
2502-
var fullInput;
2490+
var fullTrace;
25032491
for (key in tracePreGUI) {
25042492
// wait until we know we have preGUI values to look for traces
25052493
// but if we don't find both, stop looking at this uid
@@ -2511,10 +2499,9 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
25112499
delete allTracePreGUI[uid];
25122500
break;
25132501
}
2514-
var fullTrace = oldFullData[fulli];
2515-
fullInput = fullTrace._fullInput;
2502+
fullTrace = oldFullData[fulli];
25162503

2517-
var newTracei = getTraceIndexFromUid(uid, data, fullInput.index);
2504+
var newTracei = getTraceIndexFromUid(uid, data, fullTrace.index);
25182505
if (newTracei < 0) {
25192506
// No match in new data
25202507
delete allTracePreGUI[uid];
@@ -2529,7 +2516,7 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
25292516
oldRev = nestedProperty(oldFullLayout, match.attr).get();
25302517
newRev = oldRev && getNewRev(match.attr, layout);
25312518
} else {
2532-
oldRev = fullInput.uirevision;
2519+
oldRev = fullTrace.uirevision;
25332520
// inheritance for trace.uirevision is simple, just layout.uirevision
25342521
newRev = newTrace.uirevision;
25352522
if (newRev === undefined) newRev = layout.uirevision;
@@ -2541,7 +2528,7 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
25412528
newNP = nestedProperty(newTrace, key);
25422529
newVal = newNP.get();
25432530
if (valsMatch(newVal, preGUIVal)) {
2544-
newNP.set(undefinedToNull(nestedProperty(fullInput, key).get()));
2531+
newNP.set(undefinedToNull(nestedProperty(fullTrace, key).get()));
25452532
continue;
25462533
}
25472534
}
@@ -2630,9 +2617,9 @@ function react(gd, data, layout, config) {
26302617

26312618
applyUIRevisions(gd.data, gd.layout, oldFullData, oldFullLayout);
26322619

2633-
// "true" skips updating calcdata and remapping arrays from calcTransforms,
2634-
// which supplyDefaults usually does at the end, but we may need to NOT do
2635-
// if the diff (which we haven't determined yet) says we'll recalc
2620+
// "true" skips updating calcdata, which supplyDefaults usually does at
2621+
// the end, but we may need to NOT do if the diff (which we haven't
2622+
// determined yet) says we'll recalc
26362623
Plots.supplyDefaults(gd, { skipUpdateCalc: true });
26372624

26382625
var newFullData = gd._fullData;
@@ -2667,7 +2654,7 @@ function react(gd, data, layout, config) {
26672654
if (emptyCategories) emptyCategories();
26682655
}
26692656
}
2670-
// otherwise do the calcdata updates and calcTransform array remaps that we skipped earlier
2657+
// otherwise do the calcdata updates that we skipped earlier
26712658
} else {
26722659
Plots.supplyDefaultsUpdateCalc(gd.calcdata, newFullData);
26732660
}
@@ -2783,11 +2770,11 @@ function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRe
27832770

27842771
for (i = 0; i < oldFullData.length; i++) {
27852772
if (newFullData[i]) {
2786-
trace = newFullData[i]._fullInput;
2773+
trace = newFullData[i];
27872774
if (seenUIDs[trace.uid]) continue;
27882775
seenUIDs[trace.uid] = 1;
27892776

2790-
getDiffFlags(oldFullData[i]._fullInput, trace, [], diffOpts);
2777+
getDiffFlags(oldFullData[i], trace, [], diffOpts);
27912778
}
27922779
}
27932780

src/plot_api/plot_schema.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ exports.findArrayAttributes = function(trace) {
218218
* @param {object} trace
219219
* full trace object that contains a reference to `_module.attributes`
220220
* @param {object} parts
221-
* an array of parts, like ['transforms', 1, 'value']
221+
* an array of parts, like ['dimensions', 1, 'values']
222222
* typically from nestedProperty(...).parts
223223
*
224224
* @return {object|false}

0 commit comments

Comments
 (0)