Module:Navbox: Difference between revisions
From 2D Tower Wiki
This page was last edited on 6 October 2026, at 22:36.
Support linked icon categories in navboxes |
Match shared navboxes to Main Page orange accent; preserve category lists, nesting, caller styles and layout |
||
| (4 intermediate revisions by 2 users not shown) | |||
| Line 42: | Line 42: | ||
local image = getArg(args, "image") | local image = getArg(args, "image") | ||
local imageleft = getArg(args, "imageleft") | local imageleft = getArg(args, "imageleft") | ||
local bodyStyle = getArg(args, "bodystyle") | local bodyStyle = "--background:#f8fbff;--background-soft:#f8fbff;--background-soft-border:#e2aa4e;--background-hard:#fff5e5;--foreground-soft:#14364b;--tower-ink:#14364b;--tower-muted:#10304b;--navbox-level1:#ffe0a3;--navbox-level2:#fff0d3;" .. (getArg(args, "bodystyle") or "") | ||
local titleStyle = getArg(args, "titlestyle") | local titleStyle = "background:#ffb12b;color:#14364b;--link:#14364b;--link-hover:#14364b;--link-visited:#14364b;" .. (getArg(args, "titlestyle") or "") | ||
local titleClass = getArg(args, "titleclass") | local titleClass = getArg(args, "titleclass") | ||
local groupStyle = getArg(args, "groupstyle") | local groupStyle = (border == "subgroup" and "background:#fff0d3;color:#14364b;" or "background:#ffe0a3;color:#14364b;") .. (getArg(args, "groupstyle") or "") | ||
local listStyle = getArg(args, "liststyle") | local listStyle = getArg(args, "liststyle") | ||
local oddStyle = getArg(args, "oddstyle") | local oddStyle = getArg(args, "oddstyle") | ||
| Line 56: | Line 56: | ||
:attr("aria-label", title or "Navigation") | :attr("aria-label", title or "Navigation") | ||
applyStyle(root, bodyStyle) | applyStyle(root, bodyStyle) | ||
if border == "subgroup" then | |||
root:addClass("navbox-subgroup") | |||
end | |||
if name then | if name then | ||
| Line 75: | Line 78: | ||
end | end | ||
local innerStyle = getArg(args, "innerstyle") | |||
local inner = mw.html.create("div"):addClass("navbox-inner") | local inner = mw.html.create("div"):addClass("navbox-inner") | ||
applyStyle(inner, innerStyle) | |||
local rowNumber = 0 | local rowNumber = 0 | ||
for i = 1, 100 do | for i = 1, 100 do | ||
| Line 100: | Line 105: | ||
applyStyle(groupCell, groupStyle) | applyStyle(groupCell, groupStyle) | ||
if groupIcon then | if groupIcon then | ||
groupCell:wikitext(frame:expandTemplate{title = "Icon", args = {groupIcon}}) | groupCell:wikitext(frame:expandTemplate{title = "Icon", args = {groupIcon}} .. " " ) | ||
end | end | ||
if groupLink then | if groupLink then | ||
groupCell:wikitext("[[:Category:" .. groupLink .. "|" .. group .. "]]" ) | |||
else | else | ||
groupCell:wikitext(group) | groupCell:wikitext(group) | ||
Latest revision as of 22:36, 6 October 2026
Documentation for this module may be created at Module:Navbox/doc
local p = {}
local function getArg(args, key, default)
local value = args[key]
if value == nil then
return default
end
value = mw.text.trim(tostring(value))
if value == "" then
return default
end
return value
end
local function addWikitext(node, value)
if value and value ~= "" then
node:wikitext(value)
end
end
local function applyStyle(node, style)
if style and style ~= "" then
node:cssText(style)
end
end
local function makeCell(tag, className, value, style)
local cell = mw.html.create(tag):addClass(className)
applyStyle(cell, style)
addWikitext(cell, value)
return cell
end
function p.navbox(frame)
local args = frame:getParent().args
local state = string.lower(getArg(args, "state", "autocollapse"))
local border = string.lower(getArg(args, "border", ""))
local title = getArg(args, "title")
local name = getArg(args, "name")
local above = getArg(args, "above")
local below = getArg(args, "below")
local image = getArg(args, "image")
local imageleft = getArg(args, "imageleft")
local bodyStyle = "--background:#f8fbff;--background-soft:#f8fbff;--background-soft-border:#e2aa4e;--background-hard:#fff5e5;--foreground-soft:#14364b;--tower-ink:#14364b;--tower-muted:#10304b;--navbox-level1:#ffe0a3;--navbox-level2:#fff0d3;" .. (getArg(args, "bodystyle") or "")
local titleStyle = "background:#ffb12b;color:#14364b;--link:#14364b;--link-hover:#14364b;--link-visited:#14364b;" .. (getArg(args, "titlestyle") or "")
local titleClass = getArg(args, "titleclass")
local groupStyle = (border == "subgroup" and "background:#fff0d3;color:#14364b;" or "background:#ffe0a3;color:#14364b;") .. (getArg(args, "groupstyle") or "")
local listStyle = getArg(args, "liststyle")
local oddStyle = getArg(args, "oddstyle")
local evenStyle = getArg(args, "evenstyle")
local rowClass = getArg(args, "listclass", "navbox-list")
local root = mw.html.create("div")
:addClass("navbox")
:attr("role", "navigation")
:attr("aria-label", title or "Navigation")
applyStyle(root, bodyStyle)
if border == "subgroup" then
root:addClass("navbox-subgroup")
end
if name then
root:attr("data-name", name)
end
if title then
local titleRow = mw.html.create("div"):addClass("navbox-title")
if titleClass then
titleRow:addClass(titleClass)
end
applyStyle(titleRow, titleStyle)
addWikitext(titleRow, title)
root:node(titleRow)
end
if above then
root:node(makeCell("div", "navbox-above", above, getArg(args, "abovestyle")))
end
local innerStyle = getArg(args, "innerstyle")
local inner = mw.html.create("div"):addClass("navbox-inner")
applyStyle(inner, innerStyle)
local rowNumber = 0
for i = 1, 100 do
local group = getArg(args, "group" .. i)
local list = getArg(args, "list" .. i)
local header = getArg(args, "header" .. i)
local groupIcon = getArg(args, "groupicon" .. i)
local groupLink = getArg(args, "grouplink" .. i)
if group or list or header then
rowNumber = rowNumber + 1
local row = mw.html.create("div"):addClass("navbox-row")
if rowNumber % 2 == 1 then
row:addClass("navbox-odd")
applyStyle(row, oddStyle)
else
row:addClass("navbox-even")
applyStyle(row, evenStyle)
end
if header then
row:node(makeCell("div", "navbox-group navbox-header", header, getArg(args, "header" .. i .. "style", groupStyle)))
elseif group then
if groupIcon or groupLink then
local groupCell = mw.html.create("div"):addClass("navbox-group")
applyStyle(groupCell, groupStyle)
if groupIcon then
groupCell:wikitext(frame:expandTemplate{title = "Icon", args = {groupIcon}} .. " " )
end
if groupLink then
groupCell:wikitext("[[:Category:" .. groupLink .. "|" .. group .. "]]" )
else
groupCell:wikitext(group)
end
row:node(groupCell)
else
row:node(makeCell("div", "navbox-group", group, groupStyle))
end
end
local listCell = mw.html.create("div"):addClass(rowClass)
applyStyle(listCell, getArg(args, "list" .. i .. "style", listStyle))
addWikitext(listCell, list or "")
row:node(listCell)
inner:node(row)
end
end
if image or imageleft then
local imageRow = mw.html.create("div"):addClass("navbox-image-row")
if imageleft then
imageRow:node(makeCell("div", "navbox-image navbox-image-left", imageleft, getArg(args, "imageleftstyle")))
end
if image then
imageRow:node(makeCell("div", "navbox-image", image, getArg(args, "imagestyle")))
end
inner:node(imageRow)
end
root:node(inner)
if below then
root:node(makeCell("div", "navbox-below", below, getArg(args, "belowstyle")))
end
return tostring(root)
end
return p