Module:DropsLine

-- local p = {}

local yesno = require('Module:Yesno') local uclc = require('Module:Paramtest').ucflc local commas = require('Module:Addcommas')

local raritybg = { ['always'] = '#AFEEEE', ['common'] = '#98FB98', ['uncommon'] = '#F0E68C', ['rare'] = '#F4A460', ['very rare'] = '#F08080', ['random'] = '#EE82EE', ['varies'] = '#EE82EE', ['discontinued'] = '#C5B358' }

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 'item' local namenotes = args.Namenotes 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 '' local gemw = args.gemw or 'yes' gemw = yesno(gemw) local alt = false -- Use 'File: .png' if no image param -- User 'File: ' if image param; image param will include extension local image = 'File:' .. (args.Image or (name .. '.png'))

-- Table row local ret = main(name,namenotes,quantity,quantitynotes,rarity,raritynotes,alt,image,gemw)

-- categories for mainspace local cats = '' local ns = mw.title.getCurrentTitle.nsText if ns == '' then cats = categories(name,quantity,rarity) end return ret..cats end

function main(name,namenotes,quantity,quantitynotes,rarity,raritynotes,alt,image,gemw) local rare_bg = raritybg[rarity:lower] or '#FFFFFF' local rare_sort = raritysort[rarity:lower] or '8' local cleanqty = qty(quantity) quantity = cleanqty[1] local total = cleanqty[2] -- Table row creation local ret = '|- style="text-align:center;"' .. '\n| ' .. image .. '' .. '\n| style="text-align:left;" | ' .. name .. ' ' .. namenotes .. '\n| ' .. quantity .. ' ' .. quantitynotes .. '\n| style="background:' .. rare_bg .. ';"' .. -- display none is used to create a sort key to let -- rarity sorting work properly ' | ' .. rare_sort .. '; ' .. 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,',') local ret = {} -- recreate the quantity string to ensure consistent formatting local numstr = '' for i, v in ipairs(vals) do		local clean = v:gsub('n','') -- if list element contain an en dash (indicating range) -- Find the smaller/larger number (just in case) -- Compare them to the current min/max -- put them in order with desired format 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) if noted then numstr = numstr .. ' (noted)' end 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

-- adding categories to mainspace function categories(name,quantity,rarity) local ret = '' name = name:lower quantity = quantity:lower if name:find('clue scroll') then ret = ret .. ''	end if not raritysort[rarity:lower] then ret = ret .. ''	end if quantity:find('Unknown') then ret = ret .. ''	end return ret end

return p