Module:Miscellaneous/sandbox: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
(Fix cut-and-paste error that messes up table headers)
(Added noemptyclassnames parameter)
Line 37: Line 37:
g_args.noid = g_args.noid or false
g_args.noid = g_args.noid or false
g_args.nocategory = g_args.nocategory or false
g_args.nocategory = g_args.nocategory or false
g_args.noemptyclassnames = g_args.noemptyclassnames or false
local skip = {['SmallRelic'] = true, ['MediumRelic'] = true, ['LargeRelic'] = true}
local skip = {['SmallRelic'] = true, ['MediumRelic'] = true, ['LargeRelic'] = true}
local out = {}
local out = {}
 
for id, data in pairs(m_game.constants.item.classes) do
for id, data in pairs(m_game.constants.item.classes) do
local rowhtml = ''
if skip[id] == nil then
if skip[id] == nil then
local datafull = "''none''"
local datafullpresent = (data['full'] ~= nil) and (data['full'] ~= '')
if (data['full'] ~= nil) and (data['full'] ~= '') then
if datafullpresent or (not g_args.noemptyclassnames) then
datafull = string.format('[[%s]]', data['full'])
local datafull = "''none''"
end
if (data['full'] ~= nil) and (data['full'] ~= '') then
local datacategory = "''none''"
datafull = string.format('[[%s]]', data['full'])
if (data['category'] ~= nil) and (data['category'] ~= '') then
end
datacategory = data['category']
local datacategory = "''none''"
end
if (data['category'] ~= nil) and (data['category'] ~= '') then
local tdfull = mw.html.create('td')
datacategory = data['category']
        :wikitext(datafull)
end
local tdid
local tdfull = mw.html.create('td')
if not g_args.noid then
        :wikitext(datafull)
tdid = mw.html.create('td')
local tdid
:wikitext(id)
if not g_args.noid then
end
tdid = mw.html.create('td')
local tdcategory
:wikitext(id)
if not g_args.nocategory then
end
tdcategory = mw.html.create('td')
local tdcategory
:wikitext(datacategory)
if not g_args.nocategory then
tdcategory = mw.html.create('td')
:wikitext(datacategory)
end
local tr = mw.html.create('tr')
:node(tdfull)
:node(tdid)
:node(tdcategory)
rowhtml = tostring(tr)
end
end
local tr = mw.html.create('tr')
:node(tdfull)
:node(tdid)
:node(tdcategory)
out[data['id']] = tostring(tr)
else
out[data['id']] = ''
end
end
out[data['id']] = rowhtml
end
end

Revision as of 01:42, 19 December 2021

This is the module sandbox page for Module:Miscellaneous (diff).

Module documentation[view] [edit] [history] [purge]


Lua logo

This module depends on the following other modules:

Overview

Module for implementing various templates in lua that are not big/complex enough to warrent their own module.

List of currently implemented templates


--[[
Module for implementing miscellaneous templates in lua.  
Mostly exists here so we don't have hundred of module pages for templates that don't have a lot of code.
 
If a template requires a *lot* of coding consider moving it into it's own lua module.
]]--

local xtable = require('Module:Table')
local util = require('Module:Util')
local getArgs = require('Module:Arguments').getArgs
local mbox = require('Module:Message box').main

local m_game = mw.loadData('Module:Game')

local h = {}
local p = {}
local g_frame, g_args

local i18n = {
	tooltips = {
		item_class = 'Item class',
		item_class_id = 'Internal ID',
		item_class_category = 'Category',
	},
}

--
-- Template: Item class list
--

