Module:VarsUtil: Difference between revisions

From Tardis Wiki, the free Doctor Who reference
No edit summary
No edit summary
 
Line 44: Line 44:


function p.setVar(var, val)
function p.setVar(var, val)
VariablesLua.vardefine(var, val)
if type(val) ~= "table" then
VariablesLua.vardefine(var, val)
end
return val
return val
end
end

Latest revision as of 16:37, 30 December 2021

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