Jump to content

Module:Data/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Theoretical implementation for accepting json data on top of standard module data
Fix numerical indexing (attempt to use tonumber if the string key returns nil)
Line 24: Line 24:
end
end
end
end
data = data[v]
local nextdata = data[v]
if nextdata == nil and tonumber(v) then
data = data[tonumber(v)]
else
data = nextdata
end
i = i + 1
i = i + 1
end
end

Revision as of 11:50, 5 October 2023

local mt = {}

function mt.__index(t, k)
	return function(frame)
		local success, data = pcall(mw.loadData, k)
		if not success then
			success, data = pcall(mw.loadJsonData, k)
			if not success then
				error("'" .. k .. "' is not a valid data page")
			end
		end
		local i = 1
		for _,v in ipairs(frame.args) do
			local ty = type(data)
			if ty ~= 'table' then
				local args = {}
				for j = 1, i - 1 do
					args[j] = frame.args[j]
				end
				if frame.args.softfail then
					return '<span class="error">[[Category:Pages with failed Module:Data lookups]]Error: Tried to read index "' .. mw.text.nowiki(v) .. '" of mw.loadData("' .. mw.text.nowiki(k) .. '").' .. mw.text.nowiki(table.concat(args, '.')) .. ', which is a ' .. ty .. '</span>'
				else
					error('Tried to read index "' .. v .. '" of mw.loadData("' .. k .. '").' .. table.concat(args, '.') .. ', which is a ' .. ty)
				end
			end
			local nextdata = data[v]
			if nextdata == nil and tonumber(v) then
				data = data[tonumber(v)]
			else
				data = nextdata
			end
			i = i + 1
		end
		return data
	end
end

return setmetatable({}, mt)