Editing Module:ItemData/nav

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")
Line 12: Line 10:
     ["Spirit Lifesteal"] = "Spirit Lifesteal (item)"
     ["Spirit Lifesteal"] = "Spirit Lifesteal (item)"
}
}
-- The card navboxes put every item on a single page, so their cards opt into
-- the cheaper ItemBox rendering via lowGraphics. This swaps the paper texture
-- from the normal-mode multiply (which blends two images and is re-rasterised
-- every scrolled frame) to a transparent-paper overlay that is a single
-- cacheable image, the one change that carried the navbox scroll cost. The wear
-- and icon masks stay at full detail, since a single-image mask caches fine.
-- See [[Template:ItemBox]]. Only the ItemBox branch of write_wrapped_item_list
-- uses this; the ItemIcon lists are unaffected.
local LOW_GRAPHICS = "|lowGraphics=true"


-- Cached items grouped by slot to prevent redundant full-table evaluations
-- Cached items grouped by slot to prevent redundant full-table evaluations
Line 105: Line 93:
                     if lang_code == "en" then
                     if lang_code == "en" then
                         if is_street_brawl then
                         if is_street_brawl then
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. item_link .. "|overrideTier=5" .. LOW_GRAPHICS .. "}}"
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. item_link .. "|overrideTier=5}}"
                         else
                         else
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. item_link .. LOW_GRAPHICS .. "}}"
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. item_link .. "}}"
                         end
                         end
                     else
                     else
                         local link_local = item_link .. "/" .. lang_code
                         local link_local = item_link .. "/" .. lang_code
                         if is_street_brawl then
                         if is_street_brawl then
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. link_local .. "|item_price={{#invoke:Lang|get_string|Citadel_ItemDraft_Legendary}}" .. LOW_GRAPHICS .. "}}"
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. link_local .. "|item_price={{#invoke:Lang|get_string|Citadel_ItemDraft_Legendary}}}}"
                         else
                         else
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. link_local .. LOW_GRAPHICS .. "}}"
                             item_template = "{{ItemBox|itemName=" .. item_name_english .. "|overrideLinkClick=" .. link_local .. "}}"
                         end
                         end
                     end
                     end
Line 233: Line 221:


-- for [[Template:Active Items]]
-- for [[Template:Active Items]]
-- Displayed when a stat does not apply to an item
local NO_VALUE = "—"
-- One expanded inline attribute as produced by [[Module:Lang]]:
-- wrapper span > icon span > spacer span > wikilink
local INLINE_ATTRIBUTE_PATTERN =
    '<span class="no%-blue%-link" style="text%-wrap:nowrap; font%-weight:bold; color:[^;"]*;">' ..
    '<span style="[^"]*">%[%[File:[^%]]*%]%]</span>' ..
    '<span style="color: inherit;"> </span> ' ..
    '%[%[([^|%]]+)|([^%]]*)%]%]</span>'
-- Range is taken from the first of these the item has a usable value for
local RANGE_PROPERTIES = { "AbilityCastRange", "Radius", "EndRadius" }
-- Rewrites the description markup [[Module:Lang]] produces
local function restyle_description(text)
    text = text:gsub(INLINE_ATTRIBUTE_PATTERN, '[[%1|%2]]')
    -- Attributes with an icon but no link keep their span; follow the site text color
    text = text:gsub('color:#ffefd7;', 'color:var(--color-base);')
    -- Diminished notes ("Cannot be used while Stunned...")
    return (text:gsub('color:#C0C0C0', 'color:var(--color-subtle)'))
end
-- Numeric value of a stat, used for sorting
local function stat_sort_value(value)
    if type(value) == "table" then value = value["Value"] end
    if value == nil then return -1 end
    return tonumber(tostring(value):match("[-%d%.]+")) or -1
end
-- First range property the item has a usable value for
local function get_range_property(item_data)
    for _, property in ipairs(RANGE_PROPERTIES) do
        local value = item_data[property]
        if value ~= nil and stat_sort_value(value) > 0 then
            return property, value
        end
    end
    return nil, nil
