Ir para o conteúdo

MediaWiki:Common.js

De Wiki TokuDrive
Revisão de 00h18min de 29 de junho de 2026 por Tavoraadmin (discussão | contribs) (JS do design próprio da Wiki TokuDrive)

Nota: Após publicar, você pode ter que limpar o "cache" do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
  • Opera: Pressione Ctrl-F5.
(function () {
  function url(title) {
    if (window.mw && mw.util) {
      return mw.util.getUrl(title);
    }
    return '/wiki/' + encodeURIComponent(title.replaceAll(' ', '_'));
  }

  function createHeader() {
    if (document.getElementById('td-custom-header')) return;

    var header = document.createElement('header');
    header.id = 'td-custom-header';

    var inner = document.createElement('div');
    inner.className = 'td-header-inner';

    var brand = document.createElement('a');
    brand.className = 'td-brand';
    brand.href = url('Página principal');
    brand.title = 'Wiki TokuDrive';

    var nav = document.createElement('nav');
    nav.className = 'td-nav';

    [
      ['Início', 'Página principal'],
      ['Tokusatsu', 'Tokusatsu'],
      ['Kamen Rider', 'Kamen Rider'],
      ['Super Sentai', 'Super Sentai'],
      ['Ultraman', 'Ultraman'],
      ['Metal Heroes', 'Categoria:Metal Heroes'],
      ['Kaiju', 'Kaiju'],
      ['Godzilla', 'Godzilla'],
      ['Recentes', 'Especial:Mudanças recentes']
    ].forEach(function (item) {
      var a = document.createElement('a');
      a.href = url(item[1]);
      a.textContent = item[0];
      nav.appendChild(a);
    });

    var form = document.createElement('form');
    form.className = 'td-search';

    var input = document.createElement('input');
    input.type = 'search';
    input.placeholder = 'Pesquisar na Wiki TokuDrive';

    var button = document.createElement('button');
    button.type = 'submit';
    button.textContent = 'Buscar';

    form.appendChild(input);
    form.appendChild(button);

    form.addEventListener('submit', function (e) {
      e.preventDefault();
      var q = input.value.trim();
      window.location.href = url('Especial:Pesquisar') + (q ? '?search=' + encodeURIComponent(q) : '');
    });

    var user = document.createElement('a');
    user.className = 'td-user-link';
    user.href = url('Especial:Entrar');
    user.textContent = 'Entrar';

    if (window.mw && mw.config && mw.config.get('wgUserName')) {
      user.href = url('Especial:Minha página');
      user.textContent = mw.config.get('wgUserName');
    }

    inner.appendChild(brand);
    inner.appendChild(nav);
    inner.appendChild(form);
    inner.appendChild(user);

    header.appendChild(inner);
    document.body.insertBefore(header, document.body.firstChild);
  }

  function formatDate(iso) {
    try {
      return new Date(iso).toLocaleDateString('pt-BR', {
        day: '2-digit',
        month: 'short',
        year: 'numeric'
      });
    } catch (e) {
      return '';
    }
  }

  function latestPages() {
    var container = document.getElementById('td-latest-wikis');
    if (!container) return;

    var api = (mw.config.get('wgScriptPath') || '') + '/api.php';
    var endpoint = api
      + '?action=query'
      + '&format=json'
      + '&list=recentchanges'
      + '&rctype=new'
      + '&rcnamespace=0'
      + '&rcprop=title|timestamp'
      + '&rclimit=12';

    fetch(endpoint, { credentials: 'same-origin' })
      .then(function (r) { return r.json(); })
      .then(function (data) {
        var items = (((data || {}).query || {}).recentchanges || [])
          .filter(function (item) {
            return item.title && item.title !== 'Página principal';
          })
          .slice(0, 8);

        container.innerHTML = '';

        if (!items.length) {
          container.innerHTML = '<div class="td-loading">Nenhuma wiki nova encontrada ainda.</div>';
          return;
        }

        items.forEach(function (item) {
          var a = document.createElement('a');
          a.className = 'td-latest-card';
          a.href = url(item.title);

          a.innerHTML =
            '<div class="td-latest-label">Wiki criada/importada</div>' +
            '<div class="td-latest-title"></div>' +
            '<div class="td-latest-date">' + formatDate(item.timestamp) + '</div>';

          a.querySelector('.td-latest-title').textContent = item.title;
          container.appendChild(a);
        });
      })
      .catch(function () {
        container.innerHTML = '<div class="td-loading">Não foi possível carregar as últimas wikis agora.</div>';
      });
  }

  function homeSearch() {
    var mount = document.getElementById('td-home-search');
    if (!mount) return;

    var form = document.createElement('form');
    form.className = 'td-home-search';

    var input = document.createElement('input');
    input.type = 'search';
    input.placeholder = 'Pesquisar séries, filmes, personagens, kaijus e franquias';

    var button = document.createElement('button');
    button.type = 'submit';
    button.textContent = 'Pesquisar';

    form.appendChild(input);
    form.appendChild(button);

    form.addEventListener('submit', function (e) {
      e.preventDefault();
      var q = input.value.trim();
      window.location.href = url('Especial:Pesquisar') + (q ? '?search=' + encodeURIComponent(q) : '');
    });

    mount.innerHTML = '';
    mount.appendChild(form);
  }

  function init() {
    if (window.mw && mw.loader) {
      mw.loader.using('mediawiki.util').then(function () {
        createHeader();
        homeSearch();
        latestPages();
      });
    } else {
      createHeader();
    }
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();