Editing Module:Item Navbox

Jump to navigation Jump to search
Warning: You are not logged in. Once you make an edit, a temporary account will be created for you. Learn more. Log in or create an account to continue receiving notifications after this account expires, and to access other features.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
local p = {}
local p = {}
local items_data = mw.loadJsonData("Data:ItemData.json")
local items_data = mw.loadJsonData("Data:ItemData.json")
local items_module = require("Module:ItemData")
local lang_module = require('Module:Lang')
local lang_module = require('Module:Lang')


Line 89: Line 88:
     return table.concat(items, '')
     return table.concat(items, '')
end
end
-- Generates the Navbox using standard MediaWiki template structure
function p.generate_full_navbox(frame)
    local debug_mode = type(frame) == "table" and frame.args and frame.args["debug_mode"] or nil
    local wikitext = {}
      
      
-- Gets list of item codenames
    -- Insert standard stylesheet call
local function get_item_codenames(slot, min_souls, max_souls, filter_mode, frame)
    table.insert(wikitext, '<templatestyles src="User:Kai/mp/itemnavbox/styles.css"/>\n')
    if slot ~= 'Weapon' and slot ~= 'Armor' and slot ~= 'Tech' then return '' end
      
      
     local lang_code = lang_module.get_lang_code()
     -- Start building the {{Navbox}} call
    local items = {}
     table.insert(wikitext, '{{Navbox')
     local slot_items = get_items_by_slot(slot)  
      
      
     for _, item_entry in ipairs(slot_items) do
     -- IMPORTANT: Change "Template:ItemNavbox" below to the actual name of your template page
        local item_key = item_entry.key
    -- so that the v/d/e (view/discuss/edit) links in the top left work properly.
        local item_data = item_entry.data
    table.insert(wikitext, '| name = Template:ItemNavbox')
       
        local this_cost = tonumber(item_data["Cost"])
        local is_street_brawl = item_data["StreetBrawl"] == true
        local should_include = true
       
        if filter_mode == "street_brawl_only" and not is_street_brawl then
            should_include = false
        elseif filter_mode == "exclude_street_brawl" and is_street_brawl then
            should_include = false
        end
       
        if should_include and item_data["Name"] ~= nil and item_data["IsDisabled"] == false and this_cost ~= nil then
            if this_cost >= min_souls and this_cost < max_souls then
                local item_name_english = lang_module.get_string(item_key, "en")
                local item_name_local = lang_module.get_string(item_key, lang_code)
               
                local codename_frame = {
                    args = { item_name_english }
                }
 
                local item_codename = items_module.get_codename(codename_frame)
               
                local item_template
                if lang_code == "en" then
                    item_template = "{{ItemIcon|" .. item_name_english .. "|l1=" .. item_codename .. "|size=26px}}"
                else
                    item_template = "{{ItemIcon|" .. item_name_english .. "|lang=" .. lang_code .. "|l1=" .. item_name_local .. "|size=26px}}"
                end
               
                local search_data = item_name_english
                if lang_code ~= "en" and item_name_local then
                    search_data = search_data .. " " .. item_name_local
                end
               
                item_template = '<span class="item-nav-search-wrapper"><span class="item-nav-search-item" data-item-name="' .. search_data .. '">' .. item_template .. '</span>'
                table.insert(items, item_template)
            end
        end
    end
      
      
     table.sort(items)
    -- Title including your custom search container element floated to the right
     table.insert(wikitext, '| title = [[Items]] <div class="item-nav-search-container" style="display:inline-block; float:right;"></div>')
      
      
    -- Append closing tags and bullets
    local total_items = #items
    for i = 1, total_items do
        if i == total_items then
            items[i] = items[i] .. '</span>'
        else
            items[i] = items[i] .. '<span class="item-nav-search-sep"> &bull; </span></span>'
        end
    end
   
    return table.concat(items, '')
end
-- Generates the full HTML item navbox recursively and efficiently
function p.generate_full_navbox(frame)
    local debug_mode = type(frame) == "table" and frame.args and frame.args["debug_mode"] or nil
    local html = {}
