Módulo:LoadData

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:LoadData/doc

local p = {}
-- Localiza a próxima chave-chave <= ou >= o i fornecido.
-- o operador é ±1
local function findItemRange(data, i, operator)
				local bestIndex = nil
				i = i * operator
				for k, v in pairs(data) do
					local kop = type(k) == 'number' and k * operator
								if kop and kop <= i and (bestIndex == nil or kop > bestIndex * operator) then
									bestIndex = k
								end
				end
				if bestIndex then return data[bestIndex] else return nil end
end
local function load(datamodule, frame)
	local args = frame.args
				local data = mw.loadData(datamodule)
				for i = 1, 20 do
								if args[i] then data = data[tonumber(args[i]) or args[i]]
								elseif args[i .. ' lteq'] then
												data = findItemRange(data, tonumber(args[i .. ' lteq']), 1)
								elseif args[i .. ' gteq'] then
												data = findItemRange(data, tonumber(args[i .. ' gteq']), -1)
								else break end
				end
				
				if data == nil then
					return args['if_nil'] -- não é um argumento obrigatório, OK para retornar nil aqui.
				end
				
				if type(data) == 'table' then
					-- Coloca a tabela em outra tabela porque o valor de retorno de loadData
					-- ié uma tabela "falsa" que possui apenas determinados metamétodos.
					local realdata = {}
					for k, v in pairs(data) do
						realdata[k] = v
					end
					data = realdata
				else
					data = { data }
				end
				
				if args['template'] then
					return mw.text.unstripNoWiki(args['template']):format(unpack(data))
				elseif args['preprocess'] then
					return frame:preprocess(mw.text.unstripNoWiki(args['preprocess']):format(unpack(data)))
				else
					return table.concat(data)
				end
end
return setmetatable({}, {
	__index = function(t, k)
		return function(frame)
			return load('Módulo:' .. k, frame)
					end
	end
})