Module:Reply to

From Official Kodi Wiki
Revision as of 09:07, 17 October 2021 by RogueScholar (talk | contribs) (Copy Lua source of Wikimedia module of the same name for use by a new 'Reply to' template on Kodi Wiki)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

local p = {}

local function makeError(msg)

 msg ='Error in Template:Reply to: ' .. msg
 return mw.text.tag('strong', {['class']='error'}, 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('Input contains forbidden characters.') 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(string.format(
     'More than %s names specified.',
     tostring(frame.args.max or 50)
   ))
 else
   if usernames < 1 then
     if frame.args.example then args[1] = frame.args.example else return makeError('Username not given.') end
   end
   args['label1'] = args['label1'] or args['label']
   local isfirst = true
   local outStr = args['prefix'] or '@'
   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..', ' end
         if i == maxArg then outStr = outStr..' '..(args['c'] or 'and') .. ' ' end
       end
       outStr = string.format(
         '%s%s',
         outStr,
         args[i],
         args['label'..tostring(i)] or args[i]
       )
     end
   end
   outStr = outStr..(args['p'] or ':')
   return mw.text.tag('span', {['class']='template-ping'}, outStr)
 end

end

return p