end
-- Builds a stat cell, falling back to an em dash when the stat does not apply
local function stat_cell(raw_value, item_name, property, postfix)
    if raw_value == nil or property == nil then
        return '| data-sort-value="-1" style="text-align:center;font-size:16px" | ' .. NO_VALUE
    end
    return string.format(
        '| data-sort-value="%s" style="text-align:center;font-size:16px" | {{#invoke:ItemData|get_prop|%s|%s}}%s',
        stat_sort_value(raw_value), item_name, property, postfix or "")
end
function p.generate_active_items_table(frame)
function p.generate_active_items_table(frame)
     local active_items = {}
     local active_items = {}
Line 295: Line 231:
           item_data["Activation"] and  
           item_data["Activation"] and  
           item_data["Activation"] ~= "Passive" then
           item_data["Activation"] ~= "Passive" then
           
            local range_property, range_value = get_range_property(item_data)
              
              
             table.insert(active_items, {
             table.insert(active_items, {
Line 303: Line 237:
                 cost = cost,
                 cost = cost,
                 slot = item_data["Slot"] or "Weapon",
                 slot = item_data["Slot"] or "Weapon",
                 has_active_desc = item_data["ActiveDescription"] ~= nil,
                 has_active_desc = item_data["ActiveDescription"] ~= nil
                cooldown = item_data["AbilityCooldown"],
                duration = item_data["AbilityDuration"],
                range_property = range_property,
                range_value = range_value
             })
             })
         end
         end
Line 322: Line 252:
! {{Souls|{{#invoke:Dictionary|translate|Cost}}}}
! {{Souls|{{#invoke:Dictionary|translate|Cost}}}}
! {{#invoke:Lang|get_string|Citadel_Mod_Tooltip_Active}}
! {{#invoke:Lang|get_string|Citadel_Mod_Tooltip_Active}}
! {{#invoke:Lang|get_string|AbilityCooldown_label}}
! {{#invoke:Lang|get_string|AbilityCooldown_label}}]=])
! {{#invoke:Lang|get_string|AbilityDuration_label}}
! {{#invoke:Lang|get_string|AbilityCastRange_label}}]=])
      
      
     for _, item in ipairs(active_items) do
     for _, item in ipairs(active_items) do
Line 345: Line 273:
| data-sort-value="%d" style="text-align:center;font-size:15px" | {{Souls|%d}}
| data-sort-value="%d" style="text-align:center;font-size:15px" | {{Souls|%d}}
| {{#invoke:Utilities|process_variables|%s_active_desc|%s}}{{#invoke:Utilities|process_variables|%s_desc|%s}}{{#invoke:Utilities|process_variables|%s_active|%s}}
| {{#invoke:Utilities|process_variables|%s_active_desc|%s}}{{#invoke:Utilities|process_variables|%s_desc|%s}}{{#invoke:Utilities|process_variables|%s_active|%s}}
%s
| style="text-align:center;font-size:16px" | {{#invoke:ItemData|get_prop|%s|AbilityCooldown}}s]=],
%s
%s]=],
             bg_color,  
             bg_color,  
             item.name,  
             item.name,  
Line 354: Line 280:
             item.cost, item.cost,
             item.cost, item.cost,
             item.key, item.name, item.key, item.name, item.key, item.name,
             item.key, item.name, item.key, item.name, item.key, item.name,
             stat_cell(item.cooldown, item.name, "AbilityCooldown", "s"),
             item.name)
            stat_cell(item.duration, item.name, "AbilityDuration", "s"),
            stat_cell(item.range_value, item.name, item.range_property))
              
              
         table.insert(rows, row)
         table.insert(rows, row)
Line 362: Line 286:
      
      
     table.insert(rows, "\n|}")
     table.insert(rows, "\n|}")
     return restyle_description(frame:preprocess(table.concat(rows, "\n")))
     return frame:preprocess(table.concat(rows, "\n"))
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