MediaWiki:Common.js
Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.
- Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
- Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
- Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5.
/* ============================================================
* Common.js v6 — Wiki Methode Paret
* ============================================================
* REGOLA UNICA:
* URL /Titolo → UI italiana
* URL /Titolo/ru → UI russa
* URL /Titolo/en → UI inglese (futuro)
*
* + Detection mobile via VIEWPORT WIDTH (più robusto di UA)
* + mobile cookie nuke
* + cleanup cookie velenosi delle versioni precedenti
* ============================================================ */
( function ( mw ) {
'use strict';
var SUPPORTED_LANGS = [ 'ru', 'en', 'fr', 'es', 'pt' ];
// ─── Cookie helpers ─────────────────────────────────────
function getCookie( name ) {
var m = document.cookie.match( new RegExp( '(?:^|;\\s*)' + name + '=([^;]*)' ) );
return m ? decodeURIComponent( m[ 1 ] ) : null;
}
function deleteCookie( name ) {
var hostname = window.location.hostname;
var parts = hostname.split( '.' );
var domains = [ hostname, '' ];
if ( parts.length > 2 ) {
domains.push( '.' + parts.slice( -2 ).join( '.' ) );
}
domains.forEach( function ( d ) {
var suffix = d ? '; domain=' + d : '';
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/' + suffix;
} );
}
// ─── 1. Mobile cookie nuke (per MobileFrontend / Minerva) ──
var ua = navigator.userAgent || '';
var isMobileUA = /iPhone|iPad|iPod|Android|Mobile|webOS|BlackBerry|Opera Mini|IEMobile|Silk/i.test( ua );
var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 1024;
var isMobileViewport = viewportWidth < 768;
var isMobile = isMobileUA || isMobileViewport;
if ( isMobile ) {
[ 'stopMobileRedirect', 'mf_useformat' ].forEach( function ( n ) {
if ( getCookie( n ) !== null ) deleteCookie( n );
} );
}
// ─── 2. Cleanup cookie velenosi delle versioni precedenti ──
[ 'autolang_set', 'no_auto_lang_redirect' ].forEach( function ( n ) {
if ( getCookie( n ) !== null ) deleteCookie( n );
} );
// ─── 3. FORCE MOBILE VIEW se viewport piccolo + su Vector ──
// Robusto: anche se UA non viene riconosciuto, viewport width <768 è mobile
if ( isMobile &&
document.body &&
/skin-vector/.test( document.body.className ) ) {
// Aggiungiamo ?useformat=mobile e ricarichiamo (forza Minerva)
var url = new URL( window.location.href );
if ( url.searchParams.get( 'useformat' ) !== 'mobile' ) {
url.searchParams.set( 'useformat', 'mobile' );
window.location.replace( url.toString() );
return; // stop everything else
}
}
// ─── 4. LOGICA UNICA: URL decide UI ───────────────────────
function syncUILangFromURL() {
if ( typeof mw === 'undefined' || !mw.config ) return;
var pageName = mw.config.get( 'wgPageName' ) || '';
var currentUI = mw.config.get( 'wgUserLanguage' );
var contentLang = mw.config.get( 'wgContentLanguage' ) || 'it';
var match = pageName.match( /\/([a-z]{2})$/ );
var desiredLang;
if ( match && SUPPORTED_LANGS.indexOf( match[ 1 ] ) !== -1 ) {
desiredLang = match[ 1 ];
} else {
desiredLang = contentLang;
}
if ( currentUI === desiredLang ) return;
var action = mw.config.get( 'wgAction' );
if ( action && action !== 'view' ) return;
var ns = mw.config.get( 'wgNamespaceNumber' );
if ( ns < 0 ) return;
var url = new URL( window.location.href );
if ( url.searchParams.get( 'uselang' ) ) return;
url.searchParams.set( 'uselang', desiredLang );
window.location.replace( url.toString() );
}
if ( typeof mw !== 'undefined' && mw.config ) {
mw.loader.using( [ 'mediawiki.util' ] ).then( syncUILangFromURL );
}
}( window.mediaWiki || window.mw ) );
/* ============================================================
* Mobile via viewport width <768px.
* Niente cross-redirect tra lingue.
* ============================================================ */