Jump to content

User:Veko/common.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Veko (talk | contribs) at 01:18, 3 April 2025 (Installing User:Ingenuity/AntiVandal.js (script-installer)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
////////// ENHANCED STATUS CHANGER SCRIPT
// Creator: Misza13
// Modified by: Various contributors
// Updated to include additional statuses from the UserStatus template

$.when(
    $.ready,
    mw.loader.using( [ "mediawiki.api" ] )
).then( function () {
    // Create configuration variable if it doesn’t exist
    if (typeof(statusChangerConfig) === 'undefined') {
        statusChangerConfig = {};
    }

    // Expanded status list (Includes additional statuses from your table)
    if (typeof(statusChangerConfig.statusList) === 'undefined') {
        statusChangerConfig.statusList = [
            'online', 'offline', 'sleeping', 'busy', 'away', 'editing', 
            'atwork', 'school', 'eating', 'vandal', 'holiday', 'twinkling',
            'huggling', 'wikibreak', 'working'
        ];
    }

    // Define the status page
    if (typeof(statusChangerConfig.statusPage) === 'undefined') {
        statusChangerConfig.statusPage = 'User:' + mw.config.get('wgUserName') + '/Status';
    }

    function makeListener(newStatus) {
        return function ( evt ) {
            evt.preventDefault();
            var api = new mw.Api({
                ajax: { headers: { 'Api-User-Agent': '[[w:User:Enterprisey/StatusChanger.js]]' } }
            });

            api.postWithEditToken({
                action: 'edit',
                title: statusChangerConfig.statusPage,
                text: newStatus,
                summary: mw.config.get('wgUserName') + " is now " + ((newStatus === "sleep") ? "sleeping" : newStatus) + "."
            }).then(function(){
                // Purge the user page after changing status
                api.post( { action: "purge", titles: 'User:' + mw.config.get('wgUserName') } ).then(function(){
                    mw.notify('Status updated and page purged.');
                });
            });
            return false;
        };
    }

    // Add status changer buttons in a collapsible table
    var statusTable = document.createElement("div");
    statusTable.innerHTML = `
        <div style="text-align: center; margin-top: 10px;">
            <strong>Change Your Status:</strong>
            <table style="margin: auto; border-collapse: collapse;">
                <tr>
                    <td><button class="status-button" data-status="online">Online</button></td>
                    <td><button class="status-button" data-status="offline">Offline</button></td>
                    <td><button class="status-button" data-status="editing">Editing</button></td>
                    <td><button class="status-button" data-status="busy">Busy</button></td>
                </tr>
                <tr>
                    <td><button class="status-button" data-status="away">Away</button></td>
                    <td><button class="status-button" data-status="sleeping">Sleeping</button></td>
                    <td><button class="status-button" data-status="atwork">At Work</button></td>
                    <td><button class="status-button" data-status="school">At School</button></td>
                </tr>
                <tr>
                    <td><button class="status-button" data-status="eating">Eating</button></td>
                    <td><button class="status-button" data-status="vandal">Fighting Vandalism</button></td>
                    <td><button class="status-button" data-status="wikibreak">On a Wikibreak</button></td>
                    <td><button class="status-button" data-status="holiday">On Holiday</button></td>
                </tr>
                <tr>
                    <td><button class="status-button" data-status="huggling">Huggling</button></td>
                    <td><button class="status-button" data-status="twinkling">Twinkling</button></td>
                    <td colspan="2"><button class="status-button" data-status="working">Working</button></td>
                </tr>
            </table>
        </div>
    `;

    // Attach event listeners to buttons
    statusTable.querySelectorAll('.status-button').forEach(button => {
        button.addEventListener('click', makeListener(button.getAttribute('data-status')));
    });

    // Insert the table below the user status box
    var userStatusDiv = document.getElementById("TemplateUserinfo");
    if (userStatusDiv) {
        userStatusDiv.appendChild(statusTable);
    }

    // Add quick-access links to the personal menu (top right)
    for (var i = 0; i < statusChangerConfig.statusList.length; i++) {
        var stat = statusChangerConfig.statusList[i];
        var message = (stat === "sleeping") ? "asleep" : stat;

        mw.util.addPortletLink(
            "p-personal", // Target tab - personal links
            "#",
            stat, // Link text
            "pt-status-" + stat, // ID of new button
            "I'm " + message + "!", // Hover text
            "", // Access key - not needed
            document.getElementById("pt-logout") // Add before logout button
        ).addEventListener('click', makeListener(stat));
    }

    // Add a purge link manually to the status section
    var purgeLink = document.createElement("a");
    purgeLink.href = "https://en.wikipedia.org/w/index.php?title=User:" + mw.config.get('wgUserName') + "&action=purge";
    purgeLink.textContent = "Click here to refresh status";
    purgeLink.style.display = "block";
    purgeLink.style.textAlign = "center";
    purgeLink.style.marginTop = "5px";

    if (userStatusDiv) {
        userStatusDiv.appendChild(purgeLink);
    }
});



//[[Category:Wikipedia scripts|statusChanger]]
importScript('User:10nm/beta.js'); // Backlink: [[User:10nm/beta.js]]
importScript('User:Lupin/recent2.js'); // Backlink: [[User:Lupin/recent2.js]]
importScript('User:Ingenuity/AntiVandal.js'); // Backlink: [[User:Ingenuity/AntiVandal.js]]