bugfix1001.2

星引擎Party已发行!
欢迎来到Star Engine 星引擎 WIKI
点击成为魔法少女!

全站通知:

模块:Test

来自星引擎WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块: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