Skip to content

Commit 70c6556

Browse files
committed
further refactoring to support rendering the same object at multiple steps
1 parent 16fd980 commit 70c6556

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

v3/js/pytutor.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,10 @@ ExecutionVisualizer.prototype.resetJsPlumbManager = function() {
265265
//
266266
// The reason we need to prepend this.visualizerID is because jsPlumb needs
267267
// GLOBALLY UNIQUE IDs for use as connector endpoints.
268+
//
269+
// TODO: jsPlumb might be able to directly take DOM elements rather
270+
// than IDs, which makes the above point moot. But let's just stick
271+
// with this for now until I want to majorly refactor :)
268272

269273
// the only elements in these sets are NEW elements to be rendered in this
270274
// particular call to renderDataStructures.
@@ -273,7 +277,7 @@ ExecutionVisualizer.prototype.resetJsPlumbManager = function() {
273277
// analogous to connectionEndpointIDs, except for environment parent pointers
274278
parentPointerConnectionEndpointIDs: d3.map(),
275279

276-
renderedObjectIDs: d3.map(),
280+
renderedHeapObjectIDs: d3.map(), // format given by generateHeapObjID()
277281
};
278282
}
279283

@@ -2103,7 +2107,9 @@ ExecutionVisualizer.prototype.renderDataStructures = function(curEntry, curTople
21032107
// in d3 .each() statements
21042108
$.each(curToplevelLayout, function(xxx, row) {
21052109
for (var i = 0; i < row.length; i++) {
2106-
myViz.jsPlumbManager.renderedObjectIDs.set(row[i], 1);
2110+
var objID = row[i];
2111+
var heapObjID = myViz.generateHeapObjID(objID, myViz.curInstr);
2112+
myViz.jsPlumbManager.renderedHeapObjectIDs.set(heapObjID, 1);
21072113
}
21082114
});
21092115

@@ -2857,11 +2863,13 @@ ExecutionVisualizer.prototype.renderCompoundObject =
28572863
function(objID, stepNum, d3DomElement, isTopLevel) {
28582864
var myViz = this; // to prevent confusion of 'this' inside of nested functions
28592865

2860-
if (!isTopLevel && myViz.jsPlumbManager.renderedObjectIDs.has(objID)) {
2866+
var heapObjID = myViz.generateHeapObjID(objID, stepNum);
2867+
2868+
if (!isTopLevel && myViz.jsPlumbManager.renderedHeapObjectIDs.has(heapObjID)) {
28612869
var srcDivID = myViz.generateID('heap_pointer_src_' + myViz.jsPlumbManager.heap_pointer_src_id);
28622870
myViz.jsPlumbManager.heap_pointer_src_id++; // just make sure each source has a UNIQUE ID
28632871

2864-
var dstDivID = myViz.generateHeapObjID(objID, stepNum);
2872+
var dstDivID = heapObjID;
28652873

28662874
if (myViz.textualMemoryLabels) {
28672875
var labelID = srcDivID + '_text_label';
@@ -2896,15 +2904,13 @@ function(objID, stepNum, d3DomElement, isTopLevel) {
28962904
return; // early return!
28972905
}
28982906

2899-
var heapObjID = myViz.generateHeapObjID(objID, stepNum);
2900-
29012907

29022908
// wrap ALL compound objects in a heapObject div so that jsPlumb
29032909
// connectors can point to it:
29042910
d3DomElement.append('<div class="heapObject" id="' + heapObjID + '"></div>');
2905-
d3DomElement = myViz.domRoot.find('#' + heapObjID);
2911+
d3DomElement = myViz.domRoot.find('#' + heapObjID); // TODO: maybe inefficient
29062912

2907-
myViz.jsPlumbManager.renderedObjectIDs.set(objID, 1);
2913+
myViz.jsPlumbManager.renderedHeapObjectIDs.set(heapObjID, 1);
29082914

29092915
var curHeap = myViz.curTrace[stepNum].heap;
29102916
var obj = curHeap[objID];

0 commit comments

Comments
 (0)