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
d Igorczewski6524 przeniósł(-osła) stronę Moduł:SandBox/Igorczewski6524/Dźwięki do Moduł:Dźwięki, bez pozostawienia przekierowania pod starym tytułem: Moduł jest już w zasadzie gotowy, muszę tylko dodać resztę danych
 
(Nie pokazano 6 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
local p = {}
local p = {}


-- 1. ADRESACJA - tutaj wpisujemy Twoją pełną ścieżkę
-- Funkcja pomocnicza do budowania tabeli
local dataPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane'
local function renderTable(frame, editionName, editionData, codeName, icon, upcoming)
local success, data = pcall(mw.loadData, dataPath)
     if type(editionData) ~= "table" then return "" end
 
local function renderTable(editionName, editionData, displayTitle, icon)
    -- Jeśli tu wejdziemy i editionData jest puste, funkcja nic nie pokaże
     if not editionData or type(editionData) ~= "table" or #editionData == 0 then  
        return ""  
    end


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


     local iconWiki = (icon and icon ~= "") and ('[[Plik:' .. icon .. '|20px|link=]] ') or ""
    -- Nagłówek główny w formacie: Dźwięki <ikona> <code>kod</code>
     local iconWiki = (icon and icon ~= "") and ('[[File:' .. icon .. '|20px|link=]] ') or ""
     root:tag('tr'):tag('th')
     root:tag('tr'):tag('th')
         :attr('colspan', editionName == 'Java Edition' and '9' or '8')
         :attr('colspan', editionName == 'Java Edition' and '9' or '8')
         :wikitext(iconWiki .. displayTitle .. ' sound type')
         :wikitext("Tabela dźwięków " .. iconWiki)
        :tag('code'):wikitext(codeName):done()


    -- Nagłówki kolumn
     local subHeader = root:tag('tr')
     local subHeader = root:tag('tr')
     local headers = {"Sound", "Closed captions", "Source", "Description", "Identifier", "Translation key", "Volume", "Pitch"}
     local headers = {"Dźwięki", "Napisy", "Źródło", "Opis", "Identyfikator", "Klucz tłumaczenia", "Głośność", "Wysokość"}
     if editionName == 'Java Edition' then table.insert(headers, "Attenuation distance") end
     if editionName == 'Java Edition' then table.insert(headers, "Odległość rozgłosu") 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)
        if (hName == "Napisy" or hName == "Klucz tłumaczenia") and upcoming and upcoming ~= "" then
            th:tag('br'):done()
              :tag('small'):css('color', '#0645ad'):css('font-weight', 'normal'):wikitext('[upcoming: ' .. upcoming .. ']')
        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
     for _, group in pairs(editionData) do
            local tr = root:tag('tr')
         if type(group) == "table" and group.zdarzenia then
            if i == 1 then
            local eventCount = 0
                local soundCell = tr:tag('td'):attr('rowspan', rowCount):css('text-align', 'center'):css('vertical-align', 'middle')
            for _ in pairs(group.zdarzenia) do eventCount = eventCount + 1 end
                if group.pliki then
           
                    for _, file in ipairs(group.pliki) do
            for i, row in ipairs(group.zdarzenia) do
                        soundCell:wikitext('[[Plik:Sound-icon.png|16px|link=Plik:' .. file .. ']] ')
                rowFound = true
                     end
                local tr = root:tag('tr')
               
                -- KOLUMNA DŹWIĘKI
                if i == 1 then
                    local sCell = tr:tag('td'):attr('rowspan', eventCount):css('text-align', 'center'):css('vertical-align', 'middle'):css('min-width', '120px')
                    if group.pliki then
                        for _, file in ipairs(group.pliki) do sCell:wikitext('[[File:' .. file .. ']]<br>') end
                     else sCell:wikitext('—') end
                end
               
                -- DANE KOMÓREK
                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 "1.0"):done()
                tr:tag('td'):wikitext(row.pitch or "1.0"):done()
                if editionName == 'Java Edition' then
                    tr:tag('td'):wikitext(row.dist or "16"):done()
                 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)
    local pArgs = frame:getParent().args
     local report = '<div style="background:#f8f9fa; border:1px solid #ddd; padding:10px; font-size:12px;">'
    local fArgs = frame.args
     report = report .. "<strong>Status modułu:</strong> Uruchomiony.<br>"
   
     -- 1. Pobieranie ID (nazwa kodowa pliku danych)
     local id = mw.text.trim(pArgs[1] or fArgs[1] or "")
     if id == "" then return "Błąd: Podaj nazwę kodową dźwięków (np. Copper)." end
 
    -- 2. DYNAMICZNA ŚCIEŻKA
    local dataSubPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane/' .. id
    local success, blockData = pcall(mw.loadData, dataSubPath)


     if not success then  
     if not success then  
         return report .. '<span style="color:red;">Błąd: Nie znaleziono bazy danych pod adresem: ' .. dataPath .. '</span></div>'
         return '<span class="error">Błąd: Nie znaleziono danych pod nazwą: ' .. dataSubPath .. '</span>'  
     end
     end


     local parentArgs = frame:getParent().args
     -- 3. Logika rozpoznawania filtra wersji
     local currentArgs = frame.args
     -- Sprawdzamy drugi parametr - jeśli to "java" lub "bedrock", filtrujemy.
     local id = parentArgs[1] or currentArgs[1]
     local rawArg2 = mw.text.trim(pArgs[2] or fArgs[2] or ""):lower()
      
      
     if not id or id == "" then
    local wersja = ""
         return report .. 'Wpisz ID bloku, np. <code>{{#invoke:SandBox/Igorczewski6524/Dźwięki|main|copper}}</code></div>'
     if rawArg2 == "java" or rawArg2 == "bedrock" then
         wersja = rawArg2
     end
     end


     id = mw.text.trim(id)
     -- 4. Generowanie wyniku
     report = report .. "<strong>Szukane ID:</strong> " .. id .. "<br>"
    local out = ""
      
    if wersja == "java" then
    local blockData = data[id]
        out = renderTable(frame, 'Java Edition', blockData.java, id, blockData.ikona, blockData.java_upcoming)
    if not blockData then
     elseif wersja == "bedrock" then
         return report .. '<span style="color:red;">Błąd: Klucz "' .. id .. '" nie istnieje w pliku /Dane.</span></div>'
        out = renderTable(frame, 'Bedrock Edition', blockData.bedrock, id, blockData.ikona, blockData.bedrock_upcoming)
     else
        local j = renderTable(frame, 'Java Edition', blockData.java, id, blockData.ikona, blockData.java_upcoming)
         local b = renderTable(frame, 'Bedrock Edition', blockData.bedrock, id, blockData.ikona, blockData.bedrock_upcoming)
        out = j .. b
     end
     end
    local javaRes = renderTable('Java Edition', blockData.java, parentArgs[2] or id, blockData.ikona)
    local bedrockRes = renderTable('Bedrock Edition', blockData.bedrock, parentArgs[2] or id, blockData.ikona)
      
      
     local finalOutput = javaRes .. bedrockRes
     return out
 
    -- 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

