<?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%2FHelpers</id>
	<title>Module:Build bracket/Helpers - 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%2FHelpers"/>
	<link rel="alternate" type="text/html" href="https://nssportwiki.com/index.php?title=Module:Build_bracket/Helpers&amp;action=history"/>
	<updated>2026-08-15T14:08:49Z</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/Helpers&amp;diff=76404&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/Helpers&amp;diff=76404&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/Helpers&amp;diff=76403&amp;oldid=prev</id>
		<title>wikipedia&gt;MusikBot II: Protected &quot;Module:Build bracket/Helpers&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/Helpers&amp;diff=76403&amp;oldid=prev"/>
		<updated>2025-08-18T18:00:33Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/wiki/Module:Build_bracket/Helpers&quot; title=&quot;Module:Build bracket/Helpers&quot;&gt;Module:Build bracket/Helpers&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 Helpers = {}&lt;br /&gt;
&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 1) ARG ACCESS / BARGS WIRING&lt;br /&gt;
-- ====================================&lt;br /&gt;
local _bargs = nil&lt;br /&gt;
&lt;br /&gt;
function Helpers.setBargs(fn)&lt;br /&gt;
    _bargs = fn&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- If Config.init doesn&amp;#039;t call this, Helpers installs fallbacks below.&lt;br /&gt;
function Helpers.installArgAccessors(fargs, pargs)&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;
    Helpers.setBargs(Helpers.bargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Default bargs (so unit tests don’t explode without Config.init)&lt;br /&gt;
Helpers.bargs = function(key)&lt;br /&gt;
    if _bargs then return _bargs(key) end&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 2) BASIC CHECKS &amp;amp; YES/NO PARSERS&lt;br /&gt;
-- ====================================&lt;br /&gt;
function Helpers.isempty(s) return s == nil or s == &amp;quot;&amp;quot; end&lt;br /&gt;
function Helpers.notempty(s) return s ~= nil and s ~= &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
-- tolerant, case-insensitive&lt;br /&gt;
function Helpers.yes(val)&lt;br /&gt;
    if val == nil then return false end&lt;br /&gt;
    val = tostring(val):lower()&lt;br /&gt;
    return val == &amp;quot;y&amp;quot; or val == &amp;quot;yes&amp;quot; or val == &amp;quot;true&amp;quot; or val == &amp;quot;1&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
function Helpers.no(val)&lt;br /&gt;
    if val == nil then return false end&lt;br /&gt;
    val = tostring(val):lower()&lt;br /&gt;
    return val == &amp;quot;n&amp;quot; or val == &amp;quot;no&amp;quot; or val == &amp;quot;false&amp;quot; or val == &amp;quot;0&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 3) STRING HELPERS&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 1 -&amp;gt; &amp;#039;a&amp;#039;, 2 -&amp;gt; &amp;#039;b&amp;#039;, ...; wraps beyond 26; clamps nil/invalid to &amp;#039;a&amp;#039;&lt;br /&gt;
function Helpers.toChar(num)&lt;br /&gt;
    num = tonumber(num) or 1&lt;br /&gt;
    if num &amp;lt; 1 then num = 1 end&lt;br /&gt;
    -- wrap to 1..26 to avoid errors if headers exceed 26&lt;br /&gt;
    num = ((num - 1) % 26) + 1&lt;br /&gt;
    return string.char(string.byte(&amp;quot;a&amp;quot;) + num - 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Escape single characters for use inside a Lua pattern character class.&lt;br /&gt;
local function _esc_cc(ch)&lt;br /&gt;
    -- dash, caret, percent, closing bracket need escaping inside [...]&lt;br /&gt;
    if ch == &amp;quot;-&amp;quot; or ch == &amp;quot;^&amp;quot; or ch == &amp;quot;]&amp;quot; or ch == &amp;quot;%&amp;quot; then&lt;br /&gt;
        return &amp;quot;%&amp;quot; .. ch&lt;br /&gt;
    end&lt;br /&gt;
    return ch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Fast split over single-char delimiters; drops empties; optional number-cast.&lt;br /&gt;
function Helpers.split(str, delim, tonum)&lt;br /&gt;
    if Helpers.isempty(str) then return {} end&lt;br /&gt;
    local result, buf = {}, {}&lt;br /&gt;
    for i = 1, #delim do buf[#buf + 1] = _esc_cc(delim[i]) end&lt;br /&gt;
    local patt = &amp;quot;[^&amp;quot; .. table.concat(buf) .. &amp;quot;]+&amp;quot;&lt;br /&gt;
    for w in string.gmatch(str, patt) do&lt;br /&gt;
        result[#result + 1] = (tonum == true) and tonumber(w) or w&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove bold inside (...) and [...] while preserving wikilinks [[...]]&lt;br /&gt;
function Helpers.unboldParenthetical(text)&lt;br /&gt;
    if Helpers.isempty(text) then return text end&lt;br /&gt;
&lt;br /&gt;
    local STYLE_NORMAL = &amp;#039;&amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    local PREFIX = &amp;quot;__WIKILINK__&amp;quot;&lt;br /&gt;
    local counter, placeholders = 0, {}&lt;br /&gt;
&lt;br /&gt;
    -- 1) Extract wikilinks to placeholders&lt;br /&gt;
    text = text:gsub(&amp;quot;%[%[(.-)%]%]&amp;quot;, function(link)&lt;br /&gt;
        counter = counter + 1&lt;br /&gt;
        local key = PREFIX .. counter .. &amp;quot;__&amp;quot;&lt;br /&gt;
        placeholders[key] = link&lt;br /&gt;
        return key&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    -- 2) Wrap balanced (...) and [...]&lt;br /&gt;
    text = text:gsub(&amp;quot;(%b())&amp;quot;, function(m) return string.format(STYLE_NORMAL, m) end)&lt;br /&gt;
               :gsub(&amp;quot;(%b[])&amp;quot;, function(m) return string.format(STYLE_NORMAL, m) end)&lt;br /&gt;
&lt;br /&gt;
    -- 3) Restore wikilinks&lt;br /&gt;
    for key, link in pairs(placeholders) do&lt;br /&gt;
        text = text:gsub(key, &amp;quot;[[&amp;quot; .. link .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- 4) STYLE &amp;amp; DIMENSIONS&lt;br /&gt;
-- ====================================&lt;br /&gt;
-- Border mask is {top, right, bottom, left}&lt;br /&gt;
function Helpers.cellBorder(b)&lt;br /&gt;
    -- assume well-formed input; callers always pass 4 numbers&lt;br /&gt;
    return b[1] .. &amp;quot;px &amp;quot; .. b[2] .. &amp;quot;px &amp;quot; .. b[3] .. &amp;quot;px &amp;quot; .. b[4] .. &amp;quot;px&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Normalize CSS length: numbers -&amp;gt; &amp;quot;Npx&amp;quot;; strings with units pass through.&lt;br /&gt;
function Helpers.toCssLength(v, defaultVal)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return defaultVal end&lt;br /&gt;
    local n = tonumber(v)&lt;br /&gt;
    if n then return tostring(n) .. &amp;quot;px&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Resolve widths from args with normalization &amp;amp; default&lt;br /&gt;
function Helpers.getWidth(ctype, defaultVal)&lt;br /&gt;
    local raw = Helpers.bargs(ctype .. &amp;quot;-width&amp;quot;)&lt;br /&gt;
    return Helpers.toCssLength(raw, defaultVal)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Helpers&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;MusikBot II</name></author>
	</entry>
</feed>