Jump to content

MediaWiki:Common.js

Revision as of 11:08, 23 March 2025 by Unifiers admin (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* 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
    });
});