Module:DplHelper
Jump to navigation
Jump to search
Documentation for this module may be created at Module:DplHelper/doc
local p = {}
local util = require('Module:Util')
function p.verifyFields(fields)
if fields[1] ~= '%PAGE%' then
table.insert(fields, 1, '%PAGE%')
end
if fields[2] ~= 'id' then
table.insert(fields, 2, 'id')
end
return fields
end
function p._fetch(frame, params, fields, callback)
local data = frame:callParserFunction('#dpl:', params)
return p.indexResult(data, fields, callback)
end
function p.fetch(frame, category, template, fields, callback)
-- all calls
fields = p.verifyFields(fields)
local params = {
namespace = '',
category = category,
include = '{' .. template .. '}:' .. table.concat(fields, ':'),
mode = 'userformat',
secseparators = '====',
multisecseparators = '====',
skipthispage = 'no',
count = '',
}
-- rename %PAGE% to link
fields[1] = 'link'
return p._fetch(frame, params, fields, callback)
end
function p.fetchById(frame, category, template, id, fields, callback)
-- all calls
fields = p.verifyFields(fields)
local params = {
namespace = '',
category = category,
include = '{' .. template .. '}:' .. table.concat(fields, ':'),
mode = 'userformat',
secseparators = '====',
multisecseparators = '====',
skipthispage = 'no',
includematch = '/id\\s*=\\s*' .. id .. '/',
count = '',
}
-- rename %PAGE% to link
fields[1] = 'link'
return p._fetch(frame, params, fields, callback)
end
function p.fetchByTitles(frame, category, template, titles, fields, callback)
-- all calls
fields = p.verifyFields(fields)
local temp_titles = table.concat(titles, '|')
temp_titles = string.gsub(temp_titles, '[\(]', '\\(')
temp_titles = string.gsub(temp_titles, '[\)]', '\\)')
local params = {
namespace = '',
category = category,
include = '{' .. template .. '}:' .. table.concat(fields, ':'),
mode = 'userformat',
secseparators = '====',
multisecseparators = '====',
skipthispage = 'no',
--titleregexp = '^'..temp_titles..'$'
titlematch = temp_titles,
count = '',
}
mw.logObject(params)
-- rename %PAGE% to link
fields[1] = 'link'
return p._fetch(frame, params, fields, callback)
end
function p.indexResult(data, fields, callback)
local use_callback = (type(callback) == 'function')
local result = {}
local ix = 0
local rows = util.string.split(data, '====')
for rowix,row in pairs(rows) do
local args = {}
local i = 0
local sargs = util.string.split(row, '\n|')
for argix,arg in pairs(sargs) do
i = i+1
if arg ~= '' then
local key = fields[i]
args[key] = arg
end
end
if args.link ~= nil then
ix = ix + 1
args.ix = ix
if use_callback then
table.insert(result, callback(args))
else
table.insert(result, args)
end
end
end
return result
end
function p.getMagicPagename(data)
local frame = mw.getCurrentFrame()
return frame:preprocess('{{PAGENAME}}')
end
function p.renderList(frame)
mw.log('render start: ' .. os.clock())
local fields = {
'%PAGE%',
'id'
}
if frame.args.fields ~= nil then
for w in (frame.args.fields):gmatch('[^,]+') do
table.insert(fields, w)
end
end
mw.log('load data: ' .. os.clock())
local rows = p.fetch(frame, frame.args.dpl_category, frame.args.dpl_template, fields, nil)
mw.log('expanding templates: ' .. os.clock())
local result = {}
local template = frame.args.template
for key,row in pairs(rows) do
table.insert(result, frame:expandTemplate{title = template, args = row})
end
mw.log('done: ' .. os.clock())
return table.concat(result, '')
end
function p.testFetch()
local frame = mw.getCurrentFrame()
local data = p.fetch(frame, 'Weapons&SSR Weapons&Omega Weapons', 'Weapon', { 'name', 'weapon', 'element', 'rarity' })
for key,value in pairs(data) do
mw.logObject(value)
end
end
function p.testFetchById()
local frame = mw.getCurrentFrame()
local data = p.fetchById(frame, 'Weapons&SSR Weapons&Omega Weapons', 'Weapon', '1040301400', { 'name', 'weapon', 'element', 'rarity' })
for key,value in pairs(data) do
mw.logObject(value)
end
end
function p.testFetchByTitles()
local frame = mw.getCurrentFrame()
local data = p.fetchByTitles(frame, 'Characters', 'Character', {'Vira','Katalina'}, { 'name', 'element', 'race', 'rarity' })
for key,value in pairs(data) do
mw.logObject(value)
end
end
function p.testHEAVY()
local frame = mw.getCurrentFrame()
mw.log('start')
local data = p.fetch(frame, 'SSR Weapons', 'Weapon', { 'name', 'weapon', 'element', 'rarity' })
for key,value in pairs(data) do
--mw.logObject(value)
end
mw.log(#data)
mw.log('end')
end
return p