Module:Move7: Difference between revisions

From Wavu Wiki, the 🌊 wavy Tekken wiki
No edit summary
(refactor display function)
Line 7: Line 7:


p.display = function(frame)
p.display = function(frame)
local args = {}
local function appendFrom(dst, src)
for k, v in pairs(frame:getParent().args) do
for k, v in pairs(src) do
args[k] = v
dst[k] = v
end
end
end
local function getLeads(parentId)
local parentId = args['parent']
if parentId == nil or parentId == "" then
return frame:expandTemplate{ title = 'MoveData', args = args }
else
local leads = {}
local leads = {}
while (true) do
while (parentId ~= nil and parentId ~= '') do
local parent = cargo.query(tables, 'input,target,damage,parent', { where = "id='" .. parentId .. "'" })[1]
local parent = cargo.query(tables, 'input,target,damage,parent', { where = "id='" .. parentId .. "'" })[1]
if parent == nil then
if parent == nil then
return 'Error: parent = "' .. parentId .. '" not found'
error('Error: parent = "' .. parentId .. '" not found')
end
end


local parentId = parent['parent']
parent['parent'] = nil
for k, v in pairs(parent) do
for k, v in pairs(parent) do
if k ~= 'parent' then
local leadName = k .. 'Lead'
local leadName = k .. 'Lead'
if leads[leadName] == nil then
if leads[leadName] == nil then
leads[leadName] = ''
leads[leadName] = ''
end
leads[leadName] = v .. leads[leadName]
end
end
leads[leadName] = v .. leads[leadName]
end
end
if parent['parent'] ~= '' then
parentId = parent['parent']
else
break
end
end
for k, v in pairs(leads) do
args[k] = v
end
end
return frame:expandTemplate{ title = 'MoveData', args = args }
return leads
end
local leads = getLeads(frame:getParent().args['parent'])
if next(leads) == nil then
return frame:expandTemplate{ title = 'MoveData', args = frame:getParent().args }
end
end
local args = {}
appendFrom(args, frame:getParent().args)
appendFrom(args, leads)
return frame:expandTemplate{ title = 'MoveData', args = args }
end
end



Revision as of 15:46, 24 August 2023

Documentation for this module may be created at Module:Move7/doc

local p = {};
local cargo = mw.ext.cargo
local tables = 'MoveDataCargoTest'

p.fields = 'id,name,input,target,damage,reach,tracksLeft,tracksRight,startup,recv,tot,crush,block,hit,ch,notes'


p.display = function(frame)
	local function appendFrom(dst, src)
		for k, v in pairs(src) do
			dst[k] = v
		end
	end
	local function getLeads(parentId)
		local leads = {}
		while (parentId ~= nil and parentId ~= '') do
			local parent = cargo.query(tables, 'input,target,damage,parent', { where = "id='" .. parentId .. "'" })[1]
			if parent == nil then
				error('Error: parent = "' .. parentId .. '" not found')
			end

			local parentId = parent['parent']
			parent['parent'] = nil
			
			for k, v in pairs(parent) do
				local leadName = k .. 'Lead'
				if leads[leadName] == nil then
					leads[leadName] = ''
				end
				
				leads[leadName] = v .. leads[leadName]
			end
		end
		
		return leads
	end
	
	local leads = getLeads(frame:getParent().args['parent'])
	if next(leads) == nil then
		return frame:expandTemplate{ title = 'MoveData', args = frame:getParent().args }
	end
	
	local args = {}
	appendFrom(args, frame:getParent().args)
	appendFrom(args, leads)
	return frame:expandTemplate{ title = 'MoveData', args = args }
end

p.query = function(frame)
	local args = frame:getParent().args
	local id = args[1]
	if id == nil then
		return "Error: no id"
	end
	id = id:gsub("%s+", "")
	
	local result = cargo.query(tables, p.fields, { where = "id = '" .. id .. "'" })[1]
	if result == nil then
		return "Error: move with id = '" .. id .. "' not found"
	end
	
	for k, v in pairs(result) do
		local override = args[k]
		if override ~= nil then
			result[k] = override
		end
	end
	
	return frame:expandTemplate{ title = 'MoveDataCargoTest/Display', args = result }
end

return p