Module:Item infobox: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
(Display view and edit links above infobox)
(Link functions moved to Module:Util)
Line 24: Line 24:


local h = {}
local h = {}
function h.make_wikilink(page, text)
    if text then
        return string.format('[[%s|%s]]', page, text)
    end
    return string.format('[[%s]]', page)
end
function h.make_url_link(url, text)
    return string.format('[%s %s]', url, text)
end


function h.navbar(page)
function h.navbar(page)
     local title = mw.title.new(page)
     local title = mw.title.new(page)
     local view = h.make_wikilink(title.prefixedText, i18n.navbar.view)
     local view = m_util.html.wikilink(title.prefixedText, i18n.navbar.view)
     local edit = h.make_url_link(title:fullUrl{action = 'edit'}, i18n.navbar.edit)
     local edit = m_util.html.url_link(title:fullUrl{action = 'edit'}, i18n.navbar.edit)
     local html = mw.html.create('span')
     local html = mw.html.create('span')
     html
     html

Revision as of 22:44, 20 January 2022

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


Lua logo

This module depends on the following other modules:

Implements {{item infobox}}.

-------------------------------------------------------------------------------
-- 
--                             Module:Item infobox
-- 
-- This module implements Template:Item infobox.
-------------------------------------------------------------------------------

require('Module:No globals')
local m_util = require('Module:Util')
local m_item_util = require('Module:Item util')

-- Should we use the sandbox version of our submodules?
local use_sandbox = m_util.misc.maybe_sandbox('Item infobox')

-- The cfg table contains all localisable strings and configuration, to make it
-- easier to port this module to another wiki.
local cfg = use_sandbox and mw.loadData('Module:Item infobox/config/sandbox') or mw.loadData('Module:Item infobox/config')

local i18n = cfg.i18n

-- ----------------------------------------------------------------------------
-- Helper functions
-- ----------------------------------------------------------------------------

local h = {}

function h.navbar(page)
    local title = mw.title.new(page)
    local view = m_util.html.wikilink(title.prefixedText, i18n.navbar.view)
    local edit = m_util.html.url_link(title:fullUrl{action = 'edit'}, i18n.navbar.edit)
    local html = mw.html.create('span')
    html
        :addClass('item-infobox__navbar mw-editsection-like plainlinks')
        :wikitext( string.format('[%s] [%s]', view, edit) )
    return html
end

-- ----------------------------------------------------------------------------
-- Main functions
-- ----------------------------------------------------------------------------

local function _query_item_infobox(args)
    --[[
    Queries for an item infobox.
    
    Examples
    --------
    =p.query_item_infobox{page='Map:Beach Map (Betrayal)'}
    ]]
    
    args.item_name = args.item_name or args[1]
    local qargs = {}
    qargs.tables = {
        'maps',
        'areas',
    }
    qargs.join = 'items._pageID = maps._pageID, maps.area_id = areas.id'
    qargs.fields = {
        'items.infobox_html=infobox',
        'items.metabox_html=metabox',
        'areas.infobox_html=area_infobox',
    }
    local result = m_item_util.query_item(args, qargs)
    if result.error then
        return result.error
    end

    local infobox = mw.html.create('span')
    local navbar = h.navbar(result._pageName)
    infobox
        :addClass('infobox-page-container')
        :node(navbar)
        :wikitext(result.infobox)
        :wikitext(result.metabox or '')

    local out = {
        tostring(infobox),
        result.area_infobox or '',
    }
    return table.concat(out)
end

-- ----------------------------------------------------------------------------
-- Exported functions
-- ----------------------------------------------------------------------------

local p = {}

-- 
-- Template:Item infobox
-- 
p.query_item_infobox = m_util.misc.invoker_factory(_query_item_infobox, {
    wrappers = cfg.wrappers.query_item_infobox,
})

return p