Module:WeaponOugi
Jump to navigation
Jump to search
Documentation for this module may be created at Module:WeaponOugi/doc
local p = {}
local util = require('Module:Util')
local cargo = mw.ext.cargo
function findArg(needle, haystack)
local pattern = '|'..needle..'='
local startIndex = haystack:find(pattern, 0, true)
if startIndex == nil then
return 'Not Found'
end
startIndex = startIndex + pattern:len()
local endIndex = haystack:find('\n|', startIndex, true)
endIndex = endIndex - 1
local result = haystack:sub(startIndex,endIndex)
return mw.text.trim(result)
end
function tryFindArg(needle, haystack)
local result = findArg(needle, haystack)
if result == 'Not Found' then
return ''
end
return result
end
function p.renderOugi(frame)
mw.log('render start: ' .. os.clock())
local template = frame.args.template
local weaponName = frame.args.weaponName
local additionalArgs = frame.args.additionalArgs
mw.log('load data: ' .. os.clock())
local title = mw.title.new(weaponName)
local rawPage = title:getContent()
mw.log('find args:' .. os.clock())
local nameArg = 'ougi_name'
local descArg = 'ougi'
local name = findArg(nameArg, rawPage)
local desc = findArg(descArg, rawPage)
local desc4s = tryFindArg('ougi_4s', rawPage)
local desc5s = tryFindArg('ougi_5s', rawPage)
mw.log('expandTemplate')
local args = {}
args['link'] = weaponName
args['name'] = name
args['desc'] = frame:preprocess(desc)
args['desc4s'] = frame:preprocess(desc4s)
args['desc5s'] = frame:preprocess(desc5s)
-- Pass `frame.args.additionalArgs` to `args`
if additionalArgs ~= nil then
for arg in (additionalArgs):gmatch('[^;]+') do
local i = arg:find('=')
args[arg:sub(0, i-1)] = arg:sub(i+1)
end
end
mw.log('done: ' .. os.clock())
return frame:expandTemplate{ title = template, args = args }
end
function p.cargoRenderOugi(frame)
mw.log('render start: ' .. os.clock())
local weaponName = frame.args.weaponName
local escapedWeaponName = weaponName:gsub("'", "\\'")
local additionalArgs = frame.args.additionalArgs
local cargoTables = "weapons"
local cargoFields = "ca1_name,ca1_desc,ca2_desc,ca3_desc,img_square"
local cargoArgs = {
where = "weapons.name='" .. escapedWeaponName .. "'",
limit = 1,
}
local result = cargo.query(cargoTables, cargoFields, cargoArgs)[1]
-- If no result, check for page title
if result == nil then
cargoArgs = {
where = "weapons._pageTitle='" .. escapedWeaponName .. "'",
limit = 1,
}
result = cargo.query(cargoTables, cargoFields, cargoArgs)[1]
-- If still no result, fallback to non-cargo method
if result == nil then
return p.renderOugi(frame)
end
end
local templateArgs = {
link = weaponName,
name = result.ca1_name,
icon = result.img_square,
desc = util.string.remove_ref(result.ca1_desc or ''),
desc4s = util.string.remove_ref(result.ca2_desc or ''),
desc5s = util.string.remove_ref(result.ca3_desc or '')
}
-- Pass `frame.args.additionalArgs` to `args`
if additionalArgs ~= nil then
for arg in (additionalArgs):gmatch('[^;]+') do
local i = arg:find('=')
templateArgs[arg:sub(0, i-1)] = arg:sub(i+1)
end
end
mw.log('done: ' .. os.clock())
return frame:expandTemplate{
title = frame.args.template,
args = templateArgs
}
end
function p.testRender()
local frame = mw.getCurrentFrame()
frame.args.template = 'WeaponOugi/Template'
frame.args.weaponName = 'World Ender'
frame.args.additionalArgs = 'large=false;noicon=false'
return p.renderOugi(frame)
end
function p.testRenderCargo()
local frame = mw.getCurrentFrame()
frame.args.template = 'WeaponOugi/Template'
frame.args.weaponName = 'World Ender'
frame.args.additionalArgs = 'large=false;noicon=false'
return p.cargoRenderOugi(frame)
end
return p