Módulo:ItemList
Ir para navegação
Ir para pesquisar
Lists items (as well as creatures) with their icon.
Append all names of items or creatures each as a single parameter. You can optional add a quantity as x
or x..y
as the next parameter.
Parameters
Parameter | Default | Description |
---|---|---|
iconsize | 30px | size of the items |
columns | 1 | |
columnWidth | set a desired width for columns | |
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
|
Usage / Examples
{{ItemList|Ankylosaurus|Thatch}}
- Ankylosaurus
- Thatch
{{ItemList|iconsize=50px|Argentavis|Quetzal|Pteranodon}}
- Argentavis
- Quetzal
- Pteranodon
{{ItemList|iconsize=20px|columns=2|Thatch|Wood|Raw Meat|Raw Prime Meat|Dodo|Mesopithecus|Wooden Door}}
- 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}}
- Thatch
- Wood
- Raw Meat
- Raw Prime Meat
- Dodo
- Mesopithecus
- Wooden Door
{{ItemList|listtype=ol|Berries|Rockarrot|Longrass}}
- Berries
- Rockarrot
- Longrass
{{ItemList|listtype=none|Berries|Sulfur|Clay (Primitive Plus)}}
{{ItemList|Ankylosaurus|1|Thatch|10..20}}
- Ankylosaurus
- 10..20 × Thatch
{{ItemList|showquantityone=true|Ankylosaurus|1|Thatch|10..20}}
- Ankylosaurus
- 10..20 × Thatch
Displaying a comma-delimited array from a data-module:
{{ItemList|columnWidth=20em| {{Dv|Pteranodon|canDragCreatures}} }}
- Achatina
- Archa
- Bulbdog
- Compy
- Dilophosaur
- Diplocaulus
- Dodo
- Enforcer
- Glowtail
- Human
- Hyaenodon
- Jerboa
- Kairuku
- Lystrosaurus
- Megalania
- Mesopithecus
- Otter
- Oviraptor
- Pegomastax
- Shinehorn
- Titanomyrma Drone
- Troodon
- Turkey
- Zomdodo
local p = {}
function p.itemlist( f )
local dlclink = require('Module:DLCLink').link
local args = f:getParent().args
local listtype, extrastyle = 'ul', ''
local delimiter = args.delimiter or ','
local iconsize = args.iconsize or '30px'
local showOne = args.showQuantityOne or false
local asPerCent = args.showQuantityAsPerCent or false
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
if asPerCent then
itemList[i][2] = item * 100 -- item is per cent value
elseif item ~= '1' or showOne then
itemList[i][2] = item -- item is quantity
end
lastItem = nil
else
table.insert(itemList, {item, nil} ) -- item is text
i = i + 1
lastItem = item
end
end
end
-- output itemList
local output = {}
local quantitySign = asPerCent and '% ' or ' × '
for _, item in ipairs(itemList) do
local fileName = string.gsub(string.gsub(item[1], '[:/]', ' '), '+', '-')
table.insert(output, '<li>'..(item[2] ~= nil and item[2]..quantitySign or '')..'[[File:'..fileName..'.png|'..iconsize..'|link='..item[1]..'|alt=]] '..dlclink(item[1],noDlcIcon)..'</li>')
end
if #output == 0 then
return
end
-- if the list is long and has no explicit style, break it into columns automatically
if #output > 5 and extrastyle == '' then
extrastyle = 'column-width:15em;'
end
return '<'..listtype..(extrastyle ~= '' and ' style="'..extrastyle..'"' or '')..'>'..table.concat(output, '')..'</'..listtype..'>'
end
return p