OpenTally/html/worker.js

58 lines
2.0 KiB
JavaScript
Raw Normal View History

importScripts('opentally.js');
var wasm = wasm_bindgen;
async function initWasm() {
await wasm_bindgen('opentally_bg.wasm');
postMessage({'type': 'init', 'version': wasm.version()});
}
initWasm();
onmessage = function(evt) {
if (evt.data.type === 'countElection') {
2021-06-04 10:59:50 +02:00
let numbers;
2021-06-04 14:05:48 +02:00
if (evt.data.numbers === 'fixed') {
numbers = 'Fixed';
wasm.fixed_set_dps(evt.data.decimals);
2021-06-04 10:59:50 +02:00
} else if (evt.data.numbers === 'float64') {
numbers = 'NativeFloat64';
2021-06-04 14:05:48 +02:00
} else if (evt.data.numbers === 'rational') {
numbers = 'Rational';
} else {
throw 'Unknown --numbers';
2021-06-04 10:59:50 +02:00
}
// Init election
2021-06-04 10:59:50 +02:00
let election = wasm['election_from_blt_' + numbers](evt.data.electionData);
// Init STV options
let opts = wasm.STVOptions.new.apply(null, evt.data.optsStr);
// Describe count
2021-06-04 10:59:50 +02:00
postMessage({'type': 'describeCount', 'content': wasm['describe_count_' + numbers](evt.data.filePath, election, opts)});
2021-06-07 12:52:18 +02:00
// Init results table
postMessage({'type': 'initResultsTable', 'content': wasm['init_results_table_' + numbers](election, opts)});
// Step election
2021-06-04 10:59:50 +02:00
let state = wasm['CountState' + numbers].new(election);
wasm['count_init_' + numbers](state, opts);
2021-06-04 10:59:50 +02:00
postMessage({'type': 'updateResultsTable', 'result': wasm['update_results_table_' + numbers](1, state, opts)});
postMessage({'type': 'updateStageComments', 'comment': wasm['update_stage_comments_' + numbers](state)});
for (let stageNum = 2;; stageNum++) {
2021-06-04 10:59:50 +02:00
let isDone = wasm['count_one_stage_' + numbers](state, opts);
if (isDone) {
break;
}
2021-06-04 10:59:50 +02:00
postMessage({'type': 'updateResultsTable', 'result': wasm['update_results_table_' + numbers](stageNum, state, opts)});
postMessage({'type': 'updateStageComments', 'comment': wasm['update_stage_comments_' + numbers](state)});
}
2021-06-04 10:59:50 +02:00
postMessage({'type': 'updateResultsTable', 'result': wasm['finalise_results_table_' + numbers](state)});
postMessage({'type': 'finalResultSummary', 'summary': wasm['final_result_summary_' + numbers](state)});
}
}