Path of Exile Wiki

Please consider helping keep the wiki up to date. Check the to-do list of updates needed for version 3.14.0.

Game data exports will becoming later as the technical changes in addition to regular changes take some more time.

READ MORE

Path of Exile Wiki
Advertisement
Template info icon Module documentation[create]
--
-- Module for bestiary templates
--

--local m_cargo = require('Module:Cargo')
local m_util = require('Module:Util')
local getArgs = require('Module:Arguments').getArgs

local p = {}

-- ----------------------------------------------------------------------------
-- Strings
-- ----------------------------------------------------------------------------

local i18n = {
	errors = {
		invalid_icon_size = 'The specified icon size "%s" is invalid. Only large (64), medium (32) and small (16) are supported.',
		invalid_minimap_icon = 'The specified minimap icon id "%s" could not be found',
	},
}

-- ----------------------------------------------------------------------------
-- Helper functions and globals
-- ----------------------------------------------------------------------------

-- Number of columns in the sprite sheet
local columns = 14
local x = 896
local y = 2432

local h = {}

function h.position(index)
	-- Offset for lua indexes
	index = index - 1
	column = index % columns
	row = math.floor(index/columns)
	
	return row, column
end

h.args = {}
function h.args.size(tpl_args)
	local size
	if tpl_args.size == 'large' or tonumber(tpl_args.size) == 64 then
		size = 64
	elseif tpl_args.size == 'medium' or tonumber(tpl_args.size) == 32 then
		size = 32
	elseif tpl_args.size == 'small' or tonumber(tpl_args.size) == 16 or tpl_args.size == nil then
		size = 16
	else
		error(string.format(i18n.errors.invalid_icon_size, tpl_args.size))
	end
	
	tpl_args.size = size
end

-- ----------------------------------------------------------------------------
-- Cargo tables
-- ----------------------------------------------------------------------------
--[[local tables = {}

tables.table_name = {
	table = 'table_name',
	order = {'id'},
	fields = {
		id = {
			field = 'id',
			type = 'String',
			required = true,
		},
	},
}
]]
-- ----------------------------------------------------------------------------
-- Page functions
-- ----------------------------------------------------------------------------

local p = {}

function p.minimap_icon(frame)
	local args = getArgs(frame, {
		parentFirst = true
	})

	return p._minimap_icon(args)
end

-- param args
-- args.id string from minimap_icons_lookup
-- args.size 'small', 'medium', 'large', '16', '32', '64', 16, 32, 64, or nil
-- args.text string
function p._minimap_icon(args)	
	-- Validate & convert size to pixels
	h.args.size(args)
	
	local minimap = mw.loadData('Module:Minimap/minimap_icons_lookup')
	
	local index = minimap[args.id]
	if index == nil then
		error(string.format(i18n.errors.invalid_minimap_icon, tostring(args.id)))
	end
	
	local row, column = h.position(index)
	
	local span = mw.html.create('span')
	span
		:addClass('minimap_icon')
		:addClass('minimap_' .. args.size)
		:css('background-position-x', (-1 * column * args.size) .. 'px')
		:css('background-position-y', (-1 * row * args.size) .. 'px')
		
	if args.text then
		span
			:addClass('tooltip-activator')
			:tag('span')
				:addClass('tooltip-content')
				:wikitext(args.text)
	end
	
	return tostring(span)
end

function p.minimap_icon_list(frame)
	local args = getArgs(frame, {
		parentFirst = true
	})

	return p._minimap_icon_list(args)
end

function p._minimap_icon_list(args)
	local namedArgs = {}
	local rest = {}

	for key, val in pairs(args) do
		if type(key) ~= 'number' then -- rest
			namedArgs[key] = val
		else -- id, size, etc
			table.insert(rest, val)
		end
	end
	
	local minimap = mw.loadData('Module:Minimap/minimap_icons_lookup')
	local tbl = mw.html.create('table') -- the parent element

	tbl:cssText('margin: 0 auto; text-align: center;')

	local iconRow = tbl:tag('tr')
	local count = 0

	for i, val in pairs(rest) do
		if count > 1 then
			iconRow:tag('td'):wikitext("''' · '''")
		end

		iconRow:tag('td'):wikitext(p._minimap_icon({ id = val, size = namedArgs.size }))

		count = count + 1
	end

	return tostring(tbl)
end


-- complete chart of all the icons rather then just single icons to reference the IDs
function p.minimap_chart(frame)
	-- Get args
	local tpl_args = getArgs(frame, {
		parentFirst = true
	})
	frame = m_util.misc.get_frame(frame)
	
	-- Validate & convert size to pixels
	h.args.size(tpl_args, frame)
	
	local minimap = mw.loadData('Module:Minimap/minimap_icons')
	
	local ratio = 64/tpl_args.size
	
	local span = mw.html.create('span')
	span
		:addClass('minimap_icon')
		:addClass('minimap_grid')
		:css('width', x/ratio .. 'px')
		:css('height', y/ratio .. 'px')
		:css('background-size', string.format('%spx auto', x/ratio))
		
	for index, data in ipairs(minimap) do
		local row, column = h.position(index)
		span
			:tag('span')
				:addClass('tooltip-activator')
				:addClass('minimap_' .. tpl_args.size)
				-- CSS also starts counting at one it seems
				:css('grid-area', string.format('%s / %s', row+1, column+1, row+1, column+1))
				--:css('top', (tpl_args.size * row) .. 'px')
				--:css('left', (tpl_args.size * column) .. 'px')
				:tag('span')
					:addClass('tooltip-content')
					:wikitext(data.id)
	end
		
	return tostring(span)
end

-- ----------------------------------------------------------------------------
-- End
-- ----------------------------------------------------------------------------

return p
Advertisement