Editing Module:Navbox

Jump to: navigation, search

Warning: You are not logged in.

Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 
--
 
--
-- This module implements {{Navbox}}
+
-- This module will implement {{Navbox}}
 
--
 
--
 
+
 
local p = {}
 
local p = {}
 
+
 +
local HtmlBuilder = require('Module:HtmlBuilder')
 
local navbar = require('Module:Navbar')._navbar
 
local navbar = require('Module:Navbar')._navbar
 
local getArgs -- lazily initialized
 
local getArgs -- lazily initialized
Line 12: Line 13:
 
local border
 
local border
 
local listnums = {}
 
local listnums = {}
 
+
 
local function trim(s)
 
local function trim(s)
 
     return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
 
     return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
Line 29: Line 30:
 
     if tableRowAdded then
 
     if tableRowAdded then
 
         tbl
 
         tbl
             :tag('tr')
+
             .tag('tr')
                 :css('height', '2px')
+
                 .css('height', '2px')
                 :tag('td')
+
                 .tag('td')
                    :attr('colspan',2)
+
                .attr('colspan',2)
 
     end
 
     end
 
+
   
 
     tableRowAdded = true
 
     tableRowAdded = true
 
+
   
     return tbl:tag('tr')
+
     return tbl.tag('tr')
 
end
 
end
  
