Przejdź do zawartości

Moduł:Infobox instytucji kultury

Z Leksykon Kultury Warmii i Mazur

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