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