全站通知:
模块:Tabs
刷
历
编
跳到导航
跳到搜索
local utils = require("Module:Utils")
local p = {}
local function parseTabsData(args, usePositional)
local tabsData = {}
local i = 1
while true do
local title, content
if usePositional then
title = args[i]
content = args[i + 1]
i = i + 2
else
title = args['title' .. i]
content = args['content' .. i]
i = i + 1
end
if not title or mw.text.trim(title) == '' then break end
table.insert(tabsData, {title = title, content = content or ''})
end
return tabsData
end
local function createWidgetContent(content, isFirst)
local widgetName = isFirst and 'Details1' or 'Details'
return table.concat({
'{{#Widget:' .. widgetName .. '}}', '{{#Widget:Summary}}',
'{{#Widget:Summary2}}', content, '{{#Widget:Details2}}'
})
end
local function renderTabs(tabsData, align, frame)
local root = mw.html.create('div')
root:addClass('custom-tabs-container')
local tablist = root:tag('div')
tablist:addClass('custom-tabs-list'):addClass('justify-content-' .. align)
:attr('role', 'tablist')
local contentContainer = root:tag('div')
contentContainer:addClass('custom-tabs-content')
contentContainer:tag('div'):wikitext(
"{{#Widget:Details}}{{#Widget:Summary}}{{#Widget:Summary2}}{{#Widget:Details2}}")
for index, data in ipairs(tabsData) do
local tabLink = tablist:tag('a')
tabLink:addClass('custom-tabs-tab'):attr('role', 'tab'):wikitext(
data.title)
local tabPanel = contentContainer:tag('div')
tabPanel:addClass('custom-tabs-panel'):attr('role', 'tabpanel')
if index == 1 then
tabLink:addClass('is-active'):attr('aria-selected', 'true')
end
local detailsContent = createWidgetContent(data.content, index == 1)
tabPanel:wikitext(detailsContent)
end
contentContainer:tag('div'):wikitext(
"{{#Widget:Details}}{{#Widget:Summary}}{{#Widget:Summary2}}{{#Widget:Details2}}")
return frame:preprocess(tostring(root))
end
local function processTabs(frame, usePositional)
local args
local errorMsg
if usePositional then
local getArgs = require('Module:Arguments').getArgs
args = getArgs(frame, {trim = true, removeBlanks = false})
errorMsg =
'错误:未提供任何有效的标签页数据。请按顺序提供参数:|标题1|内容1|标题2|内容2...'
else
args = frame:getParent().args
errorMsg =
'错误:未提供任何有效的标签页数据。请使用“|title1=...”和“|content1=...”格式提供参数。'
end
local align = args.align or 'left'
local tabsData = parseTabsData(args, usePositional)
if #tabsData == 0 then
return '<div class="errorbox">' .. errorMsg .. '</div>'
end
return renderTabs(tabsData, align, frame)
end
function p.tabs(frame) return processTabs(frame, false) end
function p.tabs2(frame) return processTabs(frame, true) end
return p

沪公网安备 31011002002714 号