<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://nssportwiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ABuild_bracket%2FConfig</id>
	<title>Module:Build bracket/Config - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nssportwiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ABuild_bracket%2FConfig"/>
	<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=Module:Build_bracket/Config&amp;action=history"/>
	<updated>2026-08-15T12:25:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://nssportwiki.com/index.php?title=Module:Build_bracket/Config&amp;diff=76402&amp;oldid=prev</id>
		<title>Osarius: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=Module:Build_bracket/Config&amp;diff=76402&amp;oldid=prev"/>
		<updated>2026-07-24T10:50:37Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:50, 24 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Osarius</name></author>
	</entry>
	<entry>
		<id>https://nssportwiki.com/index.php?title=Module:Build_bracket/Config&amp;diff=76401&amp;oldid=prev</id>
		<title>wikipedia&gt;MusikBot II: Protected &quot;Module:Build bracket/Config&quot;: High-risk template or module: 8490 transclusions (more info) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=Module:Build_bracket/Config&amp;diff=76401&amp;oldid=prev"/>
		<updated>2025-08-18T18:00:32Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/Module:Build_bracket/Config&quot; title=&quot;Module:Build bracket/Config&quot;&gt;Module:Build bracket/Config&lt;/a&gt;&amp;quot;: &lt;a href=&quot;https://en.wikipedia.org/wiki/High-risk_templates&quot; class=&quot;extiw&quot; title=&quot;wikipedia:High-risk templates&quot;&gt;High-risk template or module&lt;/a&gt;: 8490 transclusions (&lt;a href=&quot;/index.php?title=User:MusikBot_II/TemplateProtector&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:MusikBot II/TemplateProtector (page does not exist)&quot;&gt;more info&lt;/a&gt;) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Config = {}&lt;br /&gt;
&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 1) INIT &amp;amp; DEFENSIVE ACCESSORS&lt;br /&gt;
-- ====================================&lt;br /&gt;
function Config.init(frame, state, config, Helpers)&lt;br /&gt;
    -- Defend against nil inputs; don&amp;#039;t mutate caller refs&lt;br /&gt;
    state   = state   or {}&lt;br /&gt;
    config  = config  or {}&lt;br /&gt;
    Helpers = Helpers or {}&lt;br /&gt;
&lt;br /&gt;
    -- Pull args from frame/parent (both optional)&lt;br /&gt;
    local fargs  = (frame and frame.args) or {}&lt;br /&gt;
    local parent = (frame and frame.getParent and frame:getParent()) or nil&lt;br /&gt;
    local pargs  = (parent and parent.args) or {}&lt;br /&gt;
&lt;br /&gt;
    -- Keep originals for debugging&lt;br /&gt;
    config._fargs, config._pargs = fargs, pargs&lt;br /&gt;
