Moduł:Dźwięki
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