Documentation for this module may be created at Module:ItemDropsLine/doc
-- <pre>
local p = {}
local yesno = require('Module:Yesno')
local uclc = require('Module:Paramtest').ucflc
local commas = require('Module:Addcommas')
local raritybg = {
['always'] = '#AFEEEE',
['common'] = '#56E156',
['uncommon'] = '#FFED4C',
['rare'] = '#FF863C',
['very rare'] = '#FF6262',
['random'] = '#FFA3FF',
['varies'] = '#FFA3FF',
['discontinued'] = '#DBFF4C'
}
local raritysort = {
['always'] = '1',
['common'] = '2',
['uncommon'] = '3',
['rare'] = '4',
['very rare'] = '5',
['varies'] = '6',
['random'] = '6',
['discontinued'] = '7'
}
function p._main(frame)
local args = frame:getParent().args
-- Params and defaults
local name = args.Name or 'monster'
local namenotes = args.Namenotes or ''
local combat = args.Combat or 'Unknown'
local cbnotes = args.cbnotes or ''
local quantity = string.lower(args.Quantity) or 'Unknown'
local quantitynotes = args.Quantitynotes or ''
local rarity = uclc(args.Rarity) or 'Unknown'
local raritynotes = args.Raritynotes or ''
-- Table row
return main(name,namenotes,combat,cbnotesquantity,quantitynotes,rarity,raritynotes)
end
function main(name,namenotes,combat,cbnotes,quantity,quantitynotes,rarity,raritynotes)
local rare_bg = raritybg[rarity:lower()] or '#FFFFFF'
local rare_sort = raritysort[rarity:lower()] or '8'
-- Clean up the lists
quantity = qty(quantity)
combat = cmb(combat)
-- Table row creation
local ret = '|- style="text-align:center;"' ..
'\n| style="text-align:left;" | [[' .. name .. ']] ' .. namenotes ..
'\n| ' .. combat .. ' ' .. cbnotes ..
'\n| ' .. quantity .. ' ' .. quantitynotes ..
'\n| style="background:' .. rare_bg .. ';"' ..
-- display none is used to create a sort key to let
-- rarity sorting work properly
' | <span style="display:none;">' .. rare_sort ..
'; </span>' .. rarity .. ' ' .. raritynotes
return ret
end
function qty(quantity)
-- if no quantity is given, return unknown
if not quantity then
return 'Unknown'
end
-- en dashes are the proper dash for number ranges
-- replace all hyphens and em dashes with en
-- strip *all* whitespace
-- change '(noted)' to 'n' for parsing
quantity = quantity:gsub('[-—]','–')
:gsub('%s','')
:gsub('%(noted%)','n')
-- split list into table
local vals = mw.text.split(quantity,',')
-- recreate the quantity string to ensure consistent formatting
local numstr = ''
for i, v in ipairs(vals) do
local clean = v:gsub('n','')
if v:find('–') then
local noted = v:find('n')
local splitvals = mw.text.split(clean,'–')
local a = tonumber(splitvals[1])
local b = tonumber(splitvals[2])
local smaller,larger
if a > b then
smaller = b
larger = a
else
smaller = a
larger = b
end
numstr = numstr .. commas._add(smaller) .. '–' .. commas._add(larger)
else
local a = tonumber(clean)
numstr = numstr .. commas._add(a)
if v:find('n') then
numstr = numstr .. ' (noted)'
end
end
-- To prevent any possible confusion with formatted numbers
-- elements should be separated with semicolons followed by a space
numstr = numstr .. '; '
end
-- removes the final separator, because it's redundant
numstr = numstr:sub(1,-3)
return numstr
end
function cmb(levels)
-- if no level is given, return unknown
if not levels then
return 'Unknown'
end
-- en dashes are the proper dash for number ranges
-- replace all hyphens and em dashes with en
-- strip *all* whitespace
levels = levels:gsub('[-—]','–')
:gsub('%s','')
-- split list into table
local vals = mw.text.split(levels,',')
-- recreate the list string to ensure consistent formatting
local numstr = ''
for i, v in ipairs(vals) do
-- To prevent any possible confusion with formatted numbers
-- elements should be separated with semicolons followed by a space
numstr = numstr .. '; '
end
-- removes the final separator, because it's redundant
numstr = numstr:sub(1,-3)
return numstr
end
return p