此模块的文档可以在Module:Template:Delete/doc创建

local data = require('Module:Template:Delete/data')

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 z.reasons(frame)
    wt = {}
    for i, item in ipairs(data) do
        allnames = extractAliases(item)
        table.insert(wt, '<tr><td>' .. mw.text.listToText(allnames, '、', '或') .. '<td>' .. item['criteria']:gsub('%!%(.-%)%!', function(m) return m:sub(3, -3) end) .. '</td>')
    end
    return '<table class="wikitable">' .. table.concat(wt) .. '</table>'
end

function z.input(frame)
    if frame.args.parent then
        args = frame:getParent().args
    else
        args = frame.args
    end
    -- precache
    map = {}
    for i, item in ipairs(data) do
        map[item['code']:lower()] = i
        if item['aliases'] then
            for j, alias in ipairs(item['aliases']) do
                map[alias:lower()] = i
            end
        end
    end
    -- parse
    i = 1
    rows = {}
    pretext = {}
    deletelinks = {}
    while i < 10 do
        arg = args[i]
        if arg and map[mw.text.trim(arg:lower())] then
            item = data[map[mw.text.trim(arg:lower())]]
            if frame.args.reasoncode then
                return item['code']
            end
            title = mw.title.getCurrentTitle()
            checkfunc = item['check']
            if checkfunc then
                check = checkfunc(title)
            else
                check = nil
            end
            -- special case for F1
            rowsuffix2 = ''
            deletesuffix = ''
            if item['code'] == 'F1' or item['code'] == 'F5' then
                i = i + 1
                if args[i] then
                    img = mw.text.trim(args[i])
                else
                    img = nil
                end
                if img then
                    imgtitle = mw.title.new(img, 'Media')
                else
                    imgtitle = nil
                end
                if imgtitle then
                    deletesuffix = ':[[:File:' .. imgtitle.text .. ']]'
                else
                    if check then
                        rowsuffix2 = '<br><span class="error">為方便管理員檢查,請加上保留檔案的名稱。</span>'
                    else
                        check = '為方便管理員檢查,請加上保留檔案的名稱。'
                    end
                end
            end
            if check then
                rowsuffix = '<br><span class="error">' .. check .. '</span>' ..
                    (args.cat or args.cate or args.category or '[[Category:快速刪除候選|错]]')
            else
                if frame.args.deletelink then
                    table.insert(deletelinks, '[[WB:CSD|' .. item['code'] .. ']]: ' .. item['criteria']:gsub('%!%(.-%)%!', '') .. deletesuffix)
                end
                rowsuffix = args.cat or args.cate or args.category or ('[[Category:快速刪除候選|' .. (item['cat'] or '速') .. ']]')
            end
            if deletesuffix then
                row = '* <strong><span id="speedy-delete-' .. item['code'] .. '">' .. item['criteria']:gsub('%!%(.-%)%!', function(m) return m:sub(3, -3) end) .. '([[WB:CSD|CSD ' .. item['code'] .. ']]' .. deletesuffix .. ')' .. rowsuffix .. rowsuffix2 .. '</span></strong>'
            else
                row = '* <strong><span id="speedy-delete-' .. item['code'] .. '">' .. item['criteria']:gsub('%!%(.-%)%!', function(m) return m:sub(3, -3) end) .. '([[WB:CSD|CSD ' .. item['code'] .. ']])' .. rowsuffix .. rowsuffix2 .. '</span></strong>'
            end
            table.insert(rows, row)
        elseif arg and mw.text.trim(arg) ~= '' then
            if frame.args.reasoncode then
                return ''
            end
            -- try to read it as a title
            title = mw.title.new(mw.text.trim(arg))
            cat = args.cat or args.cate or args.category or '[[Category:快速刪除候選|速]]'
            if title and title.exists then
                if frame.args.deletelink then
                    table.insert(deletelinks, '[[WB:CSD|CSD]]: [[:' .. arg .. ']]')
                end
                table.insert(rows, '*<strong>' .. cat .. '[[:' .. arg .. ']]</strong>')
            else
                if frame.args.deletelink then
                    table.insert(deletelinks, arg)
                end
                arg = string.gsub(arg, "^([*:#]*)(.*)", "%1<strong>%2</strong>")
                table.insert(rows, '*' .. cat .. arg)
            end
        end

        arg = args['c' .. i]
        if arg and mw.text.trim(arg) ~= '' then
            table.insert(rows, '*' .. arg)
        end

        i = i + 1
    end
    -- for use by Twinkle
    if frame.args.deletelink then
        return mw.text.trim(table.concat(deletelinks, ';'):gsub('。;', ';'):gsub('。:', ':'))
    end
    if #rows > 0 then
        return mw.text.trim(table.concat(pretext) .. '\n' .. table.concat(rows, '\n'))
    else
        return '<span style="font-weight:bold;color:red;">(請填寫理由)</span>' .. (args.cat or args.cate or args.category or '[[Category:快速刪除候選|错]]')
    end
end

return z