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