Anonymous

Module:Icons: Difference between revisions

From Melvor Idle
3,643 bytes added ,  27 November 2022
Amend/fix overrides for Summoning marks
m (Excess space removal)
(Amend/fix overrides for Summoning marks)
(17 intermediate revisions by 3 users not shown)
Line 1: Line 1:
--You can't generate Templates from within Lua due to the loading order, so instead copying the Icon functionality into a module so it can be pulled elsewhere.
--Should function very similarly to how Template:Icon works
local Shared = require("Module:Shared")
local Shared = require("Module:Shared")
local GameData = require("Module:GameData")


-- Locally index some functions for performance
-- Locally index some functions for performance
Line 24: Line 22:
["rock"] = "svg", -- Some exceptions included by name below
["rock"] = "svg", -- Some exceptions included by name below
["thieving"] = "svg",
["thieving"] = "svg",
["mark"] = "svg", -- Some exceptions included by name below
["constellation"] = "svg",
["constellation"] = "svg",
["building"] = "svg"
["building"] = "svg",
["resource"] = "svg",
["township"] = "svg"
},
},
["name"] = {
["name"] = {
Line 64: Line 63:
["Event Clue 3"] = "svg",
["Event Clue 3"] = "svg",
["Event Clue 4"] = "svg",
["Event Clue 4"] = "svg",
["Golbin Thief"] = "svg",
["Occultist"] = "svg",
["Wolf"] = "svg",
["Ent"] = "svg",
["Mole"] = "svg",
["Octopus"] = "svg",
["Minotaur"] = "svg",
["Centaur"] = "svg",
["Witch"] = "svg",
["Pig"] = "svg",
["Crow"] = "svg",
["Leprechaun"] = "svg",
["Cyclops"] = "svg",
["Yak"] = "svg",
["Unicorn"] = "svg",
["Dragon"] = "svg",
["Monkey"] = "svg",
["Salamander"] = "svg",
["Bear"] = "svg",
["Devil"] = "svg",
-- Pets
-- Pets
["Cris"] = "svg",
["Cris"] = "svg",
Line 169: Line 148:
local typeExtOverrides = {
local typeExtOverrides = {
-- Example: ["item"] = { ["Chicken"] = "png" }
-- Example: ["item"] = { ["Chicken"] = "png" }
["item"] = {
-- These familiars also exist as type mark, where the image is of PNG format
["Golbin Thief"] = "svg",
["Occultist"] = "svg",
["Wolf"] = "svg",
["Ent"] = "svg",
["Mole"] = "svg",
["Octopus"] = "svg",
["Minotaur"] = "svg",
["Centaur"] = "svg",
["Witch"] = "svg",
["Pig"] = "svg",
["Crow"] = "svg",
["Leprechaun"] = "svg",
["Cyclops"] = "svg",
["Yak"] = "svg",
["Unicorn"] = "svg",
["Dragon"] = "svg",
["Monkey"] = "svg",
["Salamander"] = "svg",
["Bear"] = "svg",
["Devil"] = "svg"
}
}
}


--When calling for an icon of type Key, instead use type Value
--When calling for an icon of type Key, instead use type Value
Line 226: Line 228:
['Diamond Luck Potion'] = {'Diamond Luck Potion I', 'item'},
['Diamond Luck Potion'] = {'Diamond Luck Potion I', 'item'},
['Damage Reduction Potion'] = {'Damage Reduction Potion I', 'item'},
['Damage Reduction Potion'] = {'Damage Reduction Potion I', 'item'},
['Area Control Potion'] = {'Area Control Potion I', 'item'},
['Adaptive Defence Potion'] = {'Adaptive Defence Potion I', 'item'},
['Slayer Bounty Potion'] = {'Slayer Bounty Potion I', 'item'},
['Holy Bulwark Potion'] = {'Holy Bulwark Potion I', 'item'},
['Adaptive Accuracy'] = {'Adaptive Accuracy Potion I', 'item'},
['Reaper Potion'] = {'Reaper Potion I', 'item'},
['Penetration Potion'] = {'Penetration Potion I', 'item'},
['Critical Strike Potion'] = {'Critical Strike Potion I', 'item'},
['Bird Nest Potion'] = {'Bird Nest Potion I', 'item'},
['Bird Nest Potion'] = {'Bird Nest Potion I', 'item'},
['Controlled Heat Potion'] = {'Controlled Heat Potion I', 'item'},
['Controlled Heat Potion'] = {'Controlled Heat Potion I', 'item'},
['Generous Cook Potion'] = {'Generous Cook Potion I', 'item'},
['Generous Cook Potion'] = {'Generous Cook Potion I', 'item'},
['Seeing Gold Potion'] = {'Seeing Gold Potion I', 'item'},
['Fishermans Potion'] = {'Fishermans Potion I', 'item'},
['Fishermans Potion'] = {'Fishermans Potion I', 'item'},
['Skilled Fletching Potion'] = {'Skilled Fletching Potion I', 'item'},
['Skilled Fletching Potion'] = {'Skilled Fletching Potion I', 'item'},
Line 240: Line 251:
['Herblore Potion'] = {'Herblore Potion I', 'item'},
['Herblore Potion'] = {'Herblore Potion I', 'item'},
['Generous Harvest Potion'] = {'Generous Harvest Potion I', 'item'},
['Generous Harvest Potion'] = {'Generous Harvest Potion I', 'item'},
['Seeing Gold Potion'] = {'Seeing Gold Potion I', 'item'},
['Alchemic Practice Potion'] = {'Alchemic Practice Potion I', 'item'},
['Gem Detector Potion'] = {'Gem Detector Potion I', 'item'},
['Multicooker Potion'] = {'Multicooker Potion I', 'item'},
['Star Seeker Potion'] = {'Star Seeker Potion I', 'item'},
['Traps Potion'] = {'Traps Potion I', 'item'},
['Enkindled Yields Potion'] = {'Enkindled Yields Potion I', 'item'},
['Alt Magic Potion'] = {'Alt Magic Potion I', 'item'},
-- Township resources
['GP'] = {'Coins', ''},
['Food'] = {'Raw Beef', 'item'},
['Ore'] = {'Iron', 'rock'},
['Bar'] = {'Iron Bar', 'item'},
['Herbs'] = {'Garum Herb', 'item'},
['Clothing'] = {'Leather Body', 'item'},
-- Township generic statue building
['Statue of Worship'] = 'Statue of Nothing',
-- Easter egg stuff
-- Easter egg stuff
["Lemonade (Empty)"] = "Lemonade",
["Lemonade (Very empty)"] = "Lemonade",
["Lemonade (Very empty)"] = "Lemonade",
["Lemonade (Still very empty)"] = "Lemonade",
["Lemonade (Still very empty)"] = "Lemonade",
Line 271: Line 298:
["Lemonade (Wait for it!)"] = "Lemonade",
["Lemonade (Wait for it!)"] = "Lemonade",
["Lemonade (Full)"] = "Lemonade"
["Lemonade (Full)"] = "Lemonade"
}
--When calling for an icon for Key + Type, replace with image Value, and optionally override type also
local typeImgOverrides = {
['resource'] = {
['Rune Essence'] = {'Rune Essence', 'item'},
['Leather'] = {'Leather', 'item'},
}
}
}
--When calling for an icon for Key, the link goes to Value
--When calling for an icon for Key, the link goes to Value
Line 278: Line 312:
['Spider2'] = 'Brown Spider'
['Spider2'] = 'Brown Spider'
}
}
--When calling for an icon for Key + Type, the link goes to Value
local typeLinkOverrides = {
['resource'] = {
-- Township resources
['Food'] = '',
['Wood'] = '',
['Planks'] = '',
['Stone'] = '',
['Bar'] = '',
['Ore'] = '',
['Coal'] = '',
['Rune Essence'] = '',
['Herbs'] = '',
['Potions'] = '',
['Leather'] = '',
['Clothing'] = ''
},
['township'] = {
['Workers'] = '',
['Statistics'] = '',
['Town'] = ''
}
}
--If no other text override was specified for the given link, use these
--If no other text override was specified for the given link, use these
local txtOverrides = {
local txtOverrides = {
Line 292: Line 350:
['Necromancer'] = true,
['Necromancer'] = true,
['Dark Knight'] = true,
['Dark Knight'] = true,
['Vampire'] = true
['Vampire'] = true,
['Phantom'] = true,
['Spectre'] = true,
['Siren'] = true,
['Lightning Spirit'] = true,
}
--When calling for an icon for Key, add a css class
local imgClassOverrides = {
-- Township Stat Icons are licensed from Font Awesome Free 5.14.0 under CC BY 4.0 (https://github.com/FortAwesome/Font-Awesome/tree/5.14.0)
['Population'] = 'township-colortoggle',
['Workers'] = 'township-colortoggle',
['Storage'] = 'township-colortoggle',
}
}


Line 308: Line 377:
local qty = args.qty
local qty = args.qty
local img = args.img ~= nil and args.img ~= '' and args.img or link
local img = args.img ~= nil and args.img ~= '' and args.img or link
local class = args.class ~= nil and args.class ~= '' and args.class or ''
local altText = args.alt ~= nil and args.alt or (notext and (text or link)) or ''
local nospan = args.nospan ~= nil and args.nospan


link = fixPagename(link)
link = fixPagename(link)
Line 319: Line 391:
--MANUAL OVERRIDES
--MANUAL OVERRIDES
local ovrImg = imgOverrides[link]
local ovrImg = imgOverrides[link]
local ovrTypeImg = typeImgOverrides[iconType]
if ovrTypeImg ~= nil then
ovrImg = ovrTypeImg ~= nil and ovrTypeImg[img] or ovrImg
end
local ovrTxt = txtOverrides[link]
local ovrTxt = txtOverrides[link]
local ovrLink = linkOverrides[link]
local ovrLink = linkOverrides[link]
local ovrTypeLink = typeLinkOverrides[iconType]
if ovrTypeLink ~= nil and ovrTypeLink[img] ~= nil then
if ovrTypeLink[img] == '' then
nolink = true
else
ovrLink = ovrTypeLink[img]
end
end
local hasText = (text ~= nil and text ~= '')
local hasText = (text ~= nil and text ~= '')
if ovrImg ~= nil and img == link then
if ovrImg ~= nil and img == link then
Line 330: Line 414:
end
end
end
end
local ovrClass = imgClassOverrides[link]
-- Type & extension overrides must be after adjustments have been made
-- Type & extension overrides must be after adjustments have been made
-- for any image overrides
-- for any image overrides
Line 359: Line 444:
if ovrType ~= nil then
if ovrType ~= nil then
iconType = ovrType
iconType = ovrType
end
if ovrClass ~= nil then
class = ovrClass
end
end
-- There are a couple specific double overrides to be included that don't fit in the above lists
-- There are a couple specific double overrides to be included that don't fit in the above lists
Line 376: Line 464:
local txtImg = (iconType ~= nil and iconType ~= '' and img .. '_(' .. iconType .. ')' or img) .. '.' .. ext
local txtImg = (iconType ~= nil and iconType ~= '' and img .. '_(' .. iconType .. ')' or img) .. '.' .. ext
-- Include a link unless no link -and- no text was requested
-- Include a link unless no link -and- no text was requested
local txtLink = '|link=' .. (nolink and notext and '' or link)
local txtLink = '|link=' .. (nolink and '' or link)
resultText = '[[File:' .. txtImg .. '|' .. txtSize .. 'x' .. txtSize .. 'px' .. txtLink .. ']]'
resultText = '[[File:' .. txtImg .. '|' .. txtSize .. 'x' .. txtSize .. 'px|alt=' .. altText .. txtLink .. ']]'
if class ~= nil and class ~= '' then
resultText = '<span class="'..class..'">'..resultText..'</span>'
end
end
end


Line 396: Line 487:
if menu then
if menu then
return '{| class="articletable" style="display:inline-block;vertical-align:middle;"\r\n|-\r\n|' .. resultText .. '\r\n|}'
return '{| class="articletable" style="display:inline-block;vertical-align:middle;"\r\n|-\r\n|' .. resultText .. '\r\n|}'
elseif not noicon then
elseif not noicon and not nospan then
return '<span style="display:inline-block">' .. resultText .. '</span>'
return '<span style="display:inline-block">' .. resultText .. '</span>'
else
else
Line 411: Line 502:


function p._SkillReq(skill, level, showText)
function p._SkillReq(skill, level, showText)
local result = p.Icon({skill, type='skill', notext='true'})
local altText = (showText and '') or skill
if showText then
local result = p.Icon({skill, type='skill', notext=(showText and '' or true), nospan=true, alt=altText})
result = result..' [['..skill..']]'
end
if level == nil then level = 'Unknown [[Category:Pages with script errors]]' end
if level == nil then level = 'Unknown [[Category:Pages with script errors]]' end
result = result.." Level "..level
result = result.." Level "..level
Line 439: Line 528:
iconname = linkname..' I'
iconname = linkname..' I'
end
end
local altTextItem = (showText and '') or linkname
local altTextMastery = (showText and '') or '&nbsp;Mastery'


local result = 'Level '..level..' '
local result = 'Level '..level..' '
result = result..p.Icon({linkname, img=iconname, type='item', notext = true})..p.Icon({'Mastery', notext=true})
result = result..p.Icon({linkname, img=iconname, type='item', notext=true, nospan=true, alt=altTextItem})..p.Icon({'Mastery', notext=true, nospan=true, alt=altTextMastery})
if showText then result = result..'[['..linkname..']] [[Mastery]]' end
if showText then result = result..'[['..linkname..']] [[Mastery]]' end
result = '<span style="display:inline-block">'..result..'</span>'
result = '<span style="display:inline-block">'..result..'</span>'
Line 455: Line 546:
end
end


function p._Currency(fileName, link, amt, maxAmt)
function p._Currency(fileName, link, altText, amt, maxAmt)
local amtText = formatnum(amt)
local amtText = formatnum(amt)
if maxAmt ~= nil and maxAmt >= amt then
if maxAmt ~= nil and maxAmt >= amt then
Line 467: Line 558:
fileText = fileText .. '|link=' .. link
fileText = fileText .. '|link=' .. link
end
end
fileText = fileText .. ']]&nbsp;'
fileText = fileText .. '|alt=' .. ((altText == nil and '') or altText) .. ']]&nbsp;'
end
end


Line 474: Line 565:


function p.GP(amt, maxamt)
function p.GP(amt, maxamt)
return p._Currency('Coins.svg', 'Coins', amt, maxamt)
return p._Currency('Coins.svg', 'Coins', 'GP', amt, maxamt)
end
end


function p.SC(amt, maxamt)
function p.SC(amt, maxamt)
return p._Currency('Slayer Coins.svg', 'Currency#Slayer Coins', amt, maxamt)
return p._Currency('Slayer Coins.svg', 'Currency#Slayer Coins', 'SC', amt, maxamt)
end
end


function p.RC(amt, maxamt)
function p.RC(amt, maxamt)
return p._Currency('Raid_Coins.svg', 'Currency#Raid Coins', amt, maxamt)
return p._Currency('Raid_Coins.svg', 'Currency#Raid Coins', 'RC', amt, maxamt)
end
 
--Adding a shortcut function for this
function p.TotH()
return p.Icon({'Throne of the Herald Expansion', ext='svg', notext=true, img='TotH'})
end
 
function p.getExpansionIcon(id)
local ns, _ = GameData.getLocalID(id)
if ns == 'melvorTotH' then
return p.TotH()..' '
else
return ''
end
end
end


return p
return p