Module:Luagallerydata
From Archon Arcana - The KeyForge Wiki
Documentation for this module may be created at Module:Luagallerydata/doc
--Module:Luacard
--canstage
--Usage: {{#invoke: luagallerydata | getdata}}
--Debug: mw.log(p.getdata())
local p = {}
local cargo = mw.ext.cargo
function combine(tableto, tablefrom)
for k,v in pairs(tablefrom) do
tableto[k] = v
end
end
function append(table, value)
table[#table+1] = value
return table
end
function extend(table1, table2)
for k,v in pairs(table2) do
append(table1, v)
end
end
local luajson = require("Module:luajson")
function stachify(table)
local under_tab = {}
for k,v in pairs(table) do
if v==nil then
table[k] = ''
v = ''
end
if string.find(k, '[.]') then
local parts = mw.text.split(k, '[.]')
if not under_tab[parts[1]] then
under_tab[parts[1]] = {}
end
under_tab[parts[1]][parts[2]] = v
end
end
combine(table, under_tab)
end
function cargo_results(ctable, cfields, cargs)
local table = cargo.query(ctable, cfields, cargs)
for i,r in ipairs(table) do
stachify(r)
if i<#table then
r['delim'] = true
end
end
return table
end
function apply_sets(frame, ret_data)
ret_data.cardsets = cargo_results(
'SetInfo',
'SetInfo.SetName, SetInfo.ReleaseYear, SetInfo.ReleaseMonth, SetInfo.ShortName, SetInfo.SetNumber, SetInfo.IsMain, SetInfo.IsSpoiler, SetInfo.IsAdventure',
{
orderBy='SetInfo.ReleaseYear, SetInfo.ReleaseMonth'
})
end
function apply_carddata_in_set(carddata_field, collection_name, frame, ret_data)
for i=1, #ret_data.cardsets do
local setname = ret_data.cardsets[i]['SetInfo.SetName']
local results = cargo_results(
'SetData,CardData',
'CardData.'..carddata_field,
{
groupBy='CardData.'..carddata_field,
join='SetData._pageTitle=CardData._pageTitle',
where='SetData.SetName="'..setname..'"'
})
ret_data.cardsets[i][collection_name] = {}
for j=1, #results do
if(results[j]['CardData']) then
local found_elements = mw.text.split(results[j]['CardData'][carddata_field], ' • ')
for _,elem in ipairs(found_elements) do
ret_data.cardsets[i][collection_name][elem] = 1
end
end
end
end
end
function apply_traits(frame, ret_data)
apply_carddata_in_set('Traits', 'Traits', frame, ret_data)
end
function apply_artists(frame, ret_data)
apply_carddata_in_set('Artist', 'Artists', frame, ret_data)
end
function apply_houses(frame, ret_data)
apply_carddata_in_set('House', 'Houses', frame, ret_data)
end
function apply_types(frame, ret_data)
apply_carddata_in_set('Type', 'Types', frame, ret_data)
end
function apply_rarities(frame, ret_data)
apply_carddata_in_set('Rarity', 'Rarities', frame, ret_data)
end
function apply_keywords(frame, ret_data)
apply_carddata_in_set('Keywords', 'Keywords', frame, ret_data)
end
function p.getdata(frame)
local ret_data = {}
--TODO: Only select sets that are defined in the frame!
apply_sets(frame, ret_data)
apply_houses(frame, ret_data)
apply_artists(frame, ret_data)
apply_traits(frame, ret_data)
apply_types(frame, ret_data)
apply_rarities(frame, ret_data)
apply_keywords(frame, ret_data)
return luajson.encode(ret_data)
end
return p