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: | /* ── 5. Hamburger menu: replace default items with custom ones ── */ | ||
function setupHamburgerMenu() { | function setupHamburgerMenu() { | ||
var | /* Minerva lazy-renders the drawer on first open. | ||
if (! | We hook the checkbox that opens it. */ | ||
var checkbox = document.getElementById('main-menu-input'); | |||
if (!checkbox) return; | |||
/* Hide | function patchDrawer() { | ||
var drawer = document.getElementById('mw-mf-main-menu'); | |||
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;'; | |||
var ls = 'display:flex;align-items:center;gap:14px;padding:15px 20px;' + | |||
'font-size:16px;color:#2c1810;text-decoration:none;' + | |||
'font-family:system-ui,sans-serif;border-bottom:1px solid #f0ebe6;'; | |||
function item(href, emoji, label) { | |||
var a = document.createElement('a'); | |||
a.href = href; a.style.cssText = ls; | |||
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; | |||
} | |||
nav.appendChild( item('/', '🏠', 'Home') ); | |||
nav.appendChild( item('/Help:Contents', '❓', 'Help') ); | |||
nav.appendChild( item('/My_wiki:About', 'ℹ️', 'About') ); | |||
var userName = window.mw ? mw.config.get('wgUserName') : null; | |||
var | if (userName) { | ||
a | var la = document.querySelector('a[href*="action=logout"]'); | ||
nav.appendChild( item(la ? la.href : '/index.php?title=Special:UserLogout', '↩', 'Log out') ); | |||
} else { | |||
nav.appendChild( item('/index.php?title=Special:UserLogin', '→', 'Log in') ); | |||
} | |||
drawer.appendChild(nav); | |||
/* Hide About/Disclaimers that appear BELOW the drawer nav */ | |||
setTimeout(function() { | |||
document.querySelectorAll( | |||
'.navigation-drawer .mw-portlet-footer, ' + | |||
'.navigation-drawer .footer, ' + | |||
'nav.navigation-drawer ~ footer, ' + | |||
'.navigation-drawer p, ' + | |||
'.navigation-drawer .menu__item--about, ' + | |||
'.navigation-drawer .menu__item--disclaimers' | |||
).forEach(function(el) { | |||
el.style.setProperty('display', 'none', 'important'); | |||
}); | |||
}, 100); | |||
} | } | ||
drawer. | /* Patch immediately if drawer already exists */ | ||
patchDrawer(); | |||
/* Also patch when drawer opens */ | |||
checkbox.addEventListener('change', function() { | |||
if (checkbox.checked) setTimeout(patchDrawer, 50); | |||
}); | |||
} | } | ||