Skip to content

Commit 0c8f579

Browse files
committed
Adds MermaidJS syntax handling
1 parent 8126b93 commit 0c8f579

File tree

2 files changed

+29
-93
lines changed

2 files changed

+29
-93
lines changed

tools/generate.html

+29-7
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,25 @@
4545
<div style="display:block;align-items:center;padding:20px;">
4646
<textarea id="prompt"
4747
style="width:100%;height:60px;font-family:inherit;font-size:inherit;padding:10px;box-sizing:border-box;resize:vertical;"
48-
placeholder="Diagram description, eg. five tier sequence diagram on how to order fast food online"
48+
placeholder="Diagram description, eg. five tier sequence diagram on how to order fast food online eg. graph TD; A-->B; A-->C; B-->D; C-->D;"
4949
spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"></textarea>
5050
<div style="position:relative;display:flex;align-items:center;justify-items:stretch;padding-top:10px;">
51+
<button style="position:relative;background:rgb(56, 56, 56);color:gray;" id="create" onclick="replaceEscapes();return false;">
52+
Unescape
53+
</button>
5154
<div style="margin-left:auto;opacity:0.5;">
5255
Engine:
53-
<select style="padding:4px;border-radius:4px;" id="engine">
56+
<select style="padding:2px 6px;border-radius:4px;" id="engine">
5457
<option value="gemini">Gemini</option>
5558
<option value="chatgpt">ChatGPT</option>
59+
<option value="mermaidjs">MermaidJS</option>
5660
</select>
5761
</div>
5862
<div style="opacity:0.5;margin-left:20px;border-radius:4px;">
59-
Key: <input style="padding:4px;" id="apikey">
63+
Key: <input style="padding:2px 6px;" id="apikey">
6064
</div>
6165
<button style="position:relative;margin-left:20px;" id="generate" onclick="generate();return false;">
62-
Generate Diagram
66+
Preview Diagram
6367
</button>
6468
</div>
6569
</div>
@@ -78,6 +82,16 @@
7882
<script type="text/javascript">
7983
//<![CDATA[
8084
var spin = 'url(data:image/svg+xml;base64,77u/PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyMDAgMjAwJz48Y2lyY2xlIGZpbGw9JyM4MDgwODAnIHN0cm9rZT0nIzgwODA4MCcgc3Ryb2tlLXdpZHRoPScxNScgcj0nMTUnIGN4PSczNScgY3k9JzEwMCcgZGF0YS1kYXJrcmVhZGVyLWlubGluZS1maWxsPScnIGRhdGEtZGFya3JlYWRlci1pbmxpbmUtc3Ryb2tlPScnIHN0eWxlPSctLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6ICNmZjZkZmY7IC0tZGFya3JlYWRlci1pbmxpbmUtc3Ryb2tlOiAjZmY2ZGZmOyc+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0nY3gnIGNhbGNNb2RlPSdzcGxpbmUnIGR1cj0nNC4yJyB2YWx1ZXM9JzM1OzE2NTsxNjU7MzU7MzUnIGtleVNwbGluZXM9JzAgLjEgLjUgMTswIC4xIC41IDE7MCAuMSAuNSAxOzAgLjEgLjUgMScgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnIGJlZ2luPScwJz48L2FuaW1hdGU+PC9jaXJjbGU+PGNpcmNsZSBmaWxsPScjODA4MDgwJyBzdHJva2U9JyM4MDgwODAnIHN0cm9rZS13aWR0aD0nMTUnIG9wYWNpdHk9Jy44JyByPScxNScgY3g9JzM1JyBjeT0nMTAwJyBkYXRhLWRhcmtyZWFkZXItaW5saW5lLWZpbGw9JycgZGF0YS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U9Jycgc3R5bGU9Jy0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDogI2ZmNmRmZjsgLS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6ICNmZjZkZmY7Jz48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdjeCcgY2FsY01vZGU9J3NwbGluZScgZHVyPSc0LjInIHZhbHVlcz0nMzU7MTY1OzE2NTszNTszNScga2V5U3BsaW5lcz0nMCAuMSAuNSAxOzAgLjEgLjUgMTswIC4xIC41IDE7MCAuMSAuNSAxJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgYmVnaW49JzAuMDUnPjwvYW5pbWF0ZT48L2NpcmNsZT48Y2lyY2xlIGZpbGw9JyM4MDgwODAnIHN0cm9rZT0nIzgwODA4MCcgc3Ryb2tlLXdpZHRoPScxNScgb3BhY2l0eT0nLjYnIHI9JzE1JyBjeD0nMzUnIGN5PScxMDAnIGRhdGEtZGFya3JlYWRlci1pbmxpbmUtZmlsbD0nJyBkYXRhLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZT0nJyBzdHlsZT0nLS1kYXJrcmVhZGVyLWlubGluZS1maWxsOiAjZmY2ZGZmOyAtLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTogI2ZmNmRmZjsnPjxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J2N4JyBjYWxjTW9kZT0nc3BsaW5lJyBkdXI9JzQuMicgdmFsdWVzPSczNTsxNjU7MTY1OzM1OzM1JyBrZXlTcGxpbmVzPScwIC4xIC41IDE7MCAuMSAuNSAxOzAgLjEgLjUgMTswIC4xIC41IDEnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJyBiZWdpbj0nLjEnPjwvYW5pbWF0ZT48L2NpcmNsZT48Y2lyY2xlIGZpbGw9JyM4MDgwODAnIHN0cm9rZT0nIzgwODA4MCcgc3Ryb2tlLXdpZHRoPScxNScgb3BhY2l0eT0nLjQnIHI9JzE1JyBjeD0nMzUnIGN5PScxMDAnIGRhdGEtZGFya3JlYWRlci1pbmxpbmUtZmlsbD0nJyBkYXRhLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZT0nJyBzdHlsZT0nLS1kYXJrcmVhZGVyLWlubGluZS1maWxsOiAjZmY2ZGZmOyAtLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTogI2ZmNmRmZjsnPjxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J2N4JyBjYWxjTW9kZT0nc3BsaW5lJyBkdXI9JzQuMicgdmFsdWVzPSczNTsxNjU7MTY1OzM1OzM1JyBrZXlTcGxpbmVzPScwIC4xIC41IDE7MCAuMSAuNSAxOzAgLjEgLjUgMTswIC4xIC41IDEnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJyBiZWdpbj0nLjE1Jz48L2FuaW1hdGU+PC9jaXJjbGU+PGNpcmNsZSBmaWxsPScjODA4MDgwJyBzdHJva2U9JyM4MDgwODAnIHN0cm9rZS13aWR0aD0nMTUnIG9wYWNpdHk9Jy4yJyByPScxNScgY3g9JzM1JyBjeT0nMTAwJyBkYXRhLWRhcmtyZWFkZXItaW5saW5lLWZpbGw9JycgZGF0YS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U9Jycgc3R5bGU9Jy0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDogI2ZmNmRmZjsgLS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6ICNmZjZkZmY7Jz48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdjeCcgY2FsY01vZGU9J3NwbGluZScgZHVyPSc0LjInIHZhbHVlcz0nMzU7MTY1OzE2NTszNTszNScga2V5U3BsaW5lcz0nMCAuMSAuNSAxOzAgLjEgLjUgMTswIC4xIC41IDE7MCAuMSAuNSAxJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgYmVnaW49Jy4yJz48L2FuaW1hdGU+PC9jaXJjbGU+PC9zdmc+)';
85+
86+
function replaceEscapes() {
87+
var input = document.getElementById('prompt').value;
88+
// Replace Unicode escape sequences
89+
input = input.replace(/\\u([0-9A-Fa-f]{4})/g, (match, group) =>
90+
String.fromCharCode(parseInt(group, 16))
91+
);
92+
// Replace newline escape sequences
93+
document.getElementById('prompt').value = input.replace(/\\n/g, '\n');
94+
};
8195

