aboutsummaryrefslogtreecommitdiffstats
path: root/worker.js
diff options
context:
space:
mode:
authorBrian Cully <bjc@spork.org>2025-07-16 18:48:48 -0400
committerBrian Cully <bjc@spork.org>2025-07-16 18:48:48 -0400
commite1a9e10902de4d927f4c2c87b6c27e6303fa1ead (patch)
tree516d92bd5bf204308919d57698277b7bb9e08078 /worker.js
parent5da918119bb2e352f10060a36d9c7e580fa8695e (diff)
downloadpnit-e1a9e10902de4d927f4c2c87b6c27e6303fa1ead.tar.gz
pnit-e1a9e10902de4d927f4c2c87b6c27e6303fa1ead.zip
add js version rendering. still needs download
Diffstat (limited to 'worker.js')
-rw-r--r--worker.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/worker.js b/worker.js
new file mode 100644
index 0000000..77a861b
--- /dev/null
+++ b/worker.js
@@ -0,0 +1,53 @@
+import CSVParse from './csv.mjs';
+
+let ignoreLines = 0;
+let sequenceNames = [];
+
+function process(threshold, row) {
+ const name = row[0];
+ if (name === undefined || /^\s*$/.test(name)) {
+ return;
+ }
+ if (ignoreLines > 0) {
+ ignoreLines--;
+ return;
+ }
+ sequenceNames.push(name);
+
+ let i = 0;
+ for (const col of row) {
+ const val = Number(col);
+ if (isNaN(val)) {
+ continue;
+ }
+ if (val >= threshold && name !== sequenceNames[i]) {
+ postMessage([name, sequenceNames[i], val]);
+ }
+ i++;
+ }
+}
+
+onmessage = e => {
+ console.debug('got message', e);
+ console.debug('reading file');
+
+ console.debug('e.data', e.data);
+ const { ignoreHeader, threshold, file } = e.data;
+ console.debug('threshold', threshold, 'file', file);
+
+ const reader = new FileReader();
+ reader.onload = e => {
+ const parser = new CSVParse();
+ for (const c of e.target.result) {
+ parser.push(c);
+ }
+ if (ignoreHeader) {
+ ignoreLines = 1;
+ }
+ parser.results.forEach(row => process(threshold, row));
+ }
+ reader.progress = e => {
+ console.debug('reader.progress', e);
+ }
+ reader.readAsText(file);
+}