User:Enterprisey/StatusChanger.js

//////////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}}

// compatible with {{Statustop}} for display

$.when(

$.ready,

mw.loader.using( [ "mediawiki.api" ] )

).then( function () {

// create variable to store configuration

if (typeof(statusChangerConfig) == 'undefined') {

statusChangerConfig = {}

}

// check for configuration options, and set them to default values if

// they're undefined

if (typeof(statusChangerConfig.statusList) == 'undefined') {

statusChangerConfig.statusList = [ 'online', 'offline', 'sleeping' ];

}

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(){

api.post( { action: "purge", titles: 'User:' + mw.config.get('wgUserName') } );

mw.notify('Done setting status!');

});

return false;

};

}

//Add the links

for (var i=0; i

var stat = statusChangerConfig.statusList[i];

var message = (stat === "sleeping") ? link = "asleep" : link = 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 - no need to define one

document.getElementById("pt-logout")) //add before logout button

.addEventListener('click',makeListener(stat));

}

});

//statusChanger