Module:Infobox: Difference between revisions

m
61 revisions imported from templatewiki:Module:Infobox
(make union a local function per protected edit request by User:Jackmcbarn)
m (61 revisions imported from templatewiki:Module:Infobox)
 
(30 intermediate revisions by 16 users not shown)
Line 2:
-- This module implements {{Infobox}}
--
 
local p = {}
 
local HtmlBuildernavbar = require('Module:HtmlBuilderNavbar')._navbar
 
local args = {}
local origArgs
local root
 
local function notempty( s ) return s and s:match( '%S' ) end
 
local function fixChildBoxes(sval, tt)
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&oldid=849054481
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
 
local function union(t1, t2)
-- Returns the union of the values of two tables, as a sequence.
Line 45 ⟶ 96:
if rowArgs.header then
root
.:tag('tr')
.:addClass(rowArgs.rowclass)
.tag:cssText('th'rowArgs.rowstyle)
.:attr('colspanid', 2rowArgs.rowid)
.addClass:tag(rowArgs.class'th')
.addClass:attr(args.headerclass'colspan', 2)
.css:attr('text-alignid', 'center'rowArgs.headerid)
.cssText:addClass(argsrowArgs.headerstyleclass)
.wikitext:addClass(rowArgsargs.headerheaderclass)
. :css('bordertext-spacingalign', '3pxcenter')
.:cssText(args.captionstyleheaderstyle)
.wikitext:cssText(captionrowArgs.rowcellstyle)
. :wikitext(argsfixChildBoxes(rowArgs.belowheader, 'th'))
elseif rowArgs.data then
local row = root.:tag('tr')
row.:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
row:attr('id', rowArgs.rowid)
if rowArgs.label then
row
.:tag('th')
.:attr('scope', 'row')
.css:attr('text-alignid', 'left'rowArgs.labelid)
.:cssText(args.labelstyle)
.wikitext:cssText(rowArgs.labelrowcellstyle)
.done:wikitext(rowArgs.label)
:done()
end
local dataCell = row.:tag('td')
if not rowArgs.label then
dataCell
.:attr('colspan', 2)
.:css('text-align', 'center')
end
dataCell
.addClass:attr('id', rowArgs.classdataid)
.cssText:addClass(rowArgs.datastyleclass)
.newline:cssText(rowArgs.datastyle)
.wikitext:cssText(rowArgs.datarowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
end
end
Line 85 ⟶ 144:
 
root
.:tag('caption')
.:addClass(args.titleclass)
.:cssText(args.titlestyle)
.:wikitext(args.title)
end
 
Line 95 ⟶ 154:
root
.:tag('tr')
.:tag('th')
.:attr('colspan', 2)
.:addClass(args.aboveclass)
.:css('text-align', 'center')
.:css('font-size', '125%')
.:css('font-weight', 'bold')
.:cssText(args.abovestyle)
.:wikitext(fixChildBoxes(args.above,'th'))
end
 
Line 110 ⟶ 169:
root
.:tag('tr')
.:tag('td')
.:attr('colspan', '2')
.:addClass(args.belowclass)
.:css('text-align', 'center')
.:cssText(args.belowstyle)
.newline:wikitext(fixChildBoxes(args.below,'td'))
.wikitext(args.below)
end
 
Line 131 ⟶ 189:
addRow({
data = args['subheader' .. tostring(num)],
datastyle = args.subheaderstyle or args['subheaderstyle' .. tostring(num)],
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
Line 148 ⟶ 207:
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = HtmlBuildermw.html.create().:wikitext(args['image' .. tostring(num)])
if caption then
data
.:tag('brdiv', {selfClosing = true})
.done:cssText(args.captionstyle)
.tag :wikitext('div'caption)
.cssText(args.captionstyle)
.wikitext(caption)
end
addRow({
Line 178 ⟶ 235:
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)],
dataid = args['dataid' .. tostring(num)],
labelid = args['labelid' .. tostring(num)],
headerid = args['headerid' .. tostring(num)],
rowid = args['rowid' .. tostring(num)]
})
end
Line 187 ⟶ 250:
root
.:tag('tr')
.:tag('td')
.:attr('colspan', '2')
.:css('text-align', 'right')
.:wikitext(mw.getCurrentFrame():expandTemplate(navbar{
title = 'navbar'args.name,
args = { args.name, mini = 1 },
}))
end
 
Line 200 ⟶ 263:
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root.:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
end
end
Line 206 ⟶ 269:
local function renderTrackingCategories()
if args.decat ~= 'yes' then
if args.child == 'yes' and args.title then
if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
if args.title then
root.wikitext('[[Category:Articles which use infobox templates with no data rows]]')
root.:wikitext('[[Category:ArticlesPages which use embedded infobox templates with the title parameter]]')
end
if args.child == 'yes' and args.title then
ifelseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root.wikitext('[[Category:Articles which use embedded infobox templates with the title parameter]]')
root.:wikitext('[[Category:Articles which use infobox templates with no data rows]]')
end
end
Line 219 ⟶ 283:
-- if the infobox is used as a 'child' inside another infobox.
if args.child ~= 'yes' then
root = HtmlBuildermw.html.create('table')
root
.:addClass((args.subbox ~= 'yes') and 'infobox' or nil)
.:addClass(args.bodyclass)
.attr('cellspacing', 3)
.css('border-spacing', '3px')
if args.subbox == 'yes' then
root
.:css('padding', '0')
.:css('border', 'none')
.:css('margin', '-3px')
.:css('width', 'auto')
.:css('min-width', '100%')
.:css('font-size', '100%')
.:css('clear', 'none')
.:css('float', 'none')
.:css('background-color', 'transparent')
else
root
.:css('width', '22em')
end
root
.:cssText(args.bodystyle)
renderTitle()
renderAboveRow()
else
root = HtmlBuildermw.html.create()
root
.:wikitext(args.title)
end
 
Line 369 ⟶ 431:
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'classrowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'},
{prefix = 'dataid'},
{prefix = 'labelid'},
{prefix = 'headerid'},
{prefix = 'rowid'}
}, 50)
preprocessSingleArg('headerclass')