Przejdź do zawartości

Moduł:Brudnopis/Paweł Ziemian/Kraj

Z Wikipedii, wolnej encyklopedii

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Brudnopis/Paweł Ziemian/Kraj/opis

local loadCountryData = require("Moduł:Brudnopis/Paweł Ziemian/Kraj/loader").load

local function infoboxCountry(iso, country, variant, col1, col2, row, desc, country2, variant2, row2, missingCatName, notIsoCatName)

	local function load(country, variant, desc)
		local result = {}
		while country do
			local data = loadCountryData(country, variant)
			if #result == 0 then
				data.desc = desc
			end
			
			table.insert(result, 1, data)
			local dependent = data:get("zależne od")
			country = dependent and dependent[1] or false -- TODO condominium
		end
		
		return result
	end
	
	local countryData = load(country, variant, desc)
	local countryData2 = country2 and load(country2, variant2, " ") or {}
	local missing = missingCatName and (#countryData == 0)
	local invalid = false

	local builder = mw.html.create("")
	
	local function draw(countryData, row, withFlag)
		if not countryData:title() then
			invalid = true
			builder
				:wikitext("|- ", row):newline()
				:wikitext("| ", col1 or "", " | [[Państwo]]"):newline()
				:wikitext('| class="linksInherit" style="background:yellow; color:red;" | ', countryData:country()):newline()
			return
		end

		builder
			:wikitext("|- ", row):newline()
			:wikitext("| ", col1 or "", " | ", countryData.desc or countryData:get("nazwa terytorium") or "[[Państwo]]"):newline()
			:wikitext("| ", col2 or "", " | ")
		if withFlag then
			countryData:drawFlag(builder, "22x20px", "", "", "", " ")
		end
		
		countryData:drawName(builder, false, false)
		builder:newline()
	end
	
	local function determineFlagLimits(countryData)
		if not countryData then
			return 0
		elseif countryData:getv("nazwa terytorium", 1) or not countryData:getv("skrót", 1) then
			return 1
		else
			return 2
		end
	end

	if not iso and (#countryData == 1) and not countryData[1]:title() then
		invalid = true
		builder
			:wikitext("|- ", row):newline()
			:wikitext("| ", col1 or "", " | ", countryData.desc or "[[Państwo]]"):newline()
			:wikitext("| ", col2 or "", " | ", countryData[1]:country()):newline()
	else
		local flagLimit = determineFlagLimits(countryData[1])
		for i, v in ipairs(countryData) do
			draw(v, row, i <= flagLimit)
		end
		local flagLimit2 = determineFlagLimits(countryData[1])
		for i, v in ipairs(countryData2) do
			draw(v, row2, i <= flagLimit2)
		end
	end
	
	if missing or invalid then
		local title = mw.title.getCurrentTitle()
		if title.namespace == 0 then
			builder
				:wikitext('|- style="text-align:center; display:none;"'):newline()
				:wikitext('| colspan="2" | ')
			if missing then
				builder
					:wikitext("''brak państwa''")
					:wikitext("[[Kategoria:Infoboksy – brak danych – ", missingCatName, " – państwo|", title.text, "]]")
			end
			
			if invalid then
				if iso then
					builder:wikitext("[[Kategoria:błędna wartość parametru państwo]]")
				elseif notIsoCatName then
					builder:wikitext("[[Kategoria:", notIsoCatName, "|", title.text, "]]")
				end
			end

			builder:newline()
		end
	end
	
	return builder:allDone()
end

local getArgs = require('Module:Arguments').getArgs

local function IsDemo(frame)
	for k, v in pairs(getArgs(frame)) do
		return false
	end
	
	-- for testing purposes
	if not frame then
		return true
	end

	return (mw.title.getCurrentTitle().fullText == frame:getParent():getTitle())
end

return {
	["Wartość"] = function(frame)
		local args = getArgs(frame)
		return loadCountryData(args[1], args.wariant):get(args[2])
	end,
	
	["Państwo"] = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "22x20px"
		local altlink = args.altlink
		local name = args["nazwa"]
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", altlink or "", "", "&nbsp;")
		countryData:drawName(builder, name, false)
		return builder:allDone()
	end,
	
	["PaństwoL"] = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "22x20px"
		local altlink = args.altlink
		local name = args["nazwa"]
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawName(builder, name, nil)
		countryData:drawFlag(builder, size, "", altlink or "", "&nbsp;", "")
		return builder:allDone()
	end,
	
	["PaństwoD"] = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "45x32px"
		local altlink = args.altlink
		local name = args["nazwa"]
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", altlink or "", "", "<br />")
		countryData:drawName(builder, name, false)
		return builder:allDone()
	end,
	
	["Państwolink"] = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local link = args[2]
		local variant = args.wariant or args[3] or country
		local size = args.rozmiar or "22x20px"
		local altlink = args.altlink
		local name = args["nazwa"]
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", altlink or "", "", "&nbsp;")
		countryData:drawName(builder, name, link)
		return builder:allDone()
	end,
	
	Flaga = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "22x20px"
		local altlink = args.altlink
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		local link = countryData:get("link")
		countryData:drawFlag(builder, size, link or "", altlink or link or "", "", "")
		return builder:allDone()
	end,
	
	Bandera = function(frame)
		local args = getArgs(frame)
		local country = args[1] or "{{{1}}}"
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "22x20px"
		local altlink = args.altlink
		local name = args["nazwa"]
		--
		local countryData = loadCountryData(country, { "bandera-"..variant, variant, "bandera", 1 })
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", altlink or "", "", "&nbsp;")
		countryData:drawName(builder, name, false)
		return builder:allDone()
	end,
	
	BanderaD = function(frame)
		local args = getArgs(frame)
		local country = args[1] or "{{{1}}}"
		local variant = args.wariant or args[2] or country
		local size = args.rozmiar or "40x30px"
		--
		local countryData = loadCountryData(country, { "bandera-"..variant, "bandera", variant, 1 })
		local builder = mw.html.create("")
		local link = countryData:get("link")
		countryData:drawFlag(builder, size, link or "", altlink or link or "", "", "")
		return builder:allDone()
	end,

	Reprezentacja = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or country
		local name = args["rodzaj"]
		local link = args.link
		local size = args.rozmiar or "22x16px"
		local altlink = args.altlink
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", countryData:get("link"), "", "&nbsp;")
		countryData:drawTeamName(builder, link, name)
		return builder:allDone()
	end,
	
	ReprezentacjaL = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or country
		local name = args["rodzaj"]
		local link = args.link
		local size = args.rozmiar or "22x16px"
		local altlink = args.altlink
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawTeamName(builder, link, name)
		countryData:drawFlag(builder, size, "", countryData:get("link"), "&nbsp;", "")
		return builder:allDone()
	end,
	
	ReprezentacjaD = function(frame)
		local args = getArgs(frame)
		local country = args[1]
		local variant = args.wariant or country
		local name = args["rodzaj"]
		local link = args.link
		local size = args.rozmiar or "60x40px"
		local altlink = args.altlink
		--
		local countryData = loadCountryData(country, variant)
		local builder = mw.html.create("")
		countryData:drawFlag(builder, size, "", countryData:get("link"), "", "<br />")
		countryData:drawTeamName(builder, link, name)
		return builder:allDone()
	end,

	["Infobox państwo"] = function(frame)
		local args = getArgs(frame)
		return infoboxCountry(
			true, 
			args[1],
			args.wariant or args[1],
			args.kol1 or 'style="background: #eeeeee; vertical-align: top;"', 
			args.kol2 or "",
			args.wiersz2 or args.wiersz,
			args.opis,
			args["2. państwo"],
			args["2. wariant"] or args["2. państwo"],
			args.wiersz3 or args.wiersz,
			args["kategoria brak"],
			false
		)
	end,

	["Infobox państwo dodaj"] = function(frame)
		local args = getArgs(frame)
		return infoboxCountry(
			true, 
			args[2] or args[1],
			args.wariant or args[2] or args[1],
			args.kol1 or 'style="background: #eeeeee; vertical-align: top;"', 
			args.kol2 or "",
			args.wiersz2 or args.wiersz,
			args.opis,
			args["2. państwo"],
			args["2. wariant"] or args["2. państwo"],
			args.wiersz3 or args.wiersz,
			false,
			false
		)
	end,

	["Infobox państwo nie iso"] = function(frame)
		local args = getArgs(frame)
		return infoboxCountry(
			false, 
			args[1],
			args.wariant or args[1],
			args.kol1 or 'style="background: #eeeeee; vertical-align: top;"', 
			args.kol2 or "",
			args.wiersz2 or args.wiersz,
			args.opis,
			args["2. państwo"],
			args["2. wariant"] or args["2. państwo"],
			args.wiersz3 or args.wiersz,
			args["kategoria brak"],
			args["kategoria nie iso"]
		)
	end,

	["Infobox państwo nie iso dodaj"] = function(frame)
		local args = getArgs(frame)
		return infoboxCountry(
			false, 
			args[2] or args[1],
			args.wariant or args[2] or args[1],
			args.kol1 or 'style="background: #eeeeee; vertical-align: top;"', 
			args.kol2 or "",
			args.wiersz2 or args.wiersz,
			args.opis,
			args["2. państwo"],
			args["2. wariant"] or args["2. państwo"],
			args.wiersz3 or args.wiersz,
			false,
			args["kategoria nie iso"]
		)
	end,

	["Infobox jednostki administracyjne"] = function(frame)
		local args = getArgs(frame)
		local country = args["państwo"]
		local wariant = args["wariant"]
		local col1 = args.kol1 or 'style="background: #eeeeee; vertical-align: top;"'
		local col2 = args.kol2 or ""
		local row = args.wiersz
		
		local function loadUnits(p)
			local result = {}
			local test = (type(frame) ~= "table") or (type(frame.getParent) ~= "function")
			local i = 1
			while true do
				local arg = p..tostring(i)
				local u
				if test then
					u = args[arg]
				else
					u = frame:getParent().args[arg]
				end

				if not u then
					return result
				end
				
				table.insert(result, u)
				i = i + 1
			end
		end
		
		local j = loadUnits("j")
		local t = loadUnits("t")
		local s = loadUnits("s")
		--
		if (#j == 0) and (#t == 0) and (#s == 0) then
			-- nothing to draw
			return
		end
		
		local demo = IsDemo(frame)
		local countryData = loadCountryData(country, variant)
		local units = countryData:get("jednostki")
		local builder = mw.html.create("")
		
		if (not demo and not countryData:title()) or not units then
			builder
				:wikitext('|- style="text-align:center; color:red; font-weight:bold;"'):newline()
				:wikitext("| BŁĘDNY PARAMETR ", mw.text.nowiki("{{{państwo}}}"), " = ", country or mw.text.nowiki("{{{państwo}}}"), "[[Kategoria:Szablony flag - brak szablonu jednostek administracyjnych]]"):newline()
		end
		
		local drawn = false
		local warnArgs = false
		if  (demo or countryData:title()) and units then
			
			local function drawUnits(p, units, needSeparator)
				if #units < #p then
					warnArgs = true
				end
				
				local result = false
				for i, v in ipairs(units) do
					local unit = p[i]
					if demo and (not unit or (#unit == 0)) then
						unit = mw.text.nowiki("{{{"..arg.."}}}")
					end
					
					if unit and (#unit > 0) then
						local text = v
						if string.sub(v, 1, 3) == "{{#" then
							text = frame:getParent():preprocess(v)
						end

						if needSeparator then
							needSeparator = false
							builder
								:wikitext("|-"):newline()
								:wikitext('| colspan="2" style="border-top:1px dashed #aaa; spacing:0px; padding:0px; height:0px;" |'):newline()
						end
						
						builder
							:wikitext("|- ", row):newline()
							:wikitext("| ", col1 or "", " | ", text):newline()
							:wikitext("| ", col2 or "", " | ", unit):newline()
						result = true
					end
				end
			
				return result
			end
			
			local drawn = drawUnits(j, units.jednostka, false)
			
			if units.tradycyjna then
				if drawUnits(t, units.tradycyjna, drawn) then
					drawn = true
				end
			elseif #t > 0 then
				warnArgs = true
			end
			
			if units.statystyczna then
				drawUnits(s, units.statystyczna, drawn)
			elseif #s > 0 then
				warnArgs = true
			end
		end
		
		if warnArgs then
			local title = mw.title.getCurrentTitle()
			if title.namespace == 0 then
				builder
					:wikitext('|- style="text-align:center; display:none;"'):newline()
					:wikitext('| colspan="2" | [[Kategoria:Infoboksy – błędne dane – jednostki administracyjne]]'):newline()
			end
		end
		
		return builder:allDone()
	end,
}