Jump to content

MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
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 () {
mw.hook('wikipage.content').add(function() {
     document.querySelectorAll("form[name^='poll_']").forEach(function (form) {
     document.querySelectorAll('.poll-loading-msg').forEach(el => el.style.display = 'none');
        var pollChoices = form.querySelectorAll(".poll-choice");
    document.querySelectorAll('[id^="poll-display_"]').forEach(el => el.style.display = 'block');
        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
function checkAllPollsAnswered() {
        var defaultOption = document.createElement("option");
    let totalPolls = document.querySelectorAll('.poll-embed-title').length;
        defaultOption.textContent = "Choose an option...";
    let answeredPolls = document.querySelectorAll('.poll-total-votes').length;
        defaultOption.value = "";
        defaultOption.disabled = true;
        defaultOption.selected = true;
        select.appendChild(defaultOption);


        pollChoices.forEach(function (choice) {
    if (totalPolls > 0 && totalPolls === answeredPolls) {
            var input = choice.querySelector("input[type='radio']");
        document.getElementById('all-polls-answered-message').style.display = 'block';
            var labelText = choice.textContent.trim();
    }
}


            if (input && labelText) {
// Run the check after a short delay to allow all elements to load
                var option = document.createElement("option");
setTimeout(checkAllPollsAnswered, 2000);
                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
    });
});

Latest revision as of 12:23, 2 April 2025

/* Any JavaScript here will be loaded for all users on every page load. */
mw.hook('wikipage.content').add(function() {
    document.querySelectorAll('.poll-loading-msg').forEach(el => el.style.display = 'none');
    document.querySelectorAll('[id^="poll-display_"]').forEach(el => el.style.display = 'block');
});


function checkAllPollsAnswered() {
    let totalPolls = document.querySelectorAll('.poll-embed-title').length;
    let answeredPolls = document.querySelectorAll('.poll-total-votes').length;

    if (totalPolls > 0 && totalPolls === answeredPolls) {
        document.getElementById('all-polls-answered-message').style.display = 'block';
    }
}

// Run the check after a short delay to allow all elements to load
setTimeout(checkAllPollsAnswered, 2000);