8296
function generate() {
8397
var engine = document.getElementById('engine').value;
@@ -108,8 +122,6 @@
108122
body: JSON.stringify(data)
109123
});
110124

111-
document.getElementById('generate').disabled = false;
112-
113125
if (!response.ok) {
114126
throw new Error(`HTTP error! Status: ${response.status}`);
115127
}
@@ -156,6 +168,15 @@
156168
preview(extractMermaid(response.choices[0].message.content));
157169
});
158170
}
171+
else if (engine == 'mermaidjs') {
172+
preview(prompt);
173+
}
174+
else
175+
{
176+
document.getElementById('generate').disabled = false;
177+
document.getElementById('preview').parentNode.style.backgroundImage = 'none';
178+
alert('Invalid engine');
179+
}
159180
};
160181

161182
function extractMermaid(input) {
@@ -172,6 +193,7 @@
172193
prefix = (urlParams['dev'] == '1') ? 'https://test.draw.io/?dev=1&' : 'https://www.draw.io/?';
173194
link = prefix + 'create=' + encodeURIComponent(JSON.stringify({ type: 'mermaid', data: value }));
174195
document.getElementById('edit').disabled = false;
196+
document.getElementById('generate').disabled = false;
175197
document.getElementById('edit').onclick = function () { window.open(link); };
176198
};
177199

@@ -237,7 +259,7 @@
237259
}
238260

239261
if (urlParams['prompt'] != null) {
240-
document.getElementById('prompt').value = urlParams['prompt'];
262+
document.getElementById('prompt').value = decodeURIComponent(urlParams['prompt']);
241263
generate();
242264
}
243265
}

tools/mermaid.html

-86
This file was deleted.

0 commit comments

Comments
 (0)