The Alchemist Code Wiki

READ MORE

The Alchemist Code Wiki
Advertisement

Documentation for this module may be created at Module:Render/Gear/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:Gear/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 = "Gear"',
			'_pageName = "'..iname..'" OR iname = "'..iname..'"',
		},
		limit = 1,
	}[1]
	if page then iname = page.iname end
  local data = args.data or util_cargo.queryAndCast{
    tables = 'Artifact',
    fields = 'iname, _pageName, server, rini, icon',
    where = {'iname="'..iname..'" OR _pageName="'..iname..'"'},
  }[1] or {rare=0,type=0}
  
  local itemName = h.getName(data._pageName)
  
  local link = nil
  if args['link'] ~= 'none' then
    if args['jplink'] and args['jplink'] == true then
        link = linkUtils.acdbLink(iname, true)
    elseif data._pageName ~= nil then
        link = (page and page._pageName) or itemName or nil
    end
  end
  
  -- TODO Get the correct server
  local renderArgs = {
    data.icon and string.sub(data.icon,1,3) == 'AF_' and ('ArtiIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN',
    itemName,
    link,
    tonumber(data.rini),
    2,
    64,
    args['count'] ~= '' and args['count'] or nil,
    args['classes'],
    nil,
    false,
  }
  
  local name = args['name'] ~= 'none' and (renderArgs[3] and renderArgs[3] ~= '' and ('[['..renderArgs[3]..'|'..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>'
  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
  
	local link = nil
	if args.link ~= 'none' then
		if args.jplink and args.jplink == true then
			link = linkUtils.acdbLink(iname, true)
		elseif data._pageName ~= nil then
			link = data._pageName or data.name or nil
		end
	end
	-- TODO Get the correct server
	local renderArgs = {
		data.icon and string.sub(data.icon,1,3) == 'AF_' and ('ArtiIcon,'..data.icon) or 'ItemIcon,IT_UNKNOWN',
		data.name,
		link,
		tonumber(data.rini),
		2,
		64,
		tonumber(args.count),
		args.classes,
		nil,
		false,
	}
	local name = args.name ~= 'none' and (renderArgs[3] and renderArgs[3] ~= '' and ('[['..renderArgs[3]..'|'..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>'
	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 = 'Artifact',
    	fields = '_pageName,server',
    	where = 'iname="'..iname..'"'
    }[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="Gear" 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 = 'ArtifactLoc',
		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