Module:Template:Delete2

勤求古训,博采众方
文档图示 模块文档[创建]
local mDelete = require('Module:Delete')
local mDelcat = require('Module:Delcat')

local data = require('Module:Delete/data')
local data_sandbox = require('Module:Delete/data/sandbox')

local z = {}

function extractAliases(item)
    allnames = {item['code']}
    for j, alias in ipairs(item['aliases']) do
        table.insert(allnames, alias)
    end
    return allnames
end

function extractShortDesc(item)
    if item['description'] then
        return item['description']:gsub('{', '{'):gsub('}', '}'):gsub('|', '|')
    else
        return ''
    end
end

function z.reasonsBox(frame)
	local wt = [=[
{|class="wikitable
|-
!速删编号!!可使用的代码!!简介!!详细说明
	]=]
    for i, item in ipairs(data) do
        allnames = extractAliases(item)
        wt = wt .. string.format([=[
|-
|%s
|
* %s
|%s
|%s
        ]=]
        , item['code'], mw.text.listToText(allnames, '\n* ', '\n* '), item['criteria'], extractShortDesc(item):gsub('{{', '{{tl|'):gsub('|', '|'):gsub('}}', '}}'))
    end
    wt = wt .. '|}'
    return frame:preprocess(wt)
end

function z.reasonsBox_sandbox(frame)
	local wt = [=[

<span style="font-weight:bold; background-color:#FFDD77; color:#800000;">(*)</span><span style="font-weight:bold; color:red;">提醒:此渲染版本为沙盒版本,可能与目前通行版本有所不同!</span>

{|class="wikitable
|-
!速删编号!!可使用的代码!!简介!!详细说明
	]=]
    for i, item in ipairs(data_sandbox) do
        allnames = extractAliases(item)
        wt = wt .. string.format([=[
|-
|%s
|
* %s
|%s
|%s
        ]=]
        , item['code'], mw.text.listToText(allnames, '\n* ', '\n* '), item['criteria'], extractShortDesc(item):gsub('&#123;&#123;', '{{tl|'):gsub('&#124;', '|'):gsub('&#125;&#125;', '}}'))
    end
    wt = wt .. '|}'
    return frame:preprocess(wt)
end

function z.CSD_reason(frame)
	if frame.args.parent then
        args = frame:getParent().args
    else
        args = frame.args
    end
	map = {}
    for i, item in ipairs(data) do
        map[item['code']:lower()] = i
        for j, alias in ipairs(item['aliases']) do
            map[alias:lower()] = i
        end
    end
    i = 1
    rows = {}
    arg = args[1]
    if arg ~= nil then
        if arg and map[mw.text.trim(arg:lower())] then
            item = data[map[mw.text.trim(arg:lower())]]
            local text = ''
            if args[2] ~= nil and args[2] ~= '' then
        	    text = args[2]
            elseif args['notCSD'] ~= nil and args['notCSD'] ~= '' then
        	    text = item['code']
            else
        	    text = 'CSD ' .. item['code']
            end
            if args.nolink then
            	return text
            elseif args.reason then
            	return '[[WP:CSD#' .. item['code'] .. '|' .. text .. ']]:<span title="' .. extractShortDesc(item) .. '">' .. item['criteria'] .. '</span>'
            elseif args.onlyreason then
            	return '<span title="' .. extractShortDesc(item) .. '">' .. item['criteria'] .. '</span>'
            else
            	return '[[WP:CSD#' .. item['code'] .. '|' .. text .. ']]'
            end
        elseif arg and mw.text.trim(arg) ~= '' then
            return require('Module:Error').error{'错误:无法找到速删代码为' .. args[i] .. '的速删项目。'}
        end
    else
       	return '[[WP:CSD|' .. (args[2] or '快速删除方针') .. ']]'
    end
end

function z.CSD_reason_sb(frame)
	if frame.args.parent then
        args = frame:getParent().args
    else
        args = frame.args
    end
	map = {}
    for i, item in ipairs(data_sandbox) do
        map[item['code']:lower()] = i
        for j, alias in ipairs(item['aliases']) do
            map[alias:lower()] = i
        end
    end
    i = 1
    rows = {}
    arg = args[1]
    if arg ~= nil then
        if arg and map[mw.text.trim(arg:lower())] then
            item = data_sandbox[map[mw.text.trim(arg:lower())]]
            local text = ''
            if args[2] ~= nil and args[2] ~= '' then
        	    text = args[2]
            elseif args['notCSD'] ~= nil and args['notCSD'] ~= '' then
        	    text = item['code']
            else
        	    text = 'CSD ' .. item['code']
            end
            if args.nolink then
            	return text
            elseif args.reason then
            	return '[[WP:CSD#' .. item['code'] .. '|' .. text .. ']]:<span title="' .. extractShortDesc(item) .. '">' .. item['criteria'] .. '</span>'
            elseif args.onlyreason then
            	return '<span title="' .. extractShortDesc(item) .. '">' .. item['criteria'] .. '</span>'
            else
            	return '[[WP:CSD#' .. item['code'] .. '|' .. text .. ']]'
            end
        elseif arg and mw.text.trim(arg) ~= '' then
            return require('Module:Error').error{'错误:无法找到速删代码为' .. args[i] .. '的速删项目。'}
        end
    else
       	return '[[WP:CSD|' .. (args[2] or '快速删除方针') .. ']]'
    end
end

function z._input(args, callargs)
	callargs = callargs or {}
	local vaildArgs = false
	local i = 0
	
	while i < 10 do
        arg = args[i]
        if arg and mw.text.trim(arg) ~= '' then
            vaildArgs = true
        end

        i = i + 1
	end

	if not vaildArgs then
		return nil
	end

	 -- hack
	 args.parent = false
	 args.reasoncode = callargs.reasoncode
	 args.deletelink = callargs.deletelink
	 
	return mDelete.input({
		args = args
	})
end

function z._getInputWithoutError(args)
	local result = z._input(args, {
		reasoncode = false,
		deletelink = false
	})
	
	if not result then
		return nil
	end

	-- remove error and category
	result = mDelcat.delete_category(result, {})
	result = mw.ustring.gsub(result, "<br><span class=\"error\">.-</span>", "")
	
	-- replace <strong><span id="speedy-delete-XXX" title="xxx">(.-)</span></strong>
	result = mw.ustring.gsub(result, "<strong><span id=\"speedy%-delete%-.-\" title=\".-\" ->(.-)</span></strong>", "%1")
	return result
end

function z.getInputWithoutError(frame)
	local args = frame:getParent().args
	local out = z._getInputWithoutError(args);
	if not out then
		return '* <span style="color:#080;">(未填写理由)</span>'
	end
	return out
end


z.reasons_box = z.reasonsBox
z.reasons_box_sb = z.reasonsBox_sandbox
z.CSD_reason_sb = z.CSD_reason_sandbox

return z