Module:Item infobox: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
(Display view and edit links above infobox)
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 9: Line 9:
local m_util = require('Module:Util')
local m_util = require('Module:Util')
local m_item_util = require('Module:Item util')
local m_item_util = require('Module:Item util')
local m_cargo = require('Module:Cargo')


-- Should we use the sandbox version of our submodules?
-- Should we use the sandbox version of our submodules?
Line 24: Line 25:


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
Line 68: Line 58:
     qargs.join = 'items._pageID = maps._pageID, maps.area_id = areas.id'
     qargs.join = 'items._pageID = maps._pageID, maps.area_id = areas.id'
     qargs.fields = {
     qargs.fields = {
        'items.name=name',
        'items.metadata_id=metadata_id',
         'items.infobox_html=infobox',
         'items.infobox_html=infobox',
         'items.metabox_html=metabox',
         'items.metabox_html=metabox',
Line 74: Line 66:
     local result = m_item_util.query_item(args, qargs)
     local result = m_item_util.query_item(args, qargs)
     if result.error then
     if result.error then
         return result.error
         if not m_util.cast.boolean(args.nocat) then
            return result.error:get_html() .. result.error:get_category()
        end
        return result.error:get_html()
    end
 
    args.main = args.main and m_util.cast.boolean(args.main) or mw.title.getCurrentTitle():inNamespace(0)
    if args.main then
        m_cargo.store({
            _table = 'main_pages',
            data_page = result._pageName,
            id = result.metadata_id,
            name = result.name,
        })
        mw.getCurrentFrame():expandTemplate{title = cfg.attach_template}
     end
     end



Latest revision as of 18:59, 15 December 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')
local m_cargo = require('Module:Cargo')

-- 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.name=name',
        'items.metadata_id=metadata_id',
        '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
        if not m_util.cast.boolean(args.nocat) then
            return result.error:get_html() .. result.error:get_category()
        end
        return result.error:get_html()
    end

    args.main = args.main and m_util.cast.boolean(args.main) or mw.title.getCurrentTitle():inNamespace(0)
    if args.main then
        m_cargo.store({
            _table = 'main_pages',
            data_page = result._pageName,
            id = result.metadata_id,
            name = result.name,
        })
        mw.getCurrentFrame():expandTemplate{title = cfg.attach_template}
    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