table.insert(html, '<div class="itemnav-header"> [[Items]] <div class="item-nav-search-container"></div></div>\n')
    table.insert(html, '<div class="itemnav-container"><templatestyles src="Item Navbox/styles.css"/>\n')
    -- Maps Headers to Slots and distinct CSS Classes
     local categories = {
     local categories = {
         { header = "Weapon",   slot = "Weapon", css = "itemnav-weapon" },
         { header = "Weapon", slot = "Weapon" },
         { header = "Vitality", slot = "Armor",  css = "itemnav-vitality" },
         { header = "Vitality", slot = "Armor" },
         { header = "Spirit",   slot = "Tech",  css = "itemnav-tech" }
         { header = "Spirit", slot = "Tech" }
     }
     }


    -- Maps tier boundaries and formatting
     local tiers = {
     local tiers = {
         { label = "{{Souls|800}}", min = 0, max = 801 },
         { label = "{{Souls|800}}", min = 0, max = 801 },
Line 177: Line 119:
         { label = "{{Souls|3200}}", min = 1601, max = 3201 },
         { label = "{{Souls|3200}}", min = 1601, max = 3201 },
         { label = "{{Souls|6400}}", min = 3201, max = 6401 },
         { label = "{{Souls|6400}}", min = 3201, max = 6401 },
         { label = "[[Street Brawl|{{Legendary|{{#invoke:Lang|get_string|Citadel_ItemDraft_Legendary}}}}]]", min = 6401, max = 99999, extra_css = "itemnav-legendary " }
         { label = '<span class="itemnav-legendary">[[Street Brawl|{{Legendary|{{#invoke:Lang|get_string|Citadel_ItemDraft_Legendary}}}}]]</span>', min = 6401, max = 99999 }
     }
     }


     for _, cat in ipairs(categories) do
    -- Loop through categories and build Navbox subgroups
         table.insert(html, '\n<div class="itemnav-type-header">\'\'\'' .. cat.header .. '\'\'\'</div>\n')
     for i, cat in ipairs(categories) do
         table.insert(html, '<div class="itemnav-type-container">\n')
         table.insert(wikitext, '| group' .. i .. ' = ' .. cat.header)
 
         table.insert(wikitext, '| list' .. i .. '  = {{Navbox|child')
         for _, tier in ipairs(tiers) do
       
             local css_class = "itemnav-soul " .. (tier.extra_css or "") .. cat.css
         for j, tier in ipairs(tiers) do
             local items_wikitext = get_item_icons(cat.slot, tier.min, tier.max, nil)
             table.insert(wikitext, '  | group' .. j .. ' = ' .. tier.label)
 
           
             table.insert(html, '\n<div class="itemnav-tier-row">\n')
             local items_string = get_item_icons(cat.slot, tier.min, tier.max, nil)
             table.insert(html, '<div class="' .. css_class .. '">' .. tier.label .. '</div><!--\n')
             -- Wrap the items in our flex container for layout
            table.insert(html, '--><div class="itemnav-cost-type-container">' .. items_wikitext .. '</div>\n')
             table.insert(wikitext, ' | list' .. j .. ' = <div class="itemnav-cost-type-container">' .. items_string .. '</div>')
            table.insert(html, '</div>\n')
         end
         end
 
       
         table.insert(html, '\n</div>\n')
         table.insert(wikitext, '}}') -- Close subgroup navbox
    end
 
    table.insert(html, '\n</div>')
 
    -- Only ONE preprocess call for the entire structure
    return process_debug_mode(table.concat(html), debug_mode)
end
 
-- Generates navbox with codenames
function p.generate_full_navbox_codenames(frame)
    local debug_mode = type(frame) == "table" and frame.args and frame.args["debug_mode"] or nil
 
    local html = {}
table.insert(html, '<div class="itemnav-header"> [[Items]] <div class="item-nav-search-container"></div></div>\n')
    table.insert(html, '<div class="itemnav-container"><templatestyles src="Item Navbox/styles.css"/>\n')
 
    -- Maps Headers to Slots and distinct CSS Classes
    local categories = {
        { header = "Weapon",  slot = "Weapon", css = "itemnav-weapon" },
        { header = "Vitality", slot = "Armor",  css = "itemnav-vitality" },
        { header = "Spirit",  slot = "Tech",  css = "itemnav-tech" }
    }
 
    -- Maps tier boundaries and formatting
    local tiers = {
        { label = "{{Souls|800}}", min = 0, max = 801 },
        { label = "{{Souls|1600}}", min = 801, max = 1601 },
        { label = "{{Souls|3200}}", min = 1601, max = 3201 },
        { label = "{{Souls|6400}}", min = 3201, max = 6401 },
        { label = "[[Street Brawl|{{Legendary|{{#invoke:Lang|get_string|Citadel_ItemDraft_Legendary}}}}]]", min = 6401, max = 99999, extra_css = "itemnav-legendary " }
    }
 
    for _, cat in ipairs(categories) do
        table.insert(html, '\n<div class="itemnav-type-header">\'\'\'' .. cat.header .. '\'\'\'</div>\n')
        table.insert(html, '<div class="itemnav-type-container">\n')
 
        for _, tier in ipairs(tiers) do
            local css_class = "itemnav-soul " .. (tier.extra_css or "") .. cat.css
            local items_wikitext = get_item_codenames(cat.slot, tier.min, tier.max, nil)
 
            table.insert(html, '\n<div class="itemnav-tier-row">\n')
            table.insert(html, '<div class="' .. css_class .. '">' .. tier.label .. '</div><!--\n')
            table.insert(html, '--><div class="itemnav-cost-type-container">' .. items_wikitext .. '</div>\n')
            table.insert(html, '</div>\n')
        end
 
        table.insert(html, '\n</div>\n')
     end
     end


     table.insert(html, '\n</div>')
     table.insert(wikitext, '}}') -- Close parent navbox


     -- Only ONE preprocess call for the entire structure
     -- Only ONE preprocess call for the entire structure
     return process_debug_mode(table.concat(html), debug_mode)
     return process_debug_mode(table.concat(wikitext, '\n'), debug_mode)
end
end


return p
return p
Please note that all contributions to The Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see Deadlock:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template

Page included on this page: