Hopp til innhald

Modul:Navboks hundreår

Frå Wikipedia – det frie oppslagsverket

Dokumentasjon for modulen kan opprettast på Modul:Navboks hundreår/dok


local utdata = {}
local SIDENAMN = mw.title.getCurrentTitle().text
local HUNDREAAR = {
	['namn'] = nil,
	['byrjing'] = nil,
	['ende'] = nil
}

local AAR = nil

function utdata.erArtikkelForAar()
	return tonumber(SIDENAMN) ~= nil and math.floor(tonumber(SIDENAMN)) == tonumber(SIDENAMN)	
end

local ER_ARTIKKEL_FOR_AAR = utdata.erArtikkelForAar()
if ER_ARTIKKEL_FOR_AAR then
	AAR = tonumber(SIDENAMN)
else
	HUNDREAAR['namn'] = SIDENAMN
end

function utdata.aaretErPositivt()
	if ER_ARTIKKEL_FOR_AAR then
		return AAR > 0
	else
		return not (mw.ustring.match(HUNDREAAR['namn'], 'fvt.') or mw.ustring.match(HUNDREAAR['namn'], 'f.Kr.'))
	end
end

local AARET_ER_POSITIVT = utdata.aaretErPositivt()

function utdata.erFyrsteHundreaaret()
	if ER_ARTIKKEL_FOR_AAR then
		return AAR <= 100 and AAR >= 1
	else
		return AARET_ER_POSITIVT and mw.ustring.match(HUNDREAAR['namn'], 'hundreåret')
	end
end

function utdata.erFyrsteHundreaaretMinus()
	if ER_ARTIKKEL_FOR_AAR then
		return AAR >= -100 and AAR <= -1
	else
		return (not AARET_ER_POSITIVT) and mw.ustring.match(HUNDREAAR['namn'], 'hundreåret')
	end
end

local ER_FYRSTE_HUNDREAARET = utdata.erFyrsteHundreaaret()
local ER_FYRSTE_HUNDREAARET_MINUS = utdata.erFyrsteHundreaaretMinus()

function utdata.finnHundreaar()
	if ER_FYRSTE_HUNDREAARET_MINUS then
		HUNDREAAR['namn'] = '1. hundreåret fvt.'
	elseif ER_FYRSTE_HUNDREAARET then
		HUNDREAAR['namn'] = '1. hundreåret'
	else
		local forteikn = AAR >= 0 and 1 or -1
    	local absoluttverdi = math.abs(AAR)
    	local byrjing = forteikn * math.floor(absoluttverdi / 100) * 100
    	local namn = byrjing .. '-talet'
    	HUNDREAAR['byrjing'] = byrjing
		if not AARET_ER_POSITIVT then
			namn = namn .. ' fvt.'
		end
		HUNDREAAR['namn'] = namn
	end
end

if ER_ARTIKKEL_FOR_AAR then
	utdata.finnHundreaar()
end

function utdata.lagAarliste()
	local aarliste = {}
    for i = HUNDREAAR['byrjing'], HUNDREAAR['ende'] do
        table.insert(aarliste, i)
    end
    return aarliste
end

function utdata.aarlisteSomTekst()
	local aarliste = utdata.lagAarliste()
	local tekst = ""
	local aarNo = tonumber(os.date("%Y"))
	local aartekst = ''
    for i, aar in ipairs(aarliste) do
        if i > 1 then
            tekst = tekst .. " | "
        end
        aartekst = "[[" .. aar .. "]]"
        if aar > aarNo then
	        aartekst = "''" .. aartekst .. "''"
	    end
        tekst = tekst .. aartekst
    end
    return tekst
end

function utdata.finnByrjingPaaHundreaar()
	if ER_FYRSTE_HUNDREAARET then
		return 1
	elseif ER_FYRSTE_HUNDREAARET_MINUS then
		return -100
	elseif AARET_ER_POSITIVT then
		return tonumber(HUNDREAAR['namn']:match("^%d+"))
	else
		return tonumber(('-' .. HUNDREAAR['namn']:match("^%d+")) - 99)
	end
end

HUNDREAAR['byrjing'] = utdata.finnByrjingPaaHundreaar()
HUNDREAAR['ende'] = HUNDREAAR['byrjing'] + 99

function utdata.foerreHundreaaret()
	local data = {}
	if ER_FYRSTE_HUNDREAARET then
		data['namn'] = '1. hundreåret fvt.'
		data['ende'] = -1
	elseif ER_FYRSTE_HUNDREAARET_MINUS then
		data['namn'] = '100-talet fvt.'
		data['ende'] = -101
	elseif AARET_ER_POSITIVT then
		if HUNDREAAR['byrjing'] - 100 == 0 then
			data['namn'] = '1. hundreåret'
			data['ende'] = 99
		else
			data['namn'] = HUNDREAAR['byrjing'] - 100 .. '-talet'
			data['ende'] = HUNDREAAR['byrjing'] - 1 
		end
	else
		data['namn'] = math.abs(HUNDREAAR['byrjing']) + 1 .. '-talet fvt.'
		data['ende'] = HUNDREAAR['byrjing'] - 1
	end
	return data
end

