<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=Module%3A%E6%96%87%E6%9C%AC%E5%88%87%E6%8D%A2%E6%98%BE%E7%A4%BA</id>
	<title>Module:文本切换显示 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://hmoegirl.com/index.php?action=history&amp;feed=atom&amp;title=Module%3A%E6%96%87%E6%9C%AC%E5%88%87%E6%8D%A2%E6%98%BE%E7%A4%BA"/>
	<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=Module:%E6%96%87%E6%9C%AC%E5%88%87%E6%8D%A2%E6%98%BE%E7%A4%BA&amp;action=history"/>
	<updated>2026-10-12T09:08:10Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://hmoegirl.com/index.php?title=Module:%E6%96%87%E6%9C%AC%E5%88%87%E6%8D%A2%E6%98%BE%E7%A4%BA&amp;diff=60341&amp;oldid=prev</id>
		<title>imported&gt;一个人的孤独：​创建页面，内容为“-- luacheck: globals mw local module = {}  local getArgs = require(&#039;Module:Arguments&#039;).getArgs  --[[     对分支进行排序。     -----     branches: 所有要…”</title>
		<link rel="alternate" type="text/html" href="https://hmoegirl.com/index.php?title=Module:%E6%96%87%E6%9C%AC%E5%88%87%E6%8D%A2%E6%98%BE%E7%A4%BA&amp;diff=60341&amp;oldid=prev"/>
		<updated>2021-01-08T12:25:54Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“-- luacheck: globals mw local module = {}  local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs  --[[     对分支进行排序。     -----     branches: 所有要…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- luacheck: globals mw&lt;br /&gt;
local module = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    对分支进行排序。&lt;br /&gt;
    -----&lt;br /&gt;
    branches: 所有要排序的参数，其中部分是分支参数。&lt;br /&gt;
    sortProvider: 其中仅以&amp;quot;@#&amp;quot;开头后紧跟数字的值键对作为排序参考。&lt;br /&gt;
--]]&lt;br /&gt;
local sortBranches = function(branches, sortProvider)&lt;br /&gt;
    sortProvider = sortProvider or branches -- 参数和排序参考写在同一个表的情况。&lt;br /&gt;
&lt;br /&gt;
    local sortKeys = {}&lt;br /&gt;
    local result = {}&lt;br /&gt;
    for k, v in pairs(sortProvider) do&lt;br /&gt;
        v = mw.text.trim(v)&lt;br /&gt;
        if type(k) == &amp;#039;string&amp;#039; and v ~= &amp;#039;&amp;#039; then -- 初步筛选k和v。&lt;br /&gt;
            local index = tonumber(mw.ustring.match(k, &amp;#039;^@#(%d+)$&amp;#039;))&lt;br /&gt;
            if index ~= nil and index &amp;gt;= 1 then -- 最终筛选k。&lt;br /&gt;
                result[index] = {v, branches[v]} -- 赋值明确指定位置的参数。&lt;br /&gt;
                sortKeys[v] = true -- 记录已排序的参数。&lt;br /&gt;
                sortProvider[k] = nil -- 清除排序记录。&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local index = 1&lt;br /&gt;
    for k, v in pairs(branches) do&lt;br /&gt;
        if not sortKeys[k] then&lt;br /&gt;
            while result[index] do&lt;br /&gt;
                index = index + 1&lt;br /&gt;
            end -- 找到下一个可用的位置。&lt;br /&gt;
            result[index] = {k, v} -- 按照默认顺序赋值&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return ipairs(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local initSpan = function(className, templateName, frame)&lt;br /&gt;
    local span = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
    span:attr(&amp;#039;class&amp;#039;, className)&lt;br /&gt;
&lt;br /&gt;
    local sortedBranchProvider = {&lt;br /&gt;
        sortBranches(&lt;br /&gt;
            getArgs(&lt;br /&gt;
                frame,&lt;br /&gt;
                {&lt;br /&gt;
                    wrappers = &amp;#039;Template:&amp;#039; .. templateName&lt;br /&gt;
                }&lt;br /&gt;
            )&lt;br /&gt;
        )&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if className == &amp;#039;textToggleDisplayButtons&amp;#039; then -- 自Template:切换显示调用。&lt;br /&gt;
        local operators = {} -- 操作参数。&lt;br /&gt;
        local contentlist = {} --[[内容表列。结构为：&lt;br /&gt;
                                                {&lt;br /&gt;
                                                    strcode = 字符串代号,&lt;br /&gt;
                                                    on = @on后缀的内容,&lt;br /&gt;
                                                    off = @off后缀的内容,&lt;br /&gt;
                                                    default = 没有@on或@off后缀的内容,&lt;br /&gt;
                                                }&lt;br /&gt;
                                            ]]&lt;br /&gt;
        for _, pair in unpack(sortedBranchProvider) do&lt;br /&gt;
            local k, v = unpack(pair)&lt;br /&gt;
            k = tostring(k) -- 数字类型的字符串代号。&lt;br /&gt;
            if v ~= nil then&lt;br /&gt;
                if mw.ustring.sub(k, 1, 1) == &amp;#039;@&amp;#039; then&lt;br /&gt;
                    operators[k] = v&lt;br /&gt;
                else&lt;br /&gt;
                    local strcode&lt;br /&gt;
                    local onoff = nil&lt;br /&gt;
                    -- 获取字符串代号和开关类型。&lt;br /&gt;
                    if mw.ustring.sub(k, -3) == &amp;#039;@on&amp;#039; then&lt;br /&gt;
                        strcode = mw.ustring.sub(k, 1, mw.ustring.len(k) - 3)&lt;br /&gt;
                        onoff = &amp;#039;on&amp;#039;&lt;br /&gt;
                    elseif mw.ustring.sub(k, -4) == &amp;#039;@off&amp;#039; then&lt;br /&gt;
                        strcode = mw.ustring.sub(k, 1, mw.ustring.len(k) - 4)&lt;br /&gt;
                        onoff = &amp;#039;off&amp;#039;&lt;br /&gt;
                    else&lt;br /&gt;
                        strcode = k&lt;br /&gt;
                    end&lt;br /&gt;
                    onoff = onoff or &amp;#039;default&amp;#039; -- 没有开关类型就是默认值。&lt;br /&gt;
&lt;br /&gt;
                    if not contentlist[strcode] then&lt;br /&gt;
                        table.insert(contentlist, {strcode = strcode}) -- 增加空的内容表。&lt;br /&gt;
                        contentlist[strcode] = #contentlist -- 定位新增加的索引，绑定到参数k。&lt;br /&gt;
                    end&lt;br /&gt;
                    contentlist[contentlist[strcode]][onoff] = v -- 替换内容。&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local counter = 0 -- 计数器。&lt;br /&gt;
        for k_operators, v_operators in pairs(operators) do&lt;br /&gt;
            span:attr(&amp;#039;data-key-&amp;#039; .. counter, k_operators):attr(&amp;#039;data-value-&amp;#039; .. counter, v_operators)&lt;br /&gt;
            counter = counter + 1&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        for index, content in ipairs(contentlist) do&lt;br /&gt;
            span:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;data-order&amp;#039;, index - 1):attr(&amp;#039;data-key&amp;#039;, content.strcode):tag(&amp;#039;span&amp;#039;):addClass(&lt;br /&gt;
                &amp;#039;textToggleDisplayButtonLabelText on&amp;#039;&lt;br /&gt;
            ):wikitext(frame:preprocess(content.on or content.default)):done():tag(&amp;#039;span&amp;#039;):addClass(&lt;br /&gt;
                &amp;#039;textToggleDisplayButtonLabelText off&amp;#039;&lt;br /&gt;
            ):wikitext(frame:preprocess(content.off or content.default))&lt;br /&gt;
            -- counter = index + 1 -- 获取最新的下一个索引。&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        local counter = 0 -- 计数器&lt;br /&gt;
        for _, pair in unpack(sortedBranchProvider) do&lt;br /&gt;
            local k, v = unpack(pair) -- 拆包&lt;br /&gt;
            if v ~= nil then&lt;br /&gt;
                span:attr(&amp;#039;data-key-&amp;#039; .. counter, k):attr(&amp;#039;data-value-&amp;#039; .. counter, v)&lt;br /&gt;
                counter = counter + 1&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return tostring(span)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function module.template(frame)&lt;br /&gt;
    local args =&lt;br /&gt;
        getArgs(&lt;br /&gt;
        frame,&lt;br /&gt;
        {&lt;br /&gt;
            wrappers = &amp;#039;Template:切换显示/模板&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    local tTitle = args[&amp;#039;@&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    if tTitle == &amp;#039;&amp;#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local tag = args[&amp;#039;@tag&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
    local branches = {}&lt;br /&gt;
    local params = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        k = tostring(k)&lt;br /&gt;
        if not mw.ustring.match(k, &amp;#039;^@[^@]&amp;#039;) then&lt;br /&gt;
            local i = 1&lt;br /&gt;
            while true do&lt;br /&gt;
                local _, j, flag = mw.ustring.find(k, &amp;#039;@(.)&amp;#039;, i)&lt;br /&gt;
                if j == nil then&lt;br /&gt;
                    i = mw.ustring.len(k)&lt;br /&gt;
                    break&lt;br /&gt;
                elseif flag == &amp;#039;@&amp;#039; then&lt;br /&gt;
                    i = j + 1&lt;br /&gt;
                else&lt;br /&gt;
                    i = j - 2&lt;br /&gt;
                    break&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            local param = mw.text.trim(mw.ustring.gsub(mw.ustring.sub(k, 1, i), &amp;#039;@@&amp;#039;, &amp;#039;@&amp;#039;))&lt;br /&gt;
            local branch = mw.ustring.sub(k, i + 2)&lt;br /&gt;
            if mw.text.trim(param) ~= &amp;#039;&amp;#039; then&lt;br /&gt;
                if params[param] == nil then&lt;br /&gt;
                    params[param] = {}&lt;br /&gt;
                end&lt;br /&gt;
                if branch ~= &amp;#039;&amp;#039; and branches[branch] == nil then&lt;br /&gt;
                    branches[branch] = #branches + 1&lt;br /&gt;
                    table.insert(branches, branch)&lt;br /&gt;
                end&lt;br /&gt;
                if branch == &amp;#039;&amp;#039; then&lt;br /&gt;
                    params[param][0] = v&lt;br /&gt;
                else&lt;br /&gt;
                    params[param][branch] = v&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local result = {}&lt;br /&gt;
    for _, pair in sortBranches(branches, args) do&lt;br /&gt;
        local branch, _ = unpack(pair)&lt;br /&gt;
        if type(branch) == &amp;#039;string&amp;#039; then&lt;br /&gt;
            local tArgs = {}&lt;br /&gt;
            for param, bValue in pairs(params) do&lt;br /&gt;
                tArgs[param] = bValue[branch] or bValue[0]&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            table.insert(&lt;br /&gt;
                result,&lt;br /&gt;
                frame:expandTemplate {&lt;br /&gt;
                    title = &amp;#039;切换显示&amp;#039;,&lt;br /&gt;
                    args = {&lt;br /&gt;
                        [1] = branch,&lt;br /&gt;
                        [2] = frame:expandTemplate {title = tTitle, args = tArgs},&lt;br /&gt;
                        [3] = tag&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function module.button(frame)&lt;br /&gt;
    return initSpan(&amp;#039;textToggleDisplayButtons&amp;#039;, &amp;#039;切换显示按钮&amp;#039;, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function module.style(frame)&lt;br /&gt;
    return initSpan(&amp;#039;textToggleDisplayStyle&amp;#039;, &amp;#039;切换显示样式&amp;#039;, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function module.buttonStyle(frame)&lt;br /&gt;
    return initSpan(&amp;#039;textToggleDisplayButtonsStyle&amp;#039;, &amp;#039;切换显示按钮样式&amp;#039;, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return module&lt;/div&gt;</summary>
		<author><name>imported&gt;一个人的孤独</name></author>
	</entry>
</feed>