function p.item_class_list(frame)
	g_args = getArgs(frame, {
		parentFirst = true
	})
	g_frame = util.misc.get_frame(frame)
	
	g_args.noid = g_args.noid or false
	g_args.nocategory = g_args.nocategory or false
	g_args.noemptyclassnames = g_args.noemptyclassnames or false
	
	local skip = {['SmallRelic'] = true, ['MediumRelic'] = true, ['LargeRelic'] = true}
	local out = {}

	for id, data in pairs(m_game.constants.item.classes) do
		local rowhtml = ''
		if skip[id] == nil then
			local datafullpresent = (data['full'] ~= nil) and (data['full'] ~= '')
			if datafullpresent or (not g_args.noemptyclassnames) then
				local datafull = "''none''"
				if (data['full'] ~= nil) and (data['full'] ~= '') then
					datafull = string.format('[[%s]]', data['full'])
				end
				local datacategory = "''none''"
				if (data['category'] ~= nil) and (data['category'] ~= '') then
					datacategory = data['category']
				end
				local tdfull = mw.html.create('td')
		        	:wikitext(datafull)
				local tdid
				if not g_args.noid then
					tdid = mw.html.create('td')
						:wikitext(id)
				end
				local tdcategory
				if not g_args.nocategory then
					tdcategory = mw.html.create('td')
						:wikitext(datacategory)
				end
				local tr = mw.html.create('tr')
					:node(tdfull)
					:node(tdid)
					:node(tdcategory)
				rowhtml = tostring(tr)
			end
		end
		out[data['id']] = rowhtml
	end
	
	local thfull = mw.html.create('th')
		:wikitext(i18n.tooltips.item_class)
	local thid
	if not g_args.noid then
		thid = mw.html.create('th')
			:wikitext(i18n.tooltips.item_class_id)
	end
	local thcategory
	if not g_args.nocategory then
		thcategory = mw.html.create('th')
			:wikitext(i18n.tooltips.item_class_category)
	end
	local tbl = mw.html.create('table')
		:attr('class', 'wikitable sortable')
		:tag('tr')
			:node(thfull)
			:node(thid)
			:node(thcategory)
			:done()
		:wikitext(table.concat(out))
	
	return tostring(tbl)
end

