MediaWiki:Common.js: Difference between revisions

No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 1,397: Line 1,397:
   }
   }


   /* ── 5. Hamburger menu: hide default items, inject custom ones ── */
   /* ── 5. Hamburger menu: replace default items with custom ones ── */
   function setupHamburgerMenu() {
   function setupHamburgerMenu() {
     var drawer = document.getElementById('mw-mf-main-menu');
    /* Minerva lazy-renders the drawer on first open.
     if (!drawer) return;
      We hook the checkbox that opens it. */
    if (drawer.querySelector('#gr-mob-extra-links')) return;
     var checkbox = document.getElementById('main-menu-input');
     if (!checkbox) return;


     /* Hide ALL default Minerva menu items */
     function patchDrawer() {
    drawer.querySelectorAll('ul, .menu, li').forEach(function(el) {
      var drawer = document.getElementById('mw-mf-main-menu');
      el.style.setProperty('display', 'none', 'important');
      if (!drawer) return;
    });
      if (drawer.querySelector('#gr-mob-extra-links')) return;
 
      /* Hide every default child of the drawer */
      Array.from(drawer.children).forEach(function(child) {
        child.style.setProperty('display', 'none', 'important');
      });
 
      /* Also hide the About/Disclaimers portlet that Minerva appends */
      document.querySelectorAll(
        '.navigation-drawer .footer-info, ' +
        '.navigation-drawer .mw-portlet, ' +
        '.navigation-drawer footer, ' +
        '#mw-mf-main-menu ~ .footer, ' +
        '.navigation-drawer__footer'
      ).forEach(function(el) {
        el.style.setProperty('display', 'none', 'important');
      });
 
      /* Build clean custom menu */
      var nav = document.createElement('div');
      nav.id = 'gr-mob-extra-links';
      nav.style.cssText = 'width:100%;background:#fff;';


    /* Also hide the footer links (About/Disclaimers) */
      var ls = 'display:flex;align-items:center;gap:14px;padding:15px 20px;' +
    var footer = drawer.querySelector('.footer, .navigation-drawer__footer, .mw-portlet-footer');
              'font-size:16px;color:#2c1810;text-decoration:none;' +
    if (footer) footer.style.setProperty('display', 'none', 'important');
              'font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;';


    /* Build our custom menu */
      function item(href, emoji, label) {
    var nav = document.createElement('div');
        var a = document.createElement('a');
    nav.id = 'gr-mob-extra-links';
        a.href = href; a.style.cssText = ls;
    nav.style.cssText = 'width:100%;';
        a.innerHTML = '<span style="font-size:20px;width:28px;text-align:center;flex-shrink:0">'
          + emoji + '</span><span>' + label + '</span>';
        a.onclick = function() {
          var cb = document.getElementById('main-menu-input');
          if (cb) cb.checked = false;
        };
        return a;
      }


    var linkStyle = 'display:flex;align-items:center;gap:14px;padding:14px 20px;font-size:16px;color:#2c1810;text-decoration:none;font-family:system-ui,sans-serif;border-bottom:1px solid #f5f0ed;background:#fff;';
      nav.appendChild( item('/', '🏠', 'Home') );
      nav.appendChild( item('/Help:Contents', '❓', 'Help') );
      nav.appendChild( item('/My_wiki:About', 'ℹ️', 'About') );


    function menuItem(href, label, emoji) {
       var userName = window.mw ? mw.config.get('wgUserName') : null;
       var a = document.createElement('a');
       if (userName) {
       a.href = href;
        var la = document.querySelector('a[href*="action=logout"]');
      a.style.cssText = linkStyle;
        nav.appendChild( item(la ? la.href : '/index.php?title=Special:UserLogout', '↩', 'Log out') );
      a.innerHTML = '<span style="font-size:18px;width:24px;text-align:center;flex-shrink:0;">' + emoji + '</span><span>' + label + '</span>';
       } else {
       a.addEventListener('click', function() {
        nav.appendChild( item('/index.php?title=Special:UserLogin', '→', 'Log in') );
        var cb = document.getElementById('main-menu-input');
       }
        if (cb) cb.checked = false;
      });
       return a;
    }


    /* Home */
      drawer.appendChild(nav);
    nav.appendChild(menuItem('/', 'Home', '🏠'));
    /* Help */
    nav.appendChild(menuItem('/Help:Contents', 'Help', '❓'));
    /* About */
    nav.appendChild(menuItem('/My_wiki:About', 'About', 'ℹ️'));


    /* Logout / Login */
      /* Hide About/Disclaimers that appear BELOW the drawer nav */
    var userName = window.mw ? mw.config.get('wgUserName') : null;
      setTimeout(function() {
    if (userName) {
        document.querySelectorAll(
      var logoutAnchor = document.querySelector('a[href*="action=logout"]');
          '.navigation-drawer .mw-portlet-footer, ' +
      var logoutHref = logoutAnchor ? logoutAnchor.href : '/index.php?title=Special:UserLogout';
          '.navigation-drawer .footer, ' +
      nav.appendChild(menuItem(logoutHref, 'Log out', '↩️'));
          'nav.navigation-drawer ~ footer, ' +
    } else {
          '.navigation-drawer p, ' +
      nav.appendChild(menuItem('/index.php?title=Special:UserLogin', 'Log in', '→'));
          '.navigation-drawer .menu__item--about, ' +
          '.navigation-drawer .menu__item--disclaimers'
        ).forEach(function(el) {
          el.style.setProperty('display', 'none', 'important');
        });
      }, 100);
     }
     }


     drawer.appendChild(nav);
     /* Patch immediately if drawer already exists */
    patchDrawer();
 
    /* Also patch when drawer opens */
    checkbox.addEventListener('change', function() {
      if (checkbox.checked) setTimeout(patchDrawer, 50);
    });
   }
   }