function utdata.nesteHundreaaret()
	local data = {}
	if ER_FYRSTE_HUNDREAARET then
		data['namn'] = '100-talet'
		data['byrjing'] = 101
	elseif ER_FYRSTE_HUNDREAARET_MINUS then
		data['namn'] = '1. hundreåret'
		data['byrjing'] = 1
	elseif not AARET_ER_POSITIVT then
		if HUNDREAAR['byrjing'] == -199 then
			data['namn'] = '1. hundreåret fvt.'
			data['byrjing'] = -99
		else
			data['namn'] = math.abs(HUNDREAAR['byrjing']) - 199 .. '-talet fvt.'
			data['byrjing'] = HUNDREAAR['byrjing'] + 100
		end
	else
		data['namn'] = HUNDREAAR['byrjing'] + 100 .. '-talet'
		data['byrjing'] = HUNDREAAR['byrjing'] + 100
	end
	return data
end

function utdata.lagSortertingsnykelForHundreaar()
	local sorteringsnykel = nil
	if HUNDREAAR['byrjing'] >= 1000 then
		sorteringsnykel = nil
	elseif AARET_ER_POSITIVT and HUNDREAAR['byrjing'] < 1000 then
		sorteringsnykel = '0' .. HUNDREAAR['byrjing']
	else
		local aarAbs = nil
		if ER_FYRSTE_HUNDREAARET_MINUS then
			aarAbs = 0
		else
			aarAbs = -(HUNDREAAR['ende'])
		end
		local alfabet = 'zyxwvutsrqponmlkjihgfedcba'
    	local indeks1 = math.floor(aarAbs / 2600) + 1
    	local indeks2 = (aarAbs/100 % 26) + 1
    	sorteringsnykel = '-' .. alfabet:sub(indeks1, indeks1) ..  alfabet:sub(indeks2, indeks2)
	end
    return sorteringsnykel
end

function utdata.lagSortertingsnykelForAar()
	local sorteringsnykel = nil
	if AARET_ER_POSITIVT then
		sorteringsnykel = string.format('%04d', AAR)
	else
		local aarAbs = math.abs(AAR)
		local alfabet = 'abcdefghijklmnopqrstuvwxyz'
		local indeks1 = math.mod((25 - math.floor(aarAbs / 27)),  26) + 1
    	local indeks2 = math.mod((26 - aarAbs), 26) + 1
    	sorteringsnykel = '-' .. alfabet:sub(indeks1, indeks1) ..  alfabet:sub(indeks2, indeks2)
	end
    return sorteringsnykel
end

function utdata.kategoriar()
	local kategoristreng = ''
	local sorteringsnykelstreng = ''
	if  ER_ARTIKKEL_FOR_AAR then
		sorteringsnykelstreng = '|' .. utdata.lagSortertingsnykelForAar()
	else
		sorteringsnykelstreng = '| '
	end

	if ER_FYRSTE_HUNDREAARET then
		kategoristreng = '[[Kategori:Første hundreåret' .. sorteringsnykelstreng .. ']]'
	elseif ER_FYRSTE_HUNDREAARET_MINUS then
		kategoristreng = '[[Kategori:Første hundreåret fvt.' .. sorteringsnykelstreng .. ']]'
	else
		kategoristreng = '[[Kategori:' .. HUNDREAAR['namn'] .. sorteringsnykelstreng .. ']]'
	end
	if not ER_ARTIKKEL_FOR_AAR then
		local sortertingsnykelHundreaar = utdata.lagSortertingsnykelForHundreaar()
		local sorteringsnykelstreng = ''
		if sortertingsnykelHundreaar ~= nil then
			sorteringsnykelstreng = '|' .. sortertingsnykelHundreaar
		end

		local kategoriHundreaar = '[[Kategori:Hundreår' .. sorteringsnykelstreng .. ']]'
		kategoristreng = kategoristreng .. kategoriHundreaar
	end
	return kategoristreng
end

function utdata.hovud(frame)
	local namnerom =  mw.title.getCurrentTitle().nsText
	if namnerom ~= '' then
		return ''
	end
	local byrjing = [[<div class="toccolours" style="text-align: center; clear: both; margin-top: 2em;">
<div style="color:black; background-color: #efefef;">'''{{{1}}}'''</div>]]
	local ende = '</div>'
	local args = frame:getParent().args
	local visAar = args['visÅr'] == nil or args['visÅr'] == 1 or args['visÅr'] == 'ja' or args['vis_år'] == 1 or args['vis_år'] == 'ja'

	local dataFoerre = utdata.foerreHundreaaret()
	local dataNeste = utdata.nesteHundreaaret()
	local namnestreng = HUNDREAAR['namn']
	if ER_ARTIKKEL_FOR_AAR then
		namnestreng = '[[' .. namnestreng .. ']]'
	end
	local byrjing = byrjing:gsub('{{{1}}}','\'\'' .. '[[' .. dataFoerre['namn']  .. '|&lt;]]\'\' &nbsp; ' .. namnestreng .. '&nbsp; \'\'[[' .. dataNeste['namn'] .. '|&gt;]]\'\'')
	
	local maltekst = byrjing
	
	if visAar then
		aarliste = utdata.aarlisteSomTekst()
		aarliste = '[[' .. dataFoerre['ende'] .. '|<<]]&nbsp;' .. aarliste .. '&nbsp;[[' .. dataNeste['byrjing'] .. '|>>]]'
		maltekst = maltekst .. aarliste .. ende
	else
		maltekst = maltekst .. ende
	end
	maltekst = maltekst .. utdata.kategoriar()

	return maltekst
end

return utdata