Moduuli:Hyvä artikkeli

Jedipediasta, vapaasta Tähtien sota-tietosanakirjasta tänään, 7. marraskuuta 2024
Siirry navigaatioonSiirry hakuun

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Hyvä artikkeli/ohje

local p = {}

local weekn = 9 --artikkelikierron pituus viikkoina

local function getWeek()
	local lang = mw.getContentLanguage()
	local week = tonumber(lang:formatDate('W'))
	week = week % weekn
	return week
end

local function getDay()
	local lang = mw.getContentLanguage()
	return lang:formatDate('l')
end

-- Remove any links from the text, leaving
-- the displayed portion of the link only.
local function strip_links(text)
    -- First, convert links like this: [[foo|bar]] to this: bar
    text = text:gsub("%[%[[^%]\n]+%|([^%]\n]+)%]%]", "%1")
    -- Next, convert links like this: [[foo]] to this: foo
    return text:gsub("%[%[([^%]\n]+)%]%]", "%1")
end

local function pick_article()
	local list = require('Moduuli:Hyvä artikkeli/data')
	local day = getDay()
	local week = getWeek()
	local pagename = list.articleData[day][week].title
	local file_string = ""
	local main_link = ""
	local pagetext = mw.title.new(pagename):getContent()
	local x = pagetext:gsub("%=%=(.*)", "")
 
-- Generate image
	local filename = x:match(".*%[%[Tiedosto:(.*)%]%].*")
	if filename then
		filename = filename:gsub("%|.*", "")
		filename = filename:gsub("%]%].*", "")
		filepage = mw.title.new(filename,'Tiedosto')
		if filepage.file.width <= 200 then
			file_string = string.format("[[Tiedosto:%s|left]]\n", filename)
		else
			file_string = string.format("[[Tiedosto:%s|left|200px]]\n", filename)
		end
	end

-- Extract the bolded segment
	local bolded = ""
	local front_italics = false
	local end_italics = false
	local intro = x:gsub(".*()%}%}\n(.*)", "%2")
	
	local s1, e1 = intro:find("'''")
	if intro:sub(e1 + 1, e1 + 2) == "''" then
		e1 = e1 + 2
		front_italics = true
	end
	local s2, e2 = intro:find("'''", e1 + 1)
	if intro:sub(e2 + 1, e2 + 2) == "''" then
		s2 = s2 + 2
		end_italics = true
	end
	
	if front_italics and end_italics then
		bolded = strip_links(intro:sub(e1 + 1, s2 - 3))
		main_link = string.format("[[%s|%s]]", pagename, bolded)
		s2 = s2 - 2
	elseif front_italics then
		bolded = strip_links(intro:sub(e1 - 1, s2 - 1))
		main_link = string.format("[[%s|%s]]", pagename, bolded)
		e1 = e1 - 2
	elseif end_italics then
		bolded = strip_links(intro:sub(e1 + 1, s2 - 1))
		main_link = string.format("[[%s|%s]]", pagename, bolded)
	else
		bolded = strip_links(intro:sub(e1 + 1, s2 - 1))
		main_link = string.format("[[%s|%s]]", pagename, bolded)
	end

	intro = intro:sub(0, e1) .. main_link .. intro:sub(s2)
	
-- Substitute templates, add {{Rm}}, and remove any images
	intro = intro:gsub("\{\{'s\}\}", "<span style=\"padding-left: 0.1em;\">'</span>s")
	intro = intro:gsub("\n\n$", "")
	if x:find("|image=") then
		intro = intro:gsub("%[%[Tiedosto:(.*)%]%]", "")
	end

	return file_string .. intro
end

function p.getContinuity(frame)
	local list = require('Moduuli:Hyvä artikkeli/data')
	local day = getDay()
	local week = getWeek()
	
	local continuity = list.articleData[day][week].continuity
	if continuity == 'canon' then
		return '[[Tiedosto:Eras-canon-edit.png|100px|link=Kaanon]]'
	elseif continuity == 'legends' then
		return '[[Tiedosto:LegendsBanner.png|100px|link=Star Wars Legends]]'
	end
end

function p.printTable(frame)
	local list = require('Moduuli:Hyvä artikkeli/data')
	local result = '{| border="1" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"\n! viikko !! maanantai !! tiistai !! keskiviikko !! torstai !! perjantai !! lauantai !! sunnuntai\n|-\n'
	local w = 0
	while w < weekn do
		result = result .. string.format(
			'! %s\n| [[%s]] || [[%s]] || [[%s]] || [[%s]] || [[%s]] || [[%s]] || [[%s]]\n|-\n',
			w,
			list.articleData.maanantai[w].title,
			list.articleData.tiistai[w].title,
			list.articleData.keskiviikko[w].title,
			list.articleData.torstai[w].title,
			list.articleData.perjantai[w].title,
			list.articleData.lauantai[w].title,
			list.articleData.sunnuntai[w].title
			)
		w = w + 1
	end
	return result .. '|}'
end

function p._main(args)
	return pick_article()
end

function p.main(frame)
	local args = {}
	for k, v in pairs(frame:getParent().args) do
		v = v:match('^%s*(.-)%s*$') -- trim whitespace
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end
 
return p