broadfield-dev commited on
Commit
ad85069
·
verified ·
1 Parent(s): 923fd55

Update static/canvas.js

Browse files
Files changed (1) hide show
  1. static/canvas.js +20 -17
static/canvas.js CHANGED
@@ -99,26 +99,29 @@ function clearCanvas() {
99
  function createNodesFromParsedData(parsedNodes, parsedConnections) {
100
  const scopePositions = {}; // Track x-position per scope
101
  parsedNodes.forEach(nodeData => {
102
- const scope = nodeData.parent_path.split(' -> ')[0] || 'global';
 
 
103
  if (!scopePositions[scope]) {
104
  scopePositions[scope] = { x: 50, count: 0 };
105
  }
106
  // Stack left to right: increment x based on level and scope
107
- const x = 50 + nodeData.level * 150 + scopePositions[scope].count * 200;
 
108
  const y = scopePositions[scope].count * 80 + 50; // Slight y offset for readability
109
  scopePositions[scope].count += 1;
110
 
111
  const node = createNode(
112
  x,
113
  y,
114
- nodeData.label,
115
- nodeData.type,
116
- nodeData.inputs,
117
- nodeData.outputs,
118
- nodeData.id,
119
- nodeData.source,
120
- nodeData.parent_path,
121
- nodeData.level
122
  );
123
  nodes.push(node);
124
  layer.add(node);
@@ -129,7 +132,7 @@ function createNodesFromParsedData(parsedNodes, parsedConnections) {
129
  }
130
 
131
  // Create a node with inputs, outputs, and code segment
132
- function createNode(x, y, label, type, inputs = [], outputs = [], id, source = '', parent_path = '', level = 0) {
133
  const node = new Konva.Group({
134
  x: x,
135
  y: y,
@@ -314,7 +317,6 @@ function createNode(x, y, label, type, inputs = [], outputs = [], id, source = '
314
  // Create textarea for editing
315
  codeTextarea = document.createElement('textarea');
316
  codeTextarea.style.position = 'absolute';
317
- // Calculate position relative to canvas
318
  const canvasRect = stage.container().getBoundingClientRect();
319
  const textareaX = (nodePos.x + stage.x()) / scale + canvasRect.left;
320
  const textareaY = (nodePos.y + height + 10 + stage.y()) / scale + canvasRect.top;
@@ -439,7 +441,7 @@ function autoConnect() {
439
 
440
  const sortedNodes = [...nodes].sort((a, b) => {
441
  if (a.data.level !== b.data.level) return a.data.level - b.data.level;
442
- return a.data.x - b.data.x; // Sort by x for left-to-right order
443
  });
444
 
445
  const hierarchy = {};
@@ -537,7 +539,7 @@ function updateProgram() {
537
  function reconstructProgram() {
538
  const sortedNodes = [...nodes].sort((a, b) => {
539
  if (a.data.level !== b.data.level) return a.data.level - b.data.level;
540
- return a.data.x - b.data.x; // Sort by x for left-to-right order
541
  });
542
 
543
  let program = '';
@@ -626,9 +628,10 @@ function saveNodes() {
626
  })),
627
  connections: connections
628
  })
629
- }).then(response => response.json)
630
- .then(data => console.log('Saved:', data))
631
- .catch(error => console.error('Error:', error));
 
632
  }
633
 
634
  // Initial draw
 
99
  function createNodesFromParsedData(parsedNodes, parsedConnections) {
100
  const scopePositions = {}; // Track x-position per scope
101
  parsedNodes.forEach(nodeData => {
102
+ // Fallback for parent_path to prevent undefined error
103
+ const parentPath = nodeData.parent_path || 'global';
104
+ const scope = parentPath.split(' -> ')[0] || 'global';
105
  if (!scopePositions[scope]) {
106
  scopePositions[scope] = { x: 50, count: 0 };
107
  }
108
  // Stack left to right: increment x based on level and scope
109
+ const level = nodeData.level || 0;
110
+ const x = 50 + level * 150 + scopePositions[scope].count * 200;
111
  const y = scopePositions[scope].count * 80 + 50; // Slight y offset for readability
112
  scopePositions[scope].count += 1;
113
 
114
  const node = createNode(
115
  x,
116
  y,
117
+ nodeData.label || 'Unnamed',
118
+ nodeData.type || 'other',
119
+ nodeData.inputs || [],
120
+ nodeData.outputs || [],
121
+ nodeData.id || `node_${nodes.length}`,
122
+ nodeData.source || '',
123
+ parentPath,
124
+ level
125
  );
126
  nodes.push(node);
127
  layer.add(node);
 
132
  }
133
 
134
  // Create a node with inputs, outputs, and code segment
135
+ function createNode(x, y, label, type, inputs = [], outputs = [], id, source = '', parent_path = 'global', level = 0) {
136
  const node = new Konva.Group({
137
  x: x,
138
  y: y,
 
317
  // Create textarea for editing
318
  codeTextarea = document.createElement('textarea');
319
  codeTextarea.style.position = 'absolute';
 
320
  const canvasRect = stage.container().getBoundingClientRect();
321
  const textareaX = (nodePos.x + stage.x()) / scale + canvasRect.left;
322
  const textareaY = (nodePos.y + height + 10 + stage.y()) / scale + canvasRect.top;
 
441
 
442
  const sortedNodes = [...nodes].sort((a, b) => {
443
  if (a.data.level !== b.data.level) return a.data.level - b.data.level;
444
+ return a.data.x - b.data.x;
445
  });
446
 
447
  const hierarchy = {};
 
539
  function reconstructProgram() {
540
  const sortedNodes = [...nodes].sort((a, b) => {
541
  if (a.data.level !== b.data.level) return a.data.level - b.data.level;
542
+ return a.data.x - b.data.x;
543
  });
544
 
545
  let program = '';
 
628
  })),
629
  connections: connections
630
  })
631
+ })
632
+ .then(response => response.json())
633
+ .then(data => console.log('Saved:', data))
634
+ .catch(error => console.error('Error:', error));
635
  }
636
 
637
  // Initial draw