| Line 2: |
Line 2: |
| | -- This module implements {{Infobox}} | | -- This module implements {{Infobox}} |
| | -- | | -- |
| − |
| + | |
| | local p = {} | | local p = {} |
| | | | |
| Line 10: |
Line 10: |
| | local origArgs | | local origArgs |
| | local root | | 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) | | local function union(t1, t2) |
| Line 56: |
Line 107: |
| | :css('text-align', 'center') | | :css('text-align', 'center') |
| | :cssText(args.headerstyle) | | :cssText(args.headerstyle) |
| − | :wikitext(rowArgs.header) | + | :cssText(rowArgs.rowcellstyle) |
| | + | :wikitext(fixChildBoxes(rowArgs.header, 'th')) |
| | elseif rowArgs.data then | | elseif rowArgs.data then |
| | local row = root:tag('tr') | | local row = root:tag('tr') |
| Line 68: |
Line 120: |
| | :attr('id', rowArgs.labelid) | | :attr('id', rowArgs.labelid) |
| | :cssText(args.labelstyle) | | :cssText(args.labelstyle) |
| | + | :cssText(rowArgs.rowcellstyle) |
| | :wikitext(rowArgs.label) | | :wikitext(rowArgs.label) |
| | :done() | | :done() |
| Line 82: |
Line 135: |
| | :addClass(rowArgs.class) | | :addClass(rowArgs.class) |
| | :cssText(rowArgs.datastyle) | | :cssText(rowArgs.datastyle) |
| − | :newline() | + | :cssText(rowArgs.rowcellstyle) |
| − | :wikitext(rowArgs.data) | + | :wikitext(fixChildBoxes(rowArgs.data, 'td')) |
| | end | | end |
| | end | | end |
| Line 109: |
Line 162: |
| | :css('font-weight', 'bold') | | :css('font-weight', 'bold') |
| | :cssText(args.abovestyle) | | :cssText(args.abovestyle) |
| − | :wikitext(args.above) | + | :wikitext(fixChildBoxes(args.above,'th')) |
| | end | | end |
| | | | |
| Line 122: |
Line 175: |
| | :css('text-align', 'center') | | :css('text-align', 'center') |
| | :cssText(args.belowstyle) | | :cssText(args.belowstyle) |
| − | :newline() | + | :wikitext(fixChildBoxes(args.below,'td')) |
| − | :wikitext(args.below)
| |
| | end | | end |
| | | | |
| Line 137: |
Line 189: |
| | addRow({ | | addRow({ |
| | data = args['subheader' .. tostring(num)], | | data = args['subheader' .. tostring(num)], |
| − | datastyle = args.subheaderstyle or args['subheaderstyle' .. tostring(num)], | + | datastyle = args.subheaderstyle, |
| | + | rowcellstyle = args['subheaderstyle' .. tostring(num)], |
| | class = args.subheaderclass, | | class = args.subheaderclass, |
| | rowclass = args['subheaderrowclass' .. tostring(num)] | | rowclass = args['subheaderrowclass' .. tostring(num)] |
| Line 184: |
Line 237: |
| | rowclass = args['rowclass' .. tostring(num)], | | rowclass = args['rowclass' .. tostring(num)], |
| | rowstyle = args['rowstyle' .. tostring(num)], | | rowstyle = args['rowstyle' .. tostring(num)], |
| | + | rowcellstyle = args['rowcellstyle' .. tostring(num)], |
| | dataid = args['dataid' .. tostring(num)], | | dataid = args['dataid' .. tostring(num)], |
| | labelid = args['labelid' .. tostring(num)], | | labelid = args['labelid' .. tostring(num)], |
| Line 215: |
Line 269: |
| | local function renderTrackingCategories() | | local function renderTrackingCategories() |
| | if args.decat ~= 'yes' then | | if args.decat ~= 'yes' then |
| − | if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then | + | if args.child == 'yes' then |
| | + | if args.title then |
| | + | root:wikitext('[[Category:Pages which use embedded infobox templates with the title parameter]]') |
| | + | end |
| | + | 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 which use infobox templates with no data rows]]') |
| − | end
| |
| − | if args.child == 'yes' and args.title then
| |
| − | root:wikitext('[[Category:Pages which use embedded infobox templates with the title parameter]]')
| |
| | end | | end |
| | end | | end |
| Line 231: |
Line 286: |
| | | | |
| | root | | root |
| − | :addClass('infobox') | + | :addClass((args.subbox ~= 'yes') and 'infobox' or nil) |
| | :addClass(args.bodyclass) | | :addClass(args.bodyclass) |
| | | | |
| Line 377: |
Line 432: |
| | {prefix = 'rowclass'}, | | {prefix = 'rowclass'}, |
| | {prefix = 'rowstyle'}, | | {prefix = 'rowstyle'}, |
| | + | {prefix = 'rowcellstyle'}, |
| | {prefix = 'class'}, | | {prefix = 'class'}, |
| | {prefix = 'dataid'}, | | {prefix = 'dataid'}, |