Moduł:Infobox instytucji kultury
Wygląd
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Infobox instytucji kultury/opis
-- Moduł:Infobox instytucji kultury
-- Cel: prosty, samodzielny infoboks dla samorządowych instytucji kultury w Leksykonie.
-- Świadomie NIE korzysta z żadnych innych modułów ani szablonów pomocniczych — na tej wiki
-- istnieje dziś jeden infoboks (Szablon:Artysta muzyczny infobox), który jest w praktyce martwy,
-- bo odwołuje się do podszablonów ("Infobox wiersz dodaj" itd.), których nie ma zainstalowanych.
-- Ten moduł ma nie powtórzyć tego błędu: cała logika w jednym pliku, bez zależności zewnętrznych.
--
-- Rozszerzenia dostępne na Leksykonie (sprawdzone w migawce inventory.sqlite, run_id=2):
-- Scribunto jest zainstalowany i NIEUŻYWANY (0 modułów przed tą zmianą) — moduł Lua jest więc
-- realnym unowocześnieniem, nie tylko teoretyczną możliwością. TemplateStyles NIE jest
-- zainstalowany na Leksykonie (jest na EWiM, ale nie tutaj) — dlatego stylowanie jest wpisane
-- bezpośrednio w generowany wikikod (inline), a nie przez <templatestyles>.
--
-- Zasada wypełniania pól (decyzja Marcina, 2026-07-24): pola strukturalne (typ, organizator,
-- gmina, powiat, adres) wypełniane zawsze. Pola "dyrektor" i "www" wypełniane WYŁĄCZNIE gdy dane
-- mają wystarczającą pewność (Rk1/Rk2) — w przeciwnym razie wiersz jest pomijany w całości,
-- a nie wypełniany pustą wartością. Osobna lista brakujących dyrektorów powstaje poza wiki
-- (BRAK_DYREKTORA_DO_UZUPELNIENIA.csv), nie jako widoczny na stronie placeholder.
local p = {}
local function trim(s)
if not s then return nil end
s = mw.text.trim(s)
if s == "" then return nil end
return s
end
local function wiersz(tbl, etykieta, wartosc)
if not wartosc then return end
local tr = tbl:tag('tr')
tr:tag('th')
:css('text-align', 'left')
:css('white-space', 'nowrap')
:css('padding', '3px 6px')
:css('background', '#eaeaea')
:wikitext(etykieta)
tr:tag('td')
:css('padding', '3px 6px')
:wikitext(wartosc)
end
function p.main(frame)
-- Obsługuje wywołanie zarówno przez {{#invoke:...}} bezpośrednio, jak i przez cienki
-- szablon-wrapper {{Instytucja kultury infobox|...}} (wtedy argumenty są u rodzica).
local args = frame.args
if not next(args) and frame:getParent() then
args = frame:getParent().args
end
local nazwa = trim(args.nazwa) or mw.title.getCurrentTitle().text
local typ = trim(args.typ)
local organizator = trim(args.organizator)
local gmina = trim(args.gmina)
local powiat = trim(args.powiat)
local adres = trim(args.adres)
local dyrektor = trim(args.dyrektor)
local www = trim(args.www)
local bip = trim(args.bip)
local utworzona = trim(args.utworzona)
local root = mw.html.create('table')
root
:addClass('infobox')
:css('width', '310px')
:css('float', 'right')
:css('margin', '0 0 1em 1em')
:css('border', '1px solid #a2a9b1')
:css('background', '#f8f9fa')
:css('font-size', '90%')
root:tag('tr'):tag('th')
:attr('colspan', '2')
:css('text-align', 'center')
:css('background', '#d6d9e0')
:css('font-size', '110%')
:css('padding', '5px')
:wikitext(nazwa)
wiersz(root, 'Typ instytucji', typ)
wiersz(root, 'Organizator', organizator)
wiersz(root, 'Gmina', gmina)
wiersz(root, 'Powiat', powiat)
wiersz(root, 'Siedziba', adres)
wiersz(root, 'Dyrektor', dyrektor)
if www then
wiersz(root, 'Strona internetowa', '[' .. www .. ' ' .. www:gsub('^https?://', '') .. ']')
end
if bip then
wiersz(root, 'BIP', '[' .. bip .. ' BIP]')
end
wiersz(root, 'Rok utworzenia', utworzona)
return tostring(root)
end
return p