Module:Infobox: Difference between revisions

    m>Mr. Stradivarius
    (allow setting ids for rows, headers, labels and data fields, per protected edit request by User:Czarkoff)
    m>Mr. Stradivarius
    (update to use mw.html instead of Module:HtmlBuilder - conversion courtesy of User:WOSlinker)
    Line 4: Line 4:
       
       
    local p = {}
    local p = {}
     
    local HtmlBuilder = require('Module:HtmlBuilder')
    local args = {}
    local args = {}
    local origArgs
    local origArgs
    local root
    local root
     
    local function union(t1, t2)
    local function union(t1, t2)
         -- Returns the union of the values of two tables, as a sequence.
         -- Returns the union of the values of two tables, as a sequence.
    Line 45: Line 43:
         if rowArgs.header then
         if rowArgs.header then
             root
             root
                 .tag('tr')
                 :tag('tr')
                     .addClass(rowArgs.rowclass)
                     :addClass(rowArgs.rowclass)
                     .attr('id', rowArgs.rowid)
                     :attr('id', rowArgs.rowid)
                     .tag('th')
                     :tag('th')
                         .attr('colspan', 2)
                         :attr('colspan', 2)
                         .attr('id', rowArgs.headerid)
                         :attr('id', rowArgs.headerid)
                         .addClass(rowArgs.class)
                         :addClass(rowArgs.class)
                         .addClass(args.headerclass)
                         :addClass(args.headerclass)
                         .css('text-align', 'center')
                         :css('text-align', 'center')
                         .cssText(args.headerstyle)
                         :cssText(args.headerstyle)
                         .wikitext(rowArgs.header)
                         :wikitext(rowArgs.header)
         elseif rowArgs.data then
         elseif rowArgs.data then
             local row = root.tag('tr')
             local row = root:tag('tr')
             row.addClass(rowArgs.rowclass)
             row:addClass(rowArgs.rowclass)
             row.attr('id', rowArgs.rowid)
             row:attr('id', rowArgs.rowid)
             if rowArgs.label then
             if rowArgs.label then
                 row
                 row
                     .tag('th')
                     :tag('th')
                         .attr('scope', 'row')
                         :attr('scope', 'row')
                         .attr('id', rowArgs.labelid)
                         :attr('id', rowArgs.labelid)
                         .css('text-align', 'left')
                         :css('text-align', 'left')
                         .cssText(args.labelstyle)
                         :cssText(args.labelstyle)
                         .wikitext(rowArgs.label)
                         :wikitext(rowArgs.label)
                         .done()
                         :done()
             end
             end
              
              
             local dataCell = row.tag('td')
             local dataCell = row:tag('td')
             if not rowArgs.label then  
             if not rowArgs.label then  
                 dataCell
                 dataCell
                     .attr('colspan', 2)
                     :attr('colspan', 2)
                     .css('text-align', 'center')  
                     :css('text-align', 'center')  
             end
             end
             dataCell
             dataCell
                 .attr('id', rowArgs.dataid)
                 :attr('id', rowArgs.dataid)
                 .addClass(rowArgs.class)
                 :addClass(rowArgs.class)
                 .cssText(rowArgs.datastyle)
                 :cssText(rowArgs.datastyle)
                 .newline()
                 :newline()
                 .wikitext(rowArgs.data)
                 :wikitext(rowArgs.data)
         end
         end
    end
    end
    Line 90: Line 88:


         root
         root
             .tag('caption')
             :tag('caption')
                 .addClass(args.titleclass)
                 :addClass(args.titleclass)
                 .cssText(args.titlestyle)
                 :cssText(args.titlestyle)
                 .wikitext(args.title)
                 :wikitext(args.title)
    end
    end


    Line 100: Line 98:
          
          
         root
         root
             .tag('tr')
             :tag('tr')
                 .tag('th')
                 :tag('th')
                     .attr('colspan', 2)
                     :attr('colspan', 2)
                     .addClass(args.aboveclass)
                     :addClass(args.aboveclass)
                     .css('text-align', 'center')
                     :css('text-align', 'center')
                     .css('font-size', '125%')
                     :css('font-size', '125%')
                     .css('font-weight', 'bold')
                     :css('font-weight', 'bold')
                     .cssText(args.abovestyle)
                     :cssText(args.abovestyle)
                     .wikitext(args.above)
                     :wikitext(args.above)
    end
    end


    Line 115: Line 113:
          
          
         root
         root
             .tag('tr')
             :tag('tr')
                 .tag('td')
                 :tag('td')
                     .attr('colspan', '2')
                     :attr('colspan', '2')
                     .addClass(args.belowclass)
                     :addClass(args.belowclass)
                     .css('text-align', 'center')
                     :css('text-align', 'center')
                     .cssText(args.belowstyle)
                     :cssText(args.belowstyle)
                     .newline()
                     :newline()
                     .wikitext(args.below)
                     :wikitext(args.below)
    end
    end


    Line 153: Line 151:
         for k, num in ipairs(imagenums) do
         for k, num in ipairs(imagenums) do
             local caption = args['caption' .. tostring(num)]
             local caption = args['caption' .. tostring(num)]
             local data = HtmlBuilder.create().wikitext(args['image' .. tostring(num)])
             local data = mw.html.create():wikitext(args['image' .. tostring(num)])
             if caption then
             if caption then
                 data
                 data
                     .tag('div')
                     :tag('div')
                         .cssText(args.captionstyle)
                         :cssText(args.captionstyle)
                         .wikitext(caption)
                         :wikitext(caption)
             end
             end
             addRow({
             addRow({
    Line 194: Line 192:
          
          
         root
         root
             .tag('tr')
             :tag('tr')
                 .tag('td')
                 :tag('td')
                     .attr('colspan', '2')
                     :attr('colspan', '2')
                     .css('text-align', 'right')
                     :css('text-align', 'right')
                     .wikitext(mw.getCurrentFrame():expandTemplate({  
                     :wikitext(mw.getCurrentFrame():expandTemplate({  
                         title = 'navbar',  
                         title = 'navbar',  
                         args = { args.name, mini = 1 }
                         args = { args.name, mini = 1 }
    Line 207: Line 205:
         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(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
         end
         end
    end
    end
    Line 214: Line 212:
         if args.decat ~= 'yes' then
         if args.decat ~= 'yes' then
             if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
             if #(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
             end
             if args.child == 'yes' and args.title then
             if args.child == 'yes' and args.title then
                 root.wikitext('[[Category:Articles which use embedded infobox templates with the title parameter]]')
                 root:wikitext('[[Category:Articles which use embedded infobox templates with the title parameter]]')
             end
             end
         end
         end
    Line 226: Line 224:
         -- if the infobox is used as a 'child' inside another infobox.
         -- if the infobox is used as a 'child' inside another infobox.
         if args.child ~= 'yes' then
         if args.child ~= 'yes' then
             root = HtmlBuilder.create('table')
             root = mw.html.create('table')
              
              
             root
             root
                 .addClass('infobox')
                 :addClass('infobox')
                 .addClass(args.bodyclass)
                 :addClass(args.bodyclass)
                 .attr('cellspacing', 3)
                 :attr('cellspacing', 3)
                 .css('border-spacing', '3px')
                 :css('border-spacing', '3px')
                  
                  
                 if args.subbox == 'yes' then
                 if args.subbox == 'yes' then
                     root
                     root
                         .css('padding', '0')
                         :css('padding', '0')
                         .css('border', 'none')
                         :css('border', 'none')
                         .css('margin', '-3px')
                         :css('margin', '-3px')
                         .css('width', 'auto')
                         :css('width', 'auto')
                         .css('min-width', '100%')
                         :css('min-width', '100%')
                         .css('font-size', '100%')
                         :css('font-size', '100%')
                         .css('clear', 'none')
                         :css('clear', 'none')
                         .css('float', 'none')
                         :css('float', 'none')
                         .css('background-color', 'transparent')
                         :css('background-color', 'transparent')
                 else
                 else
                     root
                     root
                         .css('width', '22em')
                         :css('width', '22em')
                 end
                 end
             root
             root
                 .cssText(args.bodystyle)
                 :cssText(args.bodystyle)
          
          
             renderTitle()
             renderTitle()
             renderAboveRow()
             renderAboveRow()
         else
         else
             root = HtmlBuilder.create()
             root = mw.html.create()
              
              
             root
             root
                 .wikitext(args.title)
                 :wikitext(args.title)
         end
         end