模块:Common
来自星砂岛百科
更多操作
概述
Common 提供中文百科 Lua 模块的基础通用能力,包括参数读取、JSON 数据页加载、文件存在判断和 LuaCache 辅助。
用法
local common = require('Module:Common')
local title = common.getCurrentTitleText()
local data = common.loadJsonData('数据:Item/item_mapping.json')
local key = common.normalizeKey(title)
示例
local common = require('Module:Common')
local cache_key = common.buildLuaCacheKey('demo', '1', 'example')
local cached = common.luaCacheGet(cache_key)
if cached == nil then
cached = common.trim(' test ')
common.luaCacheSet(cache_key, cached, 300)
end
return cached
函数
trim:去除首尾空白。getArg:从frame与父级模板中读取参数。toText:将布尔值、数组或普通值转成文本。normalizeKey:统一键名格式。loadJsonData:安全读取数据页 JSON。getCurrentTitleText:返回当前页面标题。filePageExists:判断文件页是否存在。getFilePath:获取文件路径缓存值。buildLuaCacheKey、luaCacheGet、luaCacheSet:LuaCache 辅助函数。
local p = {}
local cache = {}
function p.trim(value)
if value == nil then
return ''
end
return mw.text.trim(tostring(value))
end
function p.getArg(frame, key, default)
local value = frame.args[key]
if value == nil and frame:getParent() then
value = frame:getParent().args[key]
end
value = p.trim(value)
if value == '' then
return default or ''
end
return value
end
function p.toText(value, sep)
if value == nil then
return ''
end
if type(value) == 'boolean' then
return value and '是' or '否'
end
if type(value) == 'table' then
local parts = {}
for _, item in ipairs(value) do
parts[#parts + 1] = tostring(item)
end
return table.concat(parts, sep or '、')
end
return tostring(value)
end
function p.normalizeKey(value)
return mw.ustring.lower(p.trim(value))
end
function p.readJsonPage(titleText)
local pageName = p.trim(titleText)
if pageName == '' then
return nil
end
if cache[pageName] ~= nil then
return cache[pageName]
end
local title = mw.title.new(pageName)
if not title then
cache[pageName] = nil
return nil
end
local content = title:getContent()
if not content or content == '' then
cache[pageName] = nil
return nil
end
local ok, data = pcall(mw.text.jsonDecode, content)
if not ok or type(data) ~= 'table' then
cache[pageName] = nil
return nil
end
cache[pageName] = data
return data
end
function p.getCurrentTitleText()
return mw.title.getCurrentTitle().text
end
return p