Module:Ping: Difference between revisions

From Test Wiki
Jump to navigation Jump to search
Content deleted Content added
mNo edit summary
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:


local function makeError(msg)
local function makeError(msg)
msg ='Error in [[Template:Mention]]: ' .. msg
msg ='Error in [[Template:Ping]]: ' .. msg
return mw.text.tag('strong', {['class']='error'}, msg)
return mw.text.tag('strong', {['class']='error'}, msg)
end
end


function p.mention(frame)
function p.ping(frame)
local origArgs = frame:getParent().args
local origArgs = frame:getParent().args
local args = {}
local args = {}

Latest revision as of 22:34, 25 February 2024

Documentation for this module may be created at Module:Ping/doc

local p = {}

local function makeError(msg)
	msg ='Error in [[Template:Ping]]: ' .. msg
	return mw.text.tag('strong', {['class']='error'}, msg)
end

function p.ping(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[[User:%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