Module:Item class/sandbox

From Path of Exile Wiki
Revision as of 03:06, 19 December 2021 by KickahaOta (talk | contribs) (Remove stray debug line)
Jump to navigation Jump to search

This is the module sandbox page for Module:Item class (diff).

Module documentation[view] [edit] [history] [purge]


Implements {{item class list}} and {{item class infocard}}.


-------------------------------------------------------------------------------
-- 
--                        Module:Item class infocard
-- 
-- This module implements Template:Item class infocard
-------------------------------------------------------------------------------

-- ----------------------------------------------------------------------------
-- Includes
-- ----------------------------------------------------------------------------

local getArgs = require('Module:Arguments').getArgs
local m_util = require('Module:Util')
local m_game = mw.loadData('Module:Game')

local i18n = {
    page = '[[Item class]]',
    info = m_util.html.abbr('(?)', 'Item classes categorize items. Classes are often used to restrict items or skill gems to a specific class or by item filters'),
    also_referred_to_as = 'Also referred to as: %s',
    item_filter_id = 'Item filter ID: %s',
    suppressed = 'Suppressed from lists.',
    uncertainty = "''Uncertainty: %s''. " .. m_util.html.abbr('(?)', 'Some of this information is questionable. If you can confirm or correct it, please let us know on the talk page.'),

    errors = {
        invalid_class = 'The item class name "%s" is invalid.',
    },
}

-- ----------------------------------------------------------------------------
-- Exported functions
-- ----------------------------------------------------------------------------
local p = {}

function p.main(frame)
    -- Get args
    local tpl_args = getArgs(frame, {
        parentFirst = true
    })

    frame = m_util.misc.get_frame(frame)
    
    if not doInfoCard then
        doInfoCard = require('Module:Infocard')._main
    end

    local constinfo = nil
    local filterid = nil
    for id, row in pairs(m_game.constants.item.classes) do
        if row['full'] == tpl_args.name then
            constinfo = row
            filterid = id
            break
        end
    end
    
    if constinfo == nil then
        error(string.format(i18n.errors.invalid_class, tostring(tpl_args.name)))
    end
    
    if tpl_args.name_list ~= nil then
        tpl_args.name_list = m_util.string.split(tpl_args.name_list, ',%s*')
    else
        tpl_args.name_list = {}
    end
    
    --

	local infocard_args = {}

    local ul = mw.html.create('ul')
    for _, item in ipairs(tpl_args.name_list) do
        ul
            :tag('li')
                :wikitext(item)
                :done()
    end

	table.insert(infocard_args, ul)    

	table.insert(infocard_args, string.format(i18n.also_referred_to_as, tostring(filterid)))

    if (constinfo['suppress'] ~= nil) and (constinfo['suppress'] ~= "") then
    	table.insert(infocard_args, i18n.suppressed)
    end
	
    if (constinfo['uncertainty'] ~= nil) and (constinfo['uncertainty'] ~= "") then
    	local uncertaintytext = string.format(i18n.uncertainty, tostring(constinfo['uncertainty']))
    	table.insert(infocard_args, uncertaintytext)
	end

    -- Output Infocard

	infocard_args['header'] = tpl_args.name
	infocard_args['subheader'] = i18n.page .. i18n.info
    
    -- cats
    
    local cats = {
        'Item classes',
        tpl_args.name,
    }
    
    -- Done
    
    return doInfoCard(infocard_args) .. m_util.misc.add_category(cats, {ignore_blacklist=tpl_args.debug})
end

return p