MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary Tag: Reverted |
||
| Line 950: | Line 950: | ||
highlightOnArrival(); | highlightOnArrival(); | ||
wireUllekhaLinks(); | wireUllekhaLinks(); | ||
} | |||
}() ); | |||
/* ── Mobile TOC overlay — add to bottom of Common.js ─────────── */ | |||
( function () { | |||
if ( window.innerWidth > 768 ) return; | |||
function initMobileToc() { | |||
if ( document.getElementById( 'gr-mob-toc-btn' ) ) return; | |||
var toc = document.querySelector( '.vector-toc' ); | |||
if ( !toc ) return; | |||
/* Backdrop */ | |||
var backdrop = document.createElement( 'div' ); | |||
backdrop.className = 'gr-mobile-toc-backdrop'; | |||
backdrop.id = 'gr-mob-toc-backdrop'; | |||
document.body.appendChild( backdrop ); | |||
/* Panel */ | |||
var panel = document.createElement( 'div' ); | |||
panel.className = 'gr-mobile-toc-panel'; | |||
panel.id = 'gr-mob-toc-panel'; | |||
/* Panel header */ | |||
var header = document.createElement( 'div' ); | |||
header.className = 'gr-mobile-toc-header'; | |||
var titleEl = document.createElement( 'div' ); | |||
titleEl.className = 'gr-mobile-toc-title'; | |||
titleEl.textContent = 'विषयसूची'; | |||
var closeBtn = document.createElement( 'button' ); | |||
closeBtn.className = 'gr-mobile-toc-close'; | |||
closeBtn.innerHTML = '✕'; | |||
header.appendChild( titleEl ); | |||
header.appendChild( closeBtn ); | |||
panel.appendChild( header ); | |||
/* Clone TOC contents */ | |||
var tocContents = toc.querySelector( '.vector-toc-contents' ); | |||
if ( tocContents ) { | |||
var clone = tocContents.cloneNode( true ); | |||
panel.appendChild( clone ); | |||
} | |||
document.body.appendChild( panel ); | |||
/* Toggle button */ | |||
var btn = document.createElement( 'button' ); | |||
btn.className = 'gr-mobile-toc-btn'; | |||
btn.id = 'gr-mob-toc-btn'; | |||
btn.innerHTML = '☰ Contents'; | |||
document.body.appendChild( btn ); | |||
function openToc() { | |||
panel.classList.add( 'open' ); | |||
backdrop.classList.add( 'open' ); | |||
} | |||
function closeToc() { | |||
panel.classList.remove( 'open' ); | |||
backdrop.classList.remove( 'open' ); | |||
} | |||
btn.addEventListener( 'click', openToc ); | |||
closeBtn.addEventListener( 'click', closeToc ); | |||
backdrop.addEventListener( 'click', closeToc ); | |||
/* Close on link click */ | |||
panel.querySelectorAll( 'a' ).forEach( function ( a ) { | |||
a.addEventListener( 'click', closeToc ); | |||
} ); | |||
} | |||
if ( document.readyState === 'loading' ) { | |||
document.addEventListener( 'DOMContentLoaded', function () { | |||
setTimeout( initMobileToc, 400 ); | |||
} ); | |||
} else { | |||
setTimeout( initMobileToc, 400 ); | |||
} | } | ||
}() ); | }() ); | ||