Changes

Jump to navigation Jump to search
2,422 bytes added ,  12:50, 26 March 2020
m
1 revision imported
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'},

Navigation menu