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'}, |