Moduł:GameText/loaddata

Z Terraria Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:GameText/loaddata/doc

local cache = mw.ext.LuaCache

local flip
flip = function(data)
	if type(data) ~= 'table' then
		return data
	end
	local result = {}
	for k,v in pairs(data) do
		if type(v) == 'table' then
			result[k] = flip(v)
		else
			if result[v] then -- conflict
				local i = 2
				while result[v..i] do 
					i = i+1
				end
				result[v..i] = k
			else
				result[v] = k
			end
		end
	end
	return result
end

return {
	load = function(lang)
		local data = cache.get(':_gametext:data:'..lang)
		if data then 
			return data
		else
			-- fallback
			local info = require('Module:GameText/db-'..lang) or {} -- return table of mw.loadData() has a metatable, can not be used for cache.set and mw.loadData.
			-- flip
			local flipped = flip(info)
			-- cache it. 
			-- This cache can be purged by:
			-- * purge `Module:GameText/db-<lang>` or `Module:GameText/db-<lang>/doc` page
			-- * lua code: `require('Module:GameText/loaddata').purge(<lang>)`
			-- * template code: `{{#invoke:GameText|purge|lang=<lang>}}`
			cache.set( ':_gametext:data:'..lang, {info=info, flipped=flipped})
		end
	end,
	
	purge = function(lang)
		cache.delete(':_gametext:data:'..lang)
	end,
}