<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.filipefonseca.pt/index.php?action=history&amp;feed=atom&amp;title=Module%3APortal_pictures</id>
	<title>Module:Portal pictures - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.filipefonseca.pt/index.php?action=history&amp;feed=atom&amp;title=Module%3APortal_pictures"/>
	<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Portal_pictures&amp;action=history"/>
	<updated>2026-04-19T16:28:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>http://wiki.filipefonseca.pt/index.php?title=Module:Portal_pictures&amp;diff=8801&amp;oldid=prev</id>
		<title>imported&gt;Evad37: Make sure slideshow has necessary templatestyles - which changed since Module talk:Random slideshow#Mobile view improvement</title>
		<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Portal_pictures&amp;diff=8801&amp;oldid=prev"/>
		<updated>2021-05-23T12:20:06Z</updated>

		<summary type="html">&lt;p&gt;Make sure slideshow has necessary templatestyles - which changed since &lt;a href=&quot;/index.php?title=Module_talk:Random_slideshow&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module talk:Random slideshow (page does not exist)&quot;&gt;Module talk:Random slideshow#Mobile view improvement&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local randomModule = require('Module:Random')&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
local slideshowModule = require('Module:Random slideshow')&lt;br /&gt;
&lt;br /&gt;
p = {}&lt;br /&gt;
&lt;br /&gt;
-- == Utility functions ==&lt;br /&gt;
local function getCleanArgs(frame)&lt;br /&gt;
	return getArgs(frame, {&lt;br /&gt;
		trim = true,&lt;br /&gt;
		removeBlanks = true&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wikiError(message)&lt;br /&gt;
	return mw.html.create('div'):addClass('error'):wikitext(message)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- replace all newlines in the string with break tags&lt;br /&gt;
-- slideshow only supports single line captions&lt;br /&gt;
local function replaceNewlines(s)&lt;br /&gt;
	return mw.ustring.gsub(s, '%c', '&amp;lt;br /&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- == Argument preparation functions ==&lt;br /&gt;
-- Extracts dates, custom images, and subpages from args&lt;br /&gt;
local function extractPictures(args)&lt;br /&gt;
	local dates = {}&lt;br /&gt;
	local images = {}&lt;br /&gt;
	local subpages = {}&lt;br /&gt;
	for key, value in pairs(args) do&lt;br /&gt;
		if value then&lt;br /&gt;
			if type(key) == &amp;quot;number&amp;quot; then&lt;br /&gt;
				-- positional parameters correspond to POTD dates&lt;br /&gt;
				table.insert(dates, value)&lt;br /&gt;
			elseif string.sub(key, 1, 1) == &amp;quot;i&amp;quot; then&lt;br /&gt;
				-- named parameters with prefixes &amp;quot;i&amp;quot;, &amp;quot;title&amp;quot;, &amp;quot;credit&amp;quot;, and &amp;quot;caption&amp;quot;&lt;br /&gt;
				-- correspond to custom images&lt;br /&gt;
				local num = string.sub(key, 2)&lt;br /&gt;
				local title = args[&amp;quot;title&amp;quot; .. num]&lt;br /&gt;
				local credit = args[&amp;quot;credit&amp;quot; .. num]&lt;br /&gt;
				local caption = args[&amp;quot;caption&amp;quot; .. num] or &amp;quot;&amp;quot;&lt;br /&gt;
				local image = {&lt;br /&gt;
					file = value,&lt;br /&gt;
					title = title,&lt;br /&gt;
					credit = credit,&lt;br /&gt;
					caption = caption&lt;br /&gt;
				}&lt;br /&gt;
				table.insert(images, image)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local subpageMax = tonumber(args['subpagemax']) or 0&lt;br /&gt;
	if subpageMax &amp;gt; 0&lt;br /&gt;
	then&lt;br /&gt;
		local root = args['demoroot'] or (mw.title.getCurrentTitle().rootPageTitle.prefixedText)&lt;br /&gt;
		local picturesRoot = root .. '/' .. (args['subpage'] or 'Selected picture')&lt;br /&gt;
		for i = 1, subpageMax do&lt;br /&gt;
			table.insert(subpages, picturesRoot .. '/' .. tostring(i))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return dates, images, subpages&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDefaultMoreLink(args)&lt;br /&gt;
	local root = args['demoroot'] or (mw.title.getCurrentTitle().rootPageTitle.prefixedText)&lt;br /&gt;
	local picturesPage = args['subpage'] or 'Selected picture'&lt;br /&gt;
	return &amp;quot;[[&amp;quot; .. root .. &amp;quot;/&amp;quot; .. picturesPage .. &amp;quot;|More selected pictures]]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- == Formatting functions ==&lt;br /&gt;
-- transclude [[Template:Portal POTD]]&lt;br /&gt;
local function formatPortalPotd(frame, potdDate)&lt;br /&gt;
	return frame:expandTemplate{&lt;br /&gt;
		title = &amp;quot;Portal POTD&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			potdDate,&lt;br /&gt;
			more = 'no'&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatMoreHtml(more)&lt;br /&gt;
	local moreHtml = mw.html.create('div')&lt;br /&gt;
		:attr(&amp;quot;class&amp;quot;, &amp;quot;noprint&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;style&amp;quot;, &amp;quot;margin-top:0.5em; font-weight:bold; width:100%; text-align:right;&amp;quot;)&lt;br /&gt;
		:wikitext(more)&lt;br /&gt;
	return tostring(moreHtml)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- manual recreation of the bottom half of [[Template:Portal POTD]]&lt;br /&gt;
local function formatPotdText(frame, titleText, creditText, captionText, moreHtml)&lt;br /&gt;
	local res = frame:expandTemplate{&lt;br /&gt;
		title = &amp;quot;POTD portal layout/text&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			title = titleText,&lt;br /&gt;
			credit = creditText,&lt;br /&gt;
			caption = captionText,&lt;br /&gt;
			['margin-top']='0.5em'&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if moreHtml&lt;br /&gt;
	then&lt;br /&gt;
		-- ideally, the &amp;quot;more&amp;quot; text should be trancluded _once_ for the whole box&lt;br /&gt;
		-- but we do it for _every_ image for compatibility with portals, which use numbered subpages&lt;br /&gt;
		res = res .. moreHtml&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatFile(filename)&lt;br /&gt;
	local html = mw.html.create('div')&lt;br /&gt;
		:attr(&amp;quot;class&amp;quot;, &amp;quot;center&amp;quot;)&lt;br /&gt;
		:wikitext(&amp;quot;[[File:&amp;quot; .. filename .. &amp;quot;|380px]]&amp;quot;)&lt;br /&gt;
	return tostring(html)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Extract value named &amp;quot;paramName&amp;quot; from a subpage of [[Template:POTD]]&lt;br /&gt;
local function getPotdPart(frame, potdSubpage, paramName)&lt;br /&gt;
	return frame:expandTemplate{&lt;br /&gt;
		title = potdSubpage,&lt;br /&gt;
		args = { paramName }&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- bottom half of [[Template:Portal POTD]] for a POTD subpage&lt;br /&gt;
local function getPotdText(frame, potdDate, moreHtml)&lt;br /&gt;
	local potdText = getPotdPart(frame, &amp;quot;POTD/&amp;quot; .. potdDate, &amp;quot;portal layout/text&amp;quot;)&lt;br /&gt;
	potdText = replaceNewlines(potdText)&lt;br /&gt;
	if moreHtml&lt;br /&gt;
	then&lt;br /&gt;
		potdText = potdText .. moreHtml&lt;br /&gt;
	end&lt;br /&gt;
	return potdText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- prepare arguments for [[Module:Random slideshow]]&lt;br /&gt;
-- alternating: image1, text1, image2, text2, ...&lt;br /&gt;
local function makeSlideShowArgs(frame, dates, images, subpages, more, limit)&lt;br /&gt;
	local slideShowArgs = {}&lt;br /&gt;
	local moreHtml = formatMoreHtml(more)&lt;br /&gt;
	if #dates &amp;gt; 0 then&lt;br /&gt;
		local randomDates = randomModule.main('array', {t=dates, limit=limit})&lt;br /&gt;
		for _, potdDate in ipairs(randomDates) do&lt;br /&gt;
			local image = getPotdPart(frame, &amp;quot;POTD/&amp;quot; .. potdDate, &amp;quot;image&amp;quot;)&lt;br /&gt;
			local image2 = ''&lt;br /&gt;
			if image == '{{{image}}}' then&lt;br /&gt;
				image = getPotdPart(frame, &amp;quot;POTD/&amp;quot; .. potdDate, &amp;quot;image1&amp;quot;)&lt;br /&gt;
				image2 = '[[File:' .. getPotdPart(frame, &amp;quot;POTD/&amp;quot; .. potdDate, &amp;quot;image2&amp;quot;) .. '|200px|center]]'&lt;br /&gt;
			end&lt;br /&gt;
			local text = image2 .. getPotdText(frame, potdDate, moreHtml)&lt;br /&gt;
			table.insert(slideShowArgs, image)&lt;br /&gt;
			table.insert(slideShowArgs, text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #images &amp;gt; 0 then&lt;br /&gt;
		local randomImages = randomModule.main('array', {t=images, limit=limit})&lt;br /&gt;
		for _, image in pairs(randomImages) do&lt;br /&gt;
			table.insert(slideShowArgs, image['file'])&lt;br /&gt;
			local text = formatPotdText(frame, image['title'], image['credit'], image['caption'], moreHtml)&lt;br /&gt;
			table.insert(slideShowArgs, text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #subpages &amp;gt; 0 then&lt;br /&gt;
		local randomSubpages = randomModule.main('array', {t=subpages, limit=math.floor(limit / 2)})&lt;br /&gt;
		for _, subpage in pairs(randomSubpages) do&lt;br /&gt;
			table.insert(slideShowArgs, 'Blank.png')&lt;br /&gt;
			local subpageContent = replaceNewlines(frame:expandTemplate{ title = subpage })&lt;br /&gt;
			table.insert(slideShowArgs, subpageContent)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return slideShowArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- == Main functions ==&lt;br /&gt;
-- Create a list gallery of all passed images&lt;br /&gt;
local function gallery(frame)&lt;br /&gt;
	local args = getCleanArgs(frame)&lt;br /&gt;
	local dates, images, subpages = extractPictures(args)&lt;br /&gt;
	local texts = {}&lt;br /&gt;
&lt;br /&gt;
	for _, value in pairs(dates) do&lt;br /&gt;
		local topText = '&amp;lt;span id=&amp;quot;Template:POTD/' .. value .. '&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;' .. &amp;quot;[[Template:POTD/&amp;quot; .. value .. &amp;quot;]]\n\n&amp;quot;&lt;br /&gt;
		table.insert(texts,	topText .. formatPortalPotd(frame, value))&lt;br /&gt;
	end&lt;br /&gt;
	for _, image in pairs(images) do&lt;br /&gt;
		local topText = &amp;quot;[[:File:&amp;quot; .. image['file'] .. &amp;quot;]]\n\n&amp;quot;&lt;br /&gt;
		local bottomText = formatPotdText(frame, image['title'], image['credit'], image['caption'])&lt;br /&gt;
		table.insert(texts, topText .. formatFile(image['file']) .. &amp;quot;\n\n&amp;quot; .. bottomText)&lt;br /&gt;
	end&lt;br /&gt;
	for _, subpage in pairs(subpages) do&lt;br /&gt;
		local topText = &amp;quot;[[:&amp;quot; .. subpage .. &amp;quot;]]\n\n&amp;quot;&lt;br /&gt;
		local subpageContent = frame:expandTemplate{ title = subpage }&lt;br /&gt;
		table.insert(texts, topText .. subpageContent)&lt;br /&gt;
	end&lt;br /&gt;
	return frame:preprocess(table.concat(texts, &amp;quot;\n----\n&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Create a slideshow of passed images using [[Module:Random slideshow]]&lt;br /&gt;
local function slideShow(frame)&lt;br /&gt;
	local args = getCleanArgs(frame)&lt;br /&gt;
	local more = args[&amp;quot;more&amp;quot;] or getDefaultMoreLink(args)&lt;br /&gt;
	local dates, images, subpages = extractPictures(args)&lt;br /&gt;
	local limit = 15&lt;br /&gt;
&lt;br /&gt;
	local slideShowArgs = makeSlideShowArgs(frame, dates, images, subpages, more, limit)&lt;br /&gt;
&lt;br /&gt;
	local slideShow = slideshowModule._main(slideShowArgs, false, 'portalSlideshow-container')&lt;br /&gt;
	return frame:extensionTag{ name='templatestyles', args = { src='Module:Random slideshow/styles.css'} } .. frame:preprocess(slideShow)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- entry point for the module&lt;br /&gt;
function main(frame)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.isSubpage&lt;br /&gt;
	then&lt;br /&gt;
		return gallery(frame)&lt;br /&gt;
	else&lt;br /&gt;
		return slideShow(frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.main = main&lt;br /&gt;
p.slideShow = slideShow&lt;br /&gt;
p.gallery = gallery&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Evad37</name></author>
	</entry>
</feed>