No edit summary |
BryghtShadow (talk | contribs) (display invalid icon?) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
local render_icon = require('Module:Render').icon |
local render_icon = require('Module:Render').icon |
||
− | local |
+ | local util_cargo = require('Module:CargoUtil') |
⚫ | |||
local p = {} |
local p = {} |
||
+ | local h = {} |
||
function p.icon(frame) |
function p.icon(frame) |
||
Line 15: | Line 17: | ||
function p._icon(args) |
function p._icon(args) |
||
− | local iname = args[1] |
+ | local iname = args[1] or '' |
+ | local data = args.data |
||
⚫ | |||
+ | if not data then |
||
− | local page = require('Module:CargoUtil').query{ |
||
⚫ | |||
⚫ | |||
+ | local server = args.server or 'gl' |
||
⚫ | |||
+ | local lang = args.lang or 'english' |
||
⚫ | |||
+ | local rows = util_cargo.queryAndCast{ |
||
− | 'type = "Memento"', |
||
+ | tables = {'ConceptCard=CC', 'ConceptCardLoc=CCLoc', 'Pages'}, |
||
− | '_pageName = "'..iname..'" OR iname = "'..iname..'"', |
||
+ | join = { |
||
⚫ | |||
− | + | 'CC.iname = CCLoc.iname', |
|
+ | 'CC.iname = Pages.iname', |
||
− | }[1] |
||
⚫ | |||
⚫ | |||
+ | fields = { |
||
− | local data = args.data or model.query('ConceptCard','_pageName,server,rare,icon',{where='iname="'..iname..'"'})[1] or {rare=0} |
||
+ | 'Pages._pageName = _pageName', |
||
+ | 'CC.iname = iname', |
||
+ | 'CC.server = server', |
||
+ | 'CC.rare = rare', |
||
+ | 'CC.icon = icon', |
||
+ | 'CCLoc.name = name', |
||
+ | }, |
||
⚫ | |||
+ | ('"%s" IN (CC.iname, Pages._pageName)'):format(iname), |
||
+ | ('CC.server = "%s"'):format(server), |
||
+ | ('CCLoc.lang = "%s"'):format(lang), |
||
+ | 'Pages._pageName IS NULL OR Pages.type = "Memento"', |
||
+ | }, |
||
+ | } |
||
+ | data = rows[1] or {} |
||
+ | end |
||
+ | iname = data.iname |
||
⚫ | |||
+ | data.name = '???' |
||
+ | end |
||
+ | |||
+ | local link = nil |
||
+ | if args.link ~= 'none' then |
||
+ | if args.jplink then |
||
+ | link = linkUtils.acdbLink(iname, true) |
||
+ | else |
||
+ | link = data._pageName or data.name |
||
+ | end |
||
+ | end |
||
+ | |||
-- TODO Get the correct server |
-- TODO Get the correct server |
||
local renderArgs = { |
local renderArgs = { |
||
− | (data.icon |
+ | (data.icon or '') ~= '' and ('ConceptCardIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN', |
− | + | data.name or '???', |
|
+ | link, |
||
⚫ | |||
− | data.rare, |
+ | tonumber(data.rare), |
4, |
4, |
||
64, |
64, |
||
− | args |
+ | (args.count or '') ~= '' and args.count or nil, |
− | args |
+ | args.classes, |
nil, |
nil, |
||
false, |
false, |
||
} |
} |
||
+ | local name |
||
− | local name = args['name'] ~= 'none' and (renderArgs[3] and renderArgs[3] ~= '' and ('[['..renderArgs[3]..'|'..renderArgs[2]..']]') or renderArgs[2]) or nil |
||
+ | if args.name ~= 'none' then |
||
⚫ | |||
− | + | if (renderArgs[3] or '') ~= '' then |
|
+ | if args.jplink then |
||
+ | name = ('[%s %s]'):format(renderArgs[3], renderArgs[2]) |
||
+ | else |
||
+ | name = ('[[%s|%s]]'):format(renderArgs[3], renderArgs[2]) |
||
+ | end |
||
+ | else |
||
+ | name = renderArgs[2] |
||
+ | end |
||
+ | end |
||
+ | |||
+ | if args.size == 'large' then |
||
renderArgs[6] = 128 |
renderArgs[6] = 128 |
||
+ | elseif args.size == 'small' then |
||
+ | renderArgs[6] = 24 |
||
+ | renderArgs[9] = name and '<span>'..name..'</span>' |
||
+ | renderArgs[10] = true |
||
+ | elseif args['size'] == 'compact' then |
||
+ | renderArgs[9] = name and '<div class="item-count" style="font-size: 0.7em;overflow: hidden;right: 0">'..renderArgs[2]..'</div>' |
||
+ | else |
||
+ | renderArgs[9] = name and '<div style="width: '..renderArgs[6]..'px">'..name..'</div>' |
||
end |
end |
||
+ | return render_icon(unpack(renderArgs)) |
||
⚫ | |||
+ | end |
||
+ | |||
+ | -- Non cargo version |
||
+ | function p._icon2(args) |
||
+ | local data = args.data or {} |
||
⚫ | |||
+ | if not iname then return end |
||
+ | |||
+ | data.name = linkUtils.wikiSafeName(data.name) |
||
+ | |||
+ | local link = nil |
||
+ | if args.link ~= 'none' then |
||
+ | if args.jplink then |
||
+ | link = linkUtils.acdbLink(iname, true) |
||
+ | else |
||
+ | link = data._pageName or data.name |
||
+ | end |
||
+ | end |
||
+ | |||
+ | -- TODO Get the correct server |
||
+ | local renderArgs = { |
||
+ | (data.icon or '') ~= '' and ('ConceptCardIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN', |
||
+ | data.name, |
||
+ | link, |
||
+ | tonumber(data.rare), |
||
+ | 4, |
||
+ | 64, |
||
+ | tonumber(args.count), |
||
+ | args.classes, |
||
+ | nil, |
||
+ | false, |
||
+ | } |
||
⚫ | |||
+ | local name |
||
+ | if args.name ~= 'none' then |
||
+ | if (renderArgs[3] or '') ~= '' then |
||
+ | if args.jplink then |
||
+ | name = ('[%s %s]'):format(renderArgs[3], renderArgs[2]) |
||
+ | else |
||
+ | name = ('[[%s|%s]]'):format(renderArgs[3], renderArgs[2]) |
||
+ | end |
||
+ | else |
||
+ | name = renderArgs[2] |
||
+ | end |
||
+ | end |
||
+ | |||
+ | if args.size == 'large' then |
||
+ | renderArgs[6] = 128 |
||
+ | elseif args.size == 'small' then |
||
renderArgs[6] = 24 |
renderArgs[6] = 24 |
||
renderArgs[9] = name and '<span>'..name..'</span>' |
renderArgs[9] = name and '<span>'..name..'</span>' |
||
Line 63: | Line 163: | ||
function p._pageName(args) |
function p._pageName(args) |
||
local iname = args[1] |
local iname = args[1] |
||
− | local data = args.data or |
+ | local data = args.data or util_cargo.queryAndCast{tables='ConceptCard',fields='_pageName,server',where='iname="'..iname..'"',limit=1}[1] or {} |
− | local name = |
+ | local name = h.getName(data._pageName) |
local link = nil |
local link = nil |
||
if data._pageName ~= nil then |
if data._pageName ~= nil then |
||
⚫ | |||
⚫ | |||
− | link = (mw.ext.cargo.query('Pages','_pageName',{where='type="Memento" and iname="'..iname..'"'})[1] or {linkUtils.wikiSafeName(name)})._pageName or nil |
||
end |
end |
||
Line 76: | Line 175: | ||
return displayName |
return displayName |
||
+ | end |
||
+ | |||
+ | function h.getName(_pageName, lang) |
||
+ | if _pageName == nil then return '???' end |
||
+ | local rows = util_cargo.queryAndCast{ |
||
⚫ | |||
⚫ | |||
+ | where = ('_pageName=%q AND name<>""'):format(_pageName) |
||
+ | } |
||
+ | local names = {} |
||
+ | for i, row in ipairs(rows) do |
||
+ | names[row.lang] = row.name |
||
+ | end |
||
+ | return names[lang] or names.english or names.japanese or '' |
||
end |
end |
||
Latest revision as of 11:37, 24 May 2022
Documentation for this module may be created at Module:Render/Memento/doc
local render_icon = require('Module:Render').icon
local util_cargo = require('Module:CargoUtil')
local linkUtils = require('Module:LinkUtils')
local p = {}
local h = {}
function p.icon(frame)
local args = require('Module:Arguments').getArgs(frame, {
parentFirst = true,
wrappers = {
'Template:Memento/Icon',
},
})
return p._icon(args)
end
function p._icon(args)
local iname = args[1] or ''
local data = args.data
if not data then
if iname == '' then return end
local server = args.server or 'gl'
local lang = args.lang or 'english'
local rows = util_cargo.queryAndCast{
tables = {'ConceptCard=CC', 'ConceptCardLoc=CCLoc', 'Pages'},
join = {
'CC.iname = CCLoc.iname',
'CC.iname = Pages.iname',
},
fields = {
'Pages._pageName = _pageName',
'CC.iname = iname',
'CC.server = server',
'CC.rare = rare',
'CC.icon = icon',
'CCLoc.name = name',
},
where = {
('"%s" IN (CC.iname, Pages._pageName)'):format(iname),
('CC.server = "%s"'):format(server),
('CCLoc.lang = "%s"'):format(lang),
'Pages._pageName IS NULL OR Pages.type = "Memento"',
},
}
data = rows[1] or {}
end
iname = data.iname
if data.name == '' then
data.name = '???'
end
local link = nil
if args.link ~= 'none' then
if args.jplink then
link = linkUtils.acdbLink(iname, true)
else
link = data._pageName or data.name
end
end
-- TODO Get the correct server
local renderArgs = {
(data.icon or '') ~= '' and ('ConceptCardIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN',
data.name or '???',
link,
tonumber(data.rare),
4,
64,
(args.count or '') ~= '' and args.count or nil,
args.classes,
nil,
false,
}
local name
if args.name ~= 'none' then
if (renderArgs[3] or '') ~= '' then
if args.jplink then
name = ('[%s %s]'):format(renderArgs[3], renderArgs[2])
else
name = ('[[%s|%s]]'):format(renderArgs[3], renderArgs[2])
end
else
name = renderArgs[2]
end
end
if args.size == 'large' then
renderArgs[6] = 128
elseif args.size == 'small' then
renderArgs[6] = 24
renderArgs[9] = name and '<span>'..name..'</span>'
renderArgs[10] = true
elseif args['size'] == 'compact' then
renderArgs[9] = name and '<div class="item-count" style="font-size: 0.7em;overflow: hidden;right: 0">'..renderArgs[2]..'</div>'
else
renderArgs[9] = name and '<div style="width: '..renderArgs[6]..'px">'..name..'</div>'
end
return render_icon(unpack(renderArgs))
end
-- Non cargo version
function p._icon2(args)
local data = args.data or {}
local iname = data.iname
if not iname then return end
data.name = linkUtils.wikiSafeName(data.name)
local link = nil
if args.link ~= 'none' then
if args.jplink then
link = linkUtils.acdbLink(iname, true)
else
link = data._pageName or data.name
end
end
-- TODO Get the correct server
local renderArgs = {
(data.icon or '') ~= '' and ('ConceptCardIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN',
data.name,
link,
tonumber(data.rare),
4,
64,
tonumber(args.count),
args.classes,
nil,
false,
}
local name
if args.name ~= 'none' then
if (renderArgs[3] or '') ~= '' then
if args.jplink then
name = ('[%s %s]'):format(renderArgs[3], renderArgs[2])
else
name = ('[[%s|%s]]'):format(renderArgs[3], renderArgs[2])
end
else
name = renderArgs[2]
end
end
if args.size == 'large' then
renderArgs[6] = 128
elseif args.size == 'small' then
renderArgs[6] = 24
renderArgs[9] = name and '<span>'..name..'</span>'
renderArgs[10] = true
elseif args['size'] == 'compact' then
renderArgs[9] = name and '<div class="item-count" style="font-size: 0.7em;overflow: hidden;right: 0">'..renderArgs[2]..'</div>'
else
renderArgs[9] = name and '<div style="width: '..renderArgs[6]..'px">'..name..'</div>'
end
return render_icon(unpack(renderArgs))
end
function p._pageName(args)
local iname = args[1]
local data = args.data or util_cargo.queryAndCast{tables='ConceptCard',fields='_pageName,server',where='iname="'..iname..'"',limit=1}[1] or {}
local name = h.getName(data._pageName)
local link = nil
if data._pageName ~= nil then
link = (util_cargo.queryAndCast{tables='Pages',fields='_pageName',where='type="Memento" and iname="'..iname..'"'}[1] or {linkUtils.wikiSafeName(name)})._pageName or nil
end
local displayName = (name and name ~= '' and (link and '[['..link..'|'..name..']]') or name) or iname
return displayName
end
function h.getName(_pageName, lang)
if _pageName == nil then return '???' end
local rows = util_cargo.queryAndCast{
tables = 'ConceptCardLoc',
fields = 'name,lang',
where = ('_pageName=%q AND name<>""'):format(_pageName)
}
local names = {}
for i, row in ipairs(rows) do
names[row.lang] = row.name
end
return names[lang] or names.english or names.japanese or ''
end
return p