Path of Exile Wiki

Please consider helping keep the wiki up to date. Check the to-do list of updates needed for version 3.14.0.

Game data exports will becoming later as the technical changes in addition to regular changes take some more time.

READ MORE

Path of Exile Wiki
Advertisement
Module documentation[view] [edit] [history] [purge]

Overview

Module for implementing various templates in lua that are not big/complex enough to warrent their own module.

List of currently implemented templates

--[[
Module for implementing miscellaneous templates in lua.  
Mostly exists here so we don't have hundred of module pages for templates that don't have a lot of code.
 
If a template requires a *lot* of coding consider moving it into it's own lua module.
]]--

local xtable = require('Module:Table')
local util = require('Module:Util')
local getArgs = require('Module:Arguments').getArgs
local mbox = require('Module:Message box').main

local m_game = mw.loadData('Module:Game')

local h = {}
local p = {}
local g_frame, g_args

local i18n = {
    tooltips = {
        item_class = 'Item class',
        item_class_id = 'Internal ID',
        item_class_category = 'Category',
    },
}

--
-- Template: Item class list
--

function p.item_class_list(frame)
    g_args = getArgs(frame, {
        parentFirst = true
    })
    g_frame = util.misc.get_frame(frame)
    
    local skip = {['SmallRelic'] = true, ['MediumRelic'] = true, ['LargeRelic'] = true}
    local out = {}
    for id, data in pairs(m_game.constants.item.classes) do
        if skip[id] == nil then
            local tr = mw.html.create('tr')
            tr
                :tag('td')
                    :wikitext(string.format('[[%s]]', data['full']))
                    :done()
                :tag('td')
                    :wikitext(id)
                    :done()
                :tag('td')
                    :wikitext(data['category'])
                    :done()
            out[data['id']] = tostring(tr)
        else
            out[data['id']] = ''
        end
    end
    
    local tbl = mw.html.create('table')
    tbl
        :attr('class', 'wikitable sortable')
        :tag('tr')
            :tag('th')
                :wikitext(i18n.tooltips.item_class)
                :done()
            :tag('th')
                :wikitext(i18n.tooltips.item_class_id)
                :done()
            :tag('th')
                :wikitext(i18n.tooltips.item_class_category)
                :done()
            :done()
        :wikitext(table.concat(out))
    
    return tostring(tbl)
end

