Module:NavboxUpgraded: Difference between revisions
EnWikiAdmin (talk | contribs) No edit summary |
EnWikiAdmin (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
-- Module:NavboxUpgraded | -- Module:NavboxUpgraded | ||
local p = {} | local p = {} | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
Line 13: | Line 12: | ||
local container = html:tag('div') | local container = html:tag('div') | ||
:addClass('navbox-subgroup') | :addClass('navbox-subgroup') | ||
:css('margin', ' | :css('margin-left', '1em') -- Indent for nesting | ||
:css('padding', '0.25em') | :css('padding', '0.25em') | ||
Line 19: | Line 18: | ||
if subgroup then | if subgroup then | ||
container:tag('div') | container:tag('div') | ||
:addClass('navbox- | :addClass('navbox-group') | ||
:css('background-color', '#e6e6ff') -- | :css('background-color', '#e6e6ff') -- Lighter shade | ||
:css('padding', '0.25em 1em') | :css('padding', '0.25em 1em') | ||
:css('font-weight', 'bold') | :css('font-weight', 'bold') | ||
Line 28: | Line 27: | ||
-- Subgroup list | -- Subgroup list | ||
if sublist then | if sublist then | ||
container:tag('ul') | if sublist:lower() == 'subgroup' then | ||
-- Recursively render nested subgroups | |||
local childArgs = {} | |||
for k, v in pairs(args) do | |||
local prefix = groupPrefix .. '_list' .. i .. '_' | |||
if k:sub(1, #prefix) == prefix then | |||
childArgs[k:sub(#prefix + 1)] = v | |||
end | |||
end | |||
local nestedSubgroup = renderSubgroups(childArgs, groupPrefix .. '_list' .. i) | |||
container:wikitext(nestedSubgroup) | |||
else | |||
container:tag('ul') | |||
:addClass('navbox-list') | |||
:css('padding-left', '1.5em') | |||
:css('list-style', 'disc') | |||
:wikitext(sublist) | |||
end | |||
end | end | ||
html:node(container) | |||
end | end | ||
end | end | ||
Line 44: | Line 57: | ||
navbox | navbox | ||
:addClass('navbox') | :addClass('navbox') | ||
-- | :css('width', '100%') | ||
:css('margin', 'auto') | |||
:css('clear', 'both') | |||
:css('border', '1px solid #a2a9b1') | |||
:css('padding', '1px') | |||
:css('font-size', '88%') | |||
:css('text-align', 'center') | |||
-- Handle title | -- Handle title | ||
-- | if args.title then | ||
local titleRow = navbox:tag('tr') | |||
local titleCell = titleRow:tag('th') | |||
titleCell | |||
:attr('colspan', '2') | |||
:addClass('navbox-title') | |||
:css('background-color', '#ccf') | |||
:css('padding', '0.25em 1em') | |||
:wikitext(args.title) | |||
end | |||
-- Handle above | -- Handle above | ||
-- | if args.above then | ||
local aboveRow = navbox:tag('tr') | |||
local aboveCell = aboveRow:tag('td') | |||
aboveCell | |||
:attr('colspan', '2') | |||
:addClass('navbox-abovebelow') | |||
:css('background-color', '#ddf') | |||
:css('padding', '0.25em 1em') | |||
:wikitext(args.above) | |||
end | |||
-- Handle groups and lists | -- Handle groups and lists | ||
local rowIndex = 0 | |||
for i = 1, 10 do | for i = 1, 10 do | ||
local group = args['group' .. i] | local group = args['group' .. i] | ||
local list = args['list' .. i] | local list = args['list' .. i] | ||
if group or list then | if group or list then | ||
rowIndex = rowIndex + 1 | |||
local row = navbox:tag('tr') | local row = navbox:tag('tr') | ||
-- Apply striped classes | |||
if rowIndex % 2 == 1 then | |||
row:attr('class', 'navbox-odd') | |||
else | |||
row:attr('class', 'navbox-even') | |||
end | |||
-- Group heading | -- Group heading | ||
if group then | if group then | ||
-- | local groupCell = row:tag('th') | ||
groupCell | |||
:addClass('navbox-group') | |||
:css('text-align', 'right') | |||
:css('background-color', '#ddf') -- Parent shade | |||
:css('padding', '0.25em 1em') | |||
:wikitext(group) | |||
end | end | ||
Line 67: | Line 119: | ||
if list then | if list then | ||
local listCell = row:tag('td') | local listCell = row:tag('td') | ||
:addClass('navbox-list') | :addClass('navbox-list') | ||
if list == 'subgroup' then | -- Apply list classes if specified | ||
if args.listclass then | |||
listCell:addClass(args.listclass) -- e.g., 'hlist' or 'plainlist' | |||
end | |||
-- Render subgroups or standard lists | |||
if list:lower() == 'subgroup' then | |||
-- Process subgroup | -- Process subgroup | ||
local childArgs = {} | local childArgs = {} | ||
Line 80: | Line 136: | ||
end | end | ||
end | end | ||
local subgroupContent = | local subgroupContent = renderSubgroups(childArgs, 'list' .. i) | ||
listCell:wikitext(subgroupContent) | listCell:wikitext(subgroupContent) | ||
else | else | ||
listCell:tag('ul') | listCell:tag('ul') | ||
:addClass('navbox-list') | :addClass('navbox-list') | ||
-- | :css('list-style', 'disc') | ||
:css('padding-left', '1.5em') | |||
:wikitext(list) | :wikitext(list) | ||
end | end | ||
Line 93: | Line 150: | ||
-- Handle below | -- Handle below | ||
-- | if args.below then | ||
local belowRow = navbox:tag('tr') | |||
local belowCell = belowRow:tag('td') | |||
belowCell | |||
:attr('colspan', '2') | |||
:addClass('navbox-abovebelow') | |||
:css('background-color', '#ddf') | |||
:css('padding', '0.25em 1em') | |||
:wikitext(args.below) | |||
end | |||
return tostring(navbox) | return tostring(navbox) | ||
end | end | ||
-- Function to generate the mobile navbox | -- Function to generate the mobile navbox | ||
Line 172: | Line 237: | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local desktopNavbox = p._navboxDesktop(args) | local desktopNavbox = p._navboxDesktop(args) | ||
local mobileNavbox = p._navboxMobile(args) | local mobileNavbox = p._navboxMobile(args) -- Assuming you've handled mobile similarly | ||
local res = mw.html.create() | local res = mw.html.create() |