Module:RFPP

local mArguments -- lazily initialise Module:Arguments local mUserLinks -- lazily initialise Module:UserLinks local data = mw.loadData('Module:RFPP/data')

local p = {}

-- Helper functions

local function makeTimeBlurb(time) local indefStrings = data.indefStrings -- matches "indef", "infinite", etc.	if not time then return '' elseif indefStrings[time] then return " indefinitely" else local stringToFormat = " for a period of %s." .. ' After %s the page will be automatically unprotected' return string.format(stringToFormat, time, time) end end

local function makeUserLinks(user, userType) mUserLinks = mUserLinks or require('Module:UserLinks') local ulargs if userType == 'admin' then ulargs = {'t', 'c', 'bls', 'pr', 'del', 'm', 'rl', 'rfa'} else ulargs = {'t', 'c'} end ulargs.user = user return mUserLinks._main(ulargs) end

-- Main functions

function p.main(frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame, {parentOnly = true}) return p._main(args) or '' end

function p._main(args) local code = args[1] if not code then return nil end

-- Get the blurb from the data table. local responseData = data.codes[code] if not responseData then return nil end local blurb = responseData.blurb

-- Set up the table of parameter functions. local maxParam = 1 -- Tracks the parameter to use for the note. local function setMaxParam(n) if n > maxParam then maxParam = n		end end local parameterFunctions = { ['$1'] = function local param = 2 setMaxParam(param) return makeTimeBlurb(args[param]) end, ['$2'] = function local param = 2 setMaxParam(param) local username = args[param] if username then return ': ' .. makeUserLinks(username, 'user') end end, ['$3'] = function local param = 3 setMaxParam(param) local username = args[param] if username then return ' blocked by ' .. makeUserLinks(username, 'admin') end end, ['$4'] = function local param = 2 setMaxParam(param) local username = args[param] if username then return ' by ' .. makeUserLinks(username, 'admin') end end }

-- Substitute the parameters into the blurb using the parameter functions. blurb = blurb:gsub(		'$[1-4]',		function (param)			return parameterFunctions[param] or ''		end	)

-- Add the note. local note = args[maxParam + 1] if note then local noteType = responseData.note local stringToFormat if noteType == 'sentence' then stringToFormat = "%s %s" elseif noteType == 'fragment' then stringToFormat = "%s, %s" else stringToFormat = '' end blurb = string.format(stringToFormat, blurb, note) end

return blurb end

return p