Module:Sandbox/User:The Gaffer/Modules/Infobox Switch: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
No edit summary
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
-- Prepare content list from arguments
local contents = {}
local contents = {}
local i = 1
local i = 1
while args['item'..i] do
while args['item' .. i] do
table.insert(contents, {
table.insert(contents, { text = args['text'..i] or ('Item '..i),
content = '\n' .. args['item'..i],
text = args['text' .. i] or ('Item ' .. i),
id = args['switch_id'..i] or i})
content = '\n' .. args['item' .. i],
id = args['switch_id' .. i] or i
i = i + 1
})
end
i = i + 1
end
-- Create the main table structure for the infobox switch

local structure = mw.html.create('table')
-- Create the main table structure for the infobox switch
:addClass('infobox-switch')
local structure = mw.html.create('table')
:tag('caption')
:addClass('infobox-switch')
:done();
:tag('caption')
:done()
-- Create the div for the buttons inside the caption

local buttons = structure:tag('div')
-- Create the div for the buttons inside the caption
:attr('data-default-index', 1)
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
-- Add buttons for each item in contents
local content_body = structure:tag('tbody')
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
local content_body = structure:tag('tbody')
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
local html_output = p._infobox_switch(frame:getParent().args)
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