Moduł:Dźwięki: Różnice pomiędzy wersjami

Z Minecraft Wiki Polska
Przejdź do nawigacji Przejdź do wyszukiwania
[wersja przejrzana][wersja przejrzana]
Nie podano opisu zmian
Nie podano opisu zmian
Linia 1: Linia 1:
local p = {}
local p = {}


-- 1. ADRESACJA - tutaj wpisujemy Twoją pełną ścieżkę
-- 1. ŁADOWANIE DANYCH (Ustawione na Twoją ścieżkę)
local dataPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane'
local dataPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane'
local success, data = pcall(mw.loadData, dataPath)
local success, data = pcall(mw.loadData, dataPath)


local function renderTable(editionName, editionData, displayTitle, icon)
local function renderTable(editionName, editionData, displayTitle, icon, upcoming)
     -- Jeśli tu wejdziemy i editionData jest puste, funkcja nic nie pokaże
     -- Sprawdzamy czy dane w ogóle istnieją
     if not editionData or type(editionData) ~= "table" or #editionData == 0 then  
     if type(editionData) ~= "table" then return "" end
        return ""  
    end


     local root = mw.html.create('table')
     local root = mw.html.create('table')
Linia 16: Linia 14:
         :css('font-size', '0.9em')
         :css('font-size', '0.9em')


    -- Ikona i Tytuł
     local iconWiki = (icon and icon ~= "") and ('[[Plik:' .. icon .. '|20px|link=]] ') or ""
     local iconWiki = (icon and icon ~= "") and ('[[Plik:' .. icon .. '|20px|link=]] ') or ""
     root:tag('tr'):tag('th')
     root:tag('tr'):tag('th')
Linia 21: Linia 20:
         :wikitext(iconWiki .. displayTitle .. ' sound type')
         :wikitext(iconWiki .. displayTitle .. ' sound type')


    -- Przygotowanie tekstu "upcoming"
    local upLabel = ""
    if upcoming and upcoming ~= "" then
        upLabel = '<br><small style="color:#0645ad; font-weight:normal; white-space:nowrap;">[upcoming: ' .. upcoming .. ']</small>'
    end
    -- Nagłówki kolumn (ZAWSZE WIDOCZNE)
     local subHeader = root:tag('tr')
     local subHeader = root:tag('tr')
     local headers = {"Sound", "Closed captions", "Source", "Description", "Identifier", "Translation key", "Volume", "Pitch"}
     local headers = {
        "Sound",
        "Closed captions", -- Tutaj dodamy upLabel
        "Source",
        "Description",
        "Identifier",
        "Translation key", -- Tutaj dodamy upLabel
        "Volume",
        "Pitch"
    }
     if editionName == 'Java Edition' then table.insert(headers, "Attenuation distance") end
     if editionName == 'Java Edition' then table.insert(headers, "Attenuation distance") end
     for _, h in ipairs(headers) do subHeader:tag('th'):wikitext(h):done() end
   
     for _, hName in ipairs(headers) do
        local th = subHeader:tag('th'):wikitext(hName)
        -- Dodajemy dopisek upcoming tylko do konkretnych kolumn, jeśli istnieje
        if (hName == "Closed captions" or hName == "Translation key") and upLabel ~= "" then
            th:wikitext(upLabel)
        end
    end


     for _, group in ipairs(editionData) do
    -- Generowanie wierszy
         local rowCount = #group.zdarzenia
    local rowFound = false
        for i, row in ipairs(group.zdarzenia) do
    -- Używamy pairs, bo mw.loadData nie obsługuje poprawnie ipairs/# dla dużych struktur
            local tr = root:tag('tr')
     for _, group in pairs(editionData) do
            if i == 1 then
         if type(group) == "table" and group.zdarzenia then
                local soundCell = tr:tag('td'):attr('rowspan', rowCount):css('text-align', 'center'):css('vertical-align', 'middle')
            -- Liczymy ręcznie ile jest zdarzeń w grupie dla rowspan
                if group.pliki then
            local groupEvents = group.zdarzenia
                    for _, file in ipairs(group.pliki) do
            local eventCount = 0
                        soundCell:wikitext('[[Plik:Sound-icon.png|16px|link=Plik:' .. file .. ']] ')
            for _ in pairs(groupEvents) do eventCount = eventCount + 1 end
           
            for i, row in ipairs(groupEvents) do
                rowFound = true
                local tr = root:tag('tr')
               
                -- Pierwsza kolumna (Ikony głośników) - tylko dla pierwszego wiersza w grupie
                if i == 1 then
                    local soundCell = tr:tag('td'):attr('rowspan', eventCount):css('text-align', 'center'):css('vertical-align', 'middle')
                    if group.pliki then
                        for _, file in ipairs(group.pliki) do
                            soundCell:wikitext('[[Plik:Sound-icon.png|16px|link=Plik:' .. file .. ']] ')
                        end
                     end
                     end
                end
               
                -- Dane komórek
                tr:tag('td'):wikitext(row.captions or "?")
                tr:tag('td'):wikitext(row.source or "")
                tr:tag('td'):wikitext(row.desc or "")
                tr:tag('td'):tag('code'):wikitext(row.id or ""):done()
                tr:tag('td'):tag('code'):wikitext(row.key or ""):done()
                tr:tag('td'):wikitext(row.vol or "")
                tr:tag('td'):wikitext(row.pitch or "")
                if editionName == 'Java Edition' then
                    tr:tag('td'):wikitext(row.dist or "")
                 end
                 end
             end
             end
            tr:tag('td'):wikitext(row.captions or "?"):done()
            tr:tag('td'):wikitext(row.source or ""):done()
            tr:tag('td'):wikitext(row.desc or ""):done()
            tr:tag('td'):tag('code'):wikitext(row.id or ""):done():done()
            tr:tag('td'):tag('code'):wikitext(row.key or ""):done():done()
            tr:tag('td'):wikitext(row.vol or ""):done()
            tr:tag('td'):wikitext(row.pitch or ""):done()
            if editionName == 'Java Edition' then tr:tag('td'):wikitext(row.dist or ""):done() end
         end
         end
     end
     end
    if not rowFound then return "" end
     return '<p>\'\'\'[[' .. editionName .. ']]:\'\'\'</p>' .. tostring(root)
     return '<p>\'\'\'[[' .. editionName .. ']]:\'\'\'</p>' .. tostring(root)