function p.item_class_category_list(frame)
    --[[
        Displays a list of categories for all item classes.
    ]]

    local tpl_args = getArgs(frame, {parentFirst = true})
    local frame = util.misc.get_frame(frame)
    
    tpl_args.format = tpl_args.format or 'default'
    
    local fmt
    if tpl_args.format == 'default' then
        fmt = '<li>%s</li>'
    else
        error(string.format('Unrecognized format: %s', tpl_args.format))
    end
    
    out = {'<ul>'}
    save_tbl = {}
    for _, data in pairs(m_game.constants.item.classes) do
        if not save_tbl[data.category] and data.category ~= '' then
            save_tbl[data.category] = true
            
            out[#out+1] = string.format(fmt, data.category)
        end
    end
    out[#out+1] = '</ul>'
    
    return table.concat(out)
end

--
-- Template: ItemFilterList
--
function p.filter_list(frame)
    g_args = getArgs(frame, {
        parentFirst = true
    })
    g_frame = util.misc.get_frame(frame)
    
    g_args.type = g_args.type or ''
    
    local tbl = mw.html.create('table')
    tbl
        :attr('class', 'wikitable sortable')
    local tblrow = tbl:tag('tr')
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Name')
                :done()
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Author')
                :done()
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Release')
                :done()
            :tag('th')
                :attr('colspan', 9)
                :wikitext('Ingame Features')
                :done()
            :tag('th')
                :attr('colspan', 1)
                :wikitext('Other Features')
                :done()
            :tag('th')
                :attr('colspan', 2)
                :wikitext('Filtration Support')
                :done()
    if g_args.type == 'specialized' then
            tblrow:tag('th')
                :attr('rowspan', 2)
                :wikitext('Description')
                :done()
    end
            
    tblrow = tbl:tag('tr')
            :tag('th')
                :wikitext('Colours')
                :done()
            :tag('th')
                :wikitext('Borders')
                :done()
            :tag('th')
                :wikitext('Font<br>Size')
                :done()
             :tag('th')
                :wikitext('Background')
                :done()
            :tag('th')
                :wikitext('Item<br>Hiding')
                :done()
            :tag('th')
                :wikitext('Leveling')
                :done()
            :tag('th')
                :wikitext('Endgame')
                :done()
            :tag('th')
                :wikitext('Vendor<br>recipes')
                :done()
            :tag('th')
                :wikitext('Crafting')
                :done()
            -- Other Features
            :tag('th')
                :wikitext('Customizable')
                :done()
            -- Filtration
            :tag('th')
                :wikitext('General')
                :done()
            :tag('th')
                :wikitext('Themes')
                :done()
        :done()
        :wikitext(g_args.rows)
    
    --return tostring(tbl) .. frame:extensionTag{ name = 'references', content = '', args = {group='note'}}
    return tostring(tbl)
end

--
-- Template: ItemFilterListRow
--

local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_values = xtable:new({'no', 'minor', 'partial', 'major', 'yes'})

local filter_list_yes_no_args = xtable:new({'customization', 'filtration_general', 'filtration_themes'})
local filter_list_yes_no = xtable:new({'no', 'partial', 'yes', 'unknown'})

function h.filter_list_get_arg(arg)
    --[[
    Return a formatted table cell for the given argument
    ]]--
    local val = g_args[arg]
    if type(val) == 'number' then
        val = filter_list_range_values[val]
    end
    if g_args[arg .. '_note'] ~= nil then
        local abbr = mw.html.create('abbr')
        abbr
            :attr('title', g_args[arg .. '_note'])
            :css('color', 'black')
            :wikitext(val)
            :done()
        return tostring(abbr)
    else
        return val
    end
end

-- Test: =p.filter_list{rows=p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015'}}
-- =p.filter_list{type='specialized',rows=p.filter_list_row{type='specialized', name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes',colour_note="test", border='yes', font_size='no', background='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015', description='test'}}
function p.filter_list_row(frame)
    g_args = getArgs(frame, {
        parentFirst = true
    })
    g_frame = util.misc.get_frame(frame)
    
    -- Checking args
    
    for _, arg in ipairs(filter_list_required_args) do
        if g_args[arg] == nil then
            error('Required argument ' .. arg .. ' is missing')
        end
    end
    
    g_args.filtration_general = g_args.filtration_general or 'unknown'
    g_args.filtration_themes = g_args.filtration_themes or 'unknown'
    g_args.customization = g_args.customization or 'unknown'
    g_args.descriptipon = g_args.description or '<br>'
    g_args.type = g_args.type or ''
    
    -- Checking & formatting args
    
    for _, arg in ipairs(filter_list_range_args) do
        local val = g_args[arg]
        local index = filter_list_range_values:index(val)
        if index then
            g_args[arg] = index
        else
            index = util.cast.number(val)
            if index ~= nil and index >= 0 and index < filter_list_range_values:size() then
                -- Lua starts counting at 1
                g_args[arg] = index+1
            else
                error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_range_values, ' '))
            end
        end
    end
    
    for _, arg in ipairs(filter_list_yes_no_args) do
        local val = g_args[arg]
        if not filter_list_yes_no:contains(val) then
            error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_yes_no, ' '))
        end
    end
    
    -- Output
    
    local tblrow = mw.html.create('tr')
    tblrow
        :tag('td')
            :wikitext('[' .. g_args.release_link .. ' ' .. g_args.name .. ']')
            :done()
        :tag('td')
            :wikitext(g_args.author)
            :done()
        :tag('td')
            :wikitext(g_args.release)
            :done()
            
    -- Basic Features
    for _, arg in ipairs(filter_list_range_args) do
        local index = g_args[arg]
        local text = filter_list_range_values[index] or ''
        local note = g_args[arg .. '_note']
        tblrow
            :tag('td')
                :attr('class', 'table-cell-coloured table-cell-' .. text )
                :attr('data-sort-value', index)
                :wikitext(h.filter_list_get_arg(arg))
                :done()
    end
    
    -- Other Features
    for _, arg in ipairs(filter_list_yes_no_args) do
        local val = g_args[arg]
        tblrow
            :tag('td')
                :attr('class', 'table-cell-coloured table-cell-' .. val)
                :attr('data-sort-value', '' .. filter_list_yes_no:index(val))
                :wikitext(h.filter_list_get_arg(arg))
                :done()
    end
    
    if g_args.type == 'specialized' then
        tblrow
            :tag('td')
                :wikitext(h.filter_list_get_arg('description'))
                :done()
    end

    return tostring(tblrow)
end

-- ----------------------------------------------------------------------------

return p
Advertisement