MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
document.addEventListener("DOMContentLoaded", function () { | |||
document.querySelectorAll("form[name^='poll_']").forEach(function (form) { | |||
var pollChoices = form.querySelectorAll(".poll-choice"); | |||
if (pollChoices.length === 0 || form.dataset.processed) return; // Avoid duplicate processing | |||
var select = document.createElement("select"); | |||
select.name = "poll_choice"; | |||
select.classList.add("poll-dropdown"); | |||
// Add a default "Choose an option" entry | |||
var defaultOption = document.createElement("option"); | |||
defaultOption.textContent = "Choose an option..."; | |||
defaultOption.value = ""; | |||
defaultOption.disabled = true; | |||
defaultOption.selected = true; | |||
select.appendChild(defaultOption); | |||
pollChoices.forEach(function (choice) { | |||
var input = choice.querySelector("input[type='radio']"); | |||
var labelText = choice.textContent.trim(); | |||
if (input && labelText) { | |||
var option = document.createElement("option"); | |||
option.value = input.value; | |||
option.textContent = labelText; | |||
select.appendChild(option); | |||
} | |||
}); | |||
// Remove existing radio buttons and replace with dropdown | |||
var pollContainer = pollChoices[0].parentNode; | |||
pollContainer.innerHTML = ""; // Clear existing choices | |||
pollContainer.appendChild(select); | |||
// Ensure form submits correct value when dropdown is changed | |||
select.addEventListener("change", function () { | |||
var hiddenInput = form.querySelector("input[name='poll_choice']"); | |||
if (!hiddenInput) { | |||
hiddenInput = document.createElement("input"); | |||
hiddenInput.type = "hidden"; | |||
hiddenInput.name = "poll_choice"; | |||
form.appendChild(hiddenInput); | |||
} | |||
hiddenInput.value = select.value; | |||
}); | |||
form.dataset.processed = "true"; // Mark as processed | |||
}); | |||
}); | |||
Revision as of 11:08, 23 March 2025
/* Any JavaScript here will be loaded for all users on every page load. */
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll("form[name^='poll_']").forEach(function (form) {
var pollChoices = form.querySelectorAll(".poll-choice");
if (pollChoices.length === 0 || form.dataset.processed) return; // Avoid duplicate processing
var select = document.createElement("select");
select.name = "poll_choice";
select.classList.add("poll-dropdown");
// Add a default "Choose an option" entry
var defaultOption = document.createElement("option");
defaultOption.textContent = "Choose an option...";
defaultOption.value = "";
defaultOption.disabled = true;
defaultOption.selected = true;
select.appendChild(defaultOption);
pollChoices.forEach(function (choice) {
var input = choice.querySelector("input[type='radio']");
var labelText = choice.textContent.trim();
if (input && labelText) {
var option = document.createElement("option");
option.value = input.value;
option.textContent = labelText;
select.appendChild(option);
}
});
// Remove existing radio buttons and replace with dropdown
var pollContainer = pollChoices[0].parentNode;
pollContainer.innerHTML = ""; // Clear existing choices
pollContainer.appendChild(select);
// Ensure form submits correct value when dropdown is changed
select.addEventListener("change", function () {
var hiddenInput = form.querySelector("input[name='poll_choice']");
if (!hiddenInput) {
hiddenInput = document.createElement("input");
hiddenInput.type = "hidden";
hiddenInput.name = "poll_choice";
form.appendChild(hiddenInput);
}
hiddenInput.value = select.value;
});
form.dataset.processed = "true"; // Mark as processed
});
});