Editing
Module
:
Item Navbox
Give feedback
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.
Anti-spam check. Do
not
fill this in!
local p = {} local items_data = mw.loadJsonData("Data:ItemData.json") local items_module = require("Module:ItemData") local lang_module = require('Module:Lang') -- Cached items grouped by slot to prevent redundant full-table evaluations local cached_slots = nil local function get_items_by_slot(slot) if not cached_slots then cached_slots = { table = {}, Weapon = {}, Armor = {}, Tech = {} } for item_key, item_data in pairs(items_data) do local this_slot = item_data["Slot"] if this_slot and cached_slots[this_slot] then table.insert(cached_slots[this_slot], { key = item_key, data = item_data }) end end end return cached_slots[slot] or {} end -- With debug_mode on, it outputs unprocessed wikitext local function process_debug_mode(wikitext, debug_mode) if debug_mode == 'true' then return wikitext elseif debug_mode == 'false' or debug_mode == nil then return mw.getCurrentFrame():preprocess(wikitext) else return "debug_mode must be 'true' or 'false'" end end -- Directly fetches and formats ItemIcons for the navbox local function get_item_icons(slot, min_souls, max_souls, filter_mode) if slot ~= 'Weapon' and slot ~= 'Armor' and slot ~= 'Tech' then return '' end local lang_code = lang_module.get_lang_code() local items = {} local slot_items = get_items_by_slot(slot) for _, item_entry in ipairs(slot_items) do local item_key = item_entry.key local item_data = item_entry.data 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 item_template if lang_code == "en" then item_template = "{{ItemIcon|" .. item_name_english .. "|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) -- 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"> • </span></span>' end end return table.concat(items, '') end -- Gets list of item codenames local function get_item_codenames(slot, min_souls, max_souls, filter_mode, frame) if slot ~= 'Weapon' and slot ~= 'Armor' and slot ~= 'Tech' then return '' end local lang_code = lang_module.get_lang_code() local items = {} local slot_items = get_items_by_slot(slot) for _, item_entry in ipairs(slot_items) do local item_key = item_entry.key local item_data = item_entry.data 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) -- 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"> • </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 = { { 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_icons(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 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 table.insert(html, '\n</div>') -- Only ONE preprocess call for the entire structure return process_debug_mode(table.concat(html), debug_mode) end return p
Summary:
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:
Module:Item Navbox/doc
(
view source
)
Navigation menu
Personal tools
Create account
Log in
associated-pages
Module
Discussion
English
Views
Read
Edit source
History
Tools
Search
Discord
Discord
Navigation
Main page
About us
Random page
Special pages
Recent changes
Viscous/Movement
5h ago
路
Justis
Viscous/Movement
5h ago
路
Justis
Mirage
11h ago
路
Korvokorvo1234
Vyper/Voice lines
23h ago
路
~2026-RegenStrikeSpirit1098
Show more...
Interface Admin
Common CSS
Vector CSS
Minerva CSS
Citizen CSS
Brown theme CSS
Gadgets
Gadgets definition
Editing
How to edit
Style guide
All guides
New files
Unresolved feedback
Tools
What links here
Related changes
Page information