Module:Infobox: Difference between revisions

Reverted good faith edits by Izno (talk): This edit appears to cause extraordinarily high spaces between lines on Template:Infobox officeholder.
Decat tweaks per request on talk
 
(9 intermediate revisions by 3 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 yesno = require("Module:Yesno")
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 18: Line 57:
slast = s
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*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(<templatestyles[^<>]*>%s*</templatestyles>)', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
end
-- end moving templatestyles and categories inside of table rows
-- end moving templatestyles and categories inside of table rows
Line 112: Line 151:
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 125: Line 166:
:cssText(rowArgs.rowcellstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
if rowArgs.data and not yesno(args.decat) 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 167: Line 208:


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


Line 180: Line 224:


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


has_rows = true
has_rows = true
has_list_class({ args.belowclass })
root
root
:tag('tr')
:tag('tr')
Line 210: Line 258:
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 252: Line 302:


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 363: Line 415:
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 379: Line 431:
-- Render tracking categories. args.decat == turns off tracking categories.
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if yesno(args.decat) then return end
if args.child == 'yes' then
if args.child == 'yes' then
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 394: Line 446:
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 416: Line 483:
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 422: Line 490:
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 461: Line 534:
-- @deprecated next; target .infobox-<name>
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })


renderTitle()
renderTitle()