blob: c5e85e91857537a660eeae394a23f2a1e89abc7e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
// This JavaScript just serves to improve the user experience
// it is not at all required for submitting a vote.
const form = document.getElementById('vote-form');
const commentInput = form.querySelector('textarea');
const radios = {};
// Make the comment input required if you select to oppose or abstain.
for (const radio of form.querySelectorAll('input[type=radio]')) {
radio.addEventListener('change', e => {
commentInput.required = e.target.value != 'yes';
});
radios[radio.value] = radio;
}
// Disable the Enter key in the comment input (because
// the PHP code replaces newlines with spaces anyway).
commentInput.addEventListener('keypress', e => {
if (e.key == 'Enter') {
e.preventDefault();
}
});
// Remind users what they voted for and prevent them from casting the same vote again.
const script = form.querySelector('script[data-votes]');
const votes = JSON.parse(script.textContent);
const previousVote = votes[mw.config.get('wgUserName')];
if (previousVote) {
const note = document.createElement('span');
note.textContent = mw.message('vote-already-' + previousVote).text();
script.insertAdjacentElement('beforebegin', note);
radios[previousVote].checked = true;
const submitButton = form.querySelector('input[type=submit]');
submitButton.disabled = true;
form.querySelector('h3').textContent = mw.message('vote-edit-your-vote').text();
for (const radio of Object.values(radios)) {
radio.addEventListener('change', e => {
if (e.target.value == previousVote) {
submitButton.disabled = true;
note.textContent = mw.message('vote-already-' + previousVote).text();
} else {
submitButton.disabled = false;
note.textContent = mw.message('vote-change', previousVote, e.target.value).text();
}
})
}
}
// FUTURE: disable form if you are logged in but may not edit the page
|