MediaWiki:Gadget-setlang.js
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.
/**
* This script emulates the desktop MediaWiki's setlang URL parameter
* functionality for mobile (the Minerva skin). It is only supposed to load
* for registered users who use the mobile site.
*
* @version 1.0.5 (2023-03-23)
* @author Jon Harald Søby
*/
( function() {
if (
// If the user is unregistered. Just a precaution, the gadget should
// never load at all for unregistered users.
!mw.user.getId() ||
// If there is no setlang parameter
!mw.util.getParamValue( 'setlang' ) ||
// If the requested language is already the user's interface language
mw.util.getParamValue( 'setlang' ) === mw.user.options.get( 'language' )
) {
// Do nothing
return;
}
function fauxSetlang( lang ) {
var autonym = $.uls.data.getAutonym( lang );
new mw.Api().loadMessagesIfMissing( [
'ext-uls-setlang-heading',
'ext-uls-setlang-message',
'ext-uls-setlang-cancel',
'ext-uls-setlang-accept'
] ).then( function() {
var messageDialog = new OO.ui.MessageDialog(),
windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ messageDialog ] );
var saveButton = new OO.ui.ActionWidget( {
action: 'save',
label: mw.msg( 'ext-uls-setlang-accept' ),
flags: [ 'primary', 'progressive' ],
framed: true,
} );
saveButton.on( 'click', function() {
new mw.Api().postWithEditToken( {
action: 'options',
format: 'json',
optionname: 'language',
optionvalue: lang,
formatversion: 2
} ).then( function() {
// Reload the page (to put the change into effect),
// but without the setlang parameter
var uri = new mw.Uri();
if ( window.history.replaceState ) {
delete uri.query.setlang;
window.history.replaceState( null, 'no-setlang-url', uri.toString() );
}
location.reload();
});
} );
windowManager.openWindow( messageDialog, {
title: mw.msg( 'ext-uls-setlang-heading', autonym ),
message: $( '<p>' ).append( mw.message( 'ext-uls-setlang-message', autonym, lang ).parseDom() ),
actions: [
saveButton,
{
label: mw.msg( 'ext-uls-setlang-cancel' ),
flags: 'safe'
}
]
} );
} );
}
fauxSetlang( mw.util.getParamValue( 'setlang' ) );
} )();