Difference between revisions of "Module:Reply to"
Jump to navigation
Jump to search
(fx) |
(username removed) m (1 revision imported) |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
function p.replyto(frame) | function p.replyto(frame) | ||
local origArgs = frame:getParent().args | local origArgs = frame:getParent().args | ||
local args = {} | local args = {} | ||
local maxArg = 0 | local maxArg = 1 | ||
local usernames = 0 | |||
for k, v in pairs(origArgs) do | for k, v in pairs(origArgs) do | ||
if type(k) == 'number' then | if type(k) == 'number' then | ||
if | if mw.ustring.match(v,'%S') then | ||
if k > maxArg then maxArg = k end | if k > maxArg then maxArg = k end | ||
usernames = usernames + 1 | |||
local title = mw.title.new(v) | local title = mw.title.new(v) | ||
if not title then | if not title then return '<strong class="error">Error in [[Template:Reply to]]: Input contains forbidden characters.</strong>' end | ||
args[k] = title.rootText | |||
args[k] = title. | |||
end | end | ||
elseif v == '' and k:sub(0,5) == 'label' then | |||
args[k] = '​' | |||
else | else | ||
args[k] = v | args[k] = v | ||
Line 21: | Line 22: | ||
end | end | ||
if | 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) | |||
) | |||
return | |||
else | else | ||
local outStr = '<span class="template-ping">' | 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 | end | ||
outStr = outStr..(args['p'] or | outStr = outStr..(args['p'] or ':')..'</span>' | ||
return outStr | return outStr | ||
end | end |
Revision as of 12:43, 16 October 2017
Documentation for this module may be created at Module:Reply to/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