Module:Item infobox: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Display view and edit links above infobox) |
||
Line 18: | Line 18: | ||
local i18n = cfg.i18n | local i18n = cfg.i18n | ||
-- ---------------------------------------------------------------------------- | |||
-- Helper functions | |||
-- ---------------------------------------------------------------------------- | |||
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) | |||
local title = mw.title.new(page) | |||
local view = h.make_wikilink(title.prefixedText, i18n.navbar.view) | |||
local edit = h.make_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 | |||
-- ---------------------------------------------------------------------------- | -- ---------------------------------------------------------------------------- | ||
Line 40: | Line 68: | ||
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. | 'items.infobox_html=infobox', | ||
'items.metabox_html=metabox', | |||
'areas.infobox_html=area_infobox', | 'areas.infobox_html=area_infobox', | ||
} | } | ||
Line 47: | Line 76: | ||
return result.error | return result.error | ||
end | 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 = { | local out = { | ||
tostring(infobox), | |||
result | result.area_infobox or '', | ||
} | } | ||
return table.concat(out) | return table.concat(out) |
Revision as of 18:03, 20 January 2022
The above documentation is transcluded from Module:Item infobox/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
-------------------------------------------------------------------------------
--
-- 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.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)
local title = mw.title.new(page)
local view = h.make_wikilink(title.prefixedText, i18n.navbar.view)
local edit = h.make_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