<?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%3AInfoboxWeapon</id>
	<title>Module:InfoboxWeapon - 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%3AInfoboxWeapon"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:InfoboxWeapon&amp;action=history"/>
	<updated>2026-04-10T17:51:07Z</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:InfoboxWeapon&amp;diff=27877&amp;oldid=prev</id>
		<title>Ais: Created page with &quot;-- Module:InfoboxWeapon local p = {}  -- Define CSS styles local STYLE_FLOATING = &#039;float: right !important; clear: right !important; max-width: 300px !important; margin: 0 0 16px 16px !important; border: 1px solid #1a6a7a !important; border-radius: 10px !important; background-color: #FFFFFF !important; font-size: .9em !important;&#039; local STYLE_HEADER = &#039;background: #1a6a7a !important; color: white !important; padding: 8px 10px !important; text-align: center !important; fo...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:InfoboxWeapon&amp;diff=27877&amp;oldid=prev"/>
		<updated>2026-01-06T08:12:54Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- Module:InfoboxWeapon local p = {}  -- Define CSS styles local STYLE_FLOATING = &amp;#039;float: right !important; clear: right !important; max-width: 300px !important; margin: 0 0 16px 16px !important; border: 1px solid #1a6a7a !important; border-radius: 10px !important; background-color: #FFFFFF !important; font-size: .9em !important;&amp;#039; local STYLE_HEADER = &amp;#039;background: #1a6a7a !important; color: white !important; padding: 8px 10px !important; text-align: center !important; fo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:InfoboxWeapon&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define CSS styles&lt;br /&gt;
