|
|
| Linha 1: |
Linha 1: |
| (function () {
| | // Vector 2022 padrão. Sem JavaScript customizado. |
| 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();
| |
| }
| |
| })();
| |