Module:Navbox: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
(Revert border-spacing; collapses cells in hand-build navboxes.) |
(minor whitespace: trim trailing spaces; tabs --> spaces) |
||
Line 2: | Line 2: | ||
-- This module implements {{Navbox}} |
-- This module implements {{Navbox}} |
||
-- |
-- |
||
local p = {} |
local p = {} |
||
Line 32: | Line 32: | ||
:css('height', '2px') |
:css('height', '2px') |
||
:tag('td') |
:tag('td') |
||
:attr('colspan',2) |
|||
end |
end |
||
tableRowAdded = true |
tableRowAdded = true |
||
return tbl:tag('tr') |
return tbl:tag('tr') |
||
end |
end |
||
Line 43: | Line 43: | ||
-- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left |
-- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left |
||
-- or right to keep the title centered. |
-- or right to keep the title centered. |
||
local spacerSide = nil |
|||
if args.navbar == 'off' then |
|||
-- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's |
-- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's |
||
-- 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. |
||
Line 57: | Line 57: | ||
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 |
||
Line 79: | Line 79: | ||
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) |
||
Line 93: | Line 93: | ||
: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 |
||
Line 101: | Line 101: | ||
: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) |
||
Line 112: | Line 112: | ||
:addClass('navbox-title') |
:addClass('navbox-title') |
||
:attr('colspan', titleColspan) |
:attr('colspan', titleColspan) |
||
renderNavBar(titleCell) |
renderNavBar(titleCell) |
||
Line 160: | Line 160: | ||
:wikitext(addNewline(args.below)) |
:wikitext(addNewline(args.below)) |
||
end |
end |
||
-- |
-- |
||
-- List rows |
-- List rows |
||
Line 166: | Line 166: | ||
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 |
||
Line 179: | Line 179: | ||
:wikitext(addNewline(args.imageleft)) |
:wikitext(addNewline(args.imageleft)) |
||
end |
end |
||
if args['group' .. listnum] then |
|||
local groupCell = row:tag('th') |
local groupCell = row:tag('th') |
||
groupCell |
|||
:attr('scope', 'row') |
|||
:addClass('navbox-group') |
|||
:addClass(args.groupclass) |
|||
:cssText(args.basestyle) |
|||
if args.groupwidth then |
if args.groupwidth then |
||
groupCell:css('width', args.groupwidth) |
groupCell:css('width', args.groupwidth) |
||
end |
end |
||
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 |
|||
listCell |
listCell |
||
:css('text-align', 'left') |
:css('text-align', 'left') |
||
Line 209: | Line 209: | ||
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 257: | Line 257: | ||
local function needsHorizontalLists() |
local function needsHorizontalLists() |
||
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 285: | ||
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 304: | Line 304: | ||
: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 |
||
Line 318: | Line 318: | ||
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 331: | ||
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 337: | ||
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 367: | Line 367: | ||
:node(tbl) |
: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 |
|||
end |
end |
||
args = getArgs(frame, {wrappers = 'Template:Navbox'}) |
args = getArgs(frame, {wrappers = 'Template:Navbox'}) |
||
Line 386: | Line 386: | ||
_ = 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 |