MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
m may need to roll back to if we break FAQList |
mNo edit summary |
||
| Line 2: | Line 2: | ||
Global JS for the wiki. | Global JS for the wiki. | ||
- Keeps FAQ expand/collapse handlers. | - Keeps FAQ expand/collapse handlers. | ||
- Adds reliable body classes (mw-user / mw-anonuser) | - Adds reliable body classes (mw-user / mw-anonuser) using mw.config.get('wgUserId'). | ||
- Lightweight and safe; fails silently if mw. | - Lightweight and safe; fails silently if mw or mw.config is unavailable. | ||
*/ | */ | ||
| Line 21: | Line 21: | ||
}); | }); | ||
/* | /* Helper: ensure body has mw-user or mw-anonuser so CSS can target logged-in vs anon reliably. | ||
Uses mw.config.get('wgUserId') which is present in all ResourceLoader contexts. | |||
( function () { | */ | ||
(function () { | |||
try { | try { | ||
if ( mw.user. | if ( typeof mw === 'undefined' || !mw.config || typeof mw.config.get !== 'function' ) { | ||
document.body.classList.add( 'mw-anonuser' ); | // mw or mw.config not available yet — try again after DOM ready | ||
document.addEventListener('DOMContentLoaded', function () { | |||
try { | |||
var uid = (window.mw && mw.config && mw.config.get) ? mw.config.get('wgUserId') : null; | |||
if (!uid) { | |||
document.body.classList.add('mw-anonuser'); | |||
document.body.classList.remove('mw-user'); | |||
} else { | |||
document.body.classList.add('mw-user'); | |||
document.body.classList.remove('mw-anonuser'); | |||
} | |||
} catch (e) { | |||
if (window.console && console.warn) console.warn('Common.js body class helper (deferred) failed', e); | |||
} | |||
}, { once: true }); | |||
return; | |||
} | |||
// If body exists now, set classes immediately; otherwise wait for DOMContentLoaded | |||
function setBodyClass() { | |||
try { | |||
var uid = mw.config.get('wgUserId'); | |||
if (!uid || uid === 0 || uid === '') { | |||
document.body.classList.add('mw-anonuser'); | |||
document.body.classList.remove('mw-user'); | |||
} else { | |||
document.body.classList.add('mw-user'); | |||
document.body.classList.remove('mw-anonuser'); | |||
} | |||
} catch (e) { | |||
if (window.console && console.warn) console.warn('Common.js body class helper failed', e); | |||
} | |||
} | |||
if (document.body) { | |||
setBodyClass(); | |||
} else { | } else { | ||
document. | document.addEventListener('DOMContentLoaded', setBodyClass, { once: true }); | ||
} | } | ||
} catch ( e ) { | } catch (e) { | ||
if ( window.console && console.warn ) console.warn( 'Common.js | if (window.console && console.warn) console.warn('Common.js initialization failed', e); | ||
} | } | ||
}() ); | }()); | ||
Revision as of 16:07, 2 April 2026
/* MediaWiki:Common.js
Global JS for the wiki.
- Keeps FAQ expand/collapse handlers.
- Adds reliable body classes (mw-user / mw-anonuser) using mw.config.get('wgUserId').
- Lightweight and safe; fails silently if mw or mw.config is unavailable.
*/
/* Expand/Collapse all for FAQList */
mw.hook('wikipage.content').add(function ($content) {
// Expand all
$content.on('click', '.faq-expand-all', function () {
$('.faq-list details').attr('open', true);
});
// Collapse all
$content.on('click', '.faq-collapse-all', function () {
$('.faq-list details').removeAttr('open');
});
});
/* Helper: ensure body has mw-user or mw-anonuser so CSS can target logged-in vs anon reliably.
Uses mw.config.get('wgUserId') which is present in all ResourceLoader contexts.
*/
(function () {
try {
if ( typeof mw === 'undefined' || !mw.config || typeof mw.config.get !== 'function' ) {
// mw or mw.config not available yet — try again after DOM ready
document.addEventListener('DOMContentLoaded', function () {
try {
var uid = (window.mw && mw.config && mw.config.get) ? mw.config.get('wgUserId') : null;
if (!uid) {
document.body.classList.add('mw-anonuser');
document.body.classList.remove('mw-user');
} else {
document.body.classList.add('mw-user');
document.body.classList.remove('mw-anonuser');
}
} catch (e) {
if (window.console && console.warn) console.warn('Common.js body class helper (deferred) failed', e);
}
}, { once: true });
return;
}
// If body exists now, set classes immediately; otherwise wait for DOMContentLoaded
function setBodyClass() {
try {
var uid = mw.config.get('wgUserId');
if (!uid || uid === 0 || uid === '') {
document.body.classList.add('mw-anonuser');
document.body.classList.remove('mw-user');
} else {
document.body.classList.add('mw-user');
document.body.classList.remove('mw-anonuser');
}
} catch (e) {
if (window.console && console.warn) console.warn('Common.js body class helper failed', e);
}
}
if (document.body) {
setBodyClass();
} else {
document.addEventListener('DOMContentLoaded', setBodyClass, { once: true });
}
} catch (e) {
if (window.console && console.warn) console.warn('Common.js initialization failed', e);
}
}());