The Alchemist Code Wiki

READ MORE

The Alchemist Code Wiki
No edit summary
(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 model = require('Module:Data').model
+
local util_cargo = require('Module:CargoUtil')
 
local linkUtils = require('Module:LinkUtils')
   
 
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 iname == nil then return nil end
 
  +
if not data then
local page = require('Module:CargoUtil').query{
 
 
if iname == '' then return end
tables = 'Pages',
 
  +
local server = args.server or 'gl'
fields = 'iname',
 
  +
local lang = args.lang or 'english'
where = {
 
  +
local rows = util_cargo.queryAndCast{
'type = "Memento"',
 
  +
tables = {'ConceptCard=CC', 'ConceptCardLoc=CCLoc', 'Pages'},
'_pageName = "'..iname..'" OR iname = "'..iname..'"',
 
  +
join = {
},
 
limit = 1,
+
'CC.iname = CCLoc.iname',
  +
'CC.iname = Pages.iname',
}[1]
 
 
},
if page then iname = page.iname end
 
  +
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',
  +
},
 
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
 
-- TODO Get the correct server
 
local renderArgs = {
 
local renderArgs = {
(data.icon == nil or data.icon == '') and 'ItemIcon,IT_UNKNOWN' or ('ConceptCardIcon,'..data.icon),
+
(data.icon or '') ~= '' and ('ConceptCardIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN',
model.getLoc(data._pageName, 'name'),
+
data.name or '???',
  +
link,
data._pageName ~= nil and (args['link'] ~= 'none' and (mw.ext.cargo.query('Pages','_pageName',{where='type="Memento" and iname="'..iname..'"'})[1] or {_pageName = model.getLoc(data._pageName, 'name')})._pageName) or nil,
 
data.rare,
+
tonumber(data.rare),
 
4,
 
4,
 
64,
 
64,
args['count'] ~= '' and args['count'] or nil,
+
(args.count or '') ~= '' and args.count or nil,
args['classes'],
+
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 args['size'] == 'large' 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))
if args['size'] == 'small' then
 
  +
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[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 model.query('ConceptCard','_pageName,server',{where='iname="'..iname..'"'})[1] or {}
+
local data = args.data or util_cargo.queryAndCast{tables='ConceptCard',fields='_pageName,server',where='iname="'..iname..'"',limit=1}[1] or {}
   
local name = model.getLoc(data._pageName, 'name')
+
local name = h.getName(data._pageName)
 
 
 
local link = nil
 
local link = nil
 
if data._pageName ~= nil then
 
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
local linkUtils = require('Module:LinkUtils')
 
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{
 
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
 
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