Moduł:Advancement

Z Minecraft Wiki Polska
Przejdź do nawigacji Przejdź do wyszukiwania
[ utwórz | historia | odśwież ]Dokumentacja
W tym module nie ma dokumentacji. Jeśli wiesz jak używać tego modułu, proszę, podaj odpowiednie informacje.
local p = {}

-- Optymalizacja: mw.loadData ładuje bazę danych tylko raz na stronę
local advancementData = mw.loadData('Moduł:Advancement/Dane')

function p.render(frame)
    local args = frame.args[1] or ""
    if args == "" then return "" end

    local achievementsToShow = {}
    local seen = {}
    local expSprite = ""

    -- Funkcja pomocnicza do dodawania osiągnięć
    local function addAchievement(name)
        if advancementData[name] and not seen[name] then
            table.insert(achievementsToShow, name)
            seen[name] = true
        end
    end

    -- 1. ANALIZA WEJŚCIA (Obsługa nazw, Kategorii i ALL)
    for part in string.gmatch(args, "([^;]+)") do
        part = mw.text.trim(part)
        if part:sub(1, 9) == "Category:" then
            local targetCat = part:sub(10)
            for name, data in pairs(advancementData) do
                if data.category == targetCat then addAchievement(name) end
            end
        elseif part == "ALL" then
            for name, _ in pairs(advancementData) do addAchievement(name) end
        else
            addAchievement(part)
        end
    end

    -- 2. GRUPOWANIE W KATEGORIE
    local groups = {}
    local categoryOrder = {}
    for _, name in ipairs(achievementsToShow) do
        local cat = advancementData[name].category
        if not groups[cat] then
            groups[cat] = {}
            table.insert(categoryOrder, cat)
        end
        table.insert(groups[cat], name)
    end

    if #categoryOrder == 0 then return "" end

    -- 3. BUDOWA TABELI HTML
    local root = mw.html.create("table")
        :addClass("wikitable advancement-table")
        :css("width", "100%")

    for _, catName in ipairs(categoryOrder) do
        -- Nagłówek kategorii
        root:tag("tr")
            :tag("th"):attr("colspan", "7") -- Zmieniono na 7 kolumn
                :css("background", "#202122"):css("color", "white"):css("padding", "8px")
                :wikitext(catName)

        -- Nagłówki kolumn
        local h = root:tag("tr"):css("background", "#eaecf0"):css("font-size", "90%")
        h:tag("th"):wikitext("Ikona")
        h:tag("th"):wikitext("Nazwa")
        h:tag("th"):wikitext("Opis w grze")
        h:tag("th"):wikitext("Rodzic")
        h:tag("th"):wikitext("Wymagania")
        h:tag("th"):wikitext("Lokalizacja")
        h:tag("th"):wikitext("Nagrody")

        -- Renderowanie wierszy
        for _, name in ipairs(groups[catName]) do
            local item = advancementData[name]
            local row = root:tag("tr")

            -- KOLUMNA 1: {{Postęp|icon|icon_type|raw}} + ID/Nazwa
            -- Używamy item.icon_type lub domyślnie 'plain'
            local iType = item.icon_type or "plain"
            local iconHtml = frame:preprocess('{{Postęp|' .. item.icon .. '|' .. iType .. '|raw}}')
            row:tag("td"):wikitext(iconHtml .. " '''" .. name .. "'''")

            -- KOLUMNA 2: Tytuł
            row:tag("td"):wikitext(item.title or "—")

            -- KOLUMNA 3: Opis w grze
            row:tag("td"):wikitext(item.game_desc)

            -- KOLUMNA 4: Rodzic
            row:tag("td"):wikitext(item.parent)

            -- KOLUMNA 5: Wymagania (wiki_desc)
            row:tag("td"):wikitext(item.wiki_desc)

            -- KOLUMNA 6: Lokalizacja (Resource)
            row:tag("td"):tag("code"):css("font-size", "85%"):wikitext(item.resource)

            -- KOLUMNA 7: Nagrody
            local rewardCell = row:tag("td")
            if item.reward == "-" or item.reward == "—" then
                rewardCell:css("text-align", "center"):wikitext("—")
            else
                if expSprite == "" then
                    expSprite = frame:preprocess('{{EntitySprite|kula-doświadczenia}}')
                end
                rewardCell:wikitext(expSprite .. " " .. item.reward)
            end
        end
    end

    return tostring(root)
end

return p