trotFunky
9911895b5b
This first version allows login of pre-existing users, creation and update of truths by admins, vote on the truths by users, their display as well as a simple graph for the vote results. Everything persisting in a SQLite database.
40 lines
1.6 KiB
JavaScript
40 lines
1.6 KiB
JavaScript
/**
|
|
* This script handles disabling/enabling the different choices
|
|
* accross the vote options.
|
|
* This prevents sending weird votes that choose the same person for multiple truths.
|
|
*/
|
|
|
|
const vote_select_tracking = new Map();
|
|
|
|
function log_select_change(event) {
|
|
const changed_select = event.target;
|
|
const original_index = vote_select_tracking.get(changed_select)
|
|
for (const select of vote_select_tracking) {
|
|
select.at(0)[original_index].disabled = false;
|
|
// Don't disable the default entry, or the one we just moved to.
|
|
if (changed_select.selectedIndex !== 0 && select.at(0) !== changed_select)
|
|
select.at(0)[changed_select.selectedIndex].disabled = true
|
|
}
|
|
|
|
// Make sure to change the selected *attribute*, because the .selected property doesn't impact
|
|
// the form output, it seems.
|
|
changed_select[original_index].removeAttribute("selected");
|
|
changed_select[changed_select.selectedIndex].setAttribute("selected", true);
|
|
// Update with the new tracked index.
|
|
vote_select_tracking.set(changed_select, changed_select.selectedIndex);
|
|
}
|
|
|
|
const selected_indices = [];
|
|
for (const select of document.getElementsByTagName("select")) {
|
|
select.addEventListener("change", log_select_change);
|
|
vote_select_tracking.set(select, select.selectedIndex);
|
|
if (select.selectedIndex !== 0) {
|
|
selected_indices.push(select.selectedIndex);
|
|
}
|
|
}
|
|
|
|
for (const select of document.getElementsByTagName("select")) {
|
|
for (const selected_index of selected_indices) {
|
|
select[selected_index].disabled = true;
|
|
}
|
|
}
|