<translate> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in beta</tvar>|beta]], and is ready for widespread use.</translate> <translate> It is still new and should be used with some caution to ensure the results are as expected.</translate>
Implements {{reply to }} .
Module Quality
Usage
{{#invoke:Reply to|replyTo }}
local p = {}
require ( "strict" )
local _format = require ( "Module:TNT" ). format
local function format ( msg , ...)
return _format ( 'I18n/reply.tab' , msg , ...)
end
local TEMPLATE_LINK = mw . text . tag (
'span' ,
{
class = 'monospaced nowrap' ,
style = 'font-family:monospace,monospace;white-space:nowrap'
},
mw . text . nowiki ( '{{' )
.. '[[Template:reply to|reply to]]'
.. mw . text . nowiki ( '}}' )
)
local function makeError ( msg , ...)
return mw . text . tag (
'strong' ,
{ class = 'error' },
format ( 'error' , TEMPLATE_LINK , format ( msg , ...))
)
end
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 makeError ( 'error-forbidden-input' ) 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 makeError ( 'error-too-many-params' , ( frame . args . max or 50 ))
else
if usernames < 1 then
if frame . args . example then args [ 1 ] = frame . args . example else return makeError ( 'error-no-username' ) end
end
args [ 'label1' ] = args [ 'label1' ] or args [ 'label' ]
local isFirst = true
local outStr = args [ 'prefix' ] or '@'
local msgComma = mw . message . new ( 'comma-separator' ): plain ()
local msgAnd = mw . message . new ( 'and' ): plain ()
local msgSpace = mw . message . new ( 'word-separator' ): plain ()
local msgColon = mw . message . new ( 'colon-separator' ): plain ()
for i = 1 , maxArg do
if args [ i ] then
if isFirst then
isFirst = false
else
if (
( usernames > 2 )
or (( usernames == 2 ) and ( args [ 'c' ] == '' ))
) then
outStr = outStr .. msgComma
end
if (( i == maxArg ) and ( args [ 'c' ] ~= '' )) then
outStr = outStr
.. ( args [ 'c' ]
and ( msgSpace .. args [ 'c' ])
or msgAnd )
.. msgSpace
end
end
outStr = string.format (
'%s[[User:%s|%s]]' ,
outStr ,
args [ i ],
args [ 'label' .. tostring ( i )] or args [ i ]
)
end
end
outStr = outStr .. ( args [ 'p' ] or msgColon )
return mw . text . tag (
'span' ,
{ class = 'template-ping' },
outStr
)
end
end
return p