Mudanças entre as edições de "Widget:Conquistas"

De Wiki Gla
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;
                 var tag = (card.getAttribute("data-tab") || "").toLowerCase();
                 mountCardToPanel(card);
                var list = validTabs[tag] || validTabs["geral"];
                if (list) list.appendChild(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++) {
                     if (list.children[i].classList && list.children[i].classList.contains("gla-item")) {
                     var el = list.children[i];
                    if (el.classList && el.classList.contains("gla-item") && getCardTab(el) === tabName) {
                         loadedTabs[tabName] = true;
                         loadedTabs[tabName] = true;
                         return;
                         break;
                     }
                     }
                 }
                 }
Linha 1 330: Linha 1 356:
             }
             }


             function fetchTabHtml(tabName) {
             function fetchParse(wikitext) {
                var wikitext = "{{#invoke:Conquistas|renderTab|tab=" + tabName + "}}";
                 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);


                 if (window.glaConquistasProcessRewards) {
                 loadedTabs[tabName] = true;
                    window.glaConquistasProcessRewards(list);
                }
 
                 buildTabCaches();
                 buildTabCaches();
                runRewardsDeferred(list);
             }
             }


             function ensureTabLoaded(tabName) {
             function mountBundleFromHtml(html) {
                 if (loadedTabs[tabName]) return Promise.resolve();
                 if (!html) return;
                if (loadingTabs[tabName]) return loadingTabs[tabName];
                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)
                 loadingTabs[tabName] = fetchTabHtml(tabName)
                     .then(function (html) {
                     .then(function (html) {
                         mountCardsFromHtml(html, tabName);
                         mountCardsFromHtml(html, tabName);
                        loadedTabs[tabName] = true;
                         if (list) list.classList.remove("gla-tab-loading");
                         if (list) list.classList.remove("gla-tab-loading");
                        delete loadingTabs[tabName];
                     })
                     })
                     .catch(function () {
                     .catch(function () {
Linha 1 415: Linha 1 497:
                             list.classList.add("gla-tab-error");
                             list.classList.add("gla-tab-error");
                         }
                         }
                        delete loadingTabs[tabName];
                     });
                     });
            }
            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 processAll() {
             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", processAll);
                 document.addEventListener("DOMContentLoaded", function () {
                    scheduleProcessRewards(document);
                });
             } else {
             } else {
                 processAll();
                 scheduleProcessRewards(document);
             }
             }



Edição atual tal como às 04h21min de 21 de maio de 2026