The Alchemist Code Wiki

READ MORE

The Alchemist Code Wiki
Register
Advertisement

Documentation for this module may be created at Module:Render/Item/doc

local render_icon = require('Module:Render').icon
local util_cargo = require('Module:CargoUtil')
local wikiSafeName = require('Module:LinkUtils').wikiSafeName

local p = {}
local h = {}

function p.icon(frame)
  local args = require('Module:Arguments').getArgs(frame, {
    parentFirst = true,
    wrappers = {
      'Template:Item/Icon',
    }
  })
  return p._icon(args)
end

function p._icon(args)
	local iname = args[1]
	if iname == nil then return nil end
	local page = util_cargo.queryAndCast{
		tables = 'Pages',
		fields = 'iname,_pageName',
		where = {
			'type = "Item"',
			'_pageName = "'..iname..'" OR iname = "'..iname..'"',
		},
		limit = 1,
	}[1]
	if page then iname = page.iname end

	local data = args.data or util_cargo.queryAndCast{tables='Item',fields='_pageName,server,rare,type,icon',where='iname="'..iname..'"'}[1] or {rini=0}
	-- TODO Get the correct server
	local name = h.getName(data._pageName)
	local renderArgs = {
		(data.icon == nil or data.icon == '') and 'ItemIcon,IT_UNKNOWN' or string.sub(data.icon,1,3) == 'AF_' and ('ArtiIcon,'..data.icon) or ('ItemIcon,'..data.icon),
		name,
		data._pageName ~= nil and (args['link'] ~= 'none' and (page or {_pageName = name})._pageName) or nil,
		data.rare,
		(data.type == 1 or data.type == 11) and 1 or data.type == 14 and 3 or 0,
		64,
		args['count'] ~= '' and args['count'] or nil,
		args['classes'],
		nil,
		false,
	}
	local name = args['name'] ~= 'none' and (renderArgs[3] and renderArgs[3] ~= '' and ('[['..wikiSafeName(renderArgs[3])..'|'..wikiSafeName(renderArgs[2])..']]') or renderArgs[2]) or nil
	
	if args['size'] == 'large' then
		renderArgs[6] = 128
	end
	
	if 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>'
	elseif args['size'] == 'noname' then
		renderArgs[9] = nil
	else
		renderArgs[9] = name and '<div style="width: '..renderArgs[6]..'px; line-height:normal; font-size:95%; margin-top:5px">'..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

	-- TODO Get the correct server
	local renderArgs = {
		(data.icon or '') == '' and 'ItemIcon,IT_UNKNOWN' or string.sub(data.icon,1,3) == 'AF_' and ('ArtiIcon,'..data.icon) or ('ItemIcon,'..data.icon),
		data.name,
		args.link ~= 'none' and (data._pageName or data.name) or nil,
		data.rare,
		(data.type == 1 or data.type == 11) and 1 or data.type == 14 and 3 or 0,
		64,
		tonumber(args.count),
		args.classes,
		nil,
		false,
	}
	local name = args.name ~= 'none' and (renderArgs[3] and renderArgs[3] ~= '' and ('[['..wikiSafeName(renderArgs[3])..'|'..wikiSafeName(renderArgs[2])..']]') or renderArgs[2]) or nil
	
	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>'
	elseif args['size'] == 'noname' then
		renderArgs[9] = nil
	else
		renderArgs[9] = name and '<div style="width: '..renderArgs[6]..'px">'..name..'</div>'
	end
	
	return render_icon(unpack(renderArgs))
end

function h.getName(_pageName, lang)
    if _pageName == nil then return '???' end
    local rows = util_cargo.queryAndCast{
    	tables = 'ItemLoc',
    	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
Advertisement