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 1: Line 1:
local p = {}
--Attribution: This module was taken from the Runescape wiki - https://runescape.wiki/w/Module:Switch_infobox - See changes there for a list of contributors
-- local p = {}
-- local yesno = require('Module:Yesno')


local yn = require('Module:Yesno')
-- function p.main(frame)
local hc = require('Module:Paramtest').has_content
-- return frame:preprocess(tostring(p._main(frame:getParent().args)))

-- end
-- 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')
: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
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

mw.logObject(tostring(structure))
-- Return the complete HTML structure
return tostring(structure)
end

p.infobox_switch = function(frame)
return p._infobox_switch(frame:getParent().args)
end

return p
--Attribution: This module was taken from the Runescape wiki - https://runescape.wiki/w/Module:Switch_infobox - See changes there for a list of contributors


-- function p._main(args)
-- local contents = {}
-- local contents = {}


Line 36: Line 104:
-- end
-- end
-- local mah_triggers = ret:tag('div')
-- local mah_triggers = ret:tag('div')
-- :addClass('switch-infobox-triggers')
-- :addClass('switch-infobox-triggers')
-- local isSelect = yesno(args.select)
-- local isSelect = yesno(args.select)
Line 67: Line 135:


-- return p
-- return p

local p = {}

function p.infobox(frame)
return [[
<div class="infobox-switch" data-default-index="1">
<table>
<caption>
<div>
<button data-switch-index="1" data-switch-anchor="#view1">Overview</button>
<button data-switch-index="2" data-switch-anchor="#view2">Details</button>
<button data-switch-index="3" data-switch-anchor="#view3">Stats</button>
</div>
</caption>
<tbody>
<tr><td>Name</td><td data-attr-param="name">Default Name</td></tr>
<tr><td>Description</td><td data-attr-param="description">Default Description</td></tr>
<tr><td>Attributes</td><td data-attr-param="attributes">Default Attributes</td></tr>
</tbody>
</table>
</div>
<div class="infobox-switch-resources">
<div data-attr-param="name">
<div data-attr-index="1">View 1 Name</div>
<div data-attr-index="2">View 2 Name</div>
<div data-attr-index="3">View 3 Name</div>
</div>
<div data-attr-param="description">
<div data-attr-index="1">View 1 Description</div>
<div data-attr-index="2">View 2 Description</div>
<div data-attr-index="3">View 3 Description</div>
</div>
<div data-attr-param="attributes">
<div data-attr-index="1"><ul><li>Attribute A (View 1)</li><li>Attribute B (View 1)</li></ul></div>
<div data-attr-index="2"><ul><li>Attribute A (View 2)</li><li>Attribute B (View 2)</li><li>Attribute C (View 2)</li></ul></div>
<div data-attr-index="3"><ul><li>Attribute A (View 3)</li><li>Attribute C (View 3)</li><li>Attribute D (View 3)</li></ul></div>
</div>
</div>
]]
end

return p

Revision as of 20:48, 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')
		: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
	
	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

	mw.logObject(tostring(structure))
    -- Return the complete HTML structure
    return tostring(structure)
end

p.infobox_switch = function(frame)
	return p._infobox_switch(frame:getParent().args)
end

return p
--Attribution: This module was taken from the Runescape wiki - https://runescape.wiki/w/Module:Switch_infobox - See changes there for a list of contributors

-- 	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

-- 	local ret = mw.html.create('div')
-- 			:addClass('Gadget-switch-infobox')
-- 			:addClass('loading')
-- 			:tag('span')
-- 				:addClass('loading-button')
-- 				:addClass('button')
-- 				:wikitext('Loading...')
-- 			:done()
-- 	if args.float then
-- 		if args.float == 'left' then
-- 			ret:addClass('tleft')
-- 				:addClass('thumb')
-- 		elseif args.float == 'right' then
-- 			ret:addClass('tright')
-- 				:addClass('thumb')
-- 		end
-- 	end
			
	-- local mah_triggers = ret:tag('div')
	-- 			:addClass('switch-infobox-triggers')
				
-- 	local isSelect = yesno(args.select)
-- 	if isSelect then
-- 		mah_triggers:addClass('infobox-triggers-select')
-- 	elseif i > 6 and isSelect ~= false then
-- 		mah_triggers:addClass('infobox-triggers-select')
-- 	end

-- 	for i, v in ipairs(contents) do
-- 		mah_triggers	:tag('span')
-- 					:addClass('trigger')
-- 					:addClass('button')
-- 					:addClass(i==1 and 'button-selected' or '')
-- 					:attr('data-id',v.id)
-- 					:wikitext(v.text)
-- 				:done()

-- 		ret	:tag('div')
-- 				:addClass('item')
-- 				:addClass(i==1 and 'showing' or '')
-- 				:attr('data-id',v.id)
-- 				:wikitext(v.content)
-- 			:done()
-- 	end

-- 	return ret
-- end

-- return p