Module:Sandbox/User:The Gaffer/Modules/Infobox Switch: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
The Gaffer (talk | contribs) No edit summary |
The Gaffer (talk | contribs) No edit summary |
||
Line 6: | Line 6: | ||
-- Module access point for infobox switch |
-- Module access point for infobox switch |
||
p._infobox_switch = function(args) |
p._infobox_switch = function(args) |
||
-- Prepare content list from arguments |
|||
local contents = {} |
|||
local i = 1 |
|||
while args['item' .. i] do |
|||
table.insert(contents, { |
|||
table.insert(contents, { text = args['text'..i] or ('Item '..i), |
|||
text = args['text' .. i] or ('Item ' .. i), |
|||
content = '\n' .. args['item' .. i], |
|||
id = args['switch_id' .. i] or i |
|||
⚫ | |||
}) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
:addClass('infobox-buttons') |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
:done() |
|||
⚫ | |||
-- Create the tbody for the main content area of the infobox |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
:done() |
|||
end |
|||
⚫ | |||
local default_content = contents[1] -- Assuming default index is 1 |
local default_content = contents[1] -- Assuming default index is 1 |
||
if default_content then |
if default_content then |
||
Line 46: | Line 50: | ||
row:done() |
row:done() |
||
end |
end |
||
⚫ | |||
-- Create the hidden resources section that contains all switchable content |
-- Create the hidden resources section that contains all switchable content |
||
local resources_div = structure:tag('div') |
local resources_div = structure:tag('div') |
||
Line 64: | Line 68: | ||
end |
end |
||
-- Return the complete HTML structure |
-- Return the complete HTML structure as a string |
||
return tostring(structure) |
return tostring(structure) |
||
end |
end |
||
-- Public function to be called by templates |
|||
p.infobox_switch = function(frame) |
p.infobox_switch = function(frame) |
||
-- Directly return the raw HTML output |
|||
return p._infobox_switch(frame:getParent().args) |
|||
return frame:callParserFunction('tag', { 'div', html_output, content = 'html' }) |
|||
end |
end |
||
return p |
return p |
Revision as of 21:23, 12 November 2024
Documentation for this module may be created at Module:Sandbox/User:The Gaffer/Modules/Infobox Switch/doc
local p = {}
local yn = require('Module:Yesno')
local hc = require('Module:Paramtest').has_content
-- Module access point for infobox switch
p._infobox_switch = function(args)
-- Prepare content list from arguments
local contents = {}
local i = 1
while args['item' .. i] do
table.insert(contents, {
text = args['text' .. i] or ('Item ' .. i),
content = '\n' .. args['item' .. i],
id = args['switch_id' .. i] or i
})
i = i + 1
end
-- Create the main table structure for the infobox switch
local structure = mw.html.create('table')
:addClass('infobox-switch')
:tag('caption')
:done()
-- Create the div for the buttons inside the caption
local buttons = structure:tag('div')
:addClass('infobox-buttons')
:attr('data-default-index', 1)
-- Add buttons for each item in contents
for i, v in ipairs(contents) do
buttons:tag('button')
:addClass('button')
:attr('data-switch-index', i)
:attr('data-switch-anchor', '#section' .. i)
:wikitext(v.text)
:done()
end
-- Create the tbody for the main content area of the infobox
local content_body = structure:tag('tbody')
local default_content = contents[1] -- Assuming default index is 1
if default_content then
local row = content_body:tag('tr')
row:tag('td')
:attr('data-attr-param', 'param1')
:wikitext(default_content.content)
:done()
row:done()
end
-- Create the hidden resources section that contains all switchable content
local resources_div = structure:tag('div')
:addClass('infobox-switch-resources')
-- Add each content section to the resources div
for i, v in ipairs(contents) do
local param_div = resources_div:tag('div')
:attr('data-attr-param', 'param1')
param_div:tag('div')
:attr('data-attr-index', i)
:wikitext(v.content)
:done()
param_div:done()
end
-- Return the complete HTML structure as a string
return tostring(structure)
end
-- Public function to be called by templates
p.infobox_switch = function(frame)
-- Directly return the raw HTML output
return p._infobox_switch(frame:getParent().args)
end
return p