<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfocard</id>
	<title>Module:Infocard - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfocard"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Infocard&amp;action=history"/>
	<updated>2026-04-11T07:03:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://mbwiki.stairwaygames.work/w/index.php?title=Module:Infocard&amp;diff=28279&amp;oldid=prev</id>
		<title>Ais: Created page with &quot;local p = {} local getArgs = require(&#039;Module:Arguments&#039;).getArgs  -- Color definitions local colors = {     melee = &#039;#d20000&#039;,     warrior = &#039;#d20000&#039;,     ranged = &#039;#21a08d&#039;,     ranger = &#039;#21a08d&#039;,     magic = &#039;#9d0d79&#039;,     mage = &#039;#9d0d79&#039;,     summoning = &#039;#066aff&#039;,     summon = &#039;#066aff&#039;,     summoner = &#039;#066aff&#039;,     terraria = &#039;#afcfe2&#039;,     default = &#039;#afcfe2&#039;,     white = &#039;#ffffff&#039;,     orange = &#039;#ffa500&#039;,     red = &#039;#ff0000&#039;,     green = &#039;#00ff00&#039;,     blue =...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Infocard&amp;diff=28279&amp;oldid=prev"/>
		<updated>2026-02-24T08:08:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {} local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs  -- Color definitions local colors = {     melee = &amp;#039;#d20000&amp;#039;,     warrior = &amp;#039;#d20000&amp;#039;,     ranged = &amp;#039;#21a08d&amp;#039;,     ranger = &amp;#039;#21a08d&amp;#039;,     magic = &amp;#039;#9d0d79&amp;#039;,     mage = &amp;#039;#9d0d79&amp;#039;,     summoning = &amp;#039;#066aff&amp;#039;,     summon = &amp;#039;#066aff&amp;#039;,     summoner = &amp;#039;#066aff&amp;#039;,     terraria = &amp;#039;#afcfe2&amp;#039;,     default = &amp;#039;#afcfe2&amp;#039;,     white = &amp;#039;#ffffff&amp;#039;,     orange = &amp;#039;#ffa500&amp;#039;,     red = &amp;#039;#ff0000&amp;#039;,     green = &amp;#039;#00ff00&amp;#039;,     blue =...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Color definitions&lt;br /&gt;
local colors = {&lt;br /&gt;
    melee = &amp;#039;#d20000&amp;#039;,&lt;br /&gt;
    warrior = &amp;#039;#d20000&amp;#039;,&lt;br /&gt;
    ranged = &amp;#039;#21a08d&amp;#039;,&lt;br /&gt;
    ranger = &amp;#039;#21a08d&amp;#039;,&lt;br /&gt;
    magic = &amp;#039;#9d0d79&amp;#039;,&lt;br /&gt;
    mage = &amp;#039;#9d0d79&amp;#039;,&lt;br /&gt;
    summoning = &amp;#039;#066aff&amp;#039;,&lt;br /&gt;
    summon = &amp;#039;#066aff&amp;#039;,&lt;br /&gt;
    summoner = &amp;#039;#066aff&amp;#039;,&lt;br /&gt;
    terraria = &amp;#039;#afcfe2&amp;#039;,&lt;br /&gt;
    default = &amp;#039;#afcfe2&amp;#039;,&lt;br /&gt;
    white = &amp;#039;#ffffff&amp;#039;,&lt;br /&gt;
    orange = &amp;#039;#ffa500&amp;#039;,&lt;br /&gt;
    red = &amp;#039;#ff0000&amp;#039;,&lt;br /&gt;
    green = &amp;#039;#00ff00&amp;#039;,&lt;br /&gt;
    blue = &amp;#039;#0000ff&amp;#039;,&lt;br /&gt;
    purple = &amp;#039;#800080&amp;#039;,&lt;br /&gt;
    pink = &amp;#039;#ffc0cb&amp;#039;,&lt;br /&gt;
    lime = &amp;#039;#00ff00&amp;#039;,&lt;br /&gt;
    yellow = &amp;#039;#ffff00&amp;#039;,&lt;br /&gt;
    cyan = &amp;#039;#00ffff&amp;#039;,&lt;br /&gt;
    brown = &amp;#039;#a52a2a&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    local output = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Get basic parameters&lt;br /&gt;
    local name = args[&amp;#039;name&amp;#039;] or mw.title.getCurrentTitle().text&lt;br /&gt;
    local subname = args[&amp;#039;subname&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local namenote = args[&amp;#039;namenote&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local type = args[&amp;#039;type&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local image = args[&amp;#039;image&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local icon = args[&amp;#039;icon&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local size = args[&amp;#039;size&amp;#039;] or &amp;#039;150px&amp;#039;&lt;br /&gt;
    local theme = args[&amp;#039;theme&amp;#039;] or &amp;#039;default&amp;#039;&lt;br /&gt;
    local color = args[&amp;#039;color&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local class = args[&amp;#039;class&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local css = args[&amp;#039;css&amp;#039;] or args[&amp;#039;style&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local id = args[&amp;#039;id&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    -- Determine border color&lt;br /&gt;
    local borderColor = colors[theme:lower()] or colors[color:lower()] or colors[theme] or color or colors.default&lt;br /&gt;
    &lt;br /&gt;
    -- Start infocard div&lt;br /&gt;
    local infocardStyle = string.format(&amp;#039;border-left: 5px solid %s; padding: 10px; margin: 10px 0; background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; %s&amp;#039;, borderColor, css)&lt;br /&gt;
    table.insert(output, string.format(&amp;#039;&amp;lt;div class=&amp;quot;infocard clearfix %s&amp;quot; style=&amp;quot;%s&amp;quot; id=&amp;quot;%s&amp;quot;&amp;gt;&amp;#039;, class, infocardStyle, id))&lt;br /&gt;
    &lt;br /&gt;
    -- Image/Icon section&lt;br /&gt;
    if image ~= &amp;#039;&amp;#039; or icon ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        local mediaWidth = size&lt;br /&gt;
        if icon ~= &amp;#039;&amp;#039; and image == &amp;#039;&amp;#039; then&lt;br /&gt;
            mediaWidth = &amp;#039;32px&amp;#039; -- Smaller for icons&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(output, string.format(&amp;#039;&amp;lt;div class=&amp;quot;infocard-media&amp;quot; style=&amp;quot;float: left; margin-right: 15px; width: %s;&amp;quot;&amp;gt;&amp;#039;, mediaWidth))&lt;br /&gt;
        &lt;br /&gt;
        if image ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            table.insert(output, string.format(&amp;#039;[[File:%s|%s|link=]]&amp;#039;, image, size))&lt;br /&gt;
        elseif icon ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            table.insert(output, string.format(&amp;#039;[[File:%s|32px|link=]]&amp;#039;, icon))&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(output, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Header section&lt;br /&gt;
    table.insert(output, &amp;#039;&amp;lt;div class=&amp;quot;infocard-header&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(output, &amp;#039;&amp;lt;div class=&amp;quot;infocard-title&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(output, string.format(&amp;#039;&amp;lt;span class=&amp;quot;infocard-name&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, name))&lt;br /&gt;
    &lt;br /&gt;
    if namenote ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(output, string.format(&amp;#039;&amp;lt;span class=&amp;quot;infocard-namenote&amp;quot;&amp;gt;(%s)&amp;lt;/span&amp;gt;&amp;#039;, namenote))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if subname ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(output, string.format(&amp;#039;&amp;lt;div class=&amp;quot;infocard-subname&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;#039;, subname))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if type ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(output, string.format(&amp;#039;&amp;lt;div class=&amp;quot;infocard-type&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;#039;, type))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(output, &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    -- Content section&lt;br /&gt;
    local marginLeft = &amp;#039;0&amp;#039;&lt;br /&gt;
    if image ~= &amp;#039;&amp;#039; or icon ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        if image ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            marginLeft = size&lt;br /&gt;
        else&lt;br /&gt;
            marginLeft = &amp;#039;50px&amp;#039; -- For icons&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(output, string.format(&amp;#039;&amp;lt;div class=&amp;quot;infocard-content&amp;quot; style=&amp;quot;margin-left: %s; margin-top: 10px;&amp;quot;&amp;gt;&amp;#039;, marginLeft))&lt;br /&gt;
    &lt;br /&gt;
    -- Process all card parameters&lt;br /&gt;
    local rows = {}&lt;br /&gt;
    &lt;br /&gt;
    -- First, collect all card_ parameters&lt;br /&gt;
    for key, value in pairs(args) do&lt;br /&gt;
        local keyStr = tostring(key)&lt;br /&gt;
        if keyStr:match(&amp;#039;^card_&amp;#039;) then&lt;br /&gt;
            local rowKey = keyStr:gsub(&amp;#039;^card_&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
            local rowValue = args[rowKey]&lt;br /&gt;
            if rowValue and rowValue ~= &amp;#039;&amp;#039; then&lt;br /&gt;
                table.insert(rows, {&lt;br /&gt;
                    label = value,&lt;br /&gt;
                    value = rowValue,&lt;br /&gt;
                    key = rowKey&lt;br /&gt;
                })&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Sort rows to maintain order (cards might be in random order due to Lua table)&lt;br /&gt;
    table.sort(rows, function(a, b)&lt;br /&gt;
        -- Extract numbers from keys if possible for natural sorting&lt;br /&gt;
        local numA = tonumber(a.key:match(&amp;#039;%d+&amp;#039;)) or 0&lt;br /&gt;
        local numB = tonumber(b.key:match(&amp;#039;%d+&amp;#039;)) or 0&lt;br /&gt;
        return numA &amp;lt; numB&lt;br /&gt;
    end)&lt;br /&gt;
    &lt;br /&gt;
    -- Output rows&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        local rowHtml = string.format([[&lt;br /&gt;
            &amp;lt;div class=&amp;quot;infocard-row&amp;quot; style=&amp;quot;padding: 5px 0; border-bottom: 1px solid #eee; clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div style=&amp;quot;float: left; width: 120px; font-weight: bold; color: #555;&amp;quot;&amp;gt;%s:&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div style=&amp;quot;margin-left: 130px; color: #333;&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        ]], row.label, row.value)&lt;br /&gt;
        table.insert(output, rowHtml)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Close content and infocard divs&lt;br /&gt;
    table.insert(output, &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(output, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Ais</name></author>
	</entry>
</feed>