Module:VarsUtil: Difference between revisions

From Tardis Wiki, the free Doctor Who reference
(from https://thealchemistcode.fandom.com/wiki/Module:VarsUtil)
 
No edit summary
Line 1: Line 1:
-- from https://thealchemistcode.fandom.com/wiki/Module:VarsUtil
-- from https://thealchemistcode.fandom.com/wiki/Module:VarsUtil
local util_args = require ('Module:ArgsUtil')
local util_args = require ('Module:ArgsUtil')
local binser = require('binser')
-- local binser = require('binser') remove comment if Extension:LuaCache is ever enabled (not likely)
local VariablesLua = mw.ext.VariablesLua
local VariablesLua = mw.ext.VariablesLua
do -- Remove when extension is installed.
do -- Remove when extension is installed.

Revision as of 12:01, 16 November 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)
	VariablesLua.vardefine(var, val)
	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