Moduł:Ikona

Z VatoWiki
Przejdź do nawigacji Przejdź do wyszukiwania

Moduł techniczny do obsługi ikon. Baza dostępnych ikon wraz z ich opisami i kategoryzacją (grupy) znajduje się w Moduł:Ikona/dane.

szablon

Funkcja implementująca szablon {{Ikona}}.

plik

Funkcja zwracająca nazwę pliku na commons używanego do realizacji ikony o zadanej nazwie.

parametry

Pole Do czego służy? Jak wypełnić?
1 nazwa ikony Np. archiwum lub anm.

doc

Funkcja wspomagająca generowanie dokumentacji.

parametry

Pole Do czego służy? Jak wypełnić?
1 Nazwa grupy ikon Np. Wyróżnienia lub Inne.

Błędy

Błędy należy zgłaszać na stronie Wikipedia:Kawiarenka/Kwestie techniczne.


local data = mw.loadData("Module:Ikona/dane")

return {

plik = function(frame)
	local class
	if type(frame) == "string" then
		class = frame
	else
		class = frame.args[1] or frame:getParent().args[1] or "#default"
	end

	local info = data.icons[mw.ustring.lower(class)] or data.icons["#default"]
	return info.plik
end,

szablon = function(frame)
	-- load arguments
	local pf = frame:getParent()
	local class = pf.args.class or pf.args[1] or "#default"
	local size = pf.args[2] or "#default"
	local link = pf.args.link
	local pos = pf.args["dosuń"]
	local alt = pf.args.alt
	local desc = pf.args.opis
	
	-- render output
	local result = {}
	table.insert(result, "[[Plik:")
	local icon = data.icons[mw.ustring.lower(class)] or data.icons["#default"]
	table.insert(result, icon.plik)
	table.insert(result, "|")
	table.insert(result, data.sizes[size] or data.sizes["#default"])
	table.insert(result, "|class=notpageimage")
	table.insert(result, "|link=")
	if link then
		table.insert(result, link)
	end
	if data.positions[pos] then
		table.insert(result, "|")
		table.insert(result, data.positions[pos])
	end
	table.insert(result, "|alt=")
	if alt then
		table.insert(result, alt)
	end
	if desc then
		table.insert(result, "|")
		table.insert(result, desc)
	end
	table.insert(result, "]]")
	
	return table.concat(result)
end,

doc = function(frame)
	local group = frame.args[1]
	local items = {}
	for k, v in pairs(data.icons) do
		if group and (v.grupa == group) and v.opis and (#v.opis > 0) then
			table.insert(items, { name = k, file = v.plik, doc = v.opis, })
		elseif not group and (not v.opis or (#v.opis == 0)) then
			table.insert(items, { name = k, file = v.plik, })
		end
	end

	if #items <= 0 then
		return
	end
	
	local lang = mw.getContentLanguage()
	local comparison = function(a, b)
		return lang:caseFold((a or {}).name or "") < lang:caseFold((b or {}).name or "")
	end
	table.sort(items, comparison)
	
	local result = {}
	if group and (#group > 0) then
		table.insert(result, "=== ")
		table.insert(result, group)
		table.insert(result, " ===\n")
	end
	
	for _, v in ipairs(items) do
		table.insert(result, "* ")
		table.insert(result, "[[Plik:")
		table.insert(result, v.file)
		table.insert(result, "|20px|link=|alt=|class=notpageimage]]")
		if group then
			table.insert(result, " '''")
			table.insert(result, v.doc)
			table.insert(result, "'''")
		end
		table.insert(result, ": <code>")
		table.insert(result, mw.text.nowiki("{{ikona|"..v.name.."}}"))
		table.insert(result, "</code>\n")
	end
	
	return table.concat(result)
end,

}