MediaWiki:Common.js: differenze tra le versioni
Common.js v5: URL decide UI, niente cross-redirect, mobile nuke mantenuto |
Rimosso redirect JS useformat=mobile (duplicato del 302 server): faceva perdere i tap sul gate |
||
| (2 versioni intermedie di un altro utente non mostrate) | |||
| Riga 1: | Riga 1: | ||
/* ============================================================ | /* ============================================================ | ||
* Common.js | * Common.js v7 — Wiki Methode Paret | ||
* ============================================================ | * ============================================================ | ||
* REGOLA UNICA: | * REGOLA UNICA: | ||
* URL /Titolo → UI italiana | * URL /Titolo → UI italiana | ||
* URL /Titolo/ru → UI russa | * URL /Titolo/ru → UI russa | ||
* | * | ||
* | * Mobile detection v7: | ||
* | * - Touch capability (funziona anche con "Versione Desktop" del browser) | ||
* | * - Viewport width <= 1200 (più tollerante: cattura anche desktop mode 1080) | ||
* - Una delle due basta | |||
* | |||
* ============================================================ */ | * ============================================================ */ | ||
( function ( mw ) { | ( function ( mw ) { | ||
| Riga 19: | Riga 16: | ||
var SUPPORTED_LANGS = [ 'ru', 'en', 'fr', 'es', 'pt' ]; | var SUPPORTED_LANGS = [ 'ru', 'en', 'fr', 'es', 'pt' ]; | ||
function getCookie( name ) { | function getCookie( name ) { | ||
var m = document.cookie.match( new RegExp( '(?:^|;\\s*)' + name + '=([^;]*)' ) ); | var m = document.cookie.match( new RegExp( '(?:^|;\\s*)' + name + '=([^;]*)' ) ); | ||
| Riga 37: | Riga 33: | ||
} | } | ||
// ─── | // ─── DETECTION MOBILE ROBUSTA ────────────────────────── | ||
var ua = navigator.userAgent || ''; | var ua = navigator.userAgent || ''; | ||
var | var isMobileUA = /iPhone|iPad|iPod|Android|Mobile|webOS|BlackBerry|Opera Mini|IEMobile|Silk/i.test( ua ); | ||
var | var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 1024; | ||
var isSmallViewport = viewportWidth <= 1200; | |||
var hasTouch = ( 'ontouchstart' in window ) || | |||
( navigator.maxTouchPoints > 0 ) || | |||
( navigator.msMaxTouchPoints > 0 ); | |||
// Mobile se: UA mobile OPPURE (touch + viewport piccolino) | |||
// Il caso "Versione Desktop attivata" ha touch=true e viewport ~1080 → cattura | |||
var isMobile = isMobileUA || ( hasTouch && isSmallViewport ); | |||
if ( isMobile ) { | if ( isMobile ) { | ||
[ 'stopMobileRedirect', 'mf_useformat' ].forEach( function ( n ) { | [ 'stopMobileRedirect', 'mf_useformat' ].forEach( function ( n ) { | ||
if ( getCookie( n ) !== null ) | if ( getCookie( n ) !== null ) deleteCookie( n ); | ||
} ); | } ); | ||
} | } | ||
[ 'autolang_set', 'no_auto_lang_redirect' ].forEach( function ( n ) { | [ 'autolang_set', 'no_auto_lang_redirect' ].forEach( function ( n ) { | ||
if ( getCookie( n ) !== null ) deleteCookie( n ); | if ( getCookie( n ) !== null ) deleteCookie( n ); | ||
} ); | } ); | ||
// [ISICNV 14/07/2026] Redirect useformat=mobile RIMOSSO: lo fa gia il server (302). | |||
// Il location.replace ricaricava la pagina dopo il render, facendo perdere i tap sul gate. | |||
// ─── | // ─── URL decide UI lingua ───────────────────────────── | ||
function syncUILangFromURL() { | function syncUILangFromURL() { | ||
if ( typeof mw === 'undefined' || !mw.config ) return; | if ( typeof mw === 'undefined' || !mw.config ) return; | ||
| Riga 71: | Riga 66: | ||
var contentLang = mw.config.get( 'wgContentLanguage' ) || 'it'; | var contentLang = mw.config.get( 'wgContentLanguage' ) || 'it'; | ||
var match = pageName.match( /\/([a-z]{2})$/ ); | var match = pageName.match( /\/([a-z]{2})$/ ); | ||
var desiredLang; | var desiredLang; | ||
| Riga 77: | Riga 71: | ||
desiredLang = match[ 1 ]; | desiredLang = match[ 1 ]; | ||
} else { | } else { | ||
desiredLang = contentLang; | desiredLang = contentLang; | ||
} | } | ||
if ( currentUI === desiredLang ) return; | if ( currentUI === desiredLang ) return; | ||
var action = mw.config.get( 'wgAction' ); | var action = mw.config.get( 'wgAction' ); | ||
if ( action && action !== 'view' ) return; | if ( action && action !== 'view' ) return; | ||
var ns = mw.config.get( 'wgNamespaceNumber' ); | var ns = mw.config.get( 'wgNamespaceNumber' ); | ||
if ( ns < 0 ) return; | if ( ns < 0 ) return; | ||
var url = new URL( window.location.href ); | var url = new URL( window.location.href ); | ||
if ( url.searchParams.get( 'uselang' ) ) return; | if ( url.searchParams.get( 'uselang' ) ) return; | ||
url.searchParams.set( 'uselang', desiredLang ); | url.searchParams.set( 'uselang', desiredLang ); | ||
window.location.replace( url.toString() ); | window.location.replace( url.toString() ); | ||
| Riga 104: | Riga 94: | ||
}( window.mediaWiki || window.mw ) ); | }( window.mediaWiki || window.mw ) ); | ||