Flowchart Script Generator
Customer Support Ticket Process
Flowchart Script (Mermaid Syntax Example)
Process Data Table
| Node ID | Type | Instruction | Next ID(s) |
|---|
No nodes defined.
'; } appState.nodes.forEach(function(node) { var item = document.createElement('div'); item.className = 'fcs-node-list-item'; item.innerHTML = ` ${node.type.toUpperCase()} ${node.name}: ${node.desc.substring(0, 40)}... `; nodesListDiv.appendChild(item); }); // Add remove listeners nodesListDiv.querySelectorAll('.fcs-remove-btn').forEach(function(btn) { btn.addEventListener('click', function() { var id = parseInt(btn.dataset.id); appState.nodes = appState.nodes.filter(function(n) { return n.id !== id; }); saveState(); renderConfigTab(); }); }); } addNodeBtn.addEventListener('click', function() { var name = nodeNameInput.value.trim().toUpperCase(); var type = nodeTypeSelect.value; var desc = nodeDescInput.value.trim(); var next = nextNodeInput.value.trim().replace(/\s/g, ''); if (!name || !desc) { alert("Please fill in the Node ID and Description."); return; } if (appState.nodes.some(function(n) { return n.name === name; })) { alert("Node ID must be unique."); return; } var newNode = { id: Date.now(), name: name, type: type, desc: desc, next: next }; appState.nodes.push(newNode); saveState(); renderConfigTab(); // Clear inputs nodeNameInput.value = ''; nodeDescInput.value = ''; nextNodeInput.value = ''; nodeTypeSelect.value = 'Process'; }); // Update button action updateBtn.addEventListener("click", function() { appState.title = processNameInput.value; saveState(); renderDashboardTab(); showTab(1); // Switch to Dashboard }); // --- Core Logic: Dashboard Rendering --- function renderDashboardTab() { processTitleDisplay.textContent = appState.title; // 1. Generate Mermaid Script var script = 'graph TD\n'; appState.nodes.forEach(function(node) { var shape = ''; var label = node.desc.replace(/\"/g, '\\"'); // Escape quotes if (node.type === 'Start' || node.type === 'End') { shape = (node.type === 'Start') ? '((nodeName))' : '((nodeName))'; // Start and End are same shape in Mermaid for simplicity script += ` ${node.name}[(${label})]:::terminal\n`; } else if (node.type === 'Process') { script += ` ${node.name}[${label}]:::process\n`; } else if (node.type === 'Decision') { script += ` ${node.name}{${label}}:::decision\n`; } // Add links if (node.next) { var nextNodes = node.next.split(','); nextNodes.forEach(function(nextNode) { var trimmedNext = nextNode.trim(); var linkLabel = ''; if (node.type === 'Decision') { // Assuming the decision format is "NodeID (Label)" or just "NodeID" var parts = trimmedNext.split('('); var targetId = parts[0].trim(); linkLabel = parts.length > 1 ? `|${parts[1].replace(')', '').trim()}|` : ''; script += ` ${node.name} --${linkLabel}--> ${targetId}\n`; } else if (node.type === 'Process' || node.type === 'Start') { script += ` ${node.name} --> ${trimmedNext}\n`; } }); } }); // Add styling classes for clarity (Mermaid specific) script += '\nclassDef terminal fill:#A7C7A7,stroke:#333,stroke-width:2px;\n'; script += 'classDef process fill:#ADD8E6,stroke:#333,stroke-width:2px;\n'; script += 'classDef decision fill:#FFDDAA,stroke:#333,stroke-width:2px;\n'; scriptOutput.textContent = script; // 2. Render Data Table dataTableBody.innerHTML = ''; if (appState.nodes.length === 0) { dataTableBody.innerHTML = '