Aktualna wersja na dzień 01:01, 5 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 = {}

-- Funkcja pomocnicza do budowania tabeli
local function renderTable(frame, editionName, editionData, codeName, icon, upcoming)
    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')

    -- Nagłówek główny w formacie: Dźwięki <ikona> <code>kod</code>
    local iconWiki = (icon and icon ~= "") and ('[[File:' .. icon .. '|20px|link=]] ') or ""
    root:tag('tr'):tag('th')
        :attr('colspan', editionName == 'Java Edition' and '9' or '8')
        :wikitext("Tabela dźwięków " .. iconWiki)
        :tag('code'):wikitext(codeName):done()

    -- Nagłówki kolumn
    local subHeader = root:tag('tr')
    local headers = {"Dźwięki", "Napisy", "Źródło", "Opis", "Identyfikator", "Klucz tłumaczenia", "Głośność", "Wysokość"}
    if editionName == 'Java Edition' then table.insert(headers, "Odległość rozgłosu") end
    
    for _, hName in ipairs(headers) do
        local th = subHeader:tag('th'):wikitext(hName)
        if (hName == "Napisy" or hName == "Klucz tłumaczenia") and upcoming and upcoming ~= "" then
            th:tag('br'):done()
              :tag('small'):css('color', '#0645ad'):css('font-weight', 'normal'):wikitext('[upcoming: ' .. upcoming .. ']')
        end
    end

    -- Generowanie wierszy
    local rowFound = false
    for _, group in pairs(editionData) do
        if type(group) == "table" and group.zdarzenia then
            local eventCount = 0
            for _ in pairs(group.zdarzenia) do eventCount = eventCount + 1 end
            
            for i, row in ipairs(group.zdarzenia) do
                rowFound = true
                local tr = root:tag('tr')
                
                -- KOLUMNA DŹWIĘKI
                if i == 1 then
                    local sCell = tr:tag('td'):attr('rowspan', eventCount):css('text-align', 'center'):css('vertical-align', 'middle'):css('min-width', '120px')
                    if group.pliki then
                        for _, file in ipairs(group.pliki) do sCell:wikitext('[[File:' .. file .. ']]<br>') end
                    else sCell:wikitext('—') end
                end
                
                -- DANE KOMÓREK
                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 "1.0"):done()
                tr:tag('td'):wikitext(row.pitch or "1.0"):done()
                if editionName == 'Java Edition' then
                    tr:tag('td'):wikitext(row.dist or "16"):done()
                end
            end
        end
    end

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

function p.main(frame)
    local pArgs = frame:getParent().args
    local fArgs = frame.args
    
    -- 1. Pobieranie ID (nazwa kodowa pliku danych)
    local id = mw.text.trim(pArgs[1] or fArgs[1] or "")
    if id == "" then return "Błąd: Podaj nazwę kodową dźwięków (np. Copper)." end

    -- 2. DYNAMICZNA ŚCIEŻKA
    local dataSubPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane/' .. id
    local success, blockData = pcall(mw.loadData, dataSubPath)

    if not success then 
        return '<span class="error">Błąd: Nie znaleziono danych pod nazwą: ' .. dataSubPath .. '</span>' 
    end

    -- 3. Logika rozpoznawania filtra wersji
    -- Sprawdzamy drugi parametr - jeśli to "java" lub "bedrock", filtrujemy.
    local rawArg2 = mw.text.trim(pArgs[2] or fArgs[2] or ""):lower()
    
    local wersja = ""
    if rawArg2 == "java" or rawArg2 == "bedrock" then
        wersja = rawArg2
    end

    -- 4. Generowanie wyniku
    local out = ""
    if wersja == "java" then
        out = renderTable(frame, 'Java Edition', blockData.java, id, blockData.ikona, blockData.java_upcoming)
    elseif wersja == "bedrock" then
        out = renderTable(frame, 'Bedrock Edition', blockData.bedrock, id, blockData.ikona, blockData.bedrock_upcoming)
    else
        local j = renderTable(frame, 'Java Edition', blockData.java, id, blockData.ikona, blockData.java_upcoming)
        local b = renderTable(frame, 'Bedrock Edition', blockData.bedrock, id, blockData.ikona, blockData.bedrock_upcoming)
        out = j .. b
    end
    
    return out
end

return p