function p.item_class_category_list(frame)
	--[[
		Displays a list of categories for all item classes.
	]]

	local tpl_args = getArgs(frame, {parentFirst = true})
	local frame = util.misc.get_frame(frame)
	
	tpl_args.format = tpl_args.format or 'default'
	
	local fmt
	if tpl_args.format == 'default' then
		fmt = '<li>%s</li>'
	else
		error(string.format('Unrecognized format: %s', tpl_args.format))
	end
	
	out = {'<ul>'}
	save_tbl = {}
	for _, data in pairs(m_game.constants.item.classes) do
		if not save_tbl[data.category] and data.category ~= '' then
			save_tbl[data.category] = true
			
			out[#out+1] = string.format(fmt, data.category)
		end
	end
	out[#out+1] = '</ul>'
	
	return table.concat(out)
end

--
-- Template: ItemFilterList
--
function p.filter_list(frame)
	g_args = getArgs(frame, {
		parentFirst = true
	})
	g_frame = util.misc.get_frame(frame)
	
	g_args.type = g_args.type or ''
	
	local tbl = mw.html.create('table')
	tbl
		:attr('class', 'wikitable sortable')
	local tblrow = tbl:tag('tr')
			:tag('th')
				:attr('rowspan', 2)
				:wikitext('Name')
				:done()
			:tag('th')
				:attr('rowspan', 2)
				:wikitext('Author')
				:done()
			:tag('th')
				:attr('rowspan', 2)
				:wikitext('Release')
				:done()
			:tag('th')
				:attr('colspan', 9)
				:wikitext('Ingame Features')
				:done()
			:tag('th')
				:attr('colspan', 1)
				:wikitext('Other Features')
				:done()
			:tag('th')
				:attr('colspan', 2)
				:wikitext('Filtration Support')
				:done()
	if g_args.type == 'specialized' then
			tblrow:tag('th')
				:attr('rowspan', 2)
				:wikitext('Description')
				:done()
	end
			
	tblrow = tbl:tag('tr')
			:tag('th')
				:wikitext('Colours')
				:done()
			:tag('th')
				:wikitext('Borders')
				:done()
			:tag('th')
				:wikitext('Font<br>Size')
				:done()
			 :tag('th')
				:wikitext('Background')
				:done()
			:tag('th')
				:wikitext('Item<br>Hiding')
				:done()
			:tag('th')
				:wikitext('Leveling')
				:done()
			:tag('th')
				:wikitext('Endgame')
				:done()
			:tag('th')
				:wikitext('Vendor<br>recipes')
				:done()
			:tag('th')
				:wikitext('Crafting')
				:done()
			-- Other Features
			:tag('th')
				:wikitext('Customizable')
				:done()
			-- Filtration
			:tag('th')
				:wikitext('General')
				:done()
			:tag('th')
				:wikitext('Themes')
				:done()
		:done()
		:wikitext(g_args.rows)
	
	--return tostring(tbl) .. frame:extensionTag{ name = 'references', content = '', args = {group='note'}}
	return tostring(tbl)
end

--
-- Template: ItemFilterListRow
--

local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_values = xtable:new({'no', 'minor', 'partial', 'major', 'yes'})

local filter_list_yes_no_args = xtable:new({'customization', 'filtration_general', 'filtration_themes'})
local filter_list_yes_no = xtable:new({'no', 'partial', 'yes', 'unknown'})

function h.filter_list_get_arg(arg)
	--[[
	Return a formatted table cell for the given argument
	]]--
	local val = g_args[arg]
	if type(val) == 'number' then
		val = filter_list_range_values[val]
	end
	if g_args[arg .. '_note'] ~= nil then
		local abbr = mw.html.create('abbr')
		abbr
			:attr('title', g_args[arg .. '_note'])
			:css('color', 'black')
			:wikitext(val)
			:done()
		return tostring(abbr)
	else
		return val
	end
end

-- Test: =p.filter_list{rows=p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015'}}
-- =p.filter_list{type='specialized',rows=p.filter_list_row{type='specialized', name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes',colour_note="test", border='yes', font_size='no', background='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015', description='test'}}
function p.filter_list_row(frame)
	g_args = getArgs(frame, {
		parentFirst = true
	})
	g_frame = util.misc.get_frame(frame)
	
	-- Checking args
	
	for _, arg in ipairs(filter_list_required_args) do
		if g_args[arg] == nil then
			error('Required argument ' .. arg .. ' is missing')
		end
	end
	
	g_args.filtration_general = g_args.filtration_general or 'unknown'
	g_args.filtration_themes = g_args.filtration_themes or 'unknown'
	g_args.customization = g_args.customization or 'unknown'
	g_args.descriptipon = g_args.description or '<br>'
	g_args.type = g_args.type or ''
	
	-- Checking & formatting args
	
	for _, arg in ipairs(filter_list_range_args) do
		local val = g_args[arg]
		local index = filter_list_range_values:index(val)
		if index then
			g_args[arg] = index
		else
			index = util.cast.number(val)
			if index ~= nil and index >= 0 and index < filter_list_range_values:size() then
				-- Lua starts counting at 1
				g_args[arg] = index+1
			else
				error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_range_values, ' '))
			end
		end
	end
	
	for _, arg in ipairs(filter_list_yes_no_args) do
		local val = g_args[arg]
		if not filter_list_yes_no:contains(val) then
			error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_yes_no, ' '))
		end
	end
	
	-- Output
	
	local tblrow = mw.html.create('tr')
	tblrow
		:tag('td')
			:wikitext('[' .. g_args.release_link .. ' ' .. g_args.name .. ']')
			:done()
		:tag('td')
			:wikitext(g_args.author)
			:done()
		:tag('td')
			:wikitext(g_args.release)
			:done()
			
	-- Basic Features
	for _, arg in ipairs(filter_list_range_args) do
		local index = g_args[arg]
		local text = filter_list_range_values[index] or ''
		local note = g_args[arg .. '_note']
		tblrow
			:tag('td')
				:attr('class', 'table-cell-coloured table-cell-' .. text )
				:attr('data-sort-value', index)
				:wikitext(h.filter_list_get_arg(arg))
				:done()
	end
	
	-- Other Features
	for _, arg in ipairs(filter_list_yes_no_args) do
		local val = g_args[arg]
		tblrow
			:tag('td')
				:attr('class', 'table-cell-coloured table-cell-' .. val)
				:attr('data-sort-value', '' .. filter_list_yes_no:index(val))
				:wikitext(h.filter_list_get_arg(arg))
				:done()
	end
	
	if g_args.type == 'specialized' then
		tblrow
			:tag('td')
				:wikitext(h.filter_list_get_arg('description'))
				:done()
	end

	return tostring(tblrow)
end

-- ----------------------------------------------------------------------------

return p