Line 49: Line 50:
 
         -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
 
         -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
 
         if args.state == 'plain' then spacerSide = 'right' end
 
         if args.state == 'plain' then spacerSide = 'right' end
     elseif args.navbar == 'plain' or (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then
+
     elseif args.navbar == 'plain' or (not args.name and mw.getCurrentFrame():getParent():getTitle() == 'Template:Navbox' and (border == 'subgroup' or border == 'child' or border == 'none')) then
 
         -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
 
         -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
 
         if args.state ~= 'plain' then spacerSide = 'left' end
 
         if args.state ~= 'plain' then spacerSide = 'left' end
Line 57: Line 58:
 
         if args.state == 'plain' then spacerSide = 'right' end
 
         if args.state == 'plain' then spacerSide = 'right' end
  
         titleCell:wikitext(navbar{
+
         titleCell.wikitext(navbar{  
             args.name,
+
             args.name,  
             mini = 1,
+
             mini = 1,  
 
             fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
 
             fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
 
         })
 
         })
 
     end
 
     end
 
+
   
 
     -- Render the spacer div.
 
     -- Render the spacer div.
 
     if spacerSide then
 
     if spacerSide then
 
         titleCell
 
         titleCell
             :tag('span')
+
             .tag('span')
                 :css('float', spacerSide)
+
                 .css('float', spacerSide)
                 :css('width', '6em')
+
                 .css('width', '6em')
                 :wikitext(' ')
+
                 .wikitext(' ')
 
     end
 
     end
 
end
 
end
Line 79: Line 80:
 
local function renderTitleRow(tbl)
 
local function renderTitleRow(tbl)
 
     if not args.title then return end
 
     if not args.title then return end
 
+
 
     local titleRow = addTableRow(tbl)
 
     local titleRow = addTableRow(tbl)
 
+
   
 
     if args.titlegroup then
 
     if args.titlegroup then
 
         titleRow
 
         titleRow
             :tag('th')
+
             .tag('th')
                 :attr('scope', 'row')
+
                 .attr('scope', 'row')
                 :addClass('navbox-group')
+
                 .addClass('navbox-group')
                 :addClass(args.titlegroupclass)
+
                 .addClass(args.titlegroupclass)
                 :cssText(args.basestyle)
+
                 .cssText(args.basestyle)
                 :cssText(args.groupstyle)
+
                 .cssText(args.groupstyle)
                 :cssText(args.titlegroupstyle)
+
                 .cssText(args.titlegroupstyle)
                 :wikitext(args.titlegroup)
+
                 .wikitext(args.titlegroup)
 
     end
 
     end
 
+
   
     local titleCell = titleRow:tag('th'):attr('scope', 'col')
+
     local titleCell = titleRow.tag('th').attr('scope', 'col')
 
+
           
 
     if args.titlegroup then
 
     if args.titlegroup then
 
         titleCell
 
         titleCell
             :css('border-left', '2px solid #fdfdfd')
+
             .css('border-left', '2px solid #fdfdfd')
             :css('width', '100%')
+
             .css('width', '100%')
 
     end
 
     end
 
+
   
 
     local titleColspan = 2
 
     local titleColspan = 2
 
     if args.imageleft then titleColspan = titleColspan + 1 end
 
     if args.imageleft then titleColspan = titleColspan + 1 end
 
     if args.image then titleColspan = titleColspan + 1 end
 
     if args.image then titleColspan = titleColspan + 1 end
 
     if args.titlegroup then titleColspan = titleColspan - 1 end
 
     if args.titlegroup then titleColspan = titleColspan - 1 end
 
+
   
 
     titleCell
 
     titleCell
         :cssText(args.basestyle)
+
         .cssText(args.basestyle)
         :cssText(args.titlestyle)
+
         .cssText(args.titlestyle)
         :addClass('navbox-title')
+
         .addClass('navbox-title')
         :attr('colspan', titleColspan)
+
         .attr('colspan', titleColspan)
 
+
 
     renderNavBar(titleCell)
 
     renderNavBar(titleCell)
  
 
     titleCell
 
     titleCell
         :tag('div')
+
         .tag('div')
             :addClass(args.titleclass)
+
             .addClass(args.titleclass)
             :css('font-size', '110%')
+
             .css('font-size', '110%')
             :wikitext(addNewline(args.title))
+
             .wikitext(addNewline(args.title))
 
end
 
end
  
Line 137: Line 138:
  
 
     addTableRow(tbl)
 
     addTableRow(tbl)
         :tag('td')
+
         .tag('td')
             :addClass('navbox-abovebelow')
+
             .addClass('navbox-abovebelow')
             :addClass(args.aboveclass)
+
             .addClass(args.aboveclass)
             :cssText(args.basestyle)
+
             .cssText(args.basestyle)
             :cssText(args.abovestyle)
+
             .cssText(args.abovestyle)
             :attr('colspan', getAboveBelowColspan())
+
             .attr('colspan', getAboveBelowColspan())
             :tag('div')
+
             .tag('div')
                 :wikitext(addNewline(args.above))
+
                 .wikitext(addNewline(args.above))
 
end
 
end
  
Line 151: Line 152:
  
 
     addTableRow(tbl)
 
     addTableRow(tbl)
         :tag('td')
+
         .tag('td')
             :addClass('navbox-abovebelow')
+
             .addClass('navbox-abovebelow')
             :addClass(args.belowclass)
+
             .addClass(args.belowclass)
             :cssText(args.basestyle)
+
             .cssText(args.basestyle)
             :cssText(args.belowstyle)
+
             .cssText(args.belowstyle)
             :attr('colspan', getAboveBelowColspan())
+
             .attr('colspan', getAboveBelowColspan())
             :tag('div')
+
             .tag('div')
                 :wikitext(addNewline(args.below))
+
                 .wikitext(addNewline(args.below))
 
end
 
end
 
+
 
--
 
--
 
--  List rows
 
--  List rows
Line 166: Line 167:
 
local function renderListRow(tbl, listnum)
 
local function renderListRow(tbl, listnum)
 
     local row = addTableRow(tbl)
 
     local row = addTableRow(tbl)
 
+
   
 
     if listnum == 1 and args.imageleft then
 
     if listnum == 1 and args.imageleft then
 
         row
 
         row
             :tag('td')
+
             .tag('td')
                 :addClass('navbox-image')
+
                 .addClass('navbox-image')
                 :addClass(args.imageclass)
+
                 .addClass(args.imageclass)
                 :css('width', '0%')
+
                 .css('width', '0%')
                 :css('padding', '0px 2px 0px 0px')
+
                 .css('padding', '0px 2px 0px 0px')
                 :cssText(args.imageleftstyle)
+
                 .cssText(args.imageleftstyle)
                 :attr('rowspan', 2 * #listnums - 1)
+
                 .attr('rowspan', 2 * #listnums - 1)
                 :tag('div')
+
                 .tag('div')
                     :wikitext(addNewline(args.imageleft))
+
                     .wikitext(addNewline(args.imageleft))
 
     end
 
     end
 
+
 
     if args['group' .. listnum] then
 
     if args['group' .. listnum] then
         local groupCell = row:tag('th')
+
         local groupCell = row.tag('th')
 
+
       
 
         groupCell
 
         groupCell
            :attr('scope', 'row')
+
              .attr('scope', 'row')
            :addClass('navbox-group')
+
              .addClass('navbox-group')
            :addClass(args.groupclass)
+
              .addClass(args.groupclass)
            :cssText(args.basestyle)
+
              .cssText(args.basestyle)
 
+
             
 
         if args.groupwidth then
 
         if args.groupwidth then
             groupCell:css('width', args.groupwidth)
+
             groupCell.css('width', args.groupwidth)
 
         end
 
         end
 
+
         
 
         groupCell
 
         groupCell
             :cssText(args.groupstyle)
+
             .cssText(args.groupstyle)
             :cssText(args['group' .. listnum .. 'style'])
+
             .cssText(args['group' .. listnum .. 'style'])
             :wikitext(args['group' .. listnum])
+
             .wikitext(args['group' .. listnum])
 
     end
 
     end
 
+
   
     local listCell = row:tag('td')
+
     local listCell = row.tag('td')
  
 
     if args['group' .. listnum] then
 
     if args['group' .. listnum] then
 
         listCell
 
         listCell
             :css('text-align', 'left')
+
             .css('text-align', 'left')
             :css('border-left-width', '2px')
+
             .css('border-left-width', '2px')
             :css('border-left-style', 'solid')
+
             .css('border-left-style', 'solid')
 
     else
 
     else
         listCell:attr('colspan', 2)
+
         listCell.attr('colspan', 2)
 
     end
 
     end
 
+
   
     if not args.groupwidth then
+
     if not args.groupwidth then  
         listCell:css('width', '100%')
+
         listCell.css('width', '100%')
 
     end
 
     end
 
+
   
 
     local isOdd = (listnum % 2) == 1
 
     local isOdd = (listnum % 2) == 1
 
     local rowstyle = args.evenstyle
 
     local rowstyle = args.evenstyle
 
     if isOdd then rowstyle = args.oddstyle end
 
     if isOdd then rowstyle = args.oddstyle end
 
+
 
     local evenOdd
 
     local evenOdd
 
     if args.evenodd == 'swap' then
 
     if args.evenodd == 'swap' then
Line 226: Line 227:
  
 
     listCell
 
     listCell
         :css('padding', '0px')
+
         .css('padding', '0px')
         :cssText(args.liststyle)
+
         .cssText(args.liststyle)
         :cssText(rowstyle)
+
         .cssText(rowstyle)
         :cssText(args['list' .. listnum .. 'style'])
+
         .cssText(args['list' .. listnum .. 'style'])
         :addClass('navbox-list')
+
         .addClass('navbox-list')
         :addClass('navbox-' .. evenOdd)
+
         .addClass('navbox-' .. evenOdd)
         :addClass(args.listclass)
+
         .addClass(args.listclass)
         :tag('div')
+
         .tag('div')
             :css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
+
             .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
             :wikitext(addNewline(args['list' .. listnum]))
+
             .wikitext(addNewline(args['list' .. listnum]))
  
 
     if listnum == 1 and args.image then
 
     if listnum == 1 and args.image then
 
         row
 
         row
             :tag('td')
+
             .tag('td')
                 :addClass('navbox-image')
+
                 .addClass('navbox-image')
                 :addClass(args.imageclass)
+
                 .addClass(args.imageclass)
                 :css('width', '0%')
+
                 .css('width', '0%')
                 :css('padding', '0px 0px 0px 2px')
+
                 .css('padding', '0px 0px 0px 2px')
                 :cssText(args.imagestyle)
+
                 .cssText(args.imagestyle)
                 :attr('rowspan', 2 * #listnums - 1)
+
                 .attr('rowspan', 2 * #listnums - 1)
                 :tag('div')
+
                 .tag('div')
                     :wikitext(addNewline(args.image))
+
                     .wikitext(addNewline(args.image))
 
     end
 
     end
 
end
 
end
Line 258: Line 259:
 
local function needsHorizontalLists()
 
local function needsHorizontalLists()
 
     if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
 
     if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
 
+
   
 
     local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
 
     local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
 
     for i, cls in ipairs(listClasses) do
 
     for i, cls in ipairs(listClasses) do
Line 285: Line 286:
 
     local subpage = title.subpageText
 
     local subpage = title.subpageText
 
     if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
 
     if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
 
+
   
 
     for i, cat in ipairs(getTrackingCategories()) do
 
     for i, cat in ipairs(getTrackingCategories()) do
         builder:wikitext('[[Category:' .. cat .. ']]')
+
         builder.wikitext('[[Category:' .. cat .. ']]')  
 
     end
 
     end
 
end
 
end
Line 295: Line 296:
 
--
 
--
 
local function renderMainTable()
 
local function renderMainTable()
     local tbl = mw.html.create('table')
+
     local tbl = HtmlBuilder.create('table')
         :addClass('nowraplinks')
+
         .attr('cellspacing', 0)
         :addClass(args.bodyclass)
+
        .addClass('nowraplinks')
 
+
         .addClass(args.bodyclass)
 +
           
 
     if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
 
     if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
 
         tbl
 
         tbl
             :addClass('collapsible')
+
             .addClass('collapsible')
             :addClass(args.state or 'autocollapse')
+
             .addClass(args.state or 'autocollapse')
 
     end
 
     end
 
+
     tbl:css('border-spacing', 0)
+
     tbl.css('border-spacing', 0)
 
     if border == 'subgroup' or border == 'child' or border == 'none' then
 
     if border == 'subgroup' or border == 'child' or border == 'none' then
 
         tbl
 
         tbl
             :addClass('navbox-subgroup')
+
             .addClass('navbox-subgroup')
             :cssText(args.bodystyle)
+
             .cssText(args.bodystyle)
             :cssText(args.style)
+
             .cssText(args.style)
 
     else -- regular navobx - bodystyle and style will be applied to the wrapper table
 
     else -- regular navobx - bodystyle and style will be applied to the wrapper table
 
         tbl
 
         tbl
             :addClass('navbox-inner')
+
             .addClass('navbox-inner')
             :css('background', 'transparent')
+
             .css('background', 'transparent')
             :css('color', 'inherit')
+
             .css('color', 'inherit')
 
     end
 
     end
     tbl:cssText(args.innerstyle)
+
     tbl.cssText(args.innerstyle)
 
+
 
     renderTitleRow(tbl)
 
     renderTitleRow(tbl)
 
     renderAboveRow(tbl)
 
     renderAboveRow(tbl)
 
     for i, listnum in ipairs(listnums) do
 
     for i, listnum in ipairs(listnums) do
         renderListRow(tbl, listnum)
+
         renderListRow(tbl, listnum)  
 
     end
 
     end
 
     renderBelowRow(tbl)
 
     renderBelowRow(tbl)
 
+
   
 
     return tbl
 
     return tbl
 
end
 
end
Line 331: Line 333:
 
function p._navbox(navboxArgs)
 
function p._navbox(navboxArgs)
 
     args = navboxArgs
 
     args = navboxArgs
 
+
   
 
     for k, v in pairs(args) do
 
     for k, v in pairs(args) do
 
         local listnum = ('' .. k):match('^list(%d+)$')
 
         local listnum = ('' .. k):match('^list(%d+)$')
Line 337: Line 339:
 
     end
 
     end
 
     table.sort(listnums)
 
     table.sort(listnums)
 
+
 
     border = trim(args.border or args[1] or '')
 
     border = trim(args.border or args[1] or '')
  
Line 344: Line 346:
  
 
     -- render the appropriate wrapper around the navbox, depending on the border param
 
     -- render the appropriate wrapper around the navbox, depending on the border param
     local res = mw.html.create()
+
     local res = HtmlBuilder.create()
 
     if border == 'none' then
 
     if border == 'none' then
         res:node(tbl)
+
         res.node(tbl)
 
     elseif border == 'subgroup' or border == 'child' then
 
     elseif border == 'subgroup' or border == 'child' then
 
         -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
 
         -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
Line 352: Line 354:
 
         -- padding being applied, and at the end add a <div> to balance out the parent's </div>
 
         -- padding being applied, and at the end add a <div> to balance out the parent's </div>
 
         res
 
         res
             :wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
+
             .tag('/div', {unclosed = true})
             :node(tbl)
+
                .done()
             :wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
+
             .node(tbl)
 +
             .tag('div', {unclosed = true})
 
     else
 
     else
 
         res
 
         res
             :tag('table')
+
             .tag('table')
                 :addClass('navbox')
+
                 .attr('cellspacing', 0)
                 :css('border-spacing', 0)
+
                .addClass('navbox')
                 :cssText(args.bodystyle)
+
                 .css('border-spacing', 0)
                 :cssText(args.style)
+
                 .cssText(args.bodystyle)
                 :tag('tr')
+
                 .cssText(args.style)
                     :tag('td')
+
                 .tag('tr')
                         :css('padding', '2px')
+
                     .tag('td')
                         :node(tbl)
+
                         .css('padding', '2px')
 +
                         .node(tbl)
 
     end
 
     end
 
+
 
     renderTrackingCategories(res)
 
     renderTrackingCategories(res)
 
+
 
     return tostring(res)
 
     return tostring(res)
 
end
 
end
 
+
 
function p.navbox(frame)
 
function p.navbox(frame)
 
     if not getArgs then
 
     if not getArgs then
        getArgs = require('Module:Arguments').getArgs
+
    getArgs = require('Module:Arguments').getArgs
 
     end
 
     end
 
     args = getArgs(frame, {wrappers = 'Template:Navbox'})
 
     args = getArgs(frame, {wrappers = 'Template:Navbox'})
Line 386: Line 390:
 
         _ = args["group" .. tostring(i)]
 
         _ = args["group" .. tostring(i)]
 
         _ = args["list" .. tostring(i)]
 
         _ = args["list" .. tostring(i)]
     end
+
     end  
 
     _ = args.below
 
     _ = args.below
  
 
     return p._navbox(args)
 
     return p._navbox(args)
 
end
 
end
 
+
 
return p
 
return p
 

Please note that all contributions to The Crowdsourced Resource-Based Economy Knowledgebase are considered to be released under the Creative Commons Zero (Public Domain) (see RBEMWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox
Share