มอดูล:Random slideshow

-- Creates a slideshow gallery where the order is randomised. Intended for use on portal pages.
local p = {}
local excerptModule =  require('Module:Excerpt/portals')
local randomModule = require('Module:Random')
local redirectModule = require('Module:Redirect')
function cleanupArgs(argsTable)
	local cleanArgs = {}
	for key, val in pairs(argsTable) do
		if type(val) == 'string' then
			val = val:match('^%s*(.-)%s*$')
			if val ~=  then
				cleanArgskey = val
			end
		else
			cleanArgskey = val
		end
	end
	return cleanArgs
end
function normaliseCssMeasurement(input)
	local suffix = string.reverse(string.sub(string.reverse(input), 1, 2))
	if ( suffix == 'px' ) or ( suffix == 'em' ) or ( string.sub(suffix, 2, 2) == '%' ) then
		return input
	else
		return input .. 'px'
	end
end
function isDeclined(val)
	if not val then return false end
	local declinedWords = " decline declined exclude excluded false none not no n off omit omitted remove removed "
	return string.find(declinedWords , ' '..val..' ', 1, true ) and true or false
end
function makeOutput(galleryLines, maxWidth, containerClassName, nonRandom)
	local randomiseArgs = {	't' = galleryLines }
	local sortedLines = nonRandom and galleryLines or randomModule.main('array', randomiseArgs)
	for i = 1, #sortedLines do
		-- insert a switcher-label span just after the first pipe (which has already been escaped as  instead the | character)
		sortedLinesi = sortedLinesi:gsub(
			"%{%{%!%}%}",
			'Image ' .. tostring(i) .. ,
			1)
	end
	local galleryContent = table.concat(sortedLines, '\n')
	local output = 'class=switcher-container'
	return output
end
function makeGalleryLine(file, caption, credit)
	local title = mw.title.new(file, "File" )
	if not title
	then
		return "File:Blank.pngError|File :File:" .. file .. " does not exist."
	end
	local creditLine = ( credit and  .. credit ..  or  )
	return title.prefixedText ..  .. ( caption or  ) .. creditLine
end
function makeGalleryLinesTable(args)
	local galleryLinesTable = {}
	local i = 1
	while argsi do
		table.insert(galleryLinesTable, makeGalleryLine(argsi, argsi+1, args'credit' .. (i+1)/2))
		i = i + 2
	end
	return galleryLinesTable 
end
function hasCaption(line)
	local caption = mw.ustring.match(line, ".-(.*)")
	-- require caption to exist with more than 5 characters (avoids sizes etc being mistaken for captions)
	return caption and #caption>5 and true or false
end
function extractGalleryFiles(wikitext)
	local gallery = mw.ustring.match(wikitext, '%s*(.-)%s*')
	if not gallery then
		return false
	end
	gallery = mw.ustring.gsub(gallery, '|', )
	return mw.text.split(gallery, '%c')
end
function extractRegularFiles(wikitext)
	local files = {}
	local frame = mw.getCurrentFrame()
	local expand = function(template)
		return frame:preprocess(template)
	end
	for file in mw.ustring.gmatch(wikitext, '%b' ) do
		-- remove keywords that don't work in galleries
		file = mw.ustring.gsub(file, '|%s*thumb%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*thumbnail%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*border%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*left%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*right%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*center%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*centre%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*baseline%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*sub%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*super%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*top%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*text%-top%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*bottom%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*text%-bottom%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*framed?%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*frameless%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*upright%s*0-9%.*%s*(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*upright%s*=.-(%)', '%1')
		file = mw.ustring.gsub(file, '|%s*link%s*=.-(%)', '%1')
		-- remove spaces prior to captions (which cause pre-formatted text)
		file = mw.ustring.gsub(file, '|%s*', '|')
		-- remove sizes, which sometimes get mistaken for captions
		file = mw.ustring.gsub(file, '|%s*%d*x?%d+%s*px%s*(%)', '%1')
		-- expand templates
		file = mw.ustring.gsub(file, '{%b{}}', expand)
		-- remove loose closing braces which don't have matching opening braces
		file = mw.ustring.gsub(file, '}}', )
		-- remove loose opening braces which don't have matching closing braces (and the subsequent content, which is probably just a template name)
		file = mw.ustring.gsub(file, '