Module:VarsUtil
From Tardis Wiki, the free Doctor Who reference
Documentation for this module may be created at Module:VarsUtil/doc
-- from https://thealchemistcode.fandom.com/wiki/Module:VarsUtil
local util_args = require ('Module:ArgsUtil')
-- local binser = require('binser') remove comment if Extension:LuaCache is ever enabled (not likely)
local VariablesLua = mw.ext.VariablesLua
do -- Remove when extension is installed.
VariablesLua = VariablesLua or {
var = function(var, default)
return mw.getCurrentFrame():callParserFunction('#var', var, default)
end,
vardefine = function(var, val)
return mw.getCurrentFrame():callParserFunction('#vardefine', var, val)
end,
vardefineecho = function(var, val)
return mw.getCurrentFrame():callParserFunction('#vardefineecho', var, val)
end,
}
end
local p = {}
function p.getVar(var)
local val = VariablesLua.var(var)
if val == '' then
return nil
end
return val
end
function p.getBool(var)
local val = p.getVar(var)
return util_args.castAsBool(val)
end
function p.setBool(var, val)
if type(val) == 'string' then
val = util_args.castAsBool(val)
end
if val then
p.setVar(var, 'Yes')
return
end
p.setVar(var, 'No')
end
function p.setVar(var, val)
if type(val) ~= "table" then
VariablesLua.vardefine(var, val)
end
return val
end
function p.setVarOnlyIf(var, val)
if not val then return end
p.setVar(var, val)
end
function p.getGlobalIndex(name)
local val = p.getVar('luaGlobalIndex' .. name)
return tonumber(val or 0) or 0
end
function p.setGlobalIndex(name)
local n = p.getGlobalIndex(name) + 1
p.setVar('luaGlobalIndex' .. name, n)
return n
end
function p.resetGlobalIndex(name, val)
val = val or 0
p.setVar('luaGlobalIndex' .. name, val)
return val
end
function p.appendToList(name, val, sep)
-- this is just for helping to debug and shouldn't actually be used ever probably
sep = sep or ', '
local old_val = p.getVar(name) or ''
p.setVar(name, old_val .. sep .. val)
end
function p.log(val)
if type(val) == 'table' then
p.logObject(val)
return
end
p.appendToList('log', tostring(val))
end
function p.logObject(val)
local tbl = {}
for k, v in pairs(val) do
tbl[#tbl+1] = k .. ': ' .. tostring(v)
end
p.appendToList('log', table.concat(tbl,', '))
end
function p.clearAll(tbl)
for _, v in ipairs(tbl) do
p.setVar(v, '')
end
end
function p.setTypedVar(var, val)
local val_to_store = binser.serialize(val)
p.setVar(var, val_to_store)
end
function p.getTypedVar(var)
local val = p.getVar(var)
if not val then
return nil
end
return binser.deserialize(val)[1]
end
function p.setObject(var, val)
local val_to_store = binser.serialize(val)
p.setVar(var, val_to_store)
end
function p.getObject(var)
local val = p.getVar(var)
if not val then
return nil
end
return binser.deserialize(val)[1]
end
return p