Module:Infocard
Jump to navigation
Jump to search
The above documentation is transcluded from Module:Infocard/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:Infocard
--
-- This module implements Template:Infocard and is used by a number of other
-- modules to display info cards.
-------------------------------------------------------------------------------
require('Module:No globals')
local m_util = require('Module:Util')
-- Should we use the sandbox version of our submodules?
local use_sandbox = m_util.misc.maybe_sandbox('Infocard')
-- 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:Infocard/config/sandbox') or mw.loadData('Module:Infocard/config')
local i18n = cfg.i18n
-- ----------------------------------------------------------------------------
-- Main function
-- ----------------------------------------------------------------------------
local function _main(args)
args.heading = args.heading or args.header
args.subheading = args.subheading or args.subheader
local html = mw.html.create('div')
:addClass('info-card')
if args.class then
html:addClass(args.class)
end
if args.above then
html
:tag('div')
:addClass('info-card__above')
:node(args.above)
end
local card = mw.html.create('div')
:addClass('info-card__card')
local header = mw.html.create('div')
:addClass('info-card__header')
header
:tag('div')
:addClass('left')
:wikitext(args.headerleft or '')
local middle = mw.html.create('div')
:addClass('middle')
middle
:tag('div')
:addClass('heading')
:wikitext(args.heading)
if args.subheading then
middle
:tag('div')
:addClass('subheading')
:wikitext(args.subheading)
end
header
:node(middle)
header
:tag('div')
:addClass('right')
:wikitext(args.headerright or '')
card:node(header)
local body = mw.html.create('div')
:addClass('info-card__body')
local block
for i=1, math.huge do -- repeat until no more blocks are found
if args[i] == nil then
break
end
block = mw.html.create('div')
:addClass('block')
if args[i .. 'class'] then
block:addClass(args[i .. 'class'])
end
block:node(args[i])
body:node(block)
end
card:node(body)
html:node(card)
if args.below then
html
:tag('div')
:addClass('info-card__below')
:node(args.below)
end
return tostring(html)
end
-- ----------------------------------------------------------------------------
-- Exported functions
-- ----------------------------------------------------------------------------
local p = {}
p.main = m_util.misc.invoker_factory(_main, {
wrappers = cfg.wrappers,
})
p.infocard = p.main
p._main = p.main -- Contingency for modules that are still calling p._main()
return p