Module:Infobox: Difference between revisions

m
1 revision imported
m (1 revision imported)
m (1 revision imported)
 
(5 intermediate revisions by 4 users not shown)
Line 6: Line 6:
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end


local function fixChildBoxes(sval, tt)
local function fixChildBoxes(sval, tt)
Line 13: Line 51:
local marker = '<span class=special_infobox_marker>'
local marker = '<span class=special_infobox_marker>'
local s = sval
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
Line 104: Line 150:
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
root
:tag('tr')
:tag('tr')
Line 119: Line 167:
if rowArgs.data then
if rowArgs.data then
root:wikitext(
root:wikitext(
'[[Category:Pages which use infobox templates with ignored data cells]]'
'[[Category:Pages using infobox templates with ignored data cells]]'
)
)
end
end
elseif rowArgs.data and rowArgs.data:gsub(
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
category_in_empty_row_pattern, ''
):match('^%S') then
has_rows = true
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:addClass(rowArgs.rowclass)
Line 159: Line 207:


has_rows = true
has_rows = true
has_list_class({args.titleclass})
root
root
:tag('caption')
:tag('caption')
Line 166: Line 216:
:cssText(args.titlestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
:wikitext(args.title)
end
end


Line 172: Line 223:


has_rows = true
has_rows = true
has_list_class({ args.aboveclass })
root
root
:tag('tr')
:tag('tr')
Line 187: Line 240:


has_rows = true
has_rows = true
has_list_class({ args.belowclass })
root
root
:tag('tr')
:tag('tr')
Line 202: Line 257:
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
row:addClass(subheaderArgs.rowclass)
Line 244: Line 301:


has_rows = true
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
row:addClass(imageArgs.rowclass)
Line 355: Line 414:
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
root:wikitext(require('Module:Italic title')._main({}))
end
end
end
end
Line 375: Line 434:
if args.title then
if args.title then
root:wikitext(
root:wikitext(
'[[Category:Pages which use embedded infobox templates with the title parameter]]'
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
)
end
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles which use infobox templates with no data rows]]')
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
end
end
Line 386: Line 445:
Loads the templatestyles for the infobox.
Loads the templatestyles for the infobox.


TODO: load base templatestyles here rather than in MediaWiki:Common.css
TODO: FINISH loading base templatestyles here rather than in
We aren't doing it here yet because there are 4-5000 pages with 'raw' infobox
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
Will have to do some bizarre conversion category like with sidebar.
 
]=]
]=]
local function loadTemplateStyles()
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local frame = mw.getCurrentFrame()
-- See function description
local hlist_templatestyles = ''
-- local base_templatestyles = frame:extensionTag{
if lists.hlist_t.found then
-- name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
hlist_templatestyles = frame:extensionTag{
-- }
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
local templatestyles = ''
if args['templatestyles'] then templatestyles = frame:extensionTag{
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
name = 'templatestyles', args = { src = args['templatestyles'] }
}
}
Line 408: Line 482:
local child_templatestyles = ''
local child_templatestyles = ''
if args['child templatestyles'] then child_templatestyles = frame:extensionTag{
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
}
Line 414: Line 489:
local grandchild_templatestyles = ''
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
}
end
end
 
return table.concat({
return table.concat({
-- base_templatestyles, -- see function description
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
templatestyles,
child_templatestyles,
child_templatestyles,
grandchild_templatestyles
grandchild_templatestyles
})
})
end
end


Line 453: Line 533:
-- @deprecated next; target .infobox-<name>
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })


renderTitle()
renderTitle()
renderAboveRow()
renderAboveRow()
structure_infobox_common()
return loadTemplateStyles() .. root
else
else
root = mw.html.create()
root = mw.html.create()
Line 464: Line 543:
root
root
:wikitext(args.title)
:wikitext(args.title)
structure_infobox_common()
return root
end
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
end