Mal:Dokumentasjon

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

local p = {}
 
local lang = mw.getContentLanguage()

function p._areaname(frame, args)
	local args = getArgs(frame)
	-- Hvis ikke det er angitt noe argument 1, kan heller ikke flagget finnes
	if not frame.args[1] then
		return ''
	else
		areaname = mw.text.trim(frame.args[1])
	end
	
	-- Definerer hva som skal settes som områdenavn basert på input i argument 1
	if require("Modul:Flagg/Masterdata").flagdata[areaname] ~= nil then
		areaname = areaname
	elseif require("Modul:Flagg/Data/nye").flagdata[areaname] ~= nil then
		areaname = areaname
	elseif require("Modul:Flagg/Altnavn")[areaname] ~= nil then
		areaname = require("Modul:Flagg/Altnavn")[areaname]
	elseif require("Modul:Land/alfa3")[areaname] ~= nil then
		areaname = require("Modul:Land/alfa3")[areaname]
	elseif require("Modul:Land/alfa2")[areaname] ~= nil then
		areaname = require("Modul:Land/alfa2")[areaname]
	elseif require("Modul:Land/num")[areaname] ~= nil then
		areaname = require("Modul:Land/num")[areaname]
	else 
		areaname = "Ikke-eksisterende"
	end
	
	return areaname
end

function p._data(frame, args)
	local args = getArgs(frame)
	-- Henter ut nødvendige data fra undersider
	local areaname = p._areaname(frame, args)
	
	Data = require("Modul:Flagg/Masterdata").flagdata[areaname]
	if Data == nil or Data == "" then
 		return "Flag of None.svg"
	end
	
	if not frame.args[2] then
		return Data['defflag']
	elseif frame.args[2] == "lenke" then
		return Data['defflag']		
	end
	
	local FlagVar = mw.text.trim(frame.args[2])

	local FlagData = require("Modul:Flagg/Masterdata").flagdata[areaname]
	if tostring(FlagVar) == FlagData['histyeara'] then
		return FlagData['histflaga']
	elseif tostring(FlagVar) == FlagData['histyearb'] then
		return FlagData['histflagb']
	elseif tostring(FlagVar) == FlagData['histyearc'] then
		return FlagData['histflagc']
	elseif FlagVar:match("^%u%u.%d%d%d%d$") then
						n = tonumber(1)
			repeat
				if not FlagData['OLyear'..tostring(n)] then
					FlagName = FlagData['defflag']
				elseif FlagData['OLyear'..tostring(n)] ~= tostring(FlagVar) then
					FlagName = FlagData['defflag']
				end
				if FlagData['OLyear'..tostring(n)] then
					if tostring(FlagVar) == FlagData['OLyear'..tostring(n)] then
						FlagName = FlagData['OLflag'..tostring(n)]
						break
					end
				end
				n=tonumber(n+1)
			until not FlagData['OLyear'..n]
	elseif FlagVar:match("^%d%d%d%d$") or FlagVar:match("^%d%d%d$") or FlagVar:match("^%d%d$") then
			i = 1
			repeat
				if not FlagData['histyear'..i] then
					FlagName = FlagData['defflag']
				elseif FlagData['histyear'..i] < tonumber(FlagVar) then
					FlagName = FlagData['defflag']
				end
				if FlagData['histyear'..i] then
					Y = FlagData['histyear'..i]
					F = FlagData['histflag'..i]
					if tonumber(FlagVar) <= Y then
						FlagName = F
						break
					end
				end
				i=i+1
			until not FlagData['histyear' .. i]
		elseif FlagVar == "OL" then
			FlagName = FlagData["OLflag1"]
		elseif FlagVar == "vinterOL" or FlagVar == "VinterOL" or FlagVar == 'Vinter-OL' or FlagVar == "vinter-ol" or FlagVar == "vinter-ol" then
			FlagName = FlagData["vinterOLflag1"]
		elseif FlagVar == "sultanatet" then
			FlagName = FlagData["sultanatet"]
		elseif FlagVar == "våpen" or FlagVar == "Våpen" or FlagVar == "coa" or FlagVar == "COA" or FlagVar == "weapon" then
			FlagName = FlagData["coa"]
		elseif FlagVar == "skjold" or FlagVar == "Skjold" or FlagVar == "shield" then
			FlagName = FlagData["shield"]
		elseif FlagVar == "segl" or FlagVar == "Segl" or FlagVar == "seal" then
			FlagName = FlagData["seal"]
		elseif FlagVar == "fotball" or FlagVar == "Fotball" then
			FlagName = FlagData["football"]
		elseif FlagVar == "OL (fotball)" then
			FlagName = FlagData["OLfootball"]
		elseif FlagVar == "eurovision" or FlagVar == "Eurovision" then
			FlagName = FlagData["eurovision"]
		elseif FlagVar == "turkvision" or FlagVar == "Turkvision" then
			FlagName = FlagData["turkvision"]
		elseif FlagVar ~= "" then
			FlagName = FlagData[FlagVar]
		else
			FlagName = FlagData['defflag']
		end

	return FlagName	
end