&lt;br /&gt;
    -- Install arg accessors (use provided installer if present)&lt;br /&gt;
    if Helpers.installArgAccessors then&lt;br /&gt;
        Helpers.installArgAccessors(fargs, pargs)&lt;br /&gt;
    else&lt;br /&gt;
        Helpers.getFArg = function(k) return fargs[k] end&lt;br /&gt;
        Helpers.getPArg = function(k) return pargs[k] end&lt;br /&gt;
        Helpers.bargs   = function(k)&lt;br /&gt;
            local v = pargs[k]&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then v = fargs[k] end&lt;br /&gt;
            return v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Short aliases&lt;br /&gt;
    local bargs   = Helpers.bargs&lt;br /&gt;
    local getFArg = Helpers.getFArg&lt;br /&gt;
    local getPArg = Helpers.getPArg&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 2) YES/NO FALLBACKS (robust parsing)&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    local function yesish(s)&lt;br /&gt;
        s = (s or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
        return s == &amp;quot;y&amp;quot; or s == &amp;quot;yes&amp;quot; or s == &amp;quot;true&amp;quot; or s == &amp;quot;1&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    local function noish(s)&lt;br /&gt;
        s = (s or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
        return s == &amp;quot;n&amp;quot; or s == &amp;quot;no&amp;quot; or s == &amp;quot;false&amp;quot; or s == &amp;quot;0&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Prefer Helpers.yes/no if provided; fall back to yesish/noish&lt;br /&gt;
    local YES = Helpers.yes or yesish&lt;br /&gt;
    local NO  = Helpers.no  or noish&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 3) CORE DIMENSIONS &amp;amp; CLAMPING&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- Rows: keep &amp;#039;&amp;#039; sentinel when user didn’t set |rows=|&lt;br /&gt;
    config.r = tonumber(getFArg(&amp;quot;rows&amp;quot;)) or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Rounds: {{#invoke:..|rounds=}} with optional parent override maxround(s)&lt;br /&gt;
    local rounds_f = tonumber(getFArg(&amp;quot;rounds&amp;quot;)) or 1&lt;br /&gt;
    local maxc     = tonumber(getPArg(&amp;quot;maxrounds&amp;quot;)) or tonumber(getPArg(&amp;quot;maxround&amp;quot;)) or nil&lt;br /&gt;
&lt;br /&gt;
    config.c = (type(maxc) == &amp;quot;number&amp;quot;) and maxc or rounds_f&lt;br /&gt;
&lt;br /&gt;
    -- minround -&amp;gt; base (clamped)&lt;br /&gt;
    local minr = tonumber(getPArg(&amp;quot;minround&amp;quot;)) or 1&lt;br /&gt;
    if minr &amp;lt; 1 then minr = 1 end&lt;br /&gt;
    if minr &amp;gt; config.c then minr = config.c end&lt;br /&gt;
    config.minc   = minr&lt;br /&gt;
    config.base   = minr - 1&lt;br /&gt;
    config.c_total = config.c  -- persist original visible round count&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 4) LAYOUT/STYLE FLAGS&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    config.autocol    = YES(getFArg(&amp;quot;autocol&amp;quot;))&lt;br /&gt;
    config.colspacing = tonumber(getFArg(&amp;quot;col-spacing&amp;quot;)) or 6&lt;br /&gt;
    config.height     = bargs(&amp;quot;height&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- nowrap can be supplied in parent or direct call&lt;br /&gt;
    local nowrapArg = getPArg(&amp;quot;nowrap&amp;quot;) or getFArg(&amp;quot;nowrap&amp;quot;)&lt;br /&gt;
    config.nowrap = not NO(nowrapArg)&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 5) BOLDWINNER MODE/POLICY&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    local bw = (bargs(&amp;quot;boldwinner&amp;quot;) or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
    config.boldwinner           = bw&lt;br /&gt;
    config.boldwinner_mode      = &amp;quot;off&amp;quot;   -- &amp;#039;high&amp;#039; | &amp;#039;low&amp;#039; | &amp;#039;off&amp;#039;&lt;br /&gt;
    config.boldwinner_aggonly   = false   -- only bold aggregate cell/row&lt;br /&gt;
&lt;br /&gt;
    if bw == &amp;quot;low&amp;quot; then&lt;br /&gt;
        config.boldwinner_mode = &amp;quot;low&amp;quot;&lt;br /&gt;
    elseif bw == &amp;quot;high&amp;quot; or YES(bw) then&lt;br /&gt;
        config.boldwinner_mode = &amp;quot;high&amp;quot;&lt;br /&gt;
    elseif bw == &amp;quot;aggregate&amp;quot; or bw == &amp;quot;agg&amp;quot; or bw == &amp;quot;aggregate-high&amp;quot; or bw == &amp;quot;agg-high&amp;quot; then&lt;br /&gt;
        config.boldwinner_mode    = &amp;quot;high&amp;quot;&lt;br /&gt;
        config.boldwinner_aggonly = true&lt;br /&gt;
    elseif bw == &amp;quot;aggregate-low&amp;quot; or bw == &amp;quot;agg-low&amp;quot; then&lt;br /&gt;
        config.boldwinner_mode    = &amp;quot;low&amp;quot;&lt;br /&gt;
        config.boldwinner_aggonly = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if YES(bargs(&amp;quot;boldwinner-aggregate-only&amp;quot;)) then&lt;br /&gt;
        config.boldwinner_aggonly = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 6) SEEDS &amp;amp; AGGREGATE SETTINGS&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- forceseeds: explicit truthy; seeds: true unless explicitly &amp;quot;no&amp;quot;&lt;br /&gt;
    local seedsArg       = bargs(&amp;quot;seeds&amp;quot;)&lt;br /&gt;
    config.forceseeds    = YES(seedsArg)&lt;br /&gt;
    config.seeds         = not NO(seedsArg)&lt;br /&gt;
&lt;br /&gt;
    -- aggregate mode&lt;br /&gt;
    do&lt;br /&gt;
        local aval = (bargs(&amp;quot;aggregate&amp;quot;) or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
        if aval == &amp;quot;sets&amp;quot; or aval == &amp;quot;legs&amp;quot; then&lt;br /&gt;
            config.aggregate_mode = &amp;quot;sets&amp;quot;&lt;br /&gt;
        elseif aval == &amp;quot;score&amp;quot; then&lt;br /&gt;
            config.aggregate_mode = &amp;quot;score&amp;quot;&lt;br /&gt;
        elseif YES(aval) then&lt;br /&gt;
            config.aggregate_mode = &amp;quot;manual&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            config.aggregate_mode = &amp;quot;off&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        config.aggregate = (config.aggregate_mode ~= &amp;quot;off&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- show-bye-paths (default true; only explicit &amp;quot;no&amp;quot; disables)&lt;br /&gt;
    do&lt;br /&gt;
        local v = (bargs(&amp;quot;show-bye-paths&amp;quot;) or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
        config.show_bye_paths = (v == &amp;quot;&amp;quot;) and true or (not NO(v))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- autolegs (explicit truthy)&lt;br /&gt;
    config.autolegs = YES(bargs(&amp;quot;autolegs&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 7) PARAMSTYLE INFERENCE&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    local styleArg = (bargs(&amp;quot;paramstyle&amp;quot;) or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
    local function hasNumberedArgs()&lt;br /&gt;
        -- Scan a reasonable window of positional args from both parent/frame via bargs&lt;br /&gt;
        for n = 1, 48 do&lt;br /&gt;
            local v = bargs(tostring(n))&lt;br /&gt;
            if v ~= nil and v ~= &amp;quot;&amp;quot; then return true end&lt;br /&gt;
        end&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if styleArg == &amp;quot;numbered&amp;quot; then&lt;br /&gt;
        config.paramstyle = &amp;quot;numbered&amp;quot;&lt;br /&gt;
    elseif styleArg == &amp;quot;indexed&amp;quot; then&lt;br /&gt;
        config.paramstyle = &amp;quot;indexed&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        config.paramstyle = hasNumberedArgs() and &amp;quot;numbered&amp;quot; or &amp;quot;indexed&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    -- 8) THEME CONSTANTS (DEFAULTS)&lt;br /&gt;
    -- ====================================&lt;br /&gt;
    config.COLORS = config.COLORS or {&lt;br /&gt;
        cell_bg_light   = &amp;quot;var(--background-color-neutral-subtle,#f8f9fa)&amp;quot;,&lt;br /&gt;
        cell_bg_dark    = &amp;quot;var(--background-color-neutral,#eaecf0)&amp;quot;,&lt;br /&gt;
        text_color      = &amp;quot;var(--color-base,#202122)&amp;quot;,&lt;br /&gt;
        path_line_color = &amp;quot;gray&amp;quot;,&lt;br /&gt;
        cell_border     = &amp;quot;var(--border-color-base,#a2a9b1)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return state, config, Helpers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Config&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;MusikBot II</name></author>
	</entry>
</feed>