MediaWiki:Gadget-ViewerMode.js:修订间差异

Fix DOM injection: logout in separate portlet; fix My blog spacing
Use confirmed-available icons: watchlist for reader, wikiText for editor
第6行: 第6行:
     'use strict';
     'use strict';


     if ( mw.user.isAnon() ) {
     if ( mw.user.isAnon() ) { return; }
        return;
    }


     var STORAGE_KEY = 'mw-viewer-mode';
     var STORAGE_KEY = 'mw-viewer-mode';
    var READER_ICON  = 'vector-icon mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist';
    var EDITOR_ICON  = 'vector-icon mw-ui-icon-wikiText mw-ui-icon-wikimedia-wikiText';
     var active = localStorage.getItem( STORAGE_KEY ) === '1';
     var active = localStorage.getItem( STORAGE_KEY ) === '1';


    // Apply immediately to prevent flash of edit elements on load
     if ( active ) {
     if ( active ) {
         document.documentElement.classList.add( 'viewer-mode' );
         document.documentElement.classList.add( 'viewer-mode' );
第31行: 第30行:
         if ( active ) {
         if ( active ) {
             label.textContent = 'Editor mode';
             label.textContent = 'Editor mode';
             if ( icon ) { icon.className = 'vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions'; }
             if ( icon ) { icon.className = EDITOR_ICON; }
         } else {
         } else {
             label.textContent = 'Reader view';
             label.textContent = 'Reader view';
             if ( icon ) { icon.className = 'vector-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye'; }
             if ( icon ) { icon.className = READER_ICON; }
         }
         }
     }
     }


     $( function () {
     $( function () {
         // Fix missing icon on "My blog" — match the exact structure other items use
         // Fix missing icon on "My blog"
         var blogLink = document.querySelector( '#pt-simpleblog_myblog a' );
         var blogLink = document.querySelector( '#pt-simpleblog_myblog a' );
         if ( blogLink && !blogLink.querySelector( '.vector-icon' ) ) {
         if ( blogLink && !blogLink.querySelector( '.vector-icon' ) ) {
             var blogIcon = document.createElement( 'span' );
             var blogIcon = document.createElement( 'span' );
             blogIcon.className = 'vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article';
             blogIcon.className = 'vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article';
            // Insert icon + a plain space before the text span (same pattern as other items)
             blogLink.insertBefore( document.createTextNode( ' ' ), blogLink.firstChild );
             blogLink.insertBefore( document.createTextNode( ' ' ), blogLink.firstChild );
             blogLink.insertBefore( blogIcon, blogLink.firstChild );
             blogLink.insertBefore( blogIcon, blogLink.firstChild );
         }
         }


         // Add viewer-mode toggle to the end of p-personal list
         // Add viewer-mode toggle at end of p-personal list
         // (logout lives in its own separate portlet p-user-menu-logout)
         // (logout is in its own separate portlet: p-user-menu-logout)
         var menuList = document.querySelector( '#p-personal .vector-menu-content-list' );
         var menuList = document.querySelector( '#p-personal .vector-menu-content-list' );
         if ( !menuList ) { return; }
         if ( !menuList ) { return; }
第62行: 第60行:


         var iconSpan = document.createElement( 'span' );
         var iconSpan = document.createElement( 'span' );
         iconSpan.className = active
         iconSpan.className = active ? EDITOR_ICON : READER_ICON;
            ? 'vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions'
            : 'vector-icon mw-ui-icon-eye mw-ui-icon-wikimedia-eye';


         var textSpan = document.createElement( 'span' );
         var textSpan = document.createElement( 'span' );