function p._pagelink(frame, args)
	local args = getArgs(frame)
	local areaname = p._areaname(frame, args)
	local FlagData = require("Modul:Flagg/Masterdata").flagdata[areaname]
	local LinkedPage = FlagData['pagelink']
	local Name = FlagData['name']
	
	if frame.args["lenke"] ~= nil and frame.args["lenke"] ~= "" then
		return mw.text.trim(frame.args["lenke"])
	elseif frame.args[2] == "lenke" or frame.args[3] == "lenke" then
		if LinkedPage ~= nil and LinkedPage ~= "" then
			return LinkedPage
		else
			return Name
		end
	elseif LinkedPage ~= nil and LinkedPage ~= "" then
			return LinkedPage
		else
			return Name
	end
end

function p._flaglink(frame, args)
	local args = getArgs(frame)
	local PageLink = p._pagelink(frame, args)

	if frame.args["flagglenke"] ~= nil and frame.args["flagglenke"] ~= "" then 
		return mw.text.trim(frame.args["flagglenke"])
	elseif frame.args["lenke"] ~= "" and frame.args["lenke"] ~= nil then
		return frame.args["lenke"]
	else
		return PageLink
	end
end

function p._displaylink(frame, args)
	local args = getArgs(frame)
	local areaname = p._areaname(frame, args)
	local PageLink = p._pagelink(frame, args)
	local FlagData = require("Modul:Flagg/Masterdata").flagdata[areaname]
	local Name = FlagData['name']
	local DisplayName = FlagData['dispname']
 
 	if DisplayName == nil or DisplayName == "" then
 		DisplayName = Name
 	elseif DisplayName ~= nil and DisplayName ~= "" then
 		DisplayName = DisplayName
	end
 
	-- Hvilken lenketekst skal vises?
	if frame.args["lenketekst"] ~= nil and frame.args["lenketekst"] ~= "" then
		DispName = mw.text.trim(frame.args["lenketekst"])
	else
		DispName = DisplayName
	end
 
	-- Avgjør om det skal vises lenke
	if frame.args["side"] == nil then RightFlag = "" else RightFlag = frame.args["side"] end
	if RightFlag == "" then
		if frame.args[2] == "lenke" or frame.args[3] == "lenke" then
			if frame.args["lenketekst"] ~= nil and frame.args["lenketekst"] ~= "" then
				return "&nbsp;[[" .. PageLink .. "|" .. frame.args["lenketekst"] .. "]]"
			else
				return "&nbsp;[[" .. PageLink .. "|" .. DispName .. "]]"
			end
		elseif frame.args["lenke"] ~= nil and frame.args["lenke"] ~= "" then
			if frame.args["lenketekst"] ~= nil and frame.args["lenketekst"] ~= "" then
				return "&nbsp;[[" .. frame.args["lenke"] .. "|" .. frame.args["lenketekst"] .. "]]"
			else
				return "&nbsp;[[" .. frame.args["lenke"] .. "]]"
			end
		elseif frame.args["tekst"] ~= nil and frame.args["tekst"] ~= "" then
			return frame.args["tekst"]
		else
			return ""
		end
	elseif RightFlag == "h" then
			return "[[" .. PageLink .. "|" .. DispName .. "]]&nbsp;"
	else
		return ""
	end
end

function p._size(frame, args)
	local args = getArgs(frame)
	if frame.args["størrelse"] ~= nil and frame.args["størrelse"] ~= "" then
		size = frame.args["størrelse"]
	else
		size = '22x18px'
	end
	
	if size == nil then return "" else return size end
end

function p._border(frame, args)
	local FlagData = require("Modul:Flagg/Masterdata").flagdata[areaname]
	local border = FlagData['border']
	if FlagData['border'] ~= nil then
		return FlagData['border']
	else
		return "border"
	end
end

function p.build(frame, args)
	local args = getArgs(frame)
	local size = p._size(frame, args)
	local areaname = p._areaname(frame, args)
	local flagname = p._data(frame, args)
	local pagelink = p._pagelink(frame, args)
	local flaglink = p._flaglink(frame, args)
	local displaylink = p._displaylink(frame, args)
	local border = p._border(frame, args)
	
	if areaname == "Ikke-eksisterende" then
		result = mw.getCurrentFrame():expandTemplate{ title = "Bruker:Cocu/Flagg/Old", args = { frame.args[1], frame.args[2], frame.args[3], 
			["lenke"] = frame.args["lenke"], ["lenketekst"] = frame.args["lenketekst"], ["størrelse"] = frame.args["størrelse"]} };
	end
	if result == nil then areaname = "Ikke-eksisterende" else
		return result
	end
	
	if Data['defflag'] == "" then
		return "[[Fil:Flag of None.svg|" .. size .. "|lenke=" .. areaname .. "]]<sup>[[Modul:Flagg/Data/nye|[?]]][[Kategori:Sider som inneholder uregistrerte flagg]]</sup>"
	elseif frame.args["side"] == "h" then
		return displaylink .. '[[Fil:' .. flagname .. '|'  .. size .. '|' .. border .. '|lenke=' .. flaglink .. ']]'
	else
		return '[[Fil:' .. flagname .. '|'  .. size .. '|' .. border .. '|lenke=' .. flaglink .. ']]' .. displaylink
	end
end
 
return p