end
end


function p.main(frame)
function p.main(frame)
    -- RAPORT STARTOWY (zawsze się wyświetli, jeśli moduł w ogóle ruszy)
     if not success then return '<span class="error">Błąd: Baza danych nie odpowiada.</span>' end
    local report = '<div style="background:#f8f9fa; border:1px solid #ddd; padding:10px; font-size:12px;">'
    report = report .. "<strong>Status modułu:</strong> Uruchomiony.<br>"
 
     if not success then  
        return report .. '<span style="color:red;">Błąd: Nie znaleziono bazy danych pod adresem: ' .. dataPath .. '</span></div>'
    end


     local parentArgs = frame:getParent().args
     local pArgs = frame:getParent().args
     local currentArgs = frame.args
     local fArgs = frame.args
     local id = parentArgs[1] or currentArgs[1]
     local id = mw.text.trim(pArgs[1] or fArgs[1] or "")
    local nazwa = pArgs[2] or fArgs[2] or id
      
      
     if not id or id == "" then
     if id == "" then return "Podaj ID bloku w wywołaniu." end
        return report .. 'Wpisz ID bloku, np. <code>{{#invoke:SandBox/Igorczewski6524/Dźwięki|main|copper}}</code></div>'
    end


    id = mw.text.trim(id)
    report = report .. "<strong>Szukane ID:</strong> " .. id .. "<br>"
   
     local blockData = data[id]
     local blockData = data[id]
     if not blockData then
     if not blockData then return '<span class="error">Brak danych dla ID: ' .. id .. '</span>' end
        return report .. '<span style="color:red;">Błąd: Klucz "' .. id .. '" nie istnieje w pliku /Dane.</span></div>'
    end


     local javaRes = renderTable('Java Edition', blockData.java, parentArgs[2] or id, blockData.ikona)
    -- Wywołanie renderowania
     local bedrockRes = renderTable('Bedrock Edition', blockData.bedrock, parentArgs[2] or id, blockData.ikona)
     local java = renderTable('Java Edition', blockData.java, nazwa, blockData.ikona, blockData.java_upcoming)
     local bedrock = renderTable('Bedrock Edition', blockData.bedrock, nazwa, blockData.ikona, blockData.bedrock_upcoming)
      
      
     local finalOutput = javaRes .. bedrockRes
     return java .. bedrock
 
    -- Jeśli po renderowaniu nadal nic nie ma, pokaż dlaczego
    if finalOutput == "" then
        return report .. '<span style="color:orange;">Znaleziono klucz "' .. id .. '", ale sekcje "java" i "bedrock" wewnątrz niego są puste lub źle sformatowane.</span></div>'
    end
 
    -- Jeśli wszystko jest OK, pokaż tabelę (możesz usunąć "report .." jeśli chcesz mieć czysty wygląd)
    return report .. "Sukces! Tabela wygenerowana poniżej.</div><br>" .. finalOutput
end
end


return p
return p

Wersja z 21:13, 3 sty 2026

