MediaWiki:BingoSheet.js

From Roat Pkz
Revision as of 02:02, 7 March 2026 by Hefner (talk | contribs)
Jump to navigation Jump to search

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
mw.hook('wikipage.content').add(function () {
    if (mw.config.get('wgPageName') !== "User:Hefner/Sandbox12") return;

    var container = document.getElementById("bingoContainer");
    if (!container) return;

    container.innerHTML = ""; // clear container

    var table = document.createElement("table");
    table.style.border = "2px solid #596e96";
    table.style.borderCollapse = "collapse";
    table.style.borderRadius = "8px";
    table.style.width = "100%";
    table.style.maxWidth = "500px";

    var rows = 5, cols = 5;

    for (var r = 0; r < rows; r++) {
        var row = table.insertRow();
        row.style.background = r % 2 === 0 ? "#313e59" : "#222e45";

        for (var c = 0; c < cols; c++) {
            var cell = row.insertCell();
            cell.style.padding = "10px";
            cell.style.border = "1px solid #444";
            cell.style.textAlign = "center";
            cell.style.color = "#fff";

            var id = `cell_${r}_${c}`;
            var checkbox = document.createElement("input");
            checkbox.type = "checkbox";
            checkbox.id = id;

            // Restore state from localStorage
            if (localStorage.getItem(id) === "true") checkbox.checked = true;

            // Save state on change
            checkbox.addEventListener("change", function () {
                localStorage.setItem(this.id, this.checked);
            });

            cell.appendChild(checkbox);
            cell.appendChild(document.createElement("br"));
            cell.appendChild(document.createTextNode(` Item ${r*cols+c+1}`));
        }
    }

    container.appendChild(table);

    // Optional: progress display
    var progressDiv = document.createElement("div");
    progressDiv.style.marginTop = "10px";
    progressDiv.style.color = "#fff";
    container.appendChild(progressDiv);

    function updateProgress() {
        var checked = 0;
        for (var r = 0; r < rows; r++) {
            for (var c = 0; c < cols; c++) {
                var cb = document.getElementById(`cell_${r}_${c}`);
                if (cb.checked) checked++;
            }
        }
        progressDiv.textContent = `Completed ${checked} of ${rows*cols} items`;
    }

    // Listen for changes to update progress
    for (var r = 0; r < rows; r++) {
        for (var c = 0; c < cols; c++) {
            var cb = document.getElementById(`cell_${r}_${c}`);
            cb.addEventListener("change", updateProgress);
        }
    }

    updateProgress(); // initial update
});