<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ADelete</id>
	<title>Module:Delete - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ADelete"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Delete&amp;action=history"/>
	<updated>2026-06-27T13:51:07Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:Delete&amp;diff=2145320&amp;oldid=prev</id>
		<title>imported&gt;Xiplus：​U1</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Delete&amp;diff=2145320&amp;oldid=prev"/>
		<updated>2026-01-01T15:38:24Z</updated>

		<summary type="html">&lt;p&gt;U1&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local data = require(&amp;#039;Module:Delete/data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function extractAliases(item)&lt;br /&gt;
    allnames = {item[&amp;#039;code&amp;#039;]}&lt;br /&gt;
    for j, alias in ipairs(item[&amp;#039;aliases&amp;#039;]) do&lt;br /&gt;
        table.insert(allnames, alias)&lt;br /&gt;
    end&lt;br /&gt;
    return allnames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function extractShortDesc(item)&lt;br /&gt;
    if item[&amp;#039;description&amp;#039;] then&lt;br /&gt;
        return item[&amp;#039;description&amp;#039;]:gsub(&amp;#039;{&amp;#039;, &amp;#039;&amp;amp;#123;&amp;#039;):gsub(&amp;#039;}&amp;#039;, &amp;#039;&amp;amp;#125;&amp;#039;):gsub(&amp;#039;|&amp;#039;, &amp;#039;&amp;amp;#124;&amp;#039;)&lt;br /&gt;
    else&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function extractDeleteReason(item)&lt;br /&gt;
    return item[&amp;#039;deletereason&amp;#039;] or item[&amp;#039;criteria&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function shortDesc(frame, name)&lt;br /&gt;
    name = mw.text.trim(name):upper()&lt;br /&gt;
    wt = {}&lt;br /&gt;
    for i, item in ipairs(data) do&lt;br /&gt;
        if name == &amp;#039;&amp;#039; or #name == 1 and item[&amp;#039;code&amp;#039;]:sub(1, 1) == name or item[&amp;#039;code&amp;#039;] == name then&lt;br /&gt;
            para = extractShortDesc(item)&lt;br /&gt;
            if para ~= &amp;#039;&amp;#039; then&lt;br /&gt;
                table.insert(wt, para)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local z = {&lt;br /&gt;
    _helper = {&lt;br /&gt;
        extractAliases = extractAliases,&lt;br /&gt;
        extractShortDesc = extractShortDesc,&lt;br /&gt;
        extractDeleteReason = extractDeleteReason,&lt;br /&gt;
        shortDesc = shortDesc&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function z.shortDesc(frame)&lt;br /&gt;
    return shortDesc(frame, frame.args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function z.reasons(frame)&lt;br /&gt;
    wt = {}&lt;br /&gt;
    for i, item in ipairs(data) do&lt;br /&gt;
        if item[&amp;#039;code&amp;#039;] ~= &amp;#039;G8&amp;#039; and not item[&amp;#039;isRevoked&amp;#039;] then&lt;br /&gt;
            -- 在提示選單隱藏G8 / 已刪除的項目&lt;br /&gt;
            allnames = extractAliases(item)&lt;br /&gt;
            table.insert(wt, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039; .. mw.text.listToText(allnames, &amp;#039;、&amp;#039;, &amp;#039;或&amp;#039;) .. &amp;#039;&amp;lt;td title=&amp;quot;&amp;#039; .. extractShortDesc(item) .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. item[&amp;#039;criteria&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&amp;#039; .. table.concat(wt) .. &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function clone(t)&lt;br /&gt;
    local n = {}&lt;br /&gt;
    for k, v in pairs(t) do&lt;br /&gt;
        if type(v) == type({}) then&lt;br /&gt;
            n[k] = clone(v)&lt;br /&gt;
        else&lt;br /&gt;
            n[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    setmetatable(n, getmetatable(t))&lt;br /&gt;
    return n&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
function z._input(args, options)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local allowRevoked = options.allowRevoked -- 解析已被刪除的代碼以顯示棄用警告&lt;br /&gt;
    -- precache&lt;br /&gt;
    local map = {}&lt;br /&gt;
    for i, item in ipairs(options.data or data) do&lt;br /&gt;
        if not item[&amp;#039;isRevoked&amp;#039;] or allowRevoked then&lt;br /&gt;
            -- 跳掉已棄用的&lt;br /&gt;
            map[item[&amp;#039;code&amp;#039;]:lower()] = i&lt;br /&gt;
            for j, alias in ipairs(item[&amp;#039;aliases&amp;#039;]) do&lt;br /&gt;
                map[alias:lower()] = i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- parse&lt;br /&gt;
    local i = 1&lt;br /&gt;
    local rows = {}&lt;br /&gt;
    while options.maxArgs and (i &amp;lt; options.maxArgs) or true do&lt;br /&gt;
        local arg = args[i]&lt;br /&gt;
        local item&lt;br /&gt;
        if arg and map[mw.text.trim(arg:lower())] then&lt;br /&gt;
            item = clone(data[map[mw.text.trim(arg:lower())]])&lt;br /&gt;
&lt;br /&gt;
            checkfunc = item[&amp;#039;check&amp;#039;]&lt;br /&gt;
            if options.checkFunc and checkfunc then&lt;br /&gt;
                item[&amp;#039;check&amp;#039;] = checkfunc(title)&lt;br /&gt;
            else&lt;br /&gt;
                item[&amp;#039;check&amp;#039;] = nil&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            -- special case for F1/F5&lt;br /&gt;
            if options.checkFile and (item[&amp;#039;code&amp;#039;] == &amp;#039;F1&amp;#039; or item[&amp;#039;code&amp;#039;] == &amp;#039;F5&amp;#039;) then&lt;br /&gt;
                i = i + 1&lt;br /&gt;
                local img&lt;br /&gt;
                if args[i] then&lt;br /&gt;
                    img = mw.text.trim(args[i])&lt;br /&gt;
                else&lt;br /&gt;
                    img = nil&lt;br /&gt;
                end&lt;br /&gt;
                local success, imgtitle&lt;br /&gt;
                if img and img ~= &amp;#039;&amp;#039; then&lt;br /&gt;
                    success, imgtitle = pcall(mw.title.new, img, &amp;#039;Media&amp;#039;)&lt;br /&gt;
                else&lt;br /&gt;
                    imgtitle = nil&lt;br /&gt;
                end&lt;br /&gt;
                if success and imgtitle then&lt;br /&gt;
                    item[&amp;#039;imgLink&amp;#039;] = &amp;#039;：[[:File:&amp;#039; .. imgtitle.text .. &amp;#039;]]&amp;#039;&lt;br /&gt;
                else&lt;br /&gt;
                    item[&amp;#039;imgLink&amp;#039;] = nil&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif arg and mw.text.trim(arg) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            item = {&lt;br /&gt;
                code = &amp;#039;&amp;#039;,&lt;br /&gt;
                criteria = arg&lt;br /&gt;
            }&lt;br /&gt;
        else&lt;br /&gt;
            if not options.maxArgs or i &amp;gt; 20 then&lt;br /&gt;
                -- 防止無限迴圈&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
            item = {&lt;br /&gt;
                code = nil,&lt;br /&gt;
                criteria = nil&lt;br /&gt;
            }&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        arg = args[&amp;#039;c&amp;#039; .. i]&lt;br /&gt;
        if options.parseCommit and arg and mw.text.trim(arg) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            item[&amp;#039;commit&amp;#039;] = arg&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(rows, item)&lt;br /&gt;
&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end&lt;br /&gt;
    if #rows &amp;gt; 0 then&lt;br /&gt;
        return rows&lt;br /&gt;
    else&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function z.input(frame)&lt;br /&gt;
    if frame.args.parent then&lt;br /&gt;
        args = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        args = frame.args&lt;br /&gt;
    end&lt;br /&gt;
    local rows = z._input(args, {&lt;br /&gt;
        maxArgs = 10,&lt;br /&gt;
        checkFunc = true,&lt;br /&gt;
        checkFile = true,&lt;br /&gt;
        parseCommit = true,&lt;br /&gt;
        allowRevoked = yesno(frame.args.allowrevoked)&lt;br /&gt;
    })&lt;br /&gt;
    local user_category = args.cat or args.cate or args.category or false&lt;br /&gt;
    if not rows then&lt;br /&gt;
        return frame.args.deletelink and &amp;#039;&amp;#039; or &amp;#039;&amp;lt;span style=&amp;quot;font-weight:bold;color:var(--color-error,red);&amp;quot;&amp;gt;（請填寫理由）&amp;lt;/span&amp;gt;&amp;#039; .. (user_category or &amp;#039;[[Category:快速删除候选|错]]&amp;#039;)&lt;br /&gt;
    elseif frame.args.reasoncode then&lt;br /&gt;
        return rows[1][&amp;#039;code&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local deletelinks = {}&lt;br /&gt;
    local outputs = {}&lt;br /&gt;
&lt;br /&gt;
    local has_error = false&lt;br /&gt;
    local category_index = false&lt;br /&gt;
    local extra_categories = {}&lt;br /&gt;
&lt;br /&gt;
    for _, item in ipairs(rows) do&lt;br /&gt;
        if item[&amp;#039;code&amp;#039;] and item[&amp;#039;code&amp;#039;] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            local rowsuffix = &amp;#039;&amp;#039;&lt;br /&gt;
            local rowsuffix2 = &amp;#039;&amp;#039;&lt;br /&gt;
            local deletesuffix = &amp;#039;&amp;#039;&lt;br /&gt;
            -- special case for F1/F5&lt;br /&gt;
            if item[&amp;#039;code&amp;#039;] == &amp;#039;F1&amp;#039; or item[&amp;#039;code&amp;#039;] == &amp;#039;F5&amp;#039; then&lt;br /&gt;
                if item[&amp;#039;imgLink&amp;#039;] then&lt;br /&gt;
                    deletesuffix = item[&amp;#039;imgLink&amp;#039;]&lt;br /&gt;
                else&lt;br /&gt;
                    if item[&amp;#039;check&amp;#039;] then&lt;br /&gt;
                        rowsuffix2 = &amp;#039;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;為方便管理員檢查，請加上保留檔案的名稱。&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
                    else&lt;br /&gt;
                        item[&amp;#039;check&amp;#039;] = &amp;#039;為方便管理員檢查，請加上保留檔案的名稱。&amp;#039;&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            -- special case for U1/O1/G10 in user namespace, see Wikipedia:机器人/申请/Xiplus-abot/8&lt;br /&gt;
            if title.namespace == 2 and (item[&amp;#039;code&amp;#039;] == &amp;#039;U1&amp;#039; or item[&amp;#039;code&amp;#039;] == &amp;#039;O1&amp;#039; or item[&amp;#039;code&amp;#039;] == &amp;#039;G10&amp;#039;) then&lt;br /&gt;
                table.insert(extra_categories, &amp;#039;[[Category:U1快速删除候选]]&amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            if item[&amp;#039;check&amp;#039;] then&lt;br /&gt;
                has_error = true&lt;br /&gt;
                rowsuffix = &amp;#039;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. item[&amp;#039;check&amp;#039;] .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
            else&lt;br /&gt;
                if frame.args.deletelink then&lt;br /&gt;
                    table.insert(deletelinks, &amp;#039;[[WP:CSD#&amp;#039; .. item[&amp;#039;code&amp;#039;] .. &amp;#039;|&amp;#039; .. item[&amp;#039;code&amp;#039;] .. &amp;#039;]]: &amp;#039; .. extractDeleteReason(item) .. deletesuffix)&lt;br /&gt;
                end&lt;br /&gt;
                category_index = category_index or item[&amp;#039;category&amp;#039;] or false&lt;br /&gt;
            end&lt;br /&gt;
            table.insert(outputs, &amp;#039;* &amp;lt;strong&amp;gt;&amp;lt;span id=&amp;quot;speedy-delete-&amp;#039; .. item[&amp;#039;code&amp;#039;] .. &amp;#039;&amp;quot; title=&amp;quot;&amp;#039; .. extractShortDesc(item) .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. item[&amp;#039;criteria&amp;#039;] .. &amp;#039;（[[WP:CSD#&amp;#039; .. item[&amp;#039;code&amp;#039;] .. &amp;#039;|CSD &amp;#039; .. item[&amp;#039;code&amp;#039;] .. &amp;#039;]]&amp;#039; .. deletesuffix .. &amp;#039;）&amp;#039; .. rowsuffix .. rowsuffix2 .. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;#039;)&lt;br /&gt;
        elseif item[&amp;#039;code&amp;#039;] == &amp;#039;&amp;#039; then&lt;br /&gt;
            local arg = item[&amp;#039;criteria&amp;#039;]&lt;br /&gt;
            -- try to read it as a title&lt;br /&gt;
            local success, aTitle = mw.title.new(mw.text.trim(arg))&lt;br /&gt;
            if aTitle and aTitle.exists then&lt;br /&gt;
                if frame.args.deletelink then&lt;br /&gt;
                    table.insert(deletelinks, &amp;#039;[[:&amp;#039; .. arg .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
                table.insert(outputs, &amp;#039;*&amp;lt;strong&amp;gt;&amp;#039; .. &amp;#039;[[:&amp;#039; .. arg .. &amp;#039;]]&amp;lt;/strong&amp;gt;&amp;#039;)&lt;br /&gt;
            else&lt;br /&gt;
                if frame.args.deletelink then&lt;br /&gt;
                    table.insert(deletelinks, arg)&lt;br /&gt;
                end&lt;br /&gt;
                arg = string.gsub(arg, &amp;#039;^([*:#]*)(.*)&amp;#039;, &amp;#039;%1&amp;lt;strong&amp;gt;%2&amp;lt;/strong&amp;gt;&amp;#039;)&lt;br /&gt;
                table.insert(outputs, &amp;#039;*&amp;#039; .. arg)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if item[&amp;#039;commit&amp;#039;] then&lt;br /&gt;
            table.insert(outputs, &amp;#039;*&amp;#039; .. item[&amp;#039;commit&amp;#039;])&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- for use by Twinkle&lt;br /&gt;
    if frame.args.deletelink then&lt;br /&gt;
        return mw.text.trim(table.concat(deletelinks, &amp;#039;；&amp;#039;):gsub(&amp;#039;。；&amp;#039;, &amp;#039;；&amp;#039;):gsub(&amp;#039;。：&amp;#039;, &amp;#039;：&amp;#039;))&lt;br /&gt;
    else&lt;br /&gt;
        local category&lt;br /&gt;
        if user_category then&lt;br /&gt;
            category = user_category&lt;br /&gt;
        else&lt;br /&gt;
            if has_error then&lt;br /&gt;
                category_index = &amp;#039;错&amp;#039;&lt;br /&gt;
            end&lt;br /&gt;
            category = string.format(&amp;#039;[[Category:快速删除候选|%s]]%s&amp;#039;,  category_index or &amp;#039;速&amp;#039;, table.concat(extra_categories, &amp;#039;&amp;#039;))&lt;br /&gt;
        end&lt;br /&gt;
        if #outputs &amp;gt; 0 then&lt;br /&gt;
            return mw.text.trim(table.concat(outputs, &amp;#039;\n&amp;#039;)) .. category&lt;br /&gt;
        else&lt;br /&gt;
            return category&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return z&lt;/div&gt;</summary>
		<author><name>imported&gt;Xiplus</name></author>
	</entry>
</feed>