Terraria Wiki

Miss the old Hydra Skin? Try out our Hydralize gadget! Visit the preferences page while logged in and turn on the gadget.

READ MORE

Terraria Wiki
Advertisement
Terraria Wiki

No documentation subpage exists yet for this module. Create one now.


local trim = mw.text.trim
local ugsub = mw.ustring.gsub
local cache = require 'mw.ext.LuaCache'
local VariablesLua = mw.ext.VariablesLua

local args_table -- cache

-- helper function
local getArg = function(key)
	--Note: unnamed parameters will not be auto trimmed and named parameters will.
	local value = trim(args_table[key] or '') 
	return (value ~= '') and value or nil
end

local getCacheKey = function()
	local lang = VariablesLua.var('__global__lang');
	if not lang then
		lang = mw.getCurrentFrame():expandTemplate{ title = 'lang' }
	end
	return lang .. ':'.. (getArg(1) or getArg('key'))
end

-- A simple wrap for LuaCache

return {
	-- get
	-- return cached value or nothing
	get = function(frame)
		args_table = frame.args
		local result = cache.get(getCacheKey())
		if result then 
			return tostring(result)
		end
	end,

	-- get & replace
	-- return cached value with all tokens replaced, or nothing
	getreplace = function(frame)
		args_table = frame.args
		local result = cache.get(getCacheKey())
		if not result then
			return 
		end
		result = tostring(result)
		for token, replace in pairs(getArg('passargs') and frame:getParent().args or args_table) do
			if mw.ustring.sub(token, 1, 1) == '$' then
				-- escape, to perform plain text replacement. see Module:String
				result = ugsub(result, (ugsub(token, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")), (ugsub(replace, "%%", "%%%%" ))) -- () to force return only 1 value.
			end
		end
		return result
	end,
	
	-- set
	-- return 'true' or '' if $return or $4 = true
	set = function(frame)
		args_table = frame.args
		local result = cache.set(getCacheKey(), getArg(2) or getArg('value'), tonumber(getArg(3) or getArg('exptime')))
		if getArg('return') or getArg(4) then
			return result or ''
		end
	end,

	-- set, then get and replace
	-- store value to cache then return the value with all tokens replaced.
	setreplace = function(frame)
		args_table = frame.args
		local str = getArg(2) or getArg('value')
		cache.set(getCacheKey(), str, tonumber(getArg(3) or getArg('exptime')))

		for token, replace in pairs(getArg('passargs') and frame:getParent().args or args_table) do
			if mw.ustring.sub(token, 1, 1) == '$' then
				-- escape, to perform plain text replacement. see Module:String
				str = ugsub(str, (ugsub(token, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")), (ugsub(replace, "%%", "%%%%" )))
			end
		end
		return str
	end,

	-- delete
	-- return 'true' or '' if $return or $2 = true
	delete = function(frame)
		args_table = frame.args
		local result = cache.delete(getCacheKey())
		if getArg('return') or getArg(2) then
			return result or ''
		end
	end,

}
Advertisement