MediaWiki:Common.js: Difference between revisions

From Disaster Risk Gateway
No edit summary
No edit summary
Line 1: Line 1:
mw.loader.using(['mediawiki.util','mediawiki.user'], function () {
mw.loader.using(['mediawiki.util','mediawiki.user'], function () {
   function insertNavbar() {
   function insertNavbar() {
    // 1. If we've already injected, bail
     if ( document.getElementById('drg-navbar') ) return;
     if ( document.getElementById('drg-navbar') ) return;


     // 1. Grab your real logo before removal
     // 2. Grab your real logo SRC before we remove headers
     const logoSrc =
     const logoSrc = document.querySelector('#p-logo img')?.src ||
      document.querySelector('#p-logo img')?.src ||
                    '/images/3/3f/Myriad_logo_icon_transparent.png';
      '/images/3/3f/Myriad_logo_icon_transparent.png';


     // 2. Remove all Vector/mobile headers outright
     // 3. Remove every Vector / MobileFrontend header element
    //    - body > header (Vector 2022)
    //    - header.vector-header, header#mw-header, nav.vector-header
    //    - MobileFrontend wrappers (#mw-mf-page-header, id^="mw-mf-")
    document.querySelectorAll('body > header').forEach(el => el.remove());
     [
     [
       'header#mw-head',
       'header.vector-header',
       '#mw-head-base',
       'header#mw-header',
       '#mw-navigation',
       'nav.vector-header',
       '#p-logo',
       '#mw-mf-page-header',
      '#mw-panel',
       '[id^="mw-mf-"]'
       '[id^="mw-mf-"]'
     ].forEach(sel => document.querySelectorAll(sel).forEach(el => el.remove()));
     ].forEach(sel =>
      document.querySelectorAll(sel).forEach(el => el.remove())
    );


     // 3. Build user area
     // 4. Build user area: dropdown if logged in, else Login button
     const userName = mw.config.get('wgUserName');
     const userName = mw.config.get('wgUserName');
     let userArea = '';
     let userArea;
     if ( userName ) {
     if ( userName ) {
       const personal = $('#p-personal ul').clone();
       const personalMenu = $('#p-personal ul').clone();
       personal.addClass('drg-user-dropdown');
       personalMenu.addClass('drg-user-dropdown');
       personal.find('li').css('border','none');
       personalMenu.find('li').css('border','none');
       userArea = `<div class="drg-user">
       userArea = `<div class="drg-user">
         <span>Welcome, ${userName}</span>
         <span>Welcome, ${userName}</span>
         ${personal.prop('outerHTML')}
         ${personalMenu.prop('outerHTML')}
       </div>`;
       </div>`;
     } else {
     } else {
       userArea = `<a class="drg-button" href="${mw.util.getUrl('Special:UserLogin')}">Login</a>`;
       userArea = `<a class="drg-button" href="${
        mw.util.getUrl('Special:UserLogin')
      }">Login</a>`;
     }
     }


     // 4. Build search form
     // 5. Build search form
     const searchForm = `
     const searchForm = `
       <form class="drg-search" action="${mw.util.getUrl('Special:Search')}" method="get">
       <form class="drg-search" action="${
         <input type="search" name="search" placeholder="Search Disaster Risk Gateway">
        mw.util.getUrl('Special:Search')
      }" method="get">
         <input type="search" name="search"
              placeholder="Search Disaster Risk Gateway">
         <input type="submit" value="Search">
         <input type="submit" value="Search">
       </form>`;
       </form>`;


     // 5. Inject
     // 6. Inject navbar into body
     $('body').prepend(`
     $('body').prepend(`
       <div id="drg-navbar">
       <div id="drg-navbar">
         <div class="drg-navbar-container">
         <div class="drg-navbar-container">
           <a href="${mw.util.getUrl('Main_Page')}" class="drg-navbar-logo">
           <a href="${mw.util.getUrl('Main_Page')}"
            class="drg-navbar-logo">
             <img src="${logoSrc}" alt="MYRIAD Logo">
             <img src="${logoSrc}" alt="MYRIAD Logo">
           </a>
           </a>
Line 64: Line 75:
   function insertFooter() {
   function insertFooter() {
     const icons = document.getElementById('footer-icons');
     const icons = document.getElementById('footer-icons');
     if ( !icons ) return setTimeout(insertFooter,100);
     if ( !icons ) return setTimeout(insertFooter, 100);
     $(icons).before(`
     $(icons).before(`
       <div id="drg-footer">
       <div id="drg-footer">
         <!-- your existing footer markup here -->
         <!-- (your existing footer markup here) -->
       </div>
       </div>
     `);
     `);

Revision as of 14:13, 24 June 2025

mw.loader.using(['mediawiki.util','mediawiki.user'], function () {
  function insertNavbar() {
    // 1. If we've already injected, bail
    if ( document.getElementById('drg-navbar') ) return;

    // 2. Grab your real logo SRC before we remove headers
    const logoSrc = document.querySelector('#p-logo img')?.src ||
                    '/images/3/3f/Myriad_logo_icon_transparent.png';

    // 3. Remove every Vector / MobileFrontend header element
    //    - body > header (Vector 2022)
    //    - header.vector-header, header#mw-header, nav.vector-header
    //    - MobileFrontend wrappers (#mw-mf-page-header, id^="mw-mf-")
    document.querySelectorAll('body > header').forEach(el => el.remove());
    [
      'header.vector-header',
      'header#mw-header',
      'nav.vector-header',
      '#mw-mf-page-header',
      '[id^="mw-mf-"]'
    ].forEach(sel =>
      document.querySelectorAll(sel).forEach(el => el.remove())
    );

    // 4. Build user area: dropdown if logged in, else Login button
    const userName = mw.config.get('wgUserName');
    let userArea;
    if ( userName ) {
      const personalMenu = $('#p-personal ul').clone();
      personalMenu.addClass('drg-user-dropdown');
      personalMenu.find('li').css('border','none');
      userArea = `<div class="drg-user">
        <span>Welcome, ${userName}</span>
        ${personalMenu.prop('outerHTML')}
      </div>`;
    } else {
      userArea = `<a class="drg-button" href="${
        mw.util.getUrl('Special:UserLogin')
      }">Login</a>`;
    }

    // 5. Build search form
    const searchForm = `
      <form class="drg-search" action="${
        mw.util.getUrl('Special:Search')
      }" method="get">
        <input type="search" name="search"
               placeholder="Search Disaster Risk Gateway">
        <input type="submit" value="Search">
      </form>`;

    // 6. Inject navbar into body
    $('body').prepend(`
      <div id="drg-navbar">
        <div class="drg-navbar-container">
          <a href="${mw.util.getUrl('Main_Page')}"
             class="drg-navbar-logo">
            <img src="${logoSrc}" alt="MYRIAD Logo">
          </a>
          <nav class="drg-navbar-links">
            <a href="${mw.util.getUrl('Catalogue')}">Catalogue</a>
            <a href="${mw.util.getUrl('Definitions')}">Definitions</a>
            <a href="${mw.util.getUrl('Resources')}">Resources</a>
            <a href="${mw.util.getUrl('Contribute')}">Contribute</a>
          </nav>
          ${searchForm}
          <div class="drg-navbar-actions">
            ${userArea}
          </div>
        </div>
      </div>
    `);
  }

  function insertFooter() {
    const icons = document.getElementById('footer-icons');
    if ( !icons ) return setTimeout(insertFooter, 100);
    $(icons).before(`
      <div id="drg-footer">
        <!-- (your existing footer markup here) -->
      </div>
    `);
  }

  // Run on DOM ready
  $(insertNavbar);
  $(insertFooter);
});