local p = {}
function p.main(frame)
local args = frame:getParent().args
local items = {}
local levels = {}
-- Check if collapsed parameter is set
local collapsed = args.collapsed == "true"
-- Collect all TOC items and their levels
local i = 1
while args['item' .. i] do
items[i] = args['item' .. i]
levels[i] = tonumber(args['level' .. i]) or 2 -- Default to level 2
i = i + 1
end
if #items == 0 then
return ''
end
-- Find minimum level
local min_level = math.min(unpack(levels))
local list = {}
for idx = 1, #items do
local normalized_level = levels[idx] - min_level + 1
local item = items[idx]
-- Add list line
table.insert(list, string.rep('#', normalized_level) .. ' ' .. item)
end
-- Add mw-collapsed class if collapsed=true
local collapsible_class = "mw-collapsible mw-made-collapsible"
if collapsed then
collapsible_class = collapsible_class .. " mw-collapsed"
end
return '<div class="book-toc">\n' ..
'<div class="toc-header">\n' ..
'<strong>Table of contents</strong>\n' ..
'</div>\n' ..
'<div class="' .. collapsible_class .. '">\n' ..
table.concat(list, '\n') .. '\n' ..
'</div>\n' ..
'</div>'
end
return p