Module:Infocard: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
m (9 revisions imported) |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
------------------------------------------------------------------------------- | |||
-- | |||
-- 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 = {} | 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 | return p |
Latest revision as of 10:46, 27 September 2024
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