跳转到内容

模組:VandalSubmitForm/AN3

维基百科,自由的百科全书
local p = {}
local yesno = require('Module:Yesno')

local function mightGetTitle(pageName, overrideNS)
	if not pageName then
		return ''
	end
	pageName = mw.ustring.gsub(pageName, '^%[%[(.*)%]%]$', '%1')
	pageName = mw.ustring.gsub(pageName, '\226\128\142', '') -- 不可見字元 ‎ (0x200e)
	local success, title = pcall(mw.title.new, mw.text.trim(pageName), overrideNS)
	if success then
		return title
	end
	return nil
end

function p._cleanUserName(userName)
	local title = mightGetTitle(userName, 2)
	if title then
		return title.rootText
	end
	return nil
end

function p._cleanPageName(pageName)
	local title = mightGetTitle(pageName)
	if title then
		return title.prefixedText
	end
	return nil
end

local form = mw.text.trim([=[{{safesubst:/form
| 用户名1 = 
| 用户名2 = 
<!-- 若此次编辑争议涉及更多用户,可继续填"用户名3"等;若你是编辑争议的其中一方,则可不填自己 -->
| 受影响的条目1 = 
<!-- 请勿在此栏填写“见贡献”、“很多”之类。这些请写在说明处 -->
| 说明 = 
}}]=])

function p._makeReportContent(args)
	local i = 1
	local userNameListFriendly = ''
	while true do
		local userName = p._cleanUserName(args['用户名' .. i])
		if userName then 
			if userName ~= '' then -- 如果为空就不操作
				if userNameListFriendly ~= '' then
					userNameListFriendly = userNameListFriendly .. '、' --加上顿号
				end
				userNameListFriendly = userNameListFriendly .. userName
			end
		else
			break
		end
		i = i + 1
	end
	if userNameListFriendly == '' then --标题列表仍空,此时未填任何用户名
		return ''
	end
	local output = mw.ustring.format('=== %s ===', userNameListFriendly)
	-- 构造用户链接列表
	i = 1
	while true do
		local userName = p._cleanUserName(args['用户名' .. i])
		if userName then 
			if userName ~= '' then -- 如果为空就不操作
				output = output .. mw.ustring.format('\n* \'\'\'{{vandal|1=%s}}\'\'\'', userName)
			end
		else
			break
		end
		i = i + 1
	end
	-- 遞迴獲取受影響的條目
	i = 1
	while true do
		local pageName = p._cleanPageName(args['受影响的条目' .. i])
		if pageName then
			output = output .. mw.ustring.format('\n* {{pagelinks|1=%s}}', pageName)
		else
			break
		end
		i = i + 1
	end
	if args['说明'] and mw.text.trim(args['说明']) ~= '' then
		output = output .. mw.ustring.format('\n* %s', mw.text.trim(args['说明']))
	end
	output = output .. '\n* 发现人:~~~~\n* 处理:<!-- 非管理員僅可標記已執行的封禁,針對提報的意見請放在下一行 -->'
	return output
end

function p.main(frame)
	local pFrame = frame:getParent()
	if not pFrame then
		return ''
	end
	local tArgs = frame.args
	local pArgs = pFrame.args
	if mw.isSubsting() then
		return mw.text.trim((yesno(pArgs.norebuild) and '' or form .. '\n') .. p._makeReportContent(pArgs))
	else
		return frame:expandTemplate{ title = tArgs.root .. '/header' }
	end
end

return p