BryghtShadow (talk | contribs) m (render_unit_icon) |
BryghtShadow (talk | contribs) mNo edit summary |
||
Line 146: | Line 146: | ||
local function renderPage2(iname) |
local function renderPage2(iname) |
||
− | local rows = model.query('ConceptCard','_pageName,server,rare,icon,en_cost,en_exp,en_trust,first_get_unit,trust_item_names,trust_item_counts,trust_artifact_names,trust_artifact_counts,type',{where='iname="'..iname..'"'}) |
+ | local rows = model.query('ConceptCard','_pageName,server,iname,rare,icon,en_cost,en_exp,en_trust,first_get_unit,trust_item_names,trust_item_counts,trust_artifact_names,trust_artifact_counts,type',{where='iname="'..iname..'"'}) |
if #rows == 0 then |
if #rows == 0 then |
||
return '`'..iname..'` not found in ConceptCard table.' |
return '`'..iname..'` not found in ConceptCard table.' |
||
Line 152: | Line 152: | ||
local data = rows[1] |
local data = rows[1] |
||
local getLoc = function(param) return model.getLoc(data._pageName, param) end |
local getLoc = function(param) return model.getLoc(data._pageName, param) end |
||
+ | local function releaseDates(data) |
||
+ | local jp = data.jpDate or '' |
||
+ | local gl = data.glDate or '' |
||
+ | if jp == '' and gl == '' then return end |
||
+ | local root = mw.html.create('ul') |
||
+ | if jp ~= '' then root:tag('li'):wikitext('JP: ' .. jp) end |
||
+ | if gl ~= '' then root:tag('li'):wikitext('GL: ' .. gl) end |
||
+ | return tostring(root) |
||
+ | end |
||
local cats = {'Memento'} |
local cats = {'Memento'} |
||
local name = getLoc('name') |
local name = getLoc('name') |
||
+ | local icon = 'Game,ConceptCardIcon,'..data.icon..'.png' |
||
− | local icon = render_memento_icon{iname, data=data, size='large', name='none', link='none'} |
||
local typeName = typeMap[data.type] |
local typeName = typeMap[data.type] |
||
cats[#cats+1] = typeName .. ' mementos' |
cats[#cats+1] = typeName .. ' mementos' |
||
Line 179: | Line 188: | ||
local function printRow(t, label, content) |
local function printRow(t, label, content) |
||
if content == nil then return end |
if content == nil then return end |
||
+ | t:tag('dt') |
||
⚫ | |||
− | + | -- :cssText('grid-column-start:1;border-right:2px solid #999;margin:0 -2px 0 0;padding:2px 8px 2px 3px;text-align:right') |
|
+ | :wikitext(label) |
||
+ | t:tag('dd') |
||
⚫ | |||
+ | :wikitext(content) |
||
end |
end |
||
local root = mw.html.create() |
local root = mw.html.create() |
||
− | local infobox = root:tag('div'):addClass('infobox |
+ | local infobox = root:tag('div'):addClass('infobox memento') |
− | infobox:tag('div'):addClass(' |
+ | infobox:tag('div'):addClass('icon infobox-icon'):wikitext('[[File:'..icon..'|64px]]') |
− | infobox:tag('div'): |
+ | infobox:tag('div'):addClass('name'):wikitext(name) |
local wrapper = infobox:tag('div'):addClass('wrapper') |
local wrapper = infobox:tag('div'):addClass('wrapper') |
||
− | local dl = wrapper:tag('dl |
+ | local dl = wrapper:tag('dl') |
printRow(dl, 'Type', typeName) |
printRow(dl, 'Type', typeName) |
||
printRow(dl, 'Rank', rank .. '★') |
printRow(dl, 'Rank', rank .. '★') |
||
printRow(dl, 'Max Level', maxLevel) |
printRow(dl, 'Max Level', maxLevel) |
||
− | printRow(dl, 'Enhancer |
+ | printRow(dl, 'Enhancer cost', enhancer_cost) |
printRow(dl, 'Enhancer EXP', enhancer_exp) |
printRow(dl, 'Enhancer EXP', enhancer_exp) |
||
− | printRow(dl, 'Enhancer |
+ | printRow(dl, 'Enhancer trust', enhancer_trust) |
− | printRow(dl, ' |
+ | printRow(dl, 'VCR', vcr) |
printRow(dl, 'Gives Unit', unit_reward) |
printRow(dl, 'Gives Unit', unit_reward) |
||
printRow(dl, 'Source', source) |
printRow(dl, 'Source', source) |
||
− | printRow(dl, 'Release |
+ | printRow(dl, 'Release date', releaseDates(extra)) |
− | printRow(dl, ' |
+ | printRow(dl, 'Global only', glOnly and 'Yes' or nil) |
+ | printRow(dl, 'External links', '[http://www.alchemistcodedb.com/card/'..iname:gsub('_','-'):lower()..' AlchemistCodeDB]') |
||
− | printRow(dl, 'Global Only', glOnly and 'Yes' or nil) |
||
+ | root |
||
− | root:tag('div'):addClass('responsive-img'):cssText('margin:auto;width:fit-content') |
||
+ | :tag('div') |
||
+ | :addClass('responsive-img') |
||
:wikitext(artwork) |
:wikitext(artwork) |
||
− | :tag('div' |
+ | :tag('div') |
+ | :addClass('flavor') |
||
+ | :wikitext(flavor) |
||
for i, cat in ipairs(cats) do |
for i, cat in ipairs(cats) do |
Revision as of 19:24, 24 January 2020
Documentation for this module may be created at Module:Page/Memento/doc
local render_item_icon = require('Module:Render/Item')._icon
local render_gear_icon = require('Module:Render/Gear')._icon
local render_memento_icon = require('Module:Render/Memento')._icon
local render_unit_icon = require('Module:Render/Unit')._icon
local model = require('Module:Data').model
local p = {}
local typeMap = {
['1'] = 'Equipment',
['2'] = 'Enhance EXP',
['3'] = 'Enhance Trust',
}
local maxLevels = {1, 25, 30, 35, 40}
local function getVCR(data)
local t = {}
local f = function(s, render_icon)
local counts = data['trust_'..s..'_counts']
for i, v in ipairs(data['trust_'..s..'_names']) do
-- table.insert(sb2, i)
-- table.insert(sb2, (counts[i] > 1) and counts[i] or nil)
table.insert(t, render_icon({v, name = 'none', count = counts[i] > 1 and counts[i] or nil}))
end
end
f('item', render_item_icon)
f('artifact', render_gear_icon)
return #t > 0 and table.concat(t) or nil
end
local function getUnitReward(data)
local iname = data.first_get_unit or ''
if iname == '' then return nil end
return render_unit_icon{iname, size='small'}
end
local renderPage = function(iname)
local rows = model.query('ConceptCard','_pageName,server,rare,icon,en_cost,en_exp,en_trust,first_get_unit,trust_item_names,trust_item_counts,trust_artifact_names,trust_artifact_counts,type',{where='iname="'..iname..'"'})
if #rows == 0 then
return '`'..iname..'` not found in ConceptCard table.'
end
local data = rows[1]
local getLoc = function(param) return model.getLoc(data._pageName, param) end
local sb = {}
local cats = {
'Memento'
}
-- Info Box
table.insert(sb, '{| class="wikitable unit ibox" style="float:right; margin-left: 15px;margin-bottom:0; width: 482px"\n| style="padding:0;width:128px;white-space: nowrap" | ')
local name = getLoc('name')
table.insert(sb, render_memento_icon({iname, data=data, size='large', name='none', link='none'}))
table.insert(sb, '\n! colspan="2" style="padding:12px;font-size:140%;" | ')
table.insert(sb, name)
table.insert(sb, '<span style="font-size:65%"><br/>\n')
table.insert(sb, data.rare + 1)
table.insert(sb, '★ Memento<br/>\n')
table.insert(sb, '[http://www.alchemistcodedb.com/card/' .. string.lower(string.gsub(iname, '_', '-')) .. ' See on Alchemist Code Database]\n')
if data.type then
table.insert(sb, '|-\n!colspan="2"|Type\n|')
local typeMap = {
['1'] = 'Equipment',
['2'] = 'Enhance EXP',
['3'] = 'Enhance Trust',
}
table.insert(sb, typeMap[data.type])
table.insert(sb, '\n')
cats[#cats+1] = typeMap[data.type] .. ' memento'
end
table.insert(sb, '|-\n!colspan="2"|Max Level\n|')
local maxLevels = {1, 25, 30, 35, 40}
table.insert(sb, maxLevels[data.rare + 1])
table.insert(sb, '\n')
-- The amount of zeni required to upgrade another memento with this memento
table.insert(sb, '|-\n!colspan="2"|Enhancer Cost (Zeni)\n|')
table.insert(sb, data.en_cost)
table.insert(sb, '\n')
-- Enhancer EXP is the amount of EXP this memento gives
table.insert(sb, '|-\n!colspan="2"|Enhancer EXP\n|')
table.insert(sb, data.en_exp)
table.insert(sb, '\n')
if data.en_trust then
table.insert(sb, '|-\n!colspan="2"|Enhancer Trust\n|')
table.insert(sb, data.en_trust)
table.insert(sb, '\n')
end
-- Vision Clear Reward
local vcr = getVCR(data)
if vcr then
table.insert(sb, '|-\n!colspan="2"|Vision Clear Reward\n|')
table.insert(sb, vcr)
table.insert(sb, '\n')
end
-- Unit reward
local unit_reward = getUnitReward(data)
if unit_reward then
table.insert(sb, '|-\n!colspan="2"|Gives Unit\n|')
table.insert(sb, unit_reward)
table.insert(sb, '\n')
end
-- Memento extra data
local mementoExtra = mw.loadData("Module:Data/Extra/Memento")
table.insert(sb, '|-\n!colspan="2"|Source\n|')
if mementoExtra[iname] and mementoExtra[iname]['source'] then
table.insert(sb, mementoExtra[iname]['source'])
else
table.insert(sb, 'Unreleased')
end
table.insert(sb, '\n')
if mementoExtra[iname] then
if mementoExtra[iname]['glDate'] then
table.insert(sb, '|-\n!colspan="2"|Release Date\n| '..mementoExtra[iname]['glDate'].."\n")
end
if mementoExtra[iname]['jpDate'] then
table.insert(sb, '|-\n!colspan="2"|JP Release Date\n| '..mementoExtra[iname]['jpDate'].."\n")
end
if mementoExtra[iname]['glOnly'] then
table.insert(sb, '|-\n!colspan="2"|Global Only\n| Yes\n')
end
end
-- Body
-- Card Image + Flavor
table.insert(sb, '|}\n<div class="responsive-img" style="margin:auto;width:fit-content">[[File:Game,ConceptCard,')
table.insert(sb, data.icon)
table.insert(sb, '.png]]<div style="max-width:1024px;padding:8px;">')
table.insert(sb, getLoc('flavor'))
table.insert(sb, '</div></div>')
-- Category
for i, cat in ipairs(cats) do
table.insert(sb, '\n[[Category:'.. cat ..']]')
end
-- TODO Implement http://cdn.alchemistcodedb.com/assets/big-card-frames-b34ac394d6035fb657d491b956e2c4764836b51b9361fccc4b31e722a27df510.png
return table.concat(sb)
end
local function renderPage2(iname)
local rows = model.query('ConceptCard','_pageName,server,iname,rare,icon,en_cost,en_exp,en_trust,first_get_unit,trust_item_names,trust_item_counts,trust_artifact_names,trust_artifact_counts,type',{where='iname="'..iname..'"'})
if #rows == 0 then
return '`'..iname..'` not found in ConceptCard table.'
end
local data = rows[1]
local getLoc = function(param) return model.getLoc(data._pageName, param) end
local function releaseDates(data)
local jp = data.jpDate or ''
local gl = data.glDate or ''
if jp == '' and gl == '' then return end
local root = mw.html.create('ul')
if jp ~= '' then root:tag('li'):wikitext('JP: ' .. jp) end
if gl ~= '' then root:tag('li'):wikitext('GL: ' .. gl) end
return tostring(root)
end
local cats = {'Memento'}
local name = getLoc('name')
local icon = 'Game,ConceptCardIcon,'..data.icon..'.png'
local typeName = typeMap[data.type]
cats[#cats+1] = typeName .. ' mementos'
local rank = data.rare + 1
local maxLevel = maxLevels[rank]
local enhancer_cost = data.en_cost
local enhancer_exp = data.en_exp
local enhancer_trust = data.en_trust
local vcr = getVCR(data)
local unit_reward = getUnitReward(data)
local extra = mw.loadData("Module:Data/Extra/Memento")[iname] or {}
local source = extra.source or 'Unreleased'
local glDate = extra.glDate
local jpDate = extra.jpDate
local glOnly = extra.glOnly
local artwork = '[[File:Game,ConceptCard,'..data.icon..'.png]]'
local flavor = getLoc('flavor')
-- Render
local function printRow(t, label, content)
if content == nil then return end
t:tag('dt')
-- :cssText('grid-column-start:1;border-right:2px solid #999;margin:0 -2px 0 0;padding:2px 8px 2px 3px;text-align:right')
:wikitext(label)
t:tag('dd')
-- :cssText('grid-column-start:2;border-left:2px solid #999;margin:0;padding:2px 7px;text-align:left')
:wikitext(content)
end
local root = mw.html.create()
local infobox = root:tag('div'):addClass('infobox memento')
infobox:tag('div'):addClass('icon infobox-icon'):wikitext('[[File:'..icon..'|64px]]')
infobox:tag('div'):addClass('name'):wikitext(name)
local wrapper = infobox:tag('div'):addClass('wrapper')
local dl = wrapper:tag('dl')
printRow(dl, 'Type', typeName)
printRow(dl, 'Rank', rank .. '★')
printRow(dl, 'Max Level', maxLevel)
printRow(dl, 'Enhancer cost', enhancer_cost)
printRow(dl, 'Enhancer EXP', enhancer_exp)
printRow(dl, 'Enhancer trust', enhancer_trust)
printRow(dl, 'VCR', vcr)
printRow(dl, 'Gives Unit', unit_reward)
printRow(dl, 'Source', source)
printRow(dl, 'Release date', releaseDates(extra))
printRow(dl, 'Global only', glOnly and 'Yes' or nil)
printRow(dl, 'External links', '[http://www.alchemistcodedb.com/card/'..iname:gsub('_','-'):lower()..' AlchemistCodeDB]')
root
:tag('div')
:addClass('responsive-img')
:wikitext(artwork)
:tag('div')
:addClass('flavor')
:wikitext(flavor)
for i, cat in ipairs(cats) do
root:wikitext('[[Category:'..cat..']]')
end
return tostring(root)
end
local renderFuncs = {}
renderFuncs.Icon = render_memento_icon
local renderTransclude = function(iname, args)
local type = mw.text.trim(args[1])
args[1] = iname
return (renderFuncs[type] or renderFuncs.Name)(args)
end
function p._main(iname, args)
if not args or args.isPage then
return renderPage(iname)
else
return renderTransclude(iname, args)
end
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {parentFirst = true})
return renderPage(args[1])
end
function p.test(frame)
local args = require('Module:Arguments').getArgs(frame, {parentFirst = true})
return renderPage2(args[1])
end
return p