This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 01:48, 5 December 2014 (only add the category to pages in the portal namespace). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Revision as of 01:48, 5 December 2014 by Mr. Stradivarius (talk | contribs) (only add the category to pages in the portal namespace)(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff) Module documentation[view] [edit] [history] [purge]This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This module depends on the following other modules: |
This module implements {{random portal component}}. Please see the template page for documentation.
See also
documentation is transcluded from Module:Random portal component/doc. (edit | history)Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.
-- This module implements ] local p = {} local mRandom = require('Module:Random') local currentTitle = mw.title.getCurrentTitle() local function getRandomNumber(max) -- gets a random integer between 1 and max; max defaults to 1 return mRandom.number{max or 1} end 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 if val then return val else return string.format('{{{%s}}}', key) end end 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 pages end local function tryExpandTemplate(frame, title, args) local success, result = pcall(frame.expandTemplate, frame, {title = title, args = args}) if success then return result else local msg = string.format( '<strong class="error">Error: ] does not exist.</strong>', title ) if mw.title.getCurrentTitle().namespace == 100 then -- is in the portal namespace msg = msg .. ']' end return msg end end local function getHeader(frame, pages, header) return tryExpandTemplate( frame, pages.root .. '/box-header', {header, pages.random} ) end local function getRandomSubpageContent(frame, pages) return tryExpandTemplate( frame, pages.random ) end local function getFooter(frame, pages, link) return tryExpandTemplate( frame, pages.root .. '/box-footer', {link} ) end function p._main(args, frame) frame = frame or mw.getCurrentFrame() local pages = getPages(args) local ret = {} ret = getHeader(frame, pages, args.header or 'subpage') ret = getRandomSubpageContent(frame, pages) if not args.footer or not args.footer:find('%S') then ret = '<div style="clear:both;"></div></div>' else ret = getFooter(frame, pages, string.format( ']', pages.root, expandArg(args, 'footer') )) end return table.concat(ret, '\n') end function p._nominate(args, frame) frame = frame or mw.getCurrentFrame() local pages = getPages(args) local ret = {} ret = getHeader(frame, pages, expandArg(args, 'header')) ret = getRandomSubpageContent(frame, pages) ret = getFooter(frame, pages, string.format( '] • ] ', expandArg(args, 'subpage'), pages.root, args.footer or 'Archive' )) return table.concat(ret, '\n') end local function makeInvokeFunction(func) return function (frame) local args = require('Module:Arguments').getArgs(frame, { trim = false, removeBlanks = false, wrappers = { 'Template:Random portal component', 'Template:Random portal component with nominate' } }) return func(args, frame) end end p.main = makeInvokeFunction(p._main) p.nominate = makeInvokeFunction(p._nominate) return pCategory: