Module:Carousel

From 2021pedia

Carousel returns one of a list of image filenames.

The index of the one chosen increments every 'switchsecs', which is a parameter giving the number of seconds between switches.

  • switchsecs=3600 would switch every hour
  • switchsecs=43200 would be every 12 hours
  • switchsecs=86400 would be daily (the default)

Usage[edit]

Generic:

  • {{#invoke:carousel | main | name = name-of-data-module | switchsecs = number-of-seconds }}

Examples:

  • {{#invoke:carousel | main }} for 24 hours between switches using default list
  • {{#invoke:carousel | main | switchsecs = 10}} for 10 sec between switches using default list
  • {{#invoke:carousel | main | name= | switchsecs = 1}} 1 sec between switches using default list
  • {{#invoke:carousel | main | name=Komodobish | switchsecs = 5}} 5 sec using Komodobish's list
  • {{#invoke:carousel | main | name=54129 | switchsecs = 43200}} 12 hours using Serial Number 54129's list

The image lists are at Special:PrefixIndex/Module:Carousel/, e.g. Module:Carousel/Komodobish for name=Komodobish.

Typically it will be used with standard image syntax:

  • [[File:{{#invoke:carousel | main | name=Komodobish | switchsecs = 5}} | upright=1.25 | center | thumb | message goes here]]
    message goes here



p = {}

-- carousel returns one of a list of image filenames
--
-- the index of the one chosen increments every 'switchsecs'
-- which is a parameter giving the number of seconds between switches
-- 3600 would switch every hour
-- 43200 would be every 12 hours
-- 86400 would be daily (the default)
--
-- The list of filenames is in a named submodule, so everyone can have their own list.
-- For Komodobish (the default), the module is [[Module:Carousel/Komodobish]].
-- For Serial Number 54129, the module is [[Module:Carousel/54129]].
-- See https://en.wikipedia.org/wiki/Special:PrefixIndex/Module:Carousel/
--
-- {{#invoke:carousel | main | name = name-of-datamodule | switchsecs = number-of-seconds }}
-- {{#invoke:carousel | main | name = 54129 | switchsecs = 10 }} for 10 sec switches using [[Module:Carousel/54129]]
-- {{#invoke:carousel | main }} for 24 hours between switches using the default data module
--

p.main = function(frame)
	-- get parameter switchsecs; if NaN or less than 1, set default
	local switchtime = tonumber(frame.args.switchsecs) or 86400
	if switchtime < 1 then switchtime = 86400 end

	-- get parameter dataname; if missing, use default
	local dataname = frame.args.name or mw.text.trim(frame.args[1]) or ""
	if dataname == "" then dataname = "Komodobish" end

	-- there should be a named data module as a submodule
	local imgs = require("Module:Carousel/" .. dataname)
	local numimgs = #imgs

	-- 'now' increments by 1 every switchtime seconds
	local now = math.floor( os.time() / switchtime )

	-- set an index between 1 and number of images
	local idx = now % numimgs + 1
	return imgs[idx]
end

return p