From 14b1dfb787473bf31d1c77b46200048a4a94a33a Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Thu, 7 Jan 2021 03:45:12 +1100 Subject: [PATCH] Allow displaying results to >2 dps in JS client --- html/index.html | 9 ++++++++- html/index.js | 9 ++++++++- html/worker.js | 22 +++++++++++----------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/html/index.html b/html/index.html index 16923c5..aceb90a 100644 --- a/html/index.html +++ b/html/index.html @@ -142,7 +142,14 @@ + +
+
diff --git a/html/index.js b/html/index.js index eed42cc..2a21fe3 100644 --- a/html/index.js +++ b/html/index.js @@ -36,6 +36,7 @@ function changePreset() { document.getElementById('chkDeferSurpluses').checked = false; document.getElementById('selNumbers').value = 'fixed'; document.getElementById('txtDP').value = '5'; + document.getElementById('txtPPDP').value = '2'; document.getElementById('chkRoundQuota').checked = true; document.getElementById('txtRoundQuota').value = '0'; document.getElementById('chkRoundVotes').checked = false; @@ -54,6 +55,7 @@ function changePreset() { document.getElementById('chkBulkExclusion').checked = true; document.getElementById('chkDeferSurpluses').checked = false; document.getElementById('selNumbers').value = 'rational'; + document.getElementById('txtPPDP').value = '2'; document.getElementById('chkRoundQuota').checked = false; document.getElementById('chkRoundVotes').checked = false; document.getElementById('chkRoundTVs').checked = false; @@ -72,6 +74,7 @@ function changePreset() { document.getElementById('chkDeferSurpluses').checked = false; document.getElementById('selNumbers').value = 'fixed'; document.getElementById('txtDP').value = '5'; + document.getElementById('txtPPDP').value = '0'; document.getElementById('chkRoundQuota').checked = true; document.getElementById('txtRoundQuota').value = '0'; document.getElementById('chkRoundVotes').checked = true; @@ -92,6 +95,7 @@ function changePreset() { document.getElementById('chkDeferSurpluses').checked = false; document.getElementById('selNumbers').value = 'fixed'; document.getElementById('txtDP').value = '5'; + document.getElementById('txtPPDP').value = '2'; document.getElementById('chkRoundQuota').checked = true; document.getElementById('txtRoundQuota').value = '0'; document.getElementById('chkRoundVotes').checked = false; @@ -111,6 +115,7 @@ function changePreset() { document.getElementById('chkDeferSurpluses').checked = true; document.getElementById('selNumbers').value = 'fixed'; document.getElementById('txtDP').value = '5'; + document.getElementById('txtPPDP').value = '3'; document.getElementById('chkRoundQuota').checked = true; document.getElementById('txtRoundQuota').value = '3'; document.getElementById('chkRoundVotes').checked = true; @@ -133,6 +138,7 @@ function changePreset() { document.getElementById('chkDeferSurpluses').checked = true; document.getElementById('selNumbers').value = 'fixed'; document.getElementById('txtDP').value = '5'; + document.getElementById('txtPPDP').value = '2'; document.getElementById('chkRoundQuota').checked = true; document.getElementById('txtRoundQuota').value = '2'; document.getElementById('chkRoundVotes').checked = true; @@ -399,6 +405,7 @@ async function clickCount() { 'data': { 'numbers': document.getElementById('selNumbers').value, 'fixedDPs': parseInt(document.getElementById('txtDP').value), + 'ppDPs': parseInt(document.getElementById('txtPPDP').value), 'transfers': document.getElementById('selTransfers').value, 'options': { 'quota_criterion': document.getElementById('selQuotaCriterion').value, @@ -422,7 +429,7 @@ async function clickCount() { }); // Pretty printing helper functions - let ppDPs = 2; + let ppDPs = parseInt(document.getElementById('txtPPDP').value); if (document.getElementById('chkRoundVotes').checked) { let ppDPs2 = parseInt(document.getElementById('txtRoundVotes').value); if (ppDPs2 < ppDPs) { diff --git a/html/worker.js b/html/worker.js index 8325265..59efda9 100644 --- a/html/worker.js +++ b/html/worker.js @@ -18,7 +18,7 @@ importScripts('vendor/BigInt_BigRat-a5f89e2.min.js', 'vendor/big-6.0.0.min.js', 'vendor/sjcl-1.0.8.min.js', 'bundle.js'); -let stage, result, counter, ppDP, tiesPrompt; +let stage, result, counter, ppDPs, tiesPrompt; onmessage = function(evt) { if (evt.data.type === 'init') { @@ -34,7 +34,7 @@ onmessage = function(evt) { py.pyRCV2.numbers.set_dps(evt.data.data.fixedDPs); } - ppDP = evt.data.data.fixedDPs > 2 ? 2 : evt.data.data.fixedDPs; + ppDPs = evt.data.data.ppDPs; let election = py.pyRCV2.blt.readBLT(evt.data.data.data); postMessage({'type': 'init', 'election': { @@ -109,21 +109,21 @@ function resultToJS(result) { 'stage': stage, 'comment': result.comment, 'candidates': result.candidates.py_items().map(([c, cc]) => [c.py_name, { - 'transfers': cc.transfers.pp(ppDP), - 'votes': cc.votes.pp(ppDP), + 'transfers': cc.transfers.pp(ppDPs), + 'votes': cc.votes.pp(ppDPs), 'state': cc.state, 'order_elected': cc.order_elected, }]), 'exhausted': { - 'transfers': result.exhausted.transfers.pp(ppDP), - 'votes': result.exhausted.votes.pp(ppDP) + 'transfers': result.exhausted.transfers.pp(ppDPs), + 'votes': result.exhausted.votes.pp(ppDPs) }, 'loss_fraction': { - 'transfers': result.loss_fraction.transfers.pp(ppDP), - 'votes': result.loss_fraction.votes.pp(ppDP) + 'transfers': result.loss_fraction.transfers.pp(ppDPs), + 'votes': result.loss_fraction.votes.pp(ppDPs) }, - 'total': result.total.pp(ppDP), - 'quota': result.quota.pp(ppDP), - 'vote_required_election': result.vote_required_election === null ? null : result.vote_required_election.pp(ppDP), + 'total': result.total.pp(ppDPs), + 'quota': result.quota.pp(ppDPs), + 'vote_required_election': result.vote_required_election === null ? null : result.vote_required_election.pp(ppDPs), }; }