MediaWiki:Common.js: mudanças entre as edições
Aparência
Botão de tema claro/escuro |
JS para tema e últimas wikis criadas/importadas |
||
| Linha 3: | Linha 3: | ||
document.documentElement.setAttribute('data-td-theme', theme); | document.documentElement.setAttribute('data-td-theme', theme); | ||
localStorage.setItem('tdTheme', theme); | localStorage.setItem('tdTheme', theme); | ||
var btn = document.getElementById('td-theme-toggle'); | var btn = document.getElementById('td-theme-toggle'); | ||
if (btn) { | if (btn) { | ||
| Linha 9: | Linha 10: | ||
} | } | ||
function | function getTheme() { | ||
var saved = localStorage.getItem('tdTheme'); | var saved = localStorage.getItem('tdTheme'); | ||
if (saved === 'dark' || saved === 'light') return saved; | if (saved === 'dark' || saved === 'light') { | ||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) return 'dark'; | return saved; | ||
} | |||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { | |||
return 'dark'; | |||
} | |||
return 'light'; | return 'light'; | ||
} | } | ||
function | function mountThemeButton() { | ||
if (document.getElementById('td-theme-toggle')) return; | if (document.getElementById('td-theme-toggle')) { | ||
return; | |||
} | |||
var btn = document.createElement('button'); | var btn = document.createElement('button'); | ||
btn.id = 'td-theme-toggle'; | btn.id = 'td-theme-toggle'; | ||
| Linha 25: | Linha 35: | ||
applyTheme(active === 'dark' ? 'light' : 'dark'); | applyTheme(active === 'dark' ? 'light' : 'dark'); | ||
}); | }); | ||
document.body.appendChild(btn); | document.body.appendChild(btn); | ||
applyTheme( | 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); | |||
} | } | ||
applyTheme( | 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') { | if (document.readyState === 'loading') { | ||
document.addEventListener('DOMContentLoaded', | document.addEventListener('DOMContentLoaded', init); | ||
} else { | } else { | ||
init(); | |||
} | } | ||
})(); | })(); | ||
Edição das 14h29min de 28 de junho de 2026
(function () {
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();
}
})();