Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Portal pictures
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local getArgs = require('Module:Arguments').getArgs local randomModule = require('Module:Random') local yesno = require('Module:Yesno') local slideshowModule = require('Module:Random slideshow') p = {} -- == Utility functions == local function getCleanArgs(frame) return getArgs(frame, { trim = true, removeBlanks = true }) end local function wikiError(message) return mw.html.create('div'):addClass('error'):wikitext(message) end -- replace all newlines in the string with break tags -- slideshow only supports single line captions local function replaceNewlines(s) return mw.ustring.gsub(s, '%c', '<br />') end -- == Argument preparation functions == -- Extracts dates, custom images, and subpages from args local function extractPictures(args) local dates = {} local images = {} local subpages = {} for key, value in pairs(args) do if value then if type(key) == "number" then -- positional parameters correspond to POTD dates table.insert(dates, value) elseif string.sub(key, 1, 1) == "i" then -- named parameters with prefixes "i", "title", "credit", and "caption" -- correspond to custom images local num = string.sub(key, 2) local title = args["title" .. num] local credit = args["credit" .. num] local caption = args["caption" .. num] or "" local image = { file = value, title = title, credit = credit, caption = caption } table.insert(images, image) end end end local subpageMax = tonumber(args['subpagemax']) or 0 if subpageMax > 0 then local root = args['demoroot'] or (mw.title.getCurrentTitle().rootPageTitle.prefixedText) local picturesRoot = root .. '/' .. (args['subpage'] or 'Selected picture') for i = 1, subpageMax do table.insert(subpages, picturesRoot .. '/' .. tostring(i)) end end return dates, images, subpages end local function getDefaultMoreLink(args) local root = args['demoroot'] or (mw.title.getCurrentTitle().rootPageTitle.prefixedText) local picturesPage = args['subpage'] or 'Selected picture' return "[[" .. root .. "/" .. picturesPage .. "|More selected pictures]]" end -- == Formatting functions == -- transclude [[Template:Portal POTD]] local function formatPortalPotd(frame, potdDate) return frame:expandTemplate{ title = "Portal POTD", args = { potdDate, more = 'no' } } end local function formatMoreHtml(more) if not yesno(more, true) then return "" end local moreHtml = mw.html.create('div') :attr("class", "noprint") :attr("style", "margin-top:0.5em; font-weight:bold; width:100%; text-align:right;") :wikitext(more) return tostring(moreHtml) end -- manual recreation of the bottom half of [[Template:Portal POTD]] local function formatPotdText(frame, titleText, creditText, captionText, moreHtml) local res = frame:expandTemplate{ title = "POTD portal layout/text", args = { title = titleText, credit = creditText, caption = captionText, ['margin-top']='0.5em' } } if moreHtml then -- ideally, the "more" text should be trancluded _once_ for the whole box -- but we do it for _every_ image for compatibility with portals, which use numbered subpages res = res .. moreHtml end return res end local function formatFile(filename) local html = mw.html.create('div') :attr("class", "center") :wikitext("[[File:" .. filename .. "|380px]]") return tostring(html) end -- Extract value named "paramName" from a subpage of [[Template:POTD]] local function getPotdPart(frame, potdSubpage, paramName) return frame:expandTemplate{ title = potdSubpage, args = { paramName } } end -- bottom half of [[Template:Portal POTD]] for a POTD subpage local function getPotdText(frame, potdDate, moreHtml) local potdText = getPotdPart(frame, "POTD/" .. potdDate, "portal layout/text") potdText = replaceNewlines(potdText) if moreHtml then potdText = potdText .. moreHtml end return potdText end -- prepare arguments for [[Module:Random slideshow]] -- alternating: image1, text1, image2, text2, ... local function makeSlideShowArgs(frame, dates, images, subpages, more, limit) local slideShowArgs = {} local moreHtml = formatMoreHtml(more) if #dates > 0 then local randomDates = randomModule.main('array', {t=dates, limit=limit}) for _, potdDate in ipairs(randomDates) do local image = getPotdPart(frame, "POTD/" .. potdDate, "image") local image2 = '' if image == '{{{image}}}' then image = getPotdPart(frame, "POTD/" .. potdDate, "image1") image2 = '[[File:' .. getPotdPart(frame, "POTD/" .. potdDate, "image2") .. '|200px|center]]' end local text = image2 .. getPotdText(frame, potdDate, moreHtml) table.insert(slideShowArgs, image) table.insert(slideShowArgs, text) end end if #images > 0 then local randomImages = randomModule.main('array', {t=images, limit=limit}) for _, image in pairs(randomImages) do table.insert(slideShowArgs, image['file']) local text = formatPotdText(frame, image['title'], image['credit'], image['caption'], moreHtml) table.insert(slideShowArgs, text) end end if #subpages > 0 then local randomSubpages = randomModule.main('array', {t=subpages, limit=math.floor(limit / 2)}) for _, subpage in pairs(randomSubpages) do table.insert(slideShowArgs, 'Blank.png') local subpageContent = replaceNewlines(frame:expandTemplate{ title = subpage }) table.insert(slideShowArgs, subpageContent) end end return slideShowArgs end -- == Main functions == -- Create a list gallery of all passed images local function gallery(frame) local args = getCleanArgs(frame) local dates, images, subpages = extractPictures(args) local texts = {} for _, value in pairs(dates) do local topText = '<span id="Template:POTD/' .. value .. '"></span>' .. "[[Template:POTD/" .. value .. "]]\n\n" table.insert(texts, topText .. formatPortalPotd(frame, value)) end for _, image in pairs(images) do local topText = "[[:File:" .. image['file'] .. "]]\n\n" local bottomText = formatPotdText(frame, image['title'], image['credit'], image['caption']) table.insert(texts, topText .. formatFile(image['file']) .. "\n\n" .. bottomText) end for _, subpage in pairs(subpages) do local topText = "[[:" .. subpage .. "]]\n\n" local subpageContent = frame:expandTemplate{ title = subpage } table.insert(texts, topText .. subpageContent) end return frame:preprocess(table.concat(texts, "\n----\n")) end -- Create a slideshow of passed images using [[Module:Random slideshow]] local function slideShow(frame) local args = getCleanArgs(frame) local more = args["more"] or getDefaultMoreLink(args) local dates, images, subpages = extractPictures(args) local limit = 15 local slideShowArgs = makeSlideShowArgs(frame, dates, images, subpages, more, limit) local slideShow = slideshowModule._main(slideShowArgs, false, 'portalSlideshow-container') return frame:extensionTag{ name='templatestyles', args = { src='Module:Random slideshow/styles.css'} } .. frame:preprocess(slideShow) end -- entry point for the module 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
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Lua
(
edit
)
Template:Portal templates navbox
(
edit
)
Template:Tl
(
edit
)
Module:Portal pictures/doc
(
edit
)