Module:Portal pictures
Appearance
![]() | This module depends on the following other modules: |
Implements template {{Portal pictures}}.
Usage
{{#invoke:Portal pictures|function name}}
{{#invoke:Portal pictures|main}}
- Automatic mode. Uses function
slideShow
on a basepage, andgallery
on a subpage. {{#invoke:Portal pictures|slideShow}}
- Shows a slide show with a random picture selected. Used for testing.
{{#invoke:Portal pictures|gallery}}
- Shows all pictures. Used for testing.
Parameters
See Template:Portal pictures/doc#Parameters
See also
local getArgs = require('Module:Arguments').getArgs
local randomModule = require('Module:Random')
local yesno = require('Module:Yesno')
local slideshowModule = require('Module:Random slideshow')
p = {}
local function wikiError(message)
return mw.html.create('div'):addClass('error'):wikitext(message)
end
local function extractDates(args)
local dates = {}
for key, value in pairs(args) do
if value and type(key) == "number" then
table.insert(dates, value)
end
end
return dates
end
local function getDefaultMoreLink(frame)
local title = mw.title.getCurrentTitle()
if title.isSubpage
then
return ""
end
return "[[" .. title.prefixedText .. "/Selected picture|More selected pictures...]]"
end
local function getPortalPotdText(frame, candidateDate, more)
return frame:expandTemplate{
title = "Portal POTD",
args = {
candidateDate,
["more"] = more
}
}
end
local function gallery(frame)
local args = getArgs(frame)
local texts = {}
for key, value in pairs(args) do
if value and type(key) == "number" then
table.insert(texts, "[[Template:POTD/" .. value .. "]]\n\n" .. getPortalPotdText(frame, value, " "))
end
end
return table.concat(texts, "\n----\n")
end
local function getPotdPart(frame, t, part)
return frame:expandTemplate{
title = t,
args = { part }
}
end
local function getPotdText(frame, d, more)
local titleText = getPotdPart(frame, "POTD/" .. d, "title")
local creditText = getPotdPart(frame, "POTD/" .. d, "credit")
local captionText = getPotdPart(frame, "POTD/" .. d, "caption")
local root = mw.html.create("div")
:attr("style", "font-size:107%;")
local titleCredit = root:tag("div")
:attr("style", "margin: 0.6em 0.25em 0.85em;")
titleCredit:tag("div")
:attr("style", "font-size: large;")
:wikitext(titleText)
titleCredit:tag("small"):wikitext(creditText)
root:tag("div")
:attr("style", "text-align: left;")
:wikitext(captionText)
if yesno(more, true)
then
root:tag('div')
:attr("class", "noprint")
:attr("style", "padding:0.7em 0.9em 0.7em 0.2em; font-weight:bold; width:100%; text-align:right;")
:wikitext(more)
end
return tostring(root)
end
local function makeSlideShowArgs(frame, dates, more, limit)
local galleryArgs = {}
local sortedDates = randomModule.main('array', {t=dates, limit=limit})
for _i, d in ipairs(sortedDates) do
local image = getPotdPart(frame, "POTD/" .. d, "image")
local text = getPotdText(frame, d, more)
table.insert(galleryArgs, image)
table.insert(galleryArgs, text)
end
return galleryArgs
end
local function slideShow(frame)
local args = getArgs(frame)
local more = args["more"] or getDefaultMoreLink(frame)
local dates = extractDates(args)
local limit = 25
local galleryArgs = makeSlideShowArgs(frame, dates, more, limit)
local slideShow = slideshowModule._main(galleryArgs, false)
return frame:extensionTag{ name='templatestyles', args = { src='Random slideshow/styles.css'} }
.. frame:preprocess(slideShow)
end
function main(frame)
local title = mw.title.getCurrentTitle()
if title.isSubpage
then
return gallery(frame)
else
return slideShow(frame)
end
end
p.main = main
p.slideShow = slideShow
p.gallery = gallery
return p