Module:NavboxMobile: Difference between revisions
EnWikiAdmin (talk | contribs) No edit summary Tag: Reverted |
EnWikiAdmin (talk | contribs) No edit summary |
||
(45 intermediate revisions by the same user not shown) | |||
Line 150: | Line 150: | ||
-- Applying nowrap to lines in a table does not make sense. | -- Applying nowrap to lines in a table does not make sense. | ||
-- Add newlines to compensate for trim of x in |parm=x in a template. | -- Add newlines to compensate for trim of x in |parm=x in a template. | ||
item = item:gsub('|%s*width%s*=%s*"[%d%w]+"', '| width="100%"') | |||
return '\n' .. item .. '\n' | return '\n' .. item .. '\n' | ||
end | end | ||
if nowrapitems == cfg.keyword.nowrapitems_yes then | if nowrapitems == cfg.keyword.nowrapitems_yes or true then | ||
local lines = {} | local lines = {} | ||
for line in (item .. '\n'):gmatch('([^\n]*)\n') do | for line in (item .. '\n'):gmatch('([^\n]*)\n') do | ||
Line 166: | Line 167: | ||
return '\n' .. item .. '\n' | return '\n' .. item .. '\n' | ||
end | end | ||
-- Ensure no excessive whitespace | |||
item = mw.ustring.gsub(item, "%s+", " ") | |||
return item | return item | ||
end | end | ||
-- Function to add a new table row with optional gutter | -- Function to add a new table row with optional gutter | ||
Line 194: | Line 198: | ||
-- Function to render the navigation bar | -- Function to render the navigation bar | ||
local function renderNavBar( | local function renderNavBar(cell) | ||
if args.navbar == 'off' then | if args.navbar == 'off' then | ||
return -- Don't render anything if Navbar is off | |||
end | end | ||
-- Render the Navbar | |||
cell:wikitext(navbar{ | |||
args.name, | |||
mini = 1, | |||
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;' | |||
}) | |||
end | end | ||
-- | -- | ||
Line 231: | Line 223: | ||
:addClass(cfg.class.navbox_list) | :addClass(cfg.class.navbox_list) | ||
:addClass(args[cfg.arg.titleclass]) | :addClass(args[cfg.arg.titleclass]) | ||
:attr('data-level', 1) | :attr('data-level', 1) | ||
:attr('colspan', 2) | :attr('colspan', 2) | ||
:cssText(args.basestyle) | :cssText(args.basestyle) | ||
:cssText(args.titlestyle) | :cssText(args.titlestyle) | ||
:css('position', 'relative') -- Ensure relative positioning for absolute children | |||
-- Add the title content, centered across the full width | |||
titleCell | |||
:tag('div') | :tag('div') | ||
:css(' | :css('margin', '0 auto') | ||
:css(' | :css('text-align', 'center') | ||
:wikitext(addNewline(args.title)) | :wikitext(addNewline(args.title)) | ||
-- Add the navbar, positioned absolutely in the top-right corner | |||
if has_navbar() then | |||
titleCell | |||
:tag('div') | |||
:addClass('navboxMobile-navbar') | |||
:css('position', 'absolute') | |||
:css('top', '0') | |||
:css('right', '0') | |||
:css('padding', '0.2em') -- Optional: Adjust padding for alignment | |||
:wikitext(navbar{ | |||
args.name, | |||
mini = 1, | |||
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;' | |||
}) | |||
end | |||
end | end | ||
-- | -- | ||
Line 265: | Line 276: | ||
:wikitext(addNewline(args.above)) | :wikitext(addNewline(args.above)) | ||
end | end | ||
Line 282: | Line 294: | ||
:wikitext(addNewline(args.below)) | :wikitext(addNewline(args.below)) | ||
end | end | ||
local function renderListRow(tbl, path, parentLevel) | local function renderListRow(tbl, path, parentLevel) | ||
-- Initialize path and parentLevel | |||
path = path or "" | path = path or "" | ||
parentLevel = parentLevel or 2 -- Start at level 2 for child groups | parentLevel = parentLevel or 2 -- Start at level 2 for child groups | ||
-- Keep track of rendered children to avoid duplicates | |||
local renderedChildren = {} | |||
for i = 1, 10 do | for i = 1, 10 do | ||
Line 291: | Line 309: | ||
local listKey = (path ~= "" and "child" .. path .. "_" or "") .. "list" .. i | local listKey = (path ~= "" and "child" .. path .. "_" or "") .. "list" .. i | ||
if args[ | -- Skip if this group has already been rendered | ||
if not renderedChildren[listKey] and args[listKey] then | |||
renderedChildren[listKey] = true -- Track rendered lists | |||
-- Render the group (heading) | |||
local groupRow = addTableRow(tbl) | local groupRow = addTableRow(tbl) | ||
local groupCell = groupRow:tag('th') | local groupCell = groupRow:tag('th') | ||
:attr('scope', 'row') | :attr('scope', 'row') | ||
:addClass('navboxMobile-group-content') | :addClass('navboxMobile-group-content') | ||
:addClass('navboxMobile-group-level' .. parentLevel) -- | :addClass('navboxMobile-group-level' .. parentLevel) -- Correct level | ||
:attr('data-level', parentLevel) -- Optional attribute for CSS targeting | :attr('data-level', parentLevel) -- Optional attribute for CSS targeting | ||
:wikitext(processItem(args[groupKey])) | :wikitext(processItem(args[groupKey])) | ||
if args[listKey] then | -- Check if the list is non-empty before rendering content | ||
if args[listKey] and args[listKey] ~= "" then | |||
if args[listKey] == "child" then | |||
-- Check if the child contains valid groups or lists | |||
local childHasContent = false | |||
for j = 1, 10 do | |||
local childGroupKey = "child" .. (path ~= "" and path .. "_" or "") .. i .. "_group" .. j | |||
local childListKey = "child" .. (path ~= "" and path .. "_" or "") .. i .. "_list" .. j | |||
if args[childGroupKey] or args[childListKey] then | |||
childHasContent = true | |||
break | |||
end | |||
end | |||
if childHasContent then | |||
-- Recursively render child lists | |||
local newPath = (path ~= "" and path .. "_" or "") .. i | |||
renderListRow(tbl, tostring(newPath), parentLevel + 1) | |||
end | |||
else | else | ||
listCell | -- Render flat lists | ||
:addClass(' | local listRow = addTableRow(tbl) | ||
local listCell = listRow:tag('td') | |||
:attr('colspan', 2) | |||
:addClass('navboxMobile-list-content') -- Base content class | |||
:addClass('navboxMobile-list-level' .. parentLevel) -- Correct level | |||
:addClass((i % 2 == 1) and 'navboxMobile-odd' or 'navboxMobile-even') -- Odd/even class | |||
:addClass(args.listclass or '') -- Apply `listclass` if defined in the template | |||
:wikitext(processItem(args[listKey], args.nowrapitems)) | :wikitext(processItem(args[listKey], args.nowrapitems)) | ||
end | end | ||
Line 331: | Line 356: | ||
end | end | ||
end | end | ||
Line 396: | Line 424: | ||
local tbl = mw.html.create('table') | local tbl = mw.html.create('table') | ||
:addClass('nowraplinks') | :addClass('nowraplinks') | ||
:addClass(cfg.class. | :addClass(cfg.class.navbox) | ||
:addClass(args.bodyclass) | :addClass(args.bodyclass) | ||
:addClass(args.listclass or '') -- Apply the `listclass` argument globally if applicable | |||
:cssText(args.bodystyle) | :cssText(args.bodystyle) | ||
:cssText(args.style) | :cssText(args.style) | ||
Line 403: | Line 432: | ||
:css('margin-bottom', '0') | :css('margin-bottom', '0') | ||
if | -- Add the title row | ||
renderTitleRow(tbl) | |||
-- Add the above row | |||
renderAboveRow(tbl) | |||
-- Render all group and list rows | |||
for _, listnum in ipairs(listnums) do | |||
local listKey = "list" .. listnum | |||
local groupKey = "group" .. listnum | |||
if args[listKey] then | |||
-- Render group row | |||
local groupRow = addTableRow(tbl) | |||
local groupCell = groupRow:tag('th') | |||
:attr('scope', 'row') | |||
:addClass('navboxMobile-group-content') | |||
:addClass('navboxMobile-group-level1') | |||
:addClass(args.listclass or '') -- Apply `listclass` for group rows | |||
:wikitext(processItem(args[groupKey])) | |||
-- Render list row | |||
if args[listKey] == 'child' then | |||
renderListRow(tbl, tostring(listnum), 2) | |||
else | |||
local listRow = addTableRow(tbl) | |||
listRow:tag('td') | |||
:attr('colspan', 2) | |||
:addClass('navboxMobile-list-content') | |||
:addClass((listnum % 2 == 1) and 'navboxMobile-odd' or 'navboxMobile-even') | |||
:addClass(args.listclass or '') -- Apply `listclass` to flat rows | |||
:wikitext(processItem(args[listKey])) | |||
end | |||
end | |||
end | end | ||
-- Add the below row | |||
-- | |||
renderBelowRow(tbl) | renderBelowRow(tbl) | ||
return tbl | return tbl | ||
end | end | ||
-- | -- | ||
Line 456: | Line 506: | ||
-- Render the main body of the navboxMobile | -- Render the main body of the navboxMobile | ||
local tbl = renderMainTable() | local tbl = renderMainTable() | ||
-- Create the final HTML with styles | -- Create the final HTML with styles | ||
local res = mw.html.create() | local res = mw.html.create() | ||
res:node(add_navbox_mobile_styles(hiding_templatestyles)) | res:node(add_navbox_mobile_styles(hiding_templatestyles)) | ||
res:node(tbl) | |||
return tostring(res) | return tostring(res) | ||
end | end | ||
-- | -- |