|
|
| Line 1: |
Line 1: |
| 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 = getArg(args, "bodystyle")
| |
| local titleStyle = getArg(args, "titlestyle")
| |
| local titleClass = getArg(args, "titleclass")
| |
| local groupStyle = getArg(args, "groupstyle")
| |
| 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 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 inner = mw.html.create("div"):addClass("navbox-inner")
| |
| 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)
| |
| 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
| |
| row:node(makeCell("div", "navbox-group", group, groupStyle))
| |
| 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
| |