MediaWiki:Common.js: Difference between revisions

From TechWiki
Jump to navigation Jump to search
Add shared staging navigation and a native full-text search form to TechWiki reading pages
 
Add A–Z articles to the staging wiki navigation sidebar
Line 43: Line 43:
     index.href = '/a/Special:AllPages'; index.textContent = 'A–Z articles';
     index.href = '/a/Special:AllPages'; index.textContent = 'A–Z articles';
     form.append(query, submit, index);
     form.append(query, submit, index);
    const sidebar = document.querySelector('#p-navigation ul');
    if (sidebar && !document.getElementById('n-seloc-article-index')) {
      const item = document.createElement('li');
      item.id = 'n-seloc-article-index';
      item.append(index.cloneNode(true));
      const homeItem = sidebar.querySelector('#n-mainpage');
      if (homeItem) homeItem.after(item);
      else sidebar.prepend(item);
    }
     shell.append(nav, form);
     shell.append(nav, form);
     content.prepend(shell);
     content.prepend(shell);

Revision as of 21:24, 5 November 2026

/* Staging TechWiki navigation and native search. */
(function () {
  'use strict';
  if (location.hostname !== 'wikiug.seloc.org' || mw.config.get('wgAction') !== 'view') return;
  $(function () {
    const content = document.querySelector('#content');
    if (!content || document.querySelector('.seloc-wiki-shell')) return;
    const home = '/a/SELOC_TechWiki';
    const shell = document.createElement('div');
    shell.className = 'seloc-wiki-shell';
    const nav = document.createElement('nav');
    nav.setAttribute('aria-label', 'SELOC staging sites');
    for (const [name, href] of [
      ['Club site', 'https://f.seloc.club/w691/'],
      ['Forums', 'https://forumsug.seloc.org/'],
      ['TechWiki', home],
      ['Gallery', 'https://forumsug.seloc.org/cp_gallery.php'],
      ['Classifieds', 'https://classifiedsug.seloc.org/']
    ]) {
      const link = document.createElement('a');
      link.href = href;
      link.textContent = name;
      if (name === 'TechWiki') link.setAttribute('aria-current', 'true');
      nav.append(link);
    }
    const form = document.createElement('form');
    form.action = mw.config.get('wgScript');
    form.method = 'get';
    form.setAttribute('role', 'search');
    form.setAttribute('aria-label', 'TechWiki articles');
    for (const [name, value] of [['title', 'Special:Search'], ['fulltext', '1']]) {
      const field = document.createElement('input');
      field.type = 'hidden'; field.name = name; field.value = value;
      form.append(field);
    }
    const query = document.createElement('input');
    query.type = 'search'; query.name = 'search'; query.required = true;
    query.placeholder = 'Search models, parts or jobs';
    query.setAttribute('aria-label', 'Search TechWiki articles');
    const submit = document.createElement('button');
    submit.type = 'submit'; submit.textContent = 'Search';
    const index = document.createElement('a');
    index.href = '/a/Special:AllPages'; index.textContent = 'A–Z articles';
    form.append(query, submit, index);
    const sidebar = document.querySelector('#p-navigation ul');
    if (sidebar && !document.getElementById('n-seloc-article-index')) {
      const item = document.createElement('li');
      item.id = 'n-seloc-article-index';
      item.append(index.cloneNode(true));
      const homeItem = sidebar.querySelector('#n-mainpage');
      if (homeItem) homeItem.after(item);
      else sidebar.prepend(item);
    }
    shell.append(nav, form);
    content.prepend(shell);
    content.classList.add('seloc-wiki-enhanced');
    if (mw.config.get('wgNamespaceNumber') === 0 && !mw.config.get('wgIsMainPage')) {
      content.classList.add('seloc-wiki-article');
    }
  });
}());