Ir para o conteúdo

MediaWiki:Common.js: mudanças entre as edições

De Wiki TokuDrive
JS para tema e últimas wikis criadas/importadas
Limpando JS customizado
 
(17 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
(function () {
// Sem JavaScript visual customizado.
  function applyTheme(theme) {
    document.documentElement.setAttribute('data-td-theme', theme);
    localStorage.setItem('tdTheme', theme);
 
    var btn = document.getElementById('td-theme-toggle');
    if (btn) {
      btn.textContent = theme === 'dark' ? '☀️ Claro' : '🌙 Escuro';
    }
  }
 
  function getTheme() {
    var saved = localStorage.getItem('tdTheme');
    if (saved === 'dark' || saved === 'light') {
      return saved;
    }
 
    if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
      return 'dark';
    }
 
    return 'light';
  }
 
  function mountThemeButton() {
    if (document.getElementById('td-theme-toggle')) {
      return;
    }
 
    var btn = document.createElement('button');
    btn.id = 'td-theme-toggle';
    btn.type = 'button';
    btn.addEventListener('click', function () {
      var active = document.documentElement.getAttribute('data-td-theme') || 'light';
      applyTheme(active === 'dark' ? 'light' : 'dark');
    });
 
    document.body.appendChild(btn);
    applyTheme(getTheme());
  }
 
  function mountSearch() {
    var mount = document.getElementById('td-home-search');
    if (!mount) {
      return;
    }
 
    var form = document.createElement('form');
    form.className = 'td-search-form';
 
    var input = document.createElement('input');
    input.className = 'td-search-input';
    input.type = 'search';
    input.placeholder = 'Pesquisar séries, filmes, personagens e franquias';
    input.autocomplete = 'off';
 
    var button = document.createElement('button');
    button.className = 'td-search-button';
    button.type = 'submit';
    button.textContent = 'Pesquisar';
 
    form.appendChild(input);
    form.appendChild(button);
 
    form.addEventListener('submit', function (event) {
      event.preventDefault();
      var q = input.value.trim();
 
      if (!q) {
        window.location.href = mw.util.getUrl('Especial:Pesquisar');
        return;
      }
 
      window.location.href = mw.util.getUrl('Especial:Pesquisar') + '?search=' + encodeURIComponent(q);
    });
 
    mount.innerHTML = '';
    mount.appendChild(form);
  }
 
  function formatDate(iso) {
    try {
      return new Date(iso).toLocaleDateString('pt-BR', {
        day: '2-digit',
        month: 'short',
        year: 'numeric'
      });
    } catch (e) {
      return '';
    }
  }
 
  function mountLatestWikis() {
    var container = document.getElementById('td-latest-wikis');
    if (!container) {
      return;
    }
 
    var api = (mw.config.get('wgScriptPath') || '') + '/api.php';
    var url = api
      + '?action=query'
      + '&format=json'
      + '&list=recentchanges'
      + '&rctype=new'
      + '&rcnamespace=0'
      + '&rcprop=title|timestamp'
      + '&rclimit=12';
 
    fetch(url, { credentials: 'same-origin' })
      .then(function (res) { return res.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) {
          var empty = document.createElement('div');
          empty.className = 'td-loading';
          empty.textContent = 'Nenhuma página nova encontrada ainda.';
          container.appendChild(empty);
          return;
        }
 
        items.forEach(function (item) {
          var a = document.createElement('a');
          a.className = 'td-latest-card';
          a.href = mw.util.getUrl(item.title);
 
          var label = document.createElement('div');
          label.className = 'td-latest-label';
          label.textContent = 'Wiki criada/importada';
 
          var title = document.createElement('div');
          title.className = 'td-latest-title';
          title.textContent = item.title;
 
          var date = document.createElement('div');
          date.className = 'td-latest-date';
          date.textContent = formatDate(item.timestamp);
 
          a.appendChild(label);
          a.appendChild(title);
          a.appendChild(date);
 
          container.appendChild(a);
        });
      })
      .catch(function () {
        container.innerHTML = '<div class="td-loading">Não foi possível carregar as últimas wikis agora.</div>';
      });
  }
 
  function init() {
    applyTheme(getTheme());
    mountThemeButton();
 
    mw.loader.using('mediawiki.util').then(function () {
      mountSearch();
      mountLatestWikis();
    });
  }
 
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();

Edição atual tal como às 01h11min de 29 de junho de 2026

// Sem JavaScript visual customizado.