User:Nyakase/Scripts/StatusChanger.js

From Wikipedia, the free encyclopedia
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.
//////////STATUS CHANGER
// Creator: Misza13
// Credits: Voyagerfan5761 for some minor improvements
//     Modified by Xenocidic to simply use /Status as a one word indicator,
//     Modified by Kraftlos to include Sleep status
//     Modified by APerson for compatibility with {{UserStatus}}
//     Modified by Vukky to use Morebits and the MediaWiki API instead of cluttering the page with portlets
//          Some code from Twinkle modules
 
$(function (){
    //Check if the config is defined
    if (typeof(statusChangerConfig) == 'undefined') {
      statusChangerConfig = {}
    }
   
    if (typeof(statusChangerConfig.statusList) == 'undefined') {
        statusChangerConfig.statusList = [ 'online', 'offline', 'sleeping' ];
    }
   
    if (typeof(statusChangerConfig.statusPage) == 'undefined') {
        statusChangerConfig.statusPage = 'User:' + mw.config.get('wgUserName') + '/Status';
    }
      
    mw.util.addPortletLink(
        "p-personal", //target tab - personal links
        "#", //link URL
        "Status", //link text
        "pt-status", //id of new button
        "Change your status", //hover text
        "", //???
        document.getElementById("pt-logout")); //add before logout button
   
    $("#pt-status").click(function (){
        var Window = new Morebits.simpleWindow(600, 500);
        Window.setTitle('Change your status');
        Window.setScriptName('StatusChanger');
        Window.display();
        var form = new Morebits.quickForm(publish);
        var categories = form.append({
            type: 'select',
            name: 'status',
            label: 'Select your status:'
        });
        for (var i = 0; i < statusChangerConfig.statusList.length; ++i) {
            categories.append({
                type: 'option',
                label: statusChangerConfig.statusList[i],
                value: statusChangerConfig.statusList[i]
            });
        }
        form.append({ type: 'submit' });
        var result = form.render();
        Window.setContent(result);
        Window.display();

        function publish(e){
            var form = e.target;
            var status = form.status.value;
            Morebits.simpleWindow.setButtonsEnabled(false);
            Morebits.status.init(form);
			Morebits.wiki.actionCompleted.notice = 'Status set!';
            
            var statusPage = new Morebits.wiki.page(statusChangerConfig.statusPage, 'Processing');
            statusPage.setFollowRedirect(true);
            statusPage.load(function() {
                statusPage.getStatusElement().status('Setting status');
                if(statusPage.getPageText() == status) {
                	statusPage.getStatusElement().error('Your status is already ' + status + '.');
                	return;
                }
                statusPage.setEditSummary(mw.config.get('wgUserName') + ' set their status to "' + status + '".');
                statusPage.setPageText(status);
                statusPage.save();
            });
        }
    });
});

// [[Category:Wikipedia scripts]]