<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://mw.novark.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3A%E8%AE%AE%E4%BC%9A</id>
	<title>模块:议会 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mw.novark.wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3A%E8%AE%AE%E4%BC%9A"/>
	<link rel="alternate" type="text/html" href="https://mw.novark.wiki/index.php?title=%E6%A8%A1%E5%9D%97:%E8%AE%AE%E4%BC%9A&amp;action=history"/>
	<updated>2026-10-23T20:14:08Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://mw.novark.wiki/index.php?title=%E6%A8%A1%E5%9D%97:%E8%AE%AE%E4%BC%9A&amp;diff=2621&amp;oldid=prev</id>
		<title>Phase1EmergencyAdmin：​按席位数选择半环行数，小规模议会也保持易读</title>
		<link rel="alternate" type="text/html" href="https://mw.novark.wiki/index.php?title=%E6%A8%A1%E5%9D%97:%E8%AE%AE%E4%BC%9A&amp;diff=2621&amp;oldid=prev"/>
		<updated>2026-10-23T14:51:09Z</updated>

		<summary type="html">&lt;p&gt;按席位数选择半环行数，小规模议会也保持易读&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年10月23日 (五) 14:51的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l27&quot;&gt;第27行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第27行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local chamber = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;nv-parliament__chamber&amp;#039;):attr(&amp;#039;aria-hidden&amp;#039;, &amp;#039;true&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local chamber = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;nv-parliament__chamber&amp;#039;):attr(&amp;#039;aria-hidden&amp;#039;, &amp;#039;true&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local positions, allocated = {}, 0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local positions, allocated = {}, 0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local radii = { 46, 39, 32, 25, 18 }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local radii = &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;total &amp;lt; 30 and { 46 } or (total &amp;lt; 80 and { 46, 32, 18 } or &lt;/ins&gt;{ 46, 39, 32, 25, 18 }&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local radiusSum = 0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    for _, radius in ipairs(radii) do radiusSum = radiusSum + radius end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for ring, radius in ipairs(radii) do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for ring, radius in ipairs(radii) do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local count = ring == #radii and total - allocated or math.floor(total * radius / &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;160 &lt;/del&gt;+ 0.5)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         local count = ring == #radii and total - allocated or math.floor(total * radius / &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;radiusSum &lt;/ins&gt;+ 0.5)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         allocated = allocated + count&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         allocated = allocated + count&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for seat = 1, count do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         for seat = 1, count do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Phase1EmergencyAdmin</name></author>
	</entry>
	<entry>
		<id>https://mw.novark.wiki/index.php?title=%E6%A8%A1%E5%9D%97:%E8%AE%AE%E4%BC%9A&amp;diff=2611&amp;oldid=prev</id>
		<title>Phase1EmergencyAdmin：​统一议会席位数据、半环图与作者模板参数</title>
		<link rel="alternate" type="text/html" href="https://mw.novark.wiki/index.php?title=%E6%A8%A1%E5%9D%97:%E8%AE%AE%E4%BC%9A&amp;diff=2611&amp;oldid=prev"/>
		<updated>2026-10-23T14:41:57Z</updated>

		<summary type="html">&lt;p&gt;统一议会席位数据、半环图与作者模板参数&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local args = frame:getParent().args&lt;br /&gt;
    local groups, total = {}, 0&lt;br /&gt;
    for line in mw.text.gsplit(args[&amp;#039;席位&amp;#039;] or &amp;#039;&amp;#039;, &amp;#039;\n&amp;#039;) do&lt;br /&gt;
        line = mw.text.trim(line)&lt;br /&gt;
        if line ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            local name, count = line:match(&amp;#039;^(.-)%s*=%s*(%d+)%s*$&amp;#039;)&lt;br /&gt;
            if not name or mw.text.trim(name) == &amp;#039;&amp;#039; then&lt;br /&gt;
                return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;议会席位：每行请填写“名称=席数”。&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
            end&lt;br /&gt;
            count = tonumber(count)&lt;br /&gt;
            groups[#groups + 1] = { name = mw.text.trim(name), count = count }&lt;br /&gt;
            total = total + count&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if total == 0 then return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;议会席位：请填写席位数据。&amp;lt;/strong&amp;gt;&amp;#039; end&lt;br /&gt;
    local capacity = tonumber(args[&amp;#039;总席位&amp;#039;]) or total&lt;br /&gt;
    if capacity ~= total then&lt;br /&gt;
        return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;议会席位：分组合计&amp;#039; .. total .. &amp;#039;席，与总席位&amp;#039; .. capacity .. &amp;#039;席不一致。&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;nv-parliament&amp;#039;)&lt;br /&gt;
    root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;nv-parliament__title&amp;#039;):wikitext(args[&amp;#039;名称&amp;#039;] or &amp;#039;议会席位&amp;#039;)&lt;br /&gt;
    root:tag(&amp;#039;p&amp;#039;):addClass(&amp;#039;nv-parliament__session&amp;#039;):wikitext((args[&amp;#039;届次&amp;#039;] or &amp;#039;&amp;#039;) .. &amp;#039; · 共&amp;#039; .. total .. &amp;#039;席&amp;#039;)&lt;br /&gt;
    local chamber = root:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;nv-parliament__chamber&amp;#039;):attr(&amp;#039;aria-hidden&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
    local positions, allocated = {}, 0&lt;br /&gt;
    local radii = { 46, 39, 32, 25, 18 }&lt;br /&gt;
    for ring, radius in ipairs(radii) do&lt;br /&gt;
        local count = ring == #radii and total - allocated or math.floor(total * radius / 160 + 0.5)&lt;br /&gt;
        allocated = allocated + count&lt;br /&gt;
        for seat = 1, count do&lt;br /&gt;
            local angle = count == 1 and math.pi / 2 or (seat - 1) * math.pi / (count - 1)&lt;br /&gt;
            positions[#positions + 1] = { angle = angle, radius = radius }&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(positions, function(a, b)&lt;br /&gt;
        if a.angle == b.angle then return a.radius &amp;gt; b.radius end&lt;br /&gt;
        return a.angle &amp;gt; b.angle&lt;br /&gt;
    end)&lt;br /&gt;
    local seat = 1&lt;br /&gt;
    for index, group in ipairs(groups) do&lt;br /&gt;
        local class = &amp;#039;nv-parliament__party--&amp;#039; .. ((index - 1) % 12 + 1)&lt;br /&gt;
        group.class = class&lt;br /&gt;
        for _ = 1, group.count do&lt;br /&gt;
            local point = positions[seat]&lt;br /&gt;
            local x = 50 + math.cos(point.angle) * point.radius&lt;br /&gt;
            local y = 98 - math.sin(point.angle) * point.radius * 2&lt;br /&gt;
            chamber:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;nv-parliament__seat&amp;#039;):addClass(class)&lt;br /&gt;
                :css(&amp;#039;left&amp;#039;, string.format(&amp;#039;%.3f%%&amp;#039;, x)):css(&amp;#039;top&amp;#039;, string.format(&amp;#039;%.3f%%&amp;#039;, y))&lt;br /&gt;
            seat = seat + 1&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local legend = root:tag(&amp;#039;table&amp;#039;):addClass(&amp;#039;wikitable&amp;#039;):addClass(&amp;#039;nv-parliament__legend&amp;#039;)&lt;br /&gt;
    legend:tag(&amp;#039;caption&amp;#039;):wikitext(&amp;#039;席位构成&amp;#039;)&lt;br /&gt;
    local header = legend:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    header:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;):wikitext(&amp;#039;组别&amp;#039;)&lt;br /&gt;
    header:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;):wikitext(&amp;#039;席位&amp;#039;)&lt;br /&gt;
    header:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;):wikitext(&amp;#039;占比&amp;#039;)&lt;br /&gt;
    for _, group in ipairs(groups) do&lt;br /&gt;
        local row = legend:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
        local label = row:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
        label:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;nv-parliament__key&amp;#039;):addClass(group.class):attr(&amp;#039;aria-hidden&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
        label:wikitext(mw.text.nowiki(group.name))&lt;br /&gt;
        row:tag(&amp;#039;td&amp;#039;):wikitext(tostring(group.count))&lt;br /&gt;
        row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;%.1f%%&amp;#039;, group.count / total * 100))&lt;br /&gt;
    end&lt;br /&gt;
    root:tag(&amp;#039;p&amp;#039;):addClass(&amp;#039;nv-parliament__note&amp;#039;):wikitext(&amp;#039;按表中顺序排布，不表示政治光谱。&amp;#039;)&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Phase1EmergencyAdmin</name></author>
	</entry>
</feed>