米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!

全站通知:

模块:SMW

来自米斯特利亚WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:SMW/doc创建

-- 功能 1. 查询页面指定属性 2.设置smw属性  3.将模板所有参数设置为smw属性,支持序号参数用双冒号分割键值如 射速::360rpm
-- 参考了 https://rimworld.huijiwiki.com/wiki/模块:SMW , 其作者是 Lu 、 Duduluu
-- 由于bwiki没有Semantic Scribunto插件,重构了查询逻辑。
local p = {}

local getArgs = require('Module:Arguments').getArgs

-- 用于查询一个值
function p.show(frame)
    -- local queryResult = mw.smw.ask("[[" .. page .. "]]|?" .. prop .. "|mainlabel=-|headers=hide")
    if not (frame.args[1] and frame.args[2]) then
    	return "模块:SMW show 需要参数1和2"
    end
    if frame.args[1] == '' or frame.args[2] == '' then
    	return "模块:SMW show 需要非空参数1和2"
    end
    
	local f = mw.getCurrentFrame()
	local result = f:callParserFunction{name="#ask:[[" .. frame.args[1] .. "]]", args={
		"?".. frame.args[2],
		mainlabel="-",
		headers="hide"
	}}

	if result and result ~= '' then
		return result
    elseif frame.args[3] then
        return frame.args[3]
    else
        return ''
    end
end

-- 用于为table进行set属性
function p._set(tableArg)
  local frame = mw.getCurrentFrame()
  for k, v in pairs(tableArg) do
    if k and v then
      --mw.log("v"..v)
      frame:callParserFunction('#set:'.. k ..'=' .. v)
    end
  end
end

-- 提取模板所有参数,转为table后进行set
function p.setAllArgs(frame)
  local args = getArgs(frame)
  local properties = {}
  for k, v in pairs(args) do
    if k and v then
      properties[k] = v
    end
  end
  
  p._set(properties)
end


return p