Terraria Wiki
Регистрация
Advertisement
Terraria Wiki
1735
страниц
См. также этот модуль на английском языке: Module:Cache. В нём может содержаться более полная или подробная информация.

Документация для этого модуля отсутствует. Создайте её.


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