MediaWiki:Common.js: Difference between revisions

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) so CSS can target logged-in vs anonymous users.
   - Adds reliable body classes (mw-user / mw-anonuser) using mw.config.get('wgUserId').
   - Lightweight and safe; fails silently if mw.user is unavailable.
   - Lightweight and safe; fails silently if mw or mw.config is unavailable.
*/
*/


Line 21: Line 21:
});
});


/* Ensure body has mw-user or mw-anonuser so CSS can target logged-in vs anon reliably.
/* Helper: ensure body has mw-user or mw-anonuser so CSS can target logged-in vs anon reliably.
   Runs early via ResourceLoader. */
   Uses mw.config.get('wgUserId') which is present in all ResourceLoader contexts.
( function () {
*/
    if ( typeof mw === 'undefined' || !mw.user ) return;
(function () {
     try {
     try {
         if ( mw.user.isAnon() ) {
         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.body.classList.remove( 'mw-user' );
            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.body.classList.add( 'mw-user' );
             document.addEventListener('DOMContentLoaded', setBodyClass, { once: true });
            document.body.classList.remove( 'mw-anonuser' );
         }
         }
     } catch ( e ) {
     } catch (e) {
         if ( window.console && console.warn ) console.warn( 'Common.js body class helper failed', e );
         if (window.console && console.warn) console.warn('Common.js initialization failed', e);
     }
     }
}() );
}());