Module:Equipment
Documentation for this module may be created at Module:Equipment/doc
-- <pre>Sandbox for testing stuff. Infoked by [[User:Joeytje50/Module]]
-- Current module being tested: Module:Equipment
local p = {}
local hasc = require('Module:Paramtest').has_content
local itemstats = require('Module:FetchItemStats')
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local GEPrice = require('Module:Exchange')._price
-- Parse item string and check if GIF icons are allowed
local function parseItem(ret, itemString, equipSlot, stats, quantity, clickable)
local itemString = itemString
local allowGif = false -- Set default to not allow GIF icons
local itemName = ""
-- Look for a ;g at the end of the string and separate them
if hasc(itemString) then
allowGif = itemString:sub(-2) == ";g"
if allowGif then
itemName = itemString:sub(0, -3)
else
itemName = itemString or ""
end
end
return ret, itemName, allowGif, equipSlot, stats, quantity, clickable
end
-- Formats a <div> element for items
local function makeDiv(ret, itemName, allowGif, equipSlot, stats, quantity, clickable)
local itemName = itemName
local allowGif = allowGif
local topDivClass = "equipment-" .. equipSlot
local names = mw.text.split(itemName, ";")
if #names <= 1 or names[2] == 'g' then
names[2] = itemstats.defaultVersion(names[1]) or names[1]
end
local imgType = allowGif == true and "gif" or "png"
local equipSlotText = ""
-- Check if the item name is not empty
if itemName ~= '' then
if clickable then
-- Construct a clickable link
equipSlotText = string.format("[[File:%s.%s|%s|link=%s]]", names[1], imgType, names[2], names[1])
else
-- Construct a plain image without a link
equipSlotText = string.format("[[File:%s.%s|%s]]", names[1], imgType, names[2])
end
end
-- Create the divs
local topDiv = ret
:tag("div")
:addClass(topDivClass)
local nestedDiv = topDiv
:tag("div")
:addClass("equipment-plinkp")
:wikitext(equipSlotText)
if quantity then
local amt, quantclass = formatAmount(quantity)
nestedDiv:tag('span')
:addClass('inv-quantity-text')
:addClass(quantclass)
:wikitext(amt)
end
if stats and itemName ~= '' then
-- Add stat-related code here if needed
end
if itemName ~= '' then
topDiv:addClass("equipment-blank")
end
end
function p.main(frame)
local args = frame:getParent().args
local buttons = yesno(args.buttons, false)
local stats = yesno(args.stats, false)
local align
if args.align == "right" then
align = "equipment-right"
elseif args.align == "center" then
align = "equipment-center"
else
align = "equipment-left"
end
-- general 'equipment' class for the whole thing
align = "equipment " .. align
local tbl = mw.html.create("table"):addClass(align):tag("tr")
local ret = tbl:tag("td"):tag("div")
if stats then
stats = {
astab = 0,
aslash = 0,
acrush = 0,
amagic = 0,
arange = 0,
dstab = 0,
dslash = 0,
dcrush = 0,
dmagic = 0,
drange = 0,
str = 0,
rstr = 0,
mdmg = 0,
prayer = 0,
weight = 0,
ikods = {},
}
end
if buttons then
ret:addClass("equipment-div-buttons")
else
ret:addClass("equipment-div")
end
-- Fetch equipment and create divs
makeDiv(parseItem(ret, args.head, "head", stats, nil, not yesno(args.headUnclickable, true)), args.headClickable == "yes")
makeDiv(parseItem(ret, args.cape, "cape", stats, nil, not yesno(args.capeUnclickable, true)), args.capeClickable == "yes")
makeDiv(parseItem(ret, args.neck, "neck", stats, nil, not yesno(args.neckUnclickable, true)), args.neckClickable == "yes")
makeDiv(parseItem(ret, args.ammo, "ammo", stats, args.ammoquantity, not yesno(args.ammoUnclickable, true)), args.ammoClickable == "yes")
makeDiv(parseItem(ret, args.weapon, "weapon", stats, args.weaponquantity, not yesno(args.weaponUnclickable, true)), args.weaponClickable == "yes")
makeDiv(parseItem(ret, args.torso, "torso", stats, nil, not yesno(args.torsoUnclickable, true)), args.torsoClickable == "yes")
makeDiv(parseItem(ret, args.shield, "shield", stats, nil, not yesno(args.shieldUnclickable, true)), args.shieldClickable == "yes")
makeDiv(parseItem(ret, args.legs, "legs", stats, nil, not yesno(args.legsUnclickable, true)), args.legsClickable == "yes")
makeDiv(parseItem(ret, args.gloves, "gloves", stats, nil, not yesno(args.glovesUnclickable, true)), args.glovesClickable == "yes")
makeDiv(parseItem(ret, args.hands, "gloves", stats, nil, not yesno(args.handsUnclickable, true)), args.handsClickable == "yes")
makeDiv(parseItem(ret, args.boots, "boots", stats, nil, not yesno(args.bootsUnclickable, true)), args.bootsClickable == "yes")
makeDiv(parseItem(ret, args.ring, "ring", stats, nil, not yesno(args.ringUnclickable, true)), args.ringClickable == "yes")
if stats then
-- Add stat-related code here if needed
end
return tbl:done()
end
return p