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. ŁADOWANIE DANYCH (Ustawione na Twoją ścieżkę)
-- 1. ŁADOWANIE DANYCH
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, upcoming)
local function renderTable(frame, editionName, editionData, displayTitle, icon, upcoming)
    -- Sprawdzamy czy dane w ogóle istnieją
     if type(editionData) ~= "table" then return "" end
     if type(editionData) ~= "table" then return "" end


Linia 14: Linia 13:
         :css('font-size', '0.9em')
         :css('font-size', '0.9em')


     -- Ikona i Tytuł
     -- Nagłówek główny
     local iconWiki = (icon and icon ~= "") and ('[[Plik:' .. icon .. '|20px|link=]] ') or ""
     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("Dźwięki" .. iconWiki .. displayTitle )


    -- Przygotowanie tekstu "upcoming"
     -- Nagłówki kolumn
    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 = {
     local headers = {"Dźwięki", "", "Napisy", "Opis", "Identyfikator", "Klucz tłumaczenia", "Głośność", "Wysokość"}
        "Sound",
     if editionName == 'Java Edition' then table.insert(headers, "Odległość rozgłosu") end
        "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
     for _, hName in ipairs(headers) do
         local th = subHeader:tag('th'):wikitext(hName)
         local th = subHeader:tag('th'):wikitext(hName)
        -- Dodajemy dopisek upcoming tylko do konkretnych kolumn, jeśli istnieje
         if (hName == "Napisy" or hName == "Klucz tłumaczenia") and upcoming and upcoming ~= "" then
         if (hName == "Closed captions" or hName == "Translation key") and upLabel ~= "" then
             th:tag('br'):done()
             th:wikitext(upLabel)
              :tag('small'):css('color', '#0645ad'):css('font-weight', 'normal'):wikitext('[upcoming: ' .. upcoming .. ']')
         end
         end
     end
     end
Linia 50: Linia 34:
     -- Generowanie wierszy
     -- Generowanie wierszy
     local rowFound = false
     local rowFound = false
    -- Używamy pairs, bo mw.loadData nie obsługuje poprawnie ipairs/# dla dużych struktur
     for _, group in pairs(editionData) do
     for _, group in pairs(editionData) do
         if type(group) == "table" and group.zdarzenia then
         if type(group) == "table" and group.zdarzenia then
             -- Liczymy ręcznie ile jest zdarzeń w grupie dla rowspan
             -- Liczenie wierszy dla rowspan
            local groupEvents = group.zdarzenia
             local eventCount = 0
             local eventCount = 0
             for _ in pairs(groupEvents) do eventCount = eventCount + 1 end
             for _ in pairs(group.zdarzenia) do eventCount = eventCount + 1 end
              
              
             for i, row in ipairs(groupEvents) do
             for i, row in ipairs(group.zdarzenia) do
                 rowFound = true
                 rowFound = true
                 local tr = root:tag('tr')
                 local tr = root:tag('tr')
                  
                  
                 -- Pierwsza kolumna (Ikony głośników) - tylko dla pierwszego wiersza w grupie
                 -- KOLUMNA SOUND (Odtwarzacz domyślny)
                 if i == 1 then
                 if i == 1 then
                     local soundCell = tr:tag('td'):attr('rowspan', eventCount):css('text-align', 'center'):css('vertical-align', 'middle')
                     local soundCell = tr:tag('td')
                        :attr('rowspan', eventCount)
                        :css('text-align', 'center')
                        :css('vertical-align', 'middle')
                        :css('min-width', '120px') -- miejsce na odtwarzacz
                   
                     if group.pliki then
                     if group.pliki then
                         for _, file in ipairs(group.pliki) do
                         for _, file in ipairs(group.pliki) do
                             soundCell:wikitext('[[Plik:Sound-icon.png|16px|link=Plik:' .. file .. ']] ')
                            -- Osadzenie pliku audio (MediaWiki zamieni to na odtwarzacz)
                             soundCell:wikitext('[[File:' .. file .. ']]<br>')
                         end
                         end
                    else
                        soundCell:wikitext('—')
                     end
                     end
                 end
                 end
                  
                  
                 -- Dane komórek
                 -- DANE KOMÓREK
                 tr:tag('td'):wikitext(row.captions or "?")
                 tr:tag('td'):wikitext(row.captions or ""):done()
                 tr:tag('td'):wikitext(row.source or "")
                 tr:tag('td'):wikitext(row.source or ""):done()
                 tr:tag('td'):wikitext(row.desc or "")
                 tr:tag('td'):wikitext(row.desc or ""):done()
                 tr:tag('td'):tag('code'):wikitext(row.id or ""):done()
                 tr:tag('td'):tag('code'):wikitext(row.id or ""):done():done()
                 tr:tag('td'):tag('code'):wikitext(row.key or ""):done()
                 tr:tag('td'):tag('code'):wikitext(row.key or ""):done():done()
                 tr:tag('td'):wikitext(row.vol or "")
                 tr:tag('td'):wikitext(row.vol or "1.0"):done()
                 tr:tag('td'):wikitext(row.pitch or "")
                 tr:tag('td'):wikitext(row.pitch or "1.0"):done()
                 if editionName == 'Java Edition' then
                 if editionName == 'Java Edition' then
                     tr:tag('td'):wikitext(row.dist or "")
                     tr:tag('td'):wikitext(row.dist or "16"):done()
                 end
                 end
             end
             end
Linia 92: Linia 82:


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


     local pArgs = frame:getParent().args
     local pArgs = frame:getParent().args
     local fArgs = frame.args
     local fArgs = frame.args
     local id = mw.text.trim(pArgs[1] or fArgs[1] or "")
    -- Zabezpieczenie przed błędem "nil"
     local id = pArgs[1] or fArgs[1]
    if not id or id == "" then return "Podaj ID (np. copper) w wywołaniu modułu." end
    id = mw.text.trim(id)
 
     local nazwa = pArgs[2] or fArgs[2] or id
     local nazwa = pArgs[2] or fArgs[2] or id
    local blockData = data[id]
      
      
    if id == "" then return "Podaj ID bloku w wywołaniu." end
     if not blockData then return '<span class="error">Błąd: Klucz "' .. id .. '" nie istnieje w bazie danych.</span>' end
 
    local blockData = data[id]
     if not blockData then return '<span class="error">Brak danych dla ID: ' .. id .. '</span>' end


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

Wersja z 21:21, 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
local dataPath = 'Moduł:SandBox/Igorczewski6524/Dźwięki/Dane'
local success, data = pcall(mw.loadData, dataPath)

local function renderTable(frame, editionName, editionData, displayTitle, 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
    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("Dźwięki" .. iconWiki .. displayTitle )

    -- Nagłówki kolumn
    local subHeader = root:tag('tr')
    local headers = {"Dźwięki", "", "Napisy", "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
            -- Liczenie wierszy dla rowspan
            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 SOUND (Odtwarzacz domyślny)
                if i == 1 then
                    local soundCell = tr:tag('td')
                        :attr('rowspan', eventCount)
                        :css('text-align', 'center')
                        :css('vertical-align', 'middle')
                        :css('min-width', '120px') -- miejsce na odtwarzacz
                    
                    if group.pliki then
                        for _, file in ipairs(group.pliki) do
                            -- Osadzenie pliku audio (MediaWiki zamieni to na odtwarzacz)
                            soundCell:wikitext('[[File:' .. file .. ']]<br>')
                        end
                    else
                        soundCell: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)
    if not success then return '<span class="error">Błąd: Brak bazy danych ' .. dataPath .. '</span>' end

    local pArgs = frame:getParent().args
    local fArgs = frame.args
    -- Zabezpieczenie przed błędem "nil"
    local id = pArgs[1] or fArgs[1]
    if not id or id == "" then return "Podaj ID (np. copper) w wywołaniu modułu." end
    id = mw.text.trim(id)

    local nazwa = pArgs[2] or fArgs[2] or id
    local blockData = data[id]
    
    if not blockData then return '<span class="error">Błąd: Klucz "' .. id .. '" nie istnieje w bazie danych.</span>' end

    -- Renderowanie z przekazaniem obiektu frame
    local java = renderTable(frame, 'Java Edition', blockData.java, nazwa, blockData.ikona, blockData.java_upcoming)
    local bedrock = renderTable(frame, 'Bedrock Edition', blockData.bedrock, nazwa, blockData.ikona, blockData.bedrock_upcoming)
    
    return java .. bedrock
end

return p