No edit summary |
(refactor display function) |
||
Line 7: | Line 7: | ||
p.display = function(frame) | p.display = function(frame) | ||
local | local function appendFrom(dst, src) | ||
for k, v in pairs(src) do | |||
dst[k] = v | |||
end | |||
end | end | ||
local function getLeads(parentId) | |||
local parentId | |||
local leads = {} | local leads = {} | ||
while ( | 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 | ||
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 | ||
local leadName = k .. 'Lead' | |||
if leads[leadName] == nil then | |||
leads[leadName] = '' | |||
end | end | ||
leads[leadName] = v .. leads[leadName] | |||
end | end | ||
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