Module:Render/Gear

From The Alchemist Code Wiki
Jump to: navigation, search

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

local cargo = require('Module:CargoUtil')
local render_icon = require('Module:Render').icon
local model  = require('Module:Data').model

local p = {}

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 = cargo.query{
		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 cargo.query{
    tables = 'Artifact',
    fields = 'iname, _pageName, server, rini, icon',
    where = {'iname="'..iname..'" OR _pageName="'..iname..'"'},
  }[1] or {rare=0,type=0}
  -- 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',
    model.getLoc(data._pageName, 'name'),
    data._pageName ~= nil and (args['link'] ~= 'none' and (page or {_pageName = model.getLoc(data._pageName, 'name')})._pageName) or nil,
    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

function p._pageName(args)
    local iname = args[1]
    local data = args.data or model.query('Artifact','_pageName,server',{where='iname="'..iname..'"'})[1] or {}

    local name = model.getLoc(data._pageName, 'name')
  
    local link = nil
    if data._pageName ~= nil then
      local linkUtils = require('Module:LinkUtils')
      link = (mw.ext.cargo.query('Pages','_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

return p