Mudanças entre as edições de "Widget:Conquistas"
Ir para navegação
Ir para pesquisar
m |
m |
||
| Linha 396: | Linha 396: | ||
box-shadow: var(--gla-shadow); | box-shadow: var(--gla-shadow); | ||
transition: border-color 0.15s, box-shadow 0.15s; | transition: border-color 0.15s, box-shadow 0.15s; | ||
content-visibility: auto; | |||
contain-intrinsic-size: auto 88px; | |||
} | } | ||
| Linha 1 244: | Linha 1 246: | ||
}); | }); | ||
// Move cards do invoke source para os painéis corretos | function normalizeTabId(tab) { | ||
return (tab || "").toLowerCase(); | |||
} | |||
function getCardTab(card) { | |||
var tag = normalizeTabId(card.getAttribute("data-tab")); | |||
return validTabs[tag] ? tag : "geral"; | |||
} | |||
function mountCardToPanel(card) { | |||
if (!card) return; | |||
var tag = getCardTab(card); | |||
var list = validTabs[tag]; | |||
if (list) list.appendChild(card); | |||
} | |||
function redistributeCardsToPanels() { | |||
root.querySelectorAll(".gla-item[data-tab]").forEach(function (card) { | |||
var list = validTabs[getCardTab(card)]; | |||
if (list && card.parentNode !== list) list.appendChild(card); | |||
}); | |||
} | |||
// Move cards do invoke source para os painéis corretos (sempre por data-tab) | |||
document.querySelectorAll(".gla-item[data-tab]").forEach(function (card) { | document.querySelectorAll(".gla-item[data-tab]").forEach(function (card) { | ||
if (root.contains(card)) return; | if (root.contains(card)) return; | ||
mountCardToPanel(card); | |||
}); | }); | ||
| Linha 1 261: | Linha 1 284: | ||
function buildTabCaches() { | function buildTabCaches() { | ||
redistributeCardsToPanels(); | |||
cardsByTab = {}; | cardsByTab = {}; | ||
hiddenCountByTab = {}; | hiddenCountByTab = {}; | ||
| Linha 1 275: | Linha 1 299: | ||
var el = list.children[i]; | var el = list.children[i]; | ||
if (!(el.classList && el.classList.contains("gla-item"))) continue; | if (!(el.classList && el.classList.contains("gla-item"))) continue; | ||
if (getCardTab(el) !== tabName) continue; | |||
cards.push(el); | cards.push(el); | ||
if (el.getAttribute("data-hidden") === "true") hiddenCount++; | if (el.getAttribute("data-hidden") === "true") hiddenCount++; | ||
| Linha 1 312: | Linha 1 337: | ||
if (!list) return; | if (!list) return; | ||
for (var i = 0; i < list.children.length; i++) { | for (var i = 0; i < list.children.length; i++) { | ||
var el = list.children[i]; | |||
if (el.classList && el.classList.contains("gla-item") && getCardTab(el) === tabName) { | |||
loadedTabs[tabName] = true; | loadedTabs[tabName] = true; | ||
break; | |||
} | } | ||
} | } | ||
| Linha 1 330: | Linha 1 356: | ||
} | } | ||
function | function fetchParse(wikitext) { | ||
if (window.mw && mw.Api) { | if (window.mw && mw.Api) { | ||
return new mw.Api().post({ | return new mw.Api().post({ | ||
| Linha 1 359: | Linha 1 384: | ||
return data.parse.text["*"]; | return data.parse.text["*"]; | ||
}); | }); | ||
} | |||
function fetchTabHtml(tabName) { | |||
return fetchParse("{{#invoke:Conquistas|renderTab|tab=" + tabName + "}}"); | |||
} | |||
var prefetchRestPromise = null; | |||
var prefetchRestStarted = false; | |||
function runRewardsDeferred(rootEl) { | |||
if (!window.glaConquistasProcessRewards) return; | |||
var run = function () { window.glaConquistasProcessRewards(rootEl); }; | |||
if (window.requestIdleCallback) { | |||
requestIdleCallback(run, { timeout: 1000 }); | |||
} else { | |||
setTimeout(run, 0); | |||
} | |||
} | } | ||
| Linha 1 380: | Linha 1 422: | ||
var moved = []; | var moved = []; | ||
tmp.querySelectorAll(".gla-item").forEach(function (card) { | tmp.querySelectorAll(".gla-item").forEach(function (card) { | ||
if (getCardTab(card) !== tabName) { | |||
mountCardToPanel(card); | |||
return; | |||
} | |||
list.appendChild(card); | list.appendChild(card); | ||
moved.push(card); | moved.push(card); | ||
| Linha 1 386: | Linha 1 432: | ||
applyRevealedToCards(moved); | applyRevealedToCards(moved); | ||
loadedTabs[tabName] = true; | |||
buildTabCaches(); | buildTabCaches(); | ||
runRewardsDeferred(list); | |||
} | } | ||
function | function mountBundleFromHtml(html) { | ||
if ( | if (!html) return; | ||
var tmp = document.createElement("div"); | |||
tmp.innerHTML = html; | |||
tmp.querySelectorAll(".gla-conquistas-source[data-gla-tab]").forEach(function (src) { | |||
var tabName = src.getAttribute("data-gla-tab"); | |||
if (!tabName || !validTabs[tabName]) return; | |||
var list = validTabs[tabName]; | |||
var moved = []; | |||
src.querySelectorAll(".gla-item").forEach(function (card) { | |||
if (getCardTab(card) !== tabName) { | |||
mountCardToPanel(card); | |||
return; | |||
} | |||
list.appendChild(card); | |||
moved.push(card); | |||
}); | |||
applyRevealedToCards(moved); | |||
loadedTabs[tabName] = true; | |||
}); | |||
buildTabCaches(); | |||
runRewardsDeferred(root); | |||
} | |||
function startPrefetchRest() { | |||
if (prefetchRestStarted) return prefetchRestPromise; | |||
prefetchRestStarted = true; | |||
prefetchRestPromise = fetchParse("{{#invoke:Conquistas|renderRest|skip=geral}}") | |||
.then(function (html) { | |||
mountBundleFromHtml(html); | |||
}) | |||
.catch(function () { /* falha silenciosa — aba carrega sob demanda */ }); | |||
return prefetchRestPromise; | |||
} | |||
function schedulePrefetchRest() { | |||
var run = function () { startPrefetchRest(); }; | |||
if (window.requestIdleCallback) { | |||
requestIdleCallback(run, { timeout: 2000 }); | |||
} else { | |||
setTimeout(run, 350); | |||
} | |||
} | |||
function loadTabNow(tabName) { | |||
var list = validTabs[tabName]; | var list = validTabs[tabName]; | ||
if (list) { | if (list) { | ||
| Linha 1 402: | Linha 1 487: | ||
list.classList.add("gla-tab-loading"); | list.classList.add("gla-tab-loading"); | ||
} | } | ||
return fetchTabHtml(tabName) | |||
.then(function (html) { | .then(function (html) { | ||
mountCardsFromHtml(html, tabName); | mountCardsFromHtml(html, tabName); | ||
if (list) list.classList.remove("gla-tab-loading"); | if (list) list.classList.remove("gla-tab-loading"); | ||
}) | }) | ||
.catch(function () { | .catch(function () { | ||
| Linha 1 415: | Linha 1 497: | ||
list.classList.add("gla-tab-error"); | list.classList.add("gla-tab-error"); | ||
} | } | ||
}); | }); | ||
} | |||
function ensureTabLoaded(tabName) { | |||
if (loadedTabs[tabName]) return Promise.resolve(); | |||
if (loadingTabs[tabName]) return loadingTabs[tabName]; | |||
if (prefetchRestPromise) { | |||
loadingTabs[tabName] = prefetchRestPromise.then(function () { | |||
if (loadedTabs[tabName]) return; | |||
return loadTabNow(tabName); | |||
}); | |||
return loadingTabs[tabName]; | |||
} | |||
loadingTabs[tabName] = loadTabNow(tabName).then(function () { | |||
delete loadingTabs[tabName]; | |||
}); | |||
return loadingTabs[tabName]; | return loadingTabs[tabName]; | ||
} | } | ||
| Linha 1 502: | Linha 1 599: | ||
cards.forEach(function (card) { | cards.forEach(function (card) { | ||
if (getCardTab(card) !== currentTab) { | |||
card.style.display = "none"; | |||
return; | |||
} | |||
var matchSearch = true; | var matchSearch = true; | ||
if (tokens.length > 0) { | if (tokens.length > 0) { | ||
| Linha 1 632: | Linha 1 734: | ||
} | } | ||
}); | }); | ||
function resetVisibilityAllTabs() { | |||
root.querySelectorAll(".gla-item[data-tab]").forEach(function (card) { | |||
card.style.display = ""; | |||
}); | |||
} | |||
function finishAbrirAba(nome) { | function finishAbrirAba(nome) { | ||
syncFilterBarForTab(nome); | syncFilterBarForTab(nome); | ||
buildTabCaches(); | |||
resetVisibilityAllTabs(); | |||
root.querySelectorAll(".gla-conquistas-filter").forEach(function (p) { | root.querySelectorAll(".gla-conquistas-filter").forEach(function (p) { | ||
| Linha 1 666: | Linha 1 776: | ||
tab.addEventListener("click", function () { | tab.addEventListener("click", function () { | ||
abrirAba(tab.getAttribute("data-tab")); | abrirAba(tab.getAttribute("data-tab")); | ||
}); | |||
tab.addEventListener("mouseenter", function () { | |||
var nome = tab.getAttribute("data-tab"); | |||
if (nome && !loadedTabs[nome]) ensureTabLoaded(nome); | |||
}); | }); | ||
}); | }); | ||
schedulePrefetchRest(); | |||
abrirAba("geral"); | abrirAba("geral"); | ||
}); | }); | ||
| Linha 1 827: | Linha 1 942: | ||
window.glaConquistasProcessRewards = processRewardsIn; | window.glaConquistasProcessRewards = processRewardsIn; | ||
function | function scheduleProcessRewards(rootEl) { | ||
processRewardsIn(document); | var run = function () { processRewardsIn(rootEl || document); }; | ||
if (window.requestIdleCallback) { | |||
requestIdleCallback(run, { timeout: 1200 }); | |||
} else { | |||
setTimeout(run, 0); | |||
} | |||
} | } | ||
if (document.readyState === "loading") { | if (document.readyState === "loading") { | ||
document.addEventListener("DOMContentLoaded", | document.addEventListener("DOMContentLoaded", function () { | ||
scheduleProcessRewards(document); | |||
}); | |||
} else { | } else { | ||
scheduleProcessRewards(document); | |||
} | } | ||