local STYLE_FLOATING = &amp;#039;float: right !important; clear: right !important; max-width: 300px !important; margin: 0 0 16px 16px !important; border: 1px solid #1a6a7a !important; border-radius: 10px !important; background-color: #FFFFFF !important; font-size: .9em !important;&amp;#039;&lt;br /&gt;
local STYLE_HEADER = &amp;#039;background: #1a6a7a !important; color: white !important; padding: 8px 10px !important; text-align: center !important; font-weight: bold !important; font-size: 1.5em !important; border-top-left-radius: 10px !important; border-top-right-radius: 10px !important;&amp;#039;&lt;br /&gt;
local STYLE_SECTION_TITLE = &amp;#039;padding: 5px 10px !important; color: #4A5568 !important; font-weight: bold !important; border-bottom: 1px solid #A2A9B1 !important; margin: 10px 0 5px 0 !important;&amp;#039;&lt;br /&gt;
local STYLE_DATAROW = &amp;#039;display: flex !important; justify-content: space-between !important; padding: 5px 10px !important; border-bottom: 1px dotted #A2A9B1 !important;&amp;#039;&lt;br /&gt;
local STYLE_DATALABEL = &amp;#039;font-weight: 500 !important; color: #4A5568 !important; width: 40% !important; text-align: left !important;&amp;#039;&lt;br /&gt;
local STYLE_DATAVALUE = &amp;#039;color: #4A5568 !important; text-align: right !important; width: 60% !important;&amp;#039;&lt;br /&gt;
local STYLE_HORIZONTAL_GROUP = &amp;#039;display: flex !important; justify-content: space-around !important; padding: 10px !important; text-align: center !important;&amp;#039;&lt;br /&gt;
local STYLE_HORIZONTAL_ITEM = &amp;#039;flex: 1 !important; padding: 5px !important;&amp;#039;&lt;br /&gt;
local STYLE_HORIZONTAL_LABEL = &amp;#039;font-weight: 500 !important; color: #4A5568 !important; font-size: 0.9em !important; margin-bottom: 3px !important;&amp;#039;&lt;br /&gt;
local STYLE_HORIZONTAL_VALUE = &amp;#039;font-weight: bold !important; color: #4A5568 !important; font-size: 1.1em !important;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Function to generate a single data row&lt;br /&gt;
local function make_data_row(label, value)&lt;br /&gt;
    if value and value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        return string.format(&lt;br /&gt;
            &amp;#039;&amp;lt;div style=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;%s:&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
            STYLE_DATAROW,&lt;br /&gt;
            STYLE_DATALABEL,&lt;br /&gt;
            label,&lt;br /&gt;
            STYLE_DATAVALUE,&lt;br /&gt;
            value&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Function to generate horizontal group (for requirements)&lt;br /&gt;
local function make_horizontal_group(items)&lt;br /&gt;
    local html = {}&lt;br /&gt;
    table.insert(html, string.format(&amp;#039;&amp;lt;div style=&amp;quot;%s&amp;quot;&amp;gt;&amp;#039;, STYLE_HORIZONTAL_GROUP))&lt;br /&gt;
    &lt;br /&gt;
    for _, item in ipairs(items) do&lt;br /&gt;
        if item.value and item.value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            table.insert(html, string.format(&lt;br /&gt;
                &amp;#039;&amp;lt;div style=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
                STYLE_HORIZONTAL_ITEM,&lt;br /&gt;
                STYLE_HORIZONTAL_LABEL,&lt;br /&gt;
                item.label,&lt;br /&gt;
                STYLE_HORIZONTAL_VALUE,&lt;br /&gt;
                item.value&lt;br /&gt;
            ))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
    return table.concat(html, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Function to create category links&lt;br /&gt;
local function make_category_links(args)&lt;br /&gt;
    local categories = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Type category&lt;br /&gt;
    if args.type and args.type ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s weapons]]&amp;#039;, args.type))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Handedness category&lt;br /&gt;
    if args.handedness and args.handedness ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s-hand weapons]]&amp;#039;, args.handedness))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Rarity category&lt;br /&gt;
    if args.rarity and args.rarity ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s weapons]]&amp;#039;, args.rarity))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Class categories&lt;br /&gt;
    if args.class1 and args.class1 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s weapons]]&amp;#039;, args.class1))&lt;br /&gt;
    end&lt;br /&gt;
    if args.class2 and args.class2 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s weapons]]&amp;#039;, args.class2))&lt;br /&gt;
    end&lt;br /&gt;
    if args.class3 and args.class3 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:%s weapons]]&amp;#039;, args.class3))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Drop categories&lt;br /&gt;
    if args.drop1 and args.drop1 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:Dropped by %s]]&amp;#039;, args.drop1))&lt;br /&gt;
    end&lt;br /&gt;
    if args.drop2 and args.drop2 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        table.insert(categories, string.format(&amp;#039;[[Category:Dropped by %s]]&amp;#039;, args.drop2))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(categories, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main function&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
    local args = frame:getParent().args&lt;br /&gt;
    &lt;br /&gt;
    -- Use title parameter or page name as default&lt;br /&gt;
    local name = args.title or args.name or frame:getParent().title.text&lt;br /&gt;
    &lt;br /&gt;
    local html = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Start the main infobox container&lt;br /&gt;
    table.insert(html, string.format(&amp;#039;&amp;lt;div class=&amp;quot;weapon-infobox&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;&amp;#039;, STYLE_FLOATING))&lt;br /&gt;
    &lt;br /&gt;
    -- Header/Title&lt;br /&gt;
    table.insert(html, string.format(&amp;#039;&amp;lt;div class=&amp;quot;weapon-header&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;#039;, STYLE_HEADER, name))&lt;br /&gt;
    &lt;br /&gt;
    -- Image Section&lt;br /&gt;
    if args.image and args.image ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        local image_link = string.format(&amp;#039;[[File:%s|250px|alt=%s]]&amp;#039;, args.image, name)&lt;br /&gt;
        table.insert(html, string.format(&amp;#039;&amp;lt;div class=&amp;quot;weapon-image&amp;quot; style=&amp;quot;padding: 10px !important; text-align: center !important;&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&amp;#039;, image_link))&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Start Weapon Information Section&lt;br /&gt;
    table.insert(html, &amp;#039;&amp;lt;div class=&amp;quot;weapon-section&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(html, string.format(&amp;#039;&amp;lt;div class=&amp;quot;section-title&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;Weapon Information&amp;lt;/div&amp;gt;&amp;#039;, STYLE_SECTION_TITLE))&lt;br /&gt;
    &lt;br /&gt;
    -- Data Rows&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Type&amp;#039;, args.type))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Hands&amp;#039;, args.handedness and args.handedness .. &amp;#039;-hand&amp;#039; or &amp;#039;&amp;#039;))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Char Allocation&amp;#039;, args.allocation and args.allocation .. &amp;#039; slots&amp;#039; or &amp;#039;&amp;#039;))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Primary Class&amp;#039;, args.class1))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Secondary Class&amp;#039;, args.class2))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Tertiary Class&amp;#039;, args.class3))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Attack&amp;#039;, args.attack))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Defense&amp;#039;, args.defense))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Magic&amp;#039;, args.magic))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Rarity&amp;#039;, args.rarity))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Value&amp;#039;, args.value and args.value .. &amp;#039; gold&amp;#039; or &amp;#039;&amp;#039;))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Drops From&amp;#039;, args.drop1))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Also Drops From&amp;#039;, args.drop2))&lt;br /&gt;
    table.insert(html, make_data_row(&amp;#039;Special Notes&amp;#039;, args.notes))&lt;br /&gt;
    &lt;br /&gt;
    table.insert(html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;) -- End weapon-section&lt;br /&gt;
    &lt;br /&gt;
    -- Requirements Section (Horizontal Group)&lt;br /&gt;
    if args.level or args.str or args.dex or args.int then&lt;br /&gt;
        table.insert(html, &amp;#039;&amp;lt;div class=&amp;quot;weapon-section&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
        table.insert(html, string.format(&amp;#039;&amp;lt;div class=&amp;quot;section-title&amp;quot; style=&amp;quot;%s&amp;quot;&amp;gt;Requirements&amp;lt;/div&amp;gt;&amp;#039;, STYLE_SECTION_TITLE))&lt;br /&gt;
        &lt;br /&gt;
        local requirements = {&lt;br /&gt;
            {label = &amp;#039;Level&amp;#039;, value = args.level},&lt;br /&gt;
            {label = &amp;#039;STR&amp;#039;, value = args.str},&lt;br /&gt;
            {label = &amp;#039;DEX&amp;#039;, value = args.dex},&lt;br /&gt;
            {label = &amp;#039;INT&amp;#039;, value = args.int}&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        table.insert(html, make_horizontal_group(requirements))&lt;br /&gt;
        table.insert(html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;) -- End weapon-section&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- End container&lt;br /&gt;
    table.insert(html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;) -- End weapon-infobox&lt;br /&gt;
    &lt;br /&gt;
    -- Add categories (hidden from display, for wiki organization)&lt;br /&gt;
    table.insert(html, &amp;#039;\n&amp;lt;!-- Categories --&amp;gt;\n&amp;#039; .. make_category_links(args))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(html, &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>