Module:Icons: Difference between revisions
From Melvor Idle
Falterfire (talk | contribs) (fixed issue) |
Falterfire (talk | contribs) (Changed how icon overrides work to make adding more cleaner) |
||
Line 16: | Line 16: | ||
["Cloudburst Staff"] = "png", | ["Cloudburst Staff"] = "png", | ||
["Earth Layered Shield"] = "png", | ["Earth Layered Shield"] = "png", | ||
} | |||
--When calling for an icon of type Key, instead use type Value | |||
local typeOverrides = { | |||
['combat'] = 'combatArea', | |||
['slayer'] = 'combatArea', | |||
} | |||
--When calling for an icon for Key, replace with image Value | |||
local imgOverrides = { | |||
['Alt Magic'] = 'Magic', | |||
['Alt. Magic'] = 'Magic', | |||
['Alternative Magic'] = 'Magic', | |||
['Melee'] = 'Combat', | |||
['Spider (lv. 51)'] = 'Spider', | |||
['Spider (lv. 52)'] = 'Spider2' | |||
} | |||
--When calling for an icon for Key, the link goes to Value | |||
local linkOverrides = { | |||
['Alt Magic'] = 'Alternative Magic', | |||
['Alt. Magic'] = 'Alternative Magic', | |||
['Spider'] = 'Spider (lv. 51)', | |||
['Spider2'] = 'Spider (lv. 52)' | |||
} | |||
--If no other text override was specified for the given link, use these | |||
local txtOverrides = { | |||
['Spider'] = 'Spider (lv. 51)', | |||
['Spider2'] = 'Spider (lv. 52)' | |||
} | } | ||
Line 34: | Line 61: | ||
--MANUAL OVERRIDES | --MANUAL OVERRIDES | ||
if link == | if imgOverrides[link] ~= nil and img == link then | ||
img = | img = imgOverrides[link] | ||
end | |||
if text == nil and txtOverrides[link] ~= nil then | |||
text = txtOverrides[link] | |||
end | |||
if linkOverrides[link] ~= nil then | |||
link = | if text == nil then text = link end | ||
link = linkOverrides[link] | |||
end | |||
if extOverrides[img] ~= nil then | |||
text = | ext = extOverrides[img] | ||
end | |||
link = ' | --There are a couple specific double overrides I want to include that don't fit in the above lists | ||
if link == 'Golbin' then | |||
if text == nil then text = 'Golbin' end | |||
link = 'Golbin ('..type..')' | |||
end | end | ||
--Creating the image... | |||
local result = '[[File:'..img | local result = '[[File:'..img | ||
--Add in type if one is set | |||
if type ~= nil and type ~= '' then result = result..'_('..type..')' end | if type ~= nil and type ~= '' then result = result..'_('..type..')' end | ||
--Add in extension and image size | |||
result = result..'.'..ext..'|'..tostring(imgSize)..'x'..tostring(imgSize)..'px' | result = result..'.'..ext..'|'..tostring(imgSize)..'x'..tostring(imgSize)..'px' | ||
--Include a link unless no link -and- no text was requested | |||
if not (nolink and notext) then result = result..'|link='..link end | if not (nolink and notext) then result = result..'|link='..link end | ||
result = result..']]' | result = result..']]' | ||
--Add Quantity to the front if requested | |||
if qty ~= nil and qty ~= '' then result = Shared.formatnum(qty)..' '..result end | if qty ~= nil and qty ~= '' then result = Shared.formatnum(qty)..' '..result end | ||
Line 70: | Line 102: | ||
else | else | ||
result = result..' [['..link | result = result..' [['..link | ||
if text ~= nil and text ~= '' then | if text ~= nil and text ~= '' and text ~= link then | ||
result = result..'|'..text | result = result..'|'..text | ||
end | end |
Revision as of 19:16, 7 October 2020
Documentation for this module may be created at Module:Icons/doc
--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 p = {}
--Extension overrides for items that have non-svg images
local extOverrides = {
["Crown of Rhaelyx"] = "png",
["Jewel of Rhaelyx"] = "png",
["Circlet of Rhaelyx"] = "png",
["Charge Stone of Rhaelyx"] = "png",
["Mysterious Stone"] = "png",
["Aeris Godsword"] = "png",
["Ragnar Godsword"] = "png",
["Terran Godsword"] = "png",
["Glacia Godsword"] = "png",
["Cloudburst Staff"] = "png",
["Earth Layered Shield"] = "png",
}
--When calling for an icon of type Key, instead use type Value
local typeOverrides = {
['combat'] = 'combatArea',
['slayer'] = 'combatArea',
}
--When calling for an icon for Key, replace with image Value
local imgOverrides = {
['Alt Magic'] = 'Magic',
['Alt. Magic'] = 'Magic',
['Alternative Magic'] = 'Magic',
['Melee'] = 'Combat',
['Spider (lv. 51)'] = 'Spider',
['Spider (lv. 52)'] = 'Spider2'
}
--When calling for an icon for Key, the link goes to Value
local linkOverrides = {
['Alt Magic'] = 'Alternative Magic',
['Alt. Magic'] = 'Alternative Magic',
['Spider'] = 'Spider (lv. 51)',
['Spider2'] = 'Spider (lv. 52)'
}
--If no other text override was specified for the given link, use these
local txtOverrides = {
['Spider'] = 'Spider (lv. 51)',
['Spider2'] = 'Spider (lv. 52)'
}
local Shared= require("Module:Shared")
function p.Icon(frame)
local args = frame.args ~= nil and frame.args or frame
local link = args[1]
local text = args[2]
local type = args.type
local ext = args.ext ~= nil and args.ext or 'svg'
local notext = args.notext ~= nil and args.notext ~= ''
local nolink = args.nolink ~= nil and args.nolink ~= ''
local menu = args.menu ~= nil and args.menu ~= ''
local imgSize = args.size ~= nil and args.size or 25
local qty = args.qty
local img = args.img ~= nil and args.img or link
--MANUAL OVERRIDES
if imgOverrides[link] ~= nil and img == link then
img = imgOverrides[link]
end
if text == nil and txtOverrides[link] ~= nil then
text = txtOverrides[link]
end
if linkOverrides[link] ~= nil then
if text == nil then text = link end
link = linkOverrides[link]
end
if extOverrides[img] ~= nil then
ext = extOverrides[img]
end
--There are a couple specific double overrides I want to include that don't fit in the above lists
if link == 'Golbin' then
if text == nil then text = 'Golbin' end
link = 'Golbin ('..type..')'
end
--Creating the image...
local result = '[[File:'..img
--Add in type if one is set
if type ~= nil and type ~= '' then result = result..'_('..type..')' end
--Add in extension and image size
result = result..'.'..ext..'|'..tostring(imgSize)..'x'..tostring(imgSize)..'px'
--Include a link unless no link -and- no text was requested
if not (nolink and notext) then result = result..'|link='..link end
result = result..']]'
--Add Quantity to the front if requested
if qty ~= nil and qty ~= '' then result = Shared.formatnum(qty)..' '..result end
if not notext then
if nolink then
if text ~= nil and text ~= '' then
result = result..' '..text
else
result = result..' '..link
end
else
result = result..' [['..link
if text ~= nil and text ~= '' and text ~= link then
result = result..'|'..text
end
result = result..']]'
end
end
result = '<span style="display:inline-block">'..result..'</span>'
if menu then
result = '{| class="articletable" style="display:inline-block;vertical-align:middle;"\r\n|-\r\n|'..result
result = result..'\r\n|}'
end
return result
end
function p._SkillReq(skill, level, showText)
local result = p.Icon({skill, type='skill', notext='true'})
if showText then
result = result..' [['..skill..']]'
end
result = result.." Level "..level
result = '<span style="display:inline-block">'..result..'</span>'
return result
end
function p.SkillReq(frame)
local args = frame.args ~= nil and frame.args or frame
local skill = args[1]
local level = tonumber(args[2])
local showText = args.showText ~= nil and args.showText ~= '' and args.showText ~= 'false'
return p._SkillReq(skill, level, showText)
end
function p._MasteryReq(itemName, level, showText)
local iconname = itemName
local linkname = itemName
--First, go with the lowest tier of potions if a potion is mentioned
local s, e = string.find(itemName, 'Potion')
if e ~= nil then
linkname = string.sub(itemName, 1, e)
iconname = linkname..' I'
end
local result = 'Level '..level..' '
result = result..p.Icon({linkname, img=iconname, type='item', notext = true})..p.Icon({'Mastery', notext=true})
if showText then result = result..'[['..linkname..']] [[Mastery]]' end
result = '<span style="display:inline-block">'..result..'</span>'
return result
end
function p.MasteryReq(frame)
local args = frame.args ~= nil and frame.args or frame
local itemName = args[1]
local level = tonumber(args[2])
local showText = args.showText ~= nil and args.showText ~= '' and args.showText ~= 'false'
return p._MasteryReq(itemName, level, showText)
end
function p.GP(amt, maxamt)
local result = '[[File:Coins.svg|25px|link=Coins]]'
result = result..' '..Shared.formatnum(amt)
if maxamt ~= nil then result = result..' - '..Shared.formatnum(maxamt) end
result = '<span style="display:inline-block">'..result..'</span>'
return result
end
function p.SC(amt, maxamt)
local result = '[[File:Slayer Coins.svg|25px|link=Currency#Slayer Coins]]'
result = result..' '..Shared.formatnum(amt)
if maxamt ~= nil then result = result..' - '..Shared.formatnum(maxamt) end
result = '<span style="display:inline-block">'..result..'</span>'
return result
end
return p