ARK: Survival Evolved Wiki
Register
Advertisement
Template-info Documentation

Lists items (as well as creatures) with their icon.

Append each item or creature name as a single parameter. A quantity of x, x..y, or x-y can be used as the next parameter.

Parameters

Parameter Default Description
iconsize 30px size of the items
columns 1
columnWidth set a desired width for columns. default is 15em
listtype set to 'ol' for a numbered list, 'none' for list without bullets
showQuantityOne false set to true to also show '1 ×' if a quantity of 1 is given
showQuantityAsPerCent false set to true to also show e.g. '50%' if a quantity of 0.5 is given
noDlcIcon set to 1 to hide the DLC-/mod-icons
mod if set, assumes that each item in the list is a part of the specified mod, automatically adding the namespace prefix at runtime

Usage / Examples

{{ItemList|Ankylosaurus|Thatch}}
{{ItemList|iconsize=50px|Argentavis|Quetzal|Pteranodon}}
{{ItemList|iconsize=20px|columns=2|Thatch|Wood|Raw Meat|Raw Prime Meat|Dodo|Mesopithecus|Wooden Door}}
{{ItemList|iconsize=20px|columnWidth=20em|Thatch|Wood|Raw Meat|Raw Prime Meat|Dodo|Mesopithecus|Wooden Door}}
{{ItemList|listtype=ol|Berries|Rockarrot|Longrass}}
  1. Berries Berries
  2. Rockarrot Rockarrot
  3. Longrass Longrass
{{ItemList|listtype=none|Berries|Sulfur (Scorched Earth)|Clay (Primitive Plus)}}
{{ItemList|listtype=none|noDlcIcon=1|Berries|Sulfur (Scorched Earth)|Clay (Primitive Plus)}}
{{ItemList|Ankylosaurus|1|Thatch|10..20}}
{{ItemList|showQuantityOne=true|Ankylosaurus|1|Thatch|10-20}}
{{ItemList|showQuantityAsPerCent=true|Cooking Pot|1|Refining Forge|0.5}}

Displaying a comma-delimited array from a data-module:

{{ItemList|columnWidth=20em|{{Dv|Pteranodon|canDragCreatures}}}}

local p = {}

local DLCLink = require('Module:DLCLink').link

function p.itemlist( f )
	local args = f:getParent().args

	local listType = 'ul'
	local extraStyle = ''
	local delimiter = args.delimiter or ','
	local noDlcIcon = args.noDlcIcon or false
	if noDlcIcon and ( noDlcIcon == '' or noDlcIcon == 0) then -- lua evaluates anything to true except nil and false
		noDlcIcon = false
	end

	if args.columns ~= nil then
		extraStyle = extraStyle..'column-count:'..args.columns..';'
	end

	if args.columnWidth ~= nil then
		extraStyle = extraStyle..'column-width:'..args.columnWidth..';'
	end

	if args.noMargin ~= nil then
		extraStyle = extraStyle..'margin:0;'
	end

	if args.marginLeft ~= nil then
		extraStyle = extraStyle..'margin-left:'..args.marginLeft..';'
	end

	if args.listtype ~= nil then
		if args.listtype == 'ol' then
			listType = 'ol'
		else -- none
			extraStyle = extraStyle..'list-style:none;margin-left:0;'
		end
	end

	-- split first value at comma, e.g. for data from module:dv
	local items = {}
	for v in mw.text.gsplit(args[1], delimiter, true) do
		if #v > 0 then -- skip empty
			table.insert(items, v)
		end
	end

	-- append rest parameters
	for _,v in ipairs(args) do 
		if _ > 1 and #v > 0 then
			table.insert(items, v)
		end
	end

	-- prepend mod wiki namespace to items if "mod" argument is specified
	if args.mod ~= nil then
		for i, v in ipairs(items) do
			items[i] = "Mod:"..args.mod.."/"..v
		end
	end

	-- read arguments list into itemList (consists of tables, at index 1 is the text, at index 2 the quantity (optional))
	local itemList, i, lastItem = {}, 0, nil
	for _, item in ipairs(items) do
		item = item:match "^%s*(.-)%s*$" -- trim

		if string.len(item) > 0 then
			if lastItem and (item:match "^[%d.]*$" or item:match "^[%d.]*%-[%d.]*$") then
				itemList[i][2] = item -- item is quantity
				lastItem = nil
			else
				table.insert(itemList, {item, nil} ) -- item is text
				i = i + 1
				lastItem = item
			end
		end
	end

	return p.create(itemList, {
		listType = listType,
		extraStyle = extraStyle,
		iconSize = args.iconsize,
		asPerCent = args.showQuantityAsPerCent or false,
		showOne = args.showQuantityOne or false,
		noDlcIcon = noDlcIcon,
	})
end


function p.create(items, options)
	options = options or {}
	
	local output = {}
	local quantitySign = options.asPerCent and '% ' or ' × '
	local iconSize = options.iconSize or '30px'

	for _, item in ipairs(items) do
		local name, qty = item, nil
		if type(item) == 'table' then
			name, qty = item[1], item[2]
		end

		if options.asPerCent and qty ~= nil then
			qty = qty * 100
		end

		local fileName = string.gsub(string.gsub(name, '[:/]', ' '), '+', '-')
		output[#output+1] = '<li>'
		if qty ~= nil and (qty ~= '1' or options.showOne) then
			output[#output+1] = qty..quantitySign
		end
		output[#output+1] = '[[File:'..fileName..'.png|'..iconSize..'|link='..name..'|alt=]] '
		output[#output+1] = DLCLink(name, options.noDlcIcon)
		output[#output+1] = '</li>'
	end

	if #output == 0 then
		return nil
	end

	-- if the list is long and has no explicit style, break it into columns automatically
	if #output > 5 and (options.extraStyle == '' or options.extraStyle == nil) then
		options.extraStyle = 'column-width:15em;'
	end

	local listType = options.listType or 'ul'
	return '<'..listType..(options.extraStyle ~= '' and ' style="'..options.extraStyle..'"' or '')
			..' class="itemlist">'..table.concat(output, '')..'</'..listType..'>'
end


return p
Advertisement