Difference between revisions of "Module:Reply to/sandbox"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius (make sure that only args[1] can have a label of args.label) |
blackwiki>Ahecht (sync) |
||
| Line 1: | Line 1: | ||
| − | |||
| − | |||
local p = {} | local p = {} | ||
| − | + | function p.replyto(frame) | |
| − | + | local origArgs = frame:getParent().args | |
| − | + | local args = {} | |
| − | + | local maxArg = 1 | |
| − | + | local usernames = 0 | |
| − | + | for k, v in pairs(origArgs) do | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | for k in pairs( | ||
if type(k) == 'number' then | if type(k) == 'number' then | ||
| − | + | if mw.ustring.match(v,'%S') then | |
| + | if k > maxArg then maxArg = k end | ||
| + | usernames = usernames + 1 | ||
| + | local title = mw.title.new(v) | ||
| + | if not title then return '<strong class="error">Error in [[Template:Reply to]]: Input contains forbidden characters.</strong>' end | ||
| + | args[k] = title.rootText | ||
| + | end | ||
| + | elseif v == '' and k:sub(0,5) == 'label' then | ||
| + | args[k] = '​' | ||
| + | else | ||
| + | args[k] = v | ||
end | end | ||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | + | if usernames > (tonumber(frame.args.max) or 50) then | |
| − | + | return string.format( | |
| − | + | '<strong class="error">Error in [[Template:Reply to]]: More than %s names specified.</strong>', | |
| − | + | tostring(frame.args.max or 50) | |
| − | if | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | return | ||
| − | " | ||
| − | |||
) | ) | ||
| − | + | else | |
| − | + | if usernames < 1 then | |
| − | + | if frame.args.example then args[1] = frame.args.example else return '<strong class="error">Error in [[Template:Reply to]]: Username not given.</strong>' end | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | local | + | local isfirst = true |
| − | + | local outStr = '' | |
| − | + | for i = 1, maxArg do | |
| − | + | if args[i] then | |
| − | + | if isfirst then | |
| − | + | outStr = string.format( | |
| − | + | '<span class="template-ping">%s[[User:%s|%s]]', | |
| − | + | args['prefix'] or '@', | |
| − | + | args[i], | |
| − | + | (args['label1'] or args['label']) or args[i] | |
| − | + | ) | |
| − | + | isfirst = false | |
| − | + | else | |
| − | + | if ( (usernames > 2) or ((usernames == 2) and (args['c'] == '')) ) then outStr = outStr..',' end | |
| − | + | if i == maxArg then outStr = outStr..' '..(args['c'] or 'and') end | |
| − | + | outStr = string.format( | |
| − | + | '%s [[User:%s|%s]]', | |
| − | + | outStr, | |
| − | + | args[i], | |
| − | + | args['label'..tostring(i)] or args[i] | |
| − | + | ) | |
| − | + | end | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
| − | |||
| − | |||
end | end | ||
| + | outStr = outStr..(args['p'] or ':')..'</span>' | ||
| + | return outStr | ||
end | end | ||
| − | |||
end | end | ||
return p | return p | ||
Revision as of 00:44, 4 July 2018
Documentation for this module may be created at Module:Reply to/sandbox/doc
local p = {}
function p.replyto(frame)
local origArgs = frame:getParent().args
local args = {}
local maxArg = 1
local usernames = 0
for k, v in pairs(origArgs) do
if type(k) == 'number' then
if mw.ustring.match(v,'%S') then
if k > maxArg then maxArg = k end
usernames = usernames + 1
local title = mw.title.new(v)
if not title then return '<strong class="error">Error in [[Template:Reply to]]: Input contains forbidden characters.</strong>' end
args[k] = title.rootText
end
elseif v == '' and k:sub(0,5) == 'label' then
args[k] = '​'
else
args[k] = v
end
end
if usernames > (tonumber(frame.args.max) or 50) then
return string.format(
'<strong class="error">Error in [[Template:Reply to]]: More than %s names specified.</strong>',
tostring(frame.args.max or 50)
)
else
if usernames < 1 then
if frame.args.example then args[1] = frame.args.example else return '<strong class="error">Error in [[Template:Reply to]]: Username not given.</strong>' end
end
local isfirst = true
local outStr = ''
for i = 1, maxArg do
if args[i] then
if isfirst then
outStr = string.format(
'<span class="template-ping">%s[[User:%s|%s]]',
args['prefix'] or '@',
args[i],
(args['label1'] or args['label']) or args[i]
)
isfirst = false
else
if ( (usernames > 2) or ((usernames == 2) and (args['c'] == '')) ) then outStr = outStr..',' end
if i == maxArg then outStr = outStr..' '..(args['c'] or 'and') end
outStr = string.format(
'%s [[User:%s|%s]]',
outStr,
args[i],
args['label'..tostring(i)] or args[i]
)
end
end
end
outStr = outStr..(args['p'] or ':')..'</span>'
return outStr
end
end
return p