website/tools/qalc/flaviut/gnuplot-worker.js
2024-09-30 19:36:06 +02:00

56 lines
1.3 KiB
JavaScript

let pendingRequests = [];
self.addEventListener('message', ({ data }) => {
if (pendingRequests) {
// gnuplot not loaded yet
pendingRequests.push(data);
} else {
doPlot(data);
}
});
var Module = {
noInitialRun: true,
postRun: () => {
shouldRunNow = true;
pendingRequests.forEach(doPlot);
pendingRequests = null;
},
print: (s) => {
console.log('GNUPLOT LOG: ' + s);
},
printErr: (s) => {
console.warn('GNUPLOT ERR: ' + s);
},
};
function doPlot({
fix_cmd = true,
data_files = {},
commands,
id,
// TODO: do something with these...?
extra_commandline,
persist,
}) {
const files = Object.keys(data_files);
for (const [file, data] of Object.entries(data_files)) {
FS.writeFile(file, data);
}
const cmd = fix_cmd
? commands.replace(
'set terminal pop',
"set terminal svg; set output '/output'"
)
: commands;
FS.writeFile('/commands', cmd);
callMain(['/commands']);
const output = FS.readFile('/output', { encoding: 'utf8' });
for (const file of ['/commands', '/output', ...files]) {
FS.unlink(file);
}
self.postMessage({ id, output });
}
importScripts('gnuplot.js');