-- This module implements . It is alpha software.
local p =
local mRandom = require('Module:Random')local currentTitle = mw.title.getCurrentTitle
-- tracking function added by BHG 29/04/2019-- called as subPageTrackingCategories(pages, args.max)local function subPageTrackingCategories(pages, max) local retval = ""; local availableSubPageCount = 0; local i; -- don't track DYK etc, only selected articles etc if (string.find(pages.subpage, "/[sS]elected")
-- limit checking to prevent Lua overload local myMaxCheck = 60 if tonumber(max) < myMaxCheck then myMaxCheck = tonumber(max) end for i=1,myMaxCheck do local aSubPage = mw.title.new(pages.subpage .. '/' .. i) if (aSubPage.exists) then availableSubPageCount = availableSubPageCount + 1; end end if myMaxCheck >= tonumber(max) then if (availableSubPageCount < tonumber(max)) then retval = retval .. "" elseif (availableSubPageCount > tonumber(max)) then retval = retval .. "" end end if (availableSubPageCount < 2) then retval = retval .. "" elseif (availableSubPageCount <= 5) then retval = retval .. "" elseif (availableSubPageCount <= 10) then retval = retval .. "" elseif (availableSubPageCount <= 15) then retval = retval .. "" elseif (availableSubPageCount <= 20) then retval = retval .. "" elseif (availableSubPageCount <= 25) then retval = retval .. "" elseif (availableSubPageCount <= 30) then retval = retval .. "" elseif (availableSubPageCount <= 40) then retval = retval .. "" elseif (availableSubPageCount <= 50) then retval = retval .. "" else retval = retval .. "" end return retval;end
local function getRandomNumber(max) -- gets a random integer between 1 and max; max defaults to 1 return mRandom.numberend
local function expandArg(args, key) -- Emulate how unspecified template parameters appear in wikitext. If the -- specified argument exists, its value is returned, and if not the argument -- name is returned inside triple curly braces. local val = args[key] if val then return val else return string.format('', key) endend
local function getPages(args) local pages = pages.root = args.rootpage or currentTitle.prefixedText pages.subpage = pages.root .. '/' .. expandArg(args, 'subpage') pages.random = pages.subpage .. '/' .. getRandomNumber(args.max) return pagesend
local function tryExpandTemplate(frame, title, args) local success, result = pcall(frame.expandTemplate, frame,) if success then return result else local msg = string.format('The page "%s" does not exist.', title ) if mw.title.getCurrentTitle.namespace
local function getRandomSubpageContent(frame, pages) return tryExpandTemplate(frame, pages.random )end
function p._main(args, frame) frame = frame or mw.getCurrentFrame local pages = getPages(args)
local ret = ret[#ret + 1] = getRandomSubpageContent(frame, pages)
return table.concat(ret, '\n') .. subPageTrackingCategories(pages, args.max, args.header)end
function p._nominate(args, frame) frame = frame or mw.getCurrentFrame local pages = getPages(args) local ret = ret[#ret + 1] = getRandomSubpageContent(frame, pages)
return table.concat(ret, '\n') .. subPageTrackingCategories(pages, args.max, args.header)end
local function makeInvokeFunction(func) return function (frame) local args = require('Module:Arguments').getArgs(frame,) return func(args, frame) endend
p.main = makeInvokeFunction(p._main)
return p