Moduuli:Hyvä artikkeli
Jedipediasta, vapaasta Tähtien sota-tietosanakirjasta tänään, 7. marraskuuta 2024
Siirry navigaatioonSiirry hakuunTä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