[ 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 = {}

-- 1. ŁADOWANIE DANYCH (Ustawione na Twoją ścieżkę)
local dataPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane'
local success, data = pcall(mw.loadData, dataPath)

local function renderTable(editionName, editionData, displayTitle, icon, upcoming)
    -- Sprawdzamy czy dane w ogóle istnieją
    if type(editionData) ~= "table" then return "" end

    local root = mw.html.create('table')
        :addClass('wikitable sound-table mw-collapsible mw-collapsed')
        :css('width', '100%')
        :css('font-size', '0.9em')

    -- Ikona i Tytuł
    local iconWiki = (icon and icon ~= "") and ('[[Plik:' .. icon .. '|20px|link=]] ') or ""
    root:tag('tr'):tag('th')
        :attr('colspan', editionName == 'Java Edition' and '9' or '8')
        :wikitext(iconWiki .. displayTitle .. ' sound type')

    -- Przygotowanie tekstu "upcoming"
    local upLabel = ""
    if upcoming and upcoming ~= "" then
        upLabel = '<br><small style="color:#0645ad; font-weight:normal; white-space:nowrap;">[upcoming: ' .. upcoming .. ']</small>'
    end

    -- Nagłówki kolumn (ZAWSZE WIDOCZNE)
    local subHeader = root:tag('tr')
    local headers = {
        "Sound",
        "Closed captions", -- Tutaj dodamy upLabel
        "Source",
        "Description",
        "Identifier",
        "Translation key", -- Tutaj dodamy upLabel
        "Volume",
        "Pitch"
    }
    if editionName == 'Java Edition' then table.insert(headers, "Attenuation distance") end
    
    for _, hName in ipairs(headers) do
        local th = subHeader:tag('th'):wikitext(hName)
        -- Dodajemy dopisek upcoming tylko do konkretnych kolumn, jeśli istnieje
        if (hName == "Closed captions" or hName == "Translation key") and upLabel ~= "" then
            th:wikitext(upLabel)
        end
    end

    -- Generowanie wierszy
    local rowFound = false
    -- Używamy pairs, bo mw.loadData nie obsługuje poprawnie ipairs/# dla dużych struktur
    for _, group in pairs(editionData) do
        if type(group) == "table" and group.zdarzenia then
            -- Liczymy ręcznie ile jest zdarzeń w grupie dla rowspan
            local groupEvents = group.zdarzenia
            local eventCount = 0
            for _ in pairs(groupEvents) do eventCount = eventCount + 1 end
            
            for i, row in ipairs(groupEvents) do
                rowFound = true
                local tr = root:tag('tr')
                
                -- Pierwsza kolumna (Ikony głośników) - tylko dla pierwszego wiersza w grupie
                if i == 1 then
                    local soundCell = tr:tag('td'):attr('rowspan', eventCount):css('text-align', 'center'):css('vertical-align', 'middle')
                    if group.pliki then
                        for _, file in ipairs(group.pliki) do
                            soundCell:wikitext('[[Plik:Sound-icon.png|16px|link=Plik:' .. file .. ']] ')
                        end
                    end
                end
                
                -- Dane komórek
                tr:tag('td'):wikitext(row.captions or "?")
                tr:tag('td'):wikitext(row.source or "")
                tr:tag('td'):wikitext(row.desc or "")
                tr:tag('td'):tag('code'):wikitext(row.id or ""):done()
                tr:tag('td'):tag('code'):wikitext(row.key or ""):done()
                tr:tag('td'):wikitext(row.vol or "")
                tr:tag('td'):wikitext(row.pitch or "")
                if editionName == 'Java Edition' then
                    tr:tag('td'):wikitext(row.dist or "")
                end
            end
        end
    end

    if not rowFound then return "" end
    return '<p>\'\'\'[[' .. editionName .. ']]:\'\'\'</p>' .. tostring(root)
end

function p.main(frame)
    if not success then return '<span class="error">Błąd: Baza danych nie odpowiada.</span>' end

    local pArgs = frame:getParent().args
    local fArgs = frame.args
    local id = mw.text.trim(pArgs[1] or fArgs[1] or "")
    local nazwa = pArgs[2] or fArgs[2] or id
    
    if id == "" then return "Podaj ID bloku w wywołaniu." end

    local blockData = data[id]
    if not blockData then return '<span class="error">Brak danych dla ID: ' .. id .. '</span>' end

    -- Wywołanie renderowania
    local java = renderTable('Java Edition', blockData.java, nazwa, blockData.ikona, blockData.java_upcoming)
    local bedrock = renderTable('Bedrock Edition', blockData.bedrock, nazwa, blockData.ikona, blockData.bedrock_upcoming)
    
    return java .. bedrock
end

return p