模块:Test
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:Test/doc创建
local p = {}
local json = require("Module:JSON") -- 依赖JSON模块序列化复杂参数
function p.generateSVG(frame)
-- 1. 基础SVG参数(必传)
local baseParams = {
width = frame.args.width or "200",
height = frame.args.height or "200",
path = frame.args.path or "", -- SVG路径d属性
fill = frame.args.fill or "none",
stroke = frame.args.stroke or "black",
strokeWidth = frame.args.strokeWidth or "1",
foWidth = frame.args.foWidth or "50", -- foreignObject宽度(统一)
foHeight = frame.args.foHeight or "50" -- foreignObject高度(统一)
}
-- 2. 收集所有foreignObject的坐标参数(Xn/Yn)
local foParams = {}
local i = 1
while frame.args["X" .. i] and frame.args["Y" .. i] do
table.insert(foParams, {
x = frame.args["X" .. i],
y = frame.args["Y" .. i],
template = frame.args["template" .. i] or "模板A|默认内容" -- 每个fo对应的模板调用
})
i = i + 1
end
-- 3. 生成带data属性的容器
local container = mw.html.create("div")
:addClass("svg-widget-container") -- 容器类名,供Widget定位
-- 基础参数(简单类型)
:attr("data-svg-width", baseParams.width)
:attr("data-svg-height", baseParams.height)
:attr("data-svg-path", baseParams.path)
:attr("data-svg-fill", baseParams.fill)
:attr("data-svg-stroke", baseParams.stroke)
:attr("data-svg-stroke-width", baseParams.strokeWidth)
:attr("data-fo-width", baseParams.foWidth)
:attr("data-fo-height", baseParams.foHeight)
-- foreignObject参数(复杂数组,JSON序列化)
:attr("data-fo-params", json.encode(foParams))
-- 4. 调用Widget(传递容器类名,确保Widget能定位)
container:wikitext('{{#widget:Test|containerClass=svg-widget-container}}')
return tostring(container)
end
return p

沪公网安备 31011002002714 号