Module:Arguments: Difference between revisions
m
3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf
m>Mr. Stradivarius m (Protected Module:Arguments: High-risk Lua module ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))) |
m (3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf) |
||
| (37 intermediate revisions by 26 users not shown) | |||
| Line 1: | Line 1: | ||
-- This module provides easy processing of arguments passed to Scribunto from #invoke. | -- This module provides easy processing of arguments passed to Scribunto from | ||
-- #invoke. It is intended for use by other Lua modules, and should not be | |||
-- called from #invoke directly. | |||
local libraryUtil = require('libraryUtil') | |||
local checkType = libraryUtil.checkType | |||
local arguments = {} | local arguments = {} | ||
function | -- Generate four different tidyVal functions, so that we don't have to check the | ||
-- options every time we call it. | |||
local function tidyValDefault(key, val) | |||
if type(val) == 'string' then | |||
val = val:match('^%s*(.-)%s*$') | |||
if val == '' then | |||
return nil | |||
else | |||
return val | |||
end | |||
else | |||
return val | |||
end | |||
end | |||
local function tidyValTrimOnly(key, val) | |||
if type(val) == 'string' then | |||
return val:match('^%s*(.-)%s*$') | |||
else | |||
return val | |||
end | |||
end | |||
local function tidyValRemoveBlanksOnly(key, val) | |||
if type(val) == 'string' then | |||
if val:find('%S') then | |||
if | return val | ||
else | |||
return nil | |||
end | |||
else | else | ||
return val | |||
end | end | ||
end | |||
local function tidyValNoChange(key, val) | |||
return val | |||
end | |||
local function matchesTitle(given, title) | |||
local tp = type( given ) | |||
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title | |||
end | |||
local translate_mt = { __index = function(t, k) return k end } | |||
function arguments.getArgs(frame, options) | |||
checkType('getArgs', 1, frame, 'table', true) | |||
checkType('getArgs', 2, options, 'table', true) | |||
frame = frame or {} | |||
options = options or {} | |||
--[[ | |||
-- Set up argument translation. | |||
--]] | |||
if | options.translate = options.translate or {} | ||
if options. | if getmetatable(options.translate) == nil then | ||
setmetatable(options.translate, translate_mt) | |||
end | |||
if options.backtranslate == nil then | |||
options.backtranslate = {} | |||
for k,v in pairs(options.translate) do | |||
options.backtranslate[v] = k | |||
end | |||
end | |||
if options.backtranslate and getmetatable(options.backtranslate) == nil then | |||
setmetatable(options.backtranslate, { | |||
__index = function(t, k) | |||
if options.translate[k] ~= k then | |||
return nil | |||
else | |||
return k | |||
end | |||
end | end | ||
if options. | }) | ||
end | |||
--[[ | |||
-- Get the argument tables. If we were passed a valid frame object, get the | |||
-- frame arguments (fargs) and the parent frame arguments (pargs), depending | |||
-- on the options set and on the parent frame's availability. If we weren't | |||
-- passed a valid frame object, we are being called from another Lua module | |||
-- or from the debug console, so assume that we were passed a table of args | |||
-- directly, and assign it to a new variable (luaArgs). | |||
--]] | |||
local fargs, pargs, luaArgs | |||
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then | |||
if options.wrappers then | |||
--[[ | |||
-- The wrappers option makes Module:Arguments look up arguments in | |||
-- either t | |||