Module:ImageLink: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
TehAnonymous (talk | contribs) (lifting from 2022 AFD) Tag: Reverted |
TehAnonymous (talk | contribs) No edit summary Tag: Reverted |
||
Line 708: | Line 708: | ||
local img = builder.create(tag) |
local img = builder.create(tag) |
||
if args['image'] ~= '' then |
if args['image'] ~= '' then |
||
args["image"] = |
args["image"] = get_gloop(img) |
||
img:css({position = 'relative', display = 'inline-block'}) |
img:css({position = 'relative', display = 'inline-block'}) |
||
local size = tostring(args['width'] or '') .. 'x' .. tostring(args['height'] or '') .. 'px' |
local size = tostring(args['width'] or '') .. 'x' .. tostring(args['height'] or '') .. 'px' |
||
Line 728: | Line 728: | ||
)) |
)) |
||
if args['image2'] then |
if args['image2'] then |
||
args["image2"] = |
args["image2"] = get_gloop(img) |
||
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]', |
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]', |
||
args['image2'], |
args['image2'], |
||
Line 741: | Line 741: | ||
end |
end |
||
if args['image3'] then |
if args['image3'] then |
||
args["image3"] = |
args["image3"] = get_gloop(img) |
||
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]', |
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]', |
||
args['image3'], |
args['image3'], |
Revision as of 01:53, 1 April 2025
- Module:ImageLink has the following documentation.
This template is what creates all those icon-link templates you see on the wiki. In other words this is a load-bearing module, try not to muck about.
- Syntax
{{#invoke: ImageLink | ability | champion = | ability = -- can be empty ... }} {{#invoke: ImageLink | buff | buff = | variant = -- can be empty ... }} {{#invoke: ImageLink | champion | champion = | skin = -- can be empty | circle = -- can be empty | variant = -- can be empty ... }} {{#invoke: ImageLink | item | item = | enchantment = -- can be empty | variant = -- can be empty ... }} {{#invoke: ImageLink | loading | champion = | skin = | variant = -- can be empty ... }} {{#invoke: ImageLink | rune | rune = | variant = -- can be empty ... }} {{#invoke: ImageLink | spell | spell = | variant = -- can be empty ... }} {{#invoke: ImageLink | ward | ward = | variant = -- can be empty ... }} {{#invoke: ImageLink | TFTchampion | champion = | set = ... }} {{#invoke: ImageLink | TFTitem | item = ... }} {{#invoke: ImageLink | TFTtrait | trait = | set = ... }} {{#invoke: ImageLink | LittleLegend | legend = | variant = ... }} {{#invoke: ImageLink | basic | link = | text = | alttext = | image = | image2 = | image3 = | size = | width = | height = | border = | separator = | display = | class = | style = | iconclass = | iconstyle = | label = | labellink = | labelclass = | labelstyle = | possessive = | edit = | editlink = | number = | blacknum = -- nil or 'true' }}
-- <pre>
local ImageLink = {}
local FN = require("Module:Filename")
local lib = require("Module:Feature")
local builder = require("Module:SimpleHTMLBuilder")
local vars = mw.ext.VariablesLua
local tipMap = {
ability = '{{Tooltip/Ability|champion=<#champion#>|ability=<#ability#>|variant=<#variant#>|game=<#game#>}}',
glossary = '{{Tooltip/Glossary|tip=<#tip#>|game=<#game#>}}'
}
function ImageLink.ability(frame)
local args = lib.frameArguments(frame)
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
args['link'] = args['link'] or formatnil('%s#%s', args['champion'], args['ability']) or args['champion'] or ''
args['text'] = args['text'] or args['ability'] or ''
args['image'] = args['image'] or FN.ability{champion=args['champion'],ability=args['ability'], variant=args['variant']}
args['editlink'] = args['editlink'] or formatnil('Template:Data %s/%s', args['champion'], args['ability'])
local link, img = ImageLink._createLink(args)
if args['champion'] and args['ability'] then
link:addClass('ability-icon')
if args['champion'] then link:attr('data-champion', args['champion']) end
if args['ability'] then link:attr('data-ability', args['ability']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
args['game'] = 'lol'
link:attr('data-game', args['game'])
ImageLink._loadTooltip('ability', args)
end
return link
end
function ImageLink.WRability(frame)
local args = lib.frameArguments(frame)
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
args['link'] = args['link'] or formatnil('WR:%s#%s', args['champion'], args['ability']) or args['champion'] or ''
args['text'] = args['text'] or args['ability'] or ''
args['image'] = args['image'] or FN.WRability{args['champion'], args['ability'], args['variant']}
args['editlink'] = args['editlink'] or formatnil('Template:WR Data %s/%s', args['champion'], args['ability'])
local link, img = ImageLink._createLink(args)
if args['champion'] and args['ability'] then
link:addClass('ability-icon')
if args['champion'] then link:attr('data-champion', args['champion']) end
if args['ability'] then link:attr('data-ability', args['ability']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'wr')
end
return link
end
function ImageLink.buff(frame)
local args = lib.frameArguments(frame)
args['link'] = args['link'] or args['buff'] or ''
args['text'] = args['text'] or args['buff'] or ''
args['image'] = args['image'] or FN.buff{args['buff'], args['variant']}
args['editlink'] = args['editlink'] or formatnil('Template:Buff data %s', args['buff'])
local link, img = ImageLink._createLink(args)
link:addClass('buff-icon')
if args['buff'] then link:attr('data-buff', args['buff']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'lol')
return link
end
function ImageLink.WRbuff(frame)
local args = lib.frameArguments(frame)
args['link'] = args['link'] or args['buff'] or ''
args['text'] = args['text'] or args['buff'] or ''
args['image'] = args['image'] or FN.WRbuff{args['buff'], args['variant']}
--args['editlink'] = args['editlink'] or formatnil('Template:Buff data %s', args['buff'])
local link, img = ImageLink._createLink(args)
link:addClass('buff-icon')
if args['buff'] then link:attr('data-buff', args['buff']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'wr')
return link
end
function ImageLink.champion(frame)
local args = lib.frameArguments(frame)
_input = args['champion']
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
args['link'] = args['link'] or args['champion'] or ''
args['text'] = args['text'] or _input or ''
if args['circle'] == 'true' then
args['image'] = args['image'] or FN.championcircle{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
else
args['image'] = args['image'] or FN.championsquare{_input, "Original", args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:ChampionData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('champion-icon')
if args.champion then link:attr('data-champion', args['champion']) end
link:attr('data-skin', lib.ternary(args['skin'] == '', 'Original', args['skin'] or 'Original'))
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'lol')
return link
end
function ImageLink.WRchampion(frame)
local args = lib.frameArguments(frame)
_input = args['champion']
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
args['link'] = args['link'] or (args['champion'] and "WR:" .. args['champion']) or ''
args['text'] = args['text'] or _input or ''
if args['circle'] == 'true' then
args['image'] = args['image'] or FN.WRchampioncircle{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
else
args['image'] = args['image'] or FN.WRchampionsquare{_input, "Original", args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:ChampionDataWR/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('champion-icon')
if args.champion then link:attr('data-champion', args['champion']) end
link:attr('data-skin', lib.ternary(args['skin'] == '', 'Original', args['skin'] or 'Original'))
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'wr')
return link
end
function ImageLink.item(frame)
local args = lib.frameArguments(frame)
if args['enchantment'] then
args['link'] = args['link'] or args['enchantment'] or ''
args['text'] = formatnil('%s (%s)', args['item'], args['enchantment']) or args['text'] or ''
args['image'] = args['image'] or FN.item{['item'] = args['item'], ['enchantment'] = args['enchantment'], ['variant'] = args['variant']}
else
args['link'] = args['link'] or args['item'] or ''
args['text'] = args['text'] or args['item'] or ''
args['image'] = args['image'] or FN.item{args['item'], args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:ItemData/data' or ''
local link, img = ImageLink._createLink(args)
link:addClass('item-icon')
if args['item'] then link:attr('data-item', args['item']) end
if args['enchantment'] then link:attr('data-enchantment', args['enchantment']):addClass('enchantment-icon') end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', "lol")
return link
end
function ImageLink.WRitem(frame)
local args = lib.frameArguments(frame)
if args['enchantment'] then
args['link'] = args['link'] or ("WR:" .. args['enchantment']) or ''
args['text'] = formatnil('%s (%s)', args['item'], args['enchantment']) or args['text'] or ''
args['image'] = args['image'] or FN.WRitem{['item'] = args['item'], ['enchantment'] = args['enchantment'], ['variant'] = args['variant']}
else
args['link'] = args['link'] or ("WR:" .. args['item']) or ''
args['text'] = args['text'] or args['item'] or ''
args['image'] = args['image'] or FN.WRitem{args['item'], args['enchantment'], args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:WRItemData/data' or ''
local link, img = ImageLink._createLink(args)
link:addClass('item-icon')
if args['item'] then link:attr('data-item', args['item']) end
if args['enchantment'] then link:attr('data-enchantment', enchantment):addClass('enchantment-icon') end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', "wr")
return link
end
function ImageLink.loading(frame)
local args = lib.frameArguments(frame)
_input = args['champion']
local luaChampionName = lib.validateName(args['champion'])
args['champion'] = lib.outputValidateName(luaChampionName)
args['link'] = args['link'] or args['champion'] or ''
args['text'] = args['text'] or _input or ''
args['image'] = args['image'] or FN.loading{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
args['size'] = args['size'] or '110px'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('skin-icon')
link:attr('data-skin', lib.ternary(args['skin'] == '', 'Original', args['skin'] or 'Original'))
if args['champion'] then link:attr('data-champion', luaChampionName) end
if args['variant'] then link:attr('data-variant', args['variant']) end
return link
end
function ImageLink.rune(frame)
local args = lib.frameArguments(frame)
args['link'] = args['link'] or args['rune'] and args['rune'] .. '_(Rune)' or ''
args['text'] = args['text'] or args['rune'] or ''
args['image'] = args['image'] or FN.rune{args['rune'], args['variant']}
args['editlink'] = args['editlink'] or formatnil('Template:Rune data %s', args['rune']) or ''
args['border'] = args['border'] or 'false'
local link, img = ImageLink._createLink(args)
link:addClass('rune-icon')
if args['rune'] then link:attr('data-rune', args['rune']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'lol')
return link
end
function ImageLink.WRrune(frame)
local args = lib.frameArguments(frame)
args['link'] = args['link'] or 'WR:' .. args['rune']
args['text'] = args['text'] or args['rune'] or ''
args['image'] = args['image'] or FN.WRrune{args['rune'], args['variant']}
args['editlink'] = args['editlink'] or formatnil('Template:Rune data %s (Wild Rift)', args['rune']) or ''
local link, img = ImageLink._createLink(args)
link:addClass('rune-icon')
if args['rune'] then link:attr('data-rune', args['rune']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'wr')
return link
end
function ImageLink.skin(frame)
local args = lib.frameArguments(frame)
local userError = require('Module:User error')
_input = args['champion']
local luaChampionName = lib.validateName(args['champion'])
local skinData = mw.loadData('Module:SkinData/data')
local skinname = args['skin'] or "Original"
if skinData[luaChampionName] == nil then
return userError("''" .. luaChampionName .. "'' is not a valid champion name" , "LuaError")
end
if skinData[luaChampionName].skins[skinname] == nil then
return userError("Skin ''" .. skinname .. "'' for " .. luaChampionName .. " is not specified in Module:SkinData/data" , "LuaError")
end
local formatname = skinData[luaChampionName].skins[skinname].formatname
local outputName = lib.outputValidateName(luaChampionName)
if outputName == "Nunu & Willump" then
args['link'] = ("Nunu" and "Nunu/Cosmetics") or args['link'] or ''
else
args['link'] = args['link'] or (outputName and outputName .. "/Cosmetics") or ''
end
args['text'] = args['text'] or lib.ternary(formatname, formatname, skinname .. " " .. _input) or ''
args.circle = args.circle or "true"
if args['circle'] == 'true' then
args['image'] = args['image'] or FN.championcircle{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
else
args['image'] = args['image'] or FN.championsquare{_input, ["variant"] = args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:SkinData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('skin-icon')
link:attr('data-skin', lib.ternary(args['skin'] == '', 'Original', args['skin'] or 'Original'))
if args['champion'] then link:attr('data-champion', luaChampionName) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'lol')
return link
end
function ImageLink.WRskin(frame)
local args = lib.frameArguments(frame)
local userError = require('Module:User error')
_input = args['champion']
local luaChampionName = lib.validateName(args['champion'])
local skinData = mw.loadData('Module:SkinDataWR/data')
local skinname = args['skin'] or "Original"
if skinData[luaChampionName] == nil then
return userError("''" .. luaChampionName .. "'' is not a valid champion name" , "LuaError")
end
if skinData[luaChampionName].skins[skinname] == nil then
return userError("Skin ''" .. skinname .. "'' for " .. luaChampionName .. " is not specified in Module:SkinDataWR/data" , "LuaError")
end
local formatname = skinData[luaChampionName].skins[skinname].formatname
local outputName = lib.outputValidateName(luaChampionName)
args['link'] = args['link'] or (outputName and "WR:"..outputName .. "/Cosmetics") or ''
args['text'] = args['text'] or lib.ternary(formatname, formatname, skinname .. " " .. _input) or ''
args.circle = args.circle or "true"
if args['circle'] == 'true' then
args['image'] = args['image'] or FN.WRchampioncircle{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
else
args['image'] = args['image'] or FN.WRchampionsquare{_input, ["variant"] = args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:SkinDataWR/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('skin-icon')
link:attr('data-skin', lib.ternary(args['skin'] == '', 'Original', args['skin'] or 'Original'))
if args['champion'] then link:attr('data-champion', luaChampionName) end
if args['variant'] then link:attr('data-variant', args['variant']) end
link:attr('data-game', 'wr')
return link
end
function ImageLink.spell(frame)
local args = lib.frameArguments(frame)
local SPD = require('Module:SpellData')
args['link'] = args['link'] or SPD.getlink{spell = args['spell']} or ''
args['text'] = args['text'] or args['spell'] or ''
args['image'] = args['image'] or SPD.getfile{spell = args['spell'], variant = args['variant']}
args['editlink'] = args['editlink'] or 'Module:SpellData/data' or ''
local link, img = ImageLink._createLink(args)
if args['notooltip'] == 'true' or mw.loadData('Module:SpellData/data')[SPD.spellargument{args["spell"]}] == nil then
else
link:addClass('spell-icon')
if args['spell'] then link:attr('data-spell', args['spell']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
if args['width'] and img ~= nil then img:addClass('icon-' .. args['width']) end
link:attr('data-game', 'lol')
end
return link
end
function ImageLink.WRspell(frame)
local args = lib.frameArguments(frame)
local SPD = require('Module:SpellDataWR')
args['link'] = args['link'] or SPD.getlink{spell = args['spell']} or ''
args['text'] = args['text'] or args['spell'] or ''
args['image'] = args['image'] or FN.WRspell{spell = args['spell'], variant = args['variant']}
args['editlink'] = args['editlink'] or 'Module:SpellDataWR/data' or ''
local link, img = ImageLink._createLink(args)
if args['notooltip'] == 'true' or mw.loadData('Module:SpellDataWR/data')[SPD.spellargument{args["spell"]}] == nil then
else
link:addClass('spell-icon')
if args['spell'] then link:attr('data-spell', args['spell']) end
if args['variant'] then link:attr('data-variant', args['variant']) end
if args['width'] and img ~= nil then img:addClass('icon-' .. args['width']) end
link:attr('data-game', 'wr')
end
return link
end
function ImageLink.ward(frame)
local args = lib.frameArguments(frame)
args['link'] = args['link'] or 'Ward skins'
args['text'] = args['text'] or args['ward'] .. ' Ward' or ''
args['image'] = args['image'] or FN.ward{args['ward']}
args['size'] = args['size'] or 64
args['border'] = args['border'] or 'false'
local link, img = ImageLink._createLink(args)
link:addClass('ward-icon')
return link
end
function ImageLink.TFTchampion(frame)
local args = lib.frameArguments(frame)
local TFTu = require('Module:TFTUnitData')
_input = args['champion']
if args['champion'] == 'Rhaast' and tonumber(args['set']) == 14 then
args['champion'] = 'Rhaast'
else
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
end
if args['set'] then
args['skin'] = args['skin'] or TFTu.get{args.champion, args['set'], 'skin'}
args['variant'] = args['variant'] or TFTu.get{args.champion, args['set'], 'variant'}
end
if args['set'] ~= nil then
args['link'] = args['link'] or (args.champion and 'TFT:' .. args['champion'] .. '#Set ' .. tostring(args['set'])) or ""
else
args['link'] = args['link'] or (args.champion and 'TFT:' .. args['champion']) or ""
end
args['text'] = args['text'] or _input or ''
if args['circle'] == 'true' then
args['image'] = args['image'] or FN.TFTchampioncircle{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
else
args['image'] = args['image'] or FN.TFTchampionsquare{_input, args['skin'], args['variant']}
end
args['editlink'] = args['editlink'] or 'Module:TFTUnitData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
if args['set'] then
link:addClass('tft-icon')
link:attr('data-param', args['champion'])
link:attr('data-type', 'champion')
link:attr('data-set', args['set'])
end
return link
end
function ImageLink.TFTrender(frame)
local args = lib.frameArguments(frame)
local TFTu = require('Module:TFTUnitData')
_input = args['champion']
args['champion'] = lib.outputValidateName(lib.validateName(args['champion']))
if args['set'] then
args['skin'] = args['skin'] or TFTu.get{args.champion, args['set'], 'skin'}
args['variant'] = args['variant'] or TFTu.get{args.champion, args['set'], 'variant'}
end
args['link'] = args['link'] or (args.champion and 'TFT:' .. args['champion']) or ""
args['text'] = args['text'] or _input or ''
args['image'] = args['image'] or FN.render{_input, args['skin'], args['variant']}
args['border'] = args['border'] or 'false'
args['editlink'] = args['editlink'] or 'Module:TFTUnitData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
if args['set'] then
link:addClass('tft-icon')
link:attr('data-param', args['champion'])
link:attr('data-type', 'champion')
link:attr('data-set', args['set'])
end
return link
end
function ImageLink.TFTitem(frame)
local args = lib.frameArguments(frame)
local TFTItemData = require('Module:TFTItemData/getter')
if args['item'] == 'Yuumi' then
args['link'] = 'TFT:' .. args['item'] .. ' (Item)#Set ' .. args['set']
else
args['link'] = args['link'] or 'TFT:' .. args['item'] .. '#Set ' .. args['set'] or 'TFT:' .. args['item'] or 'TFT:' .. args['item'] .. '#Set ' .. args['set'] or 'TFT:' .. args['item'] or ''
end
args['text'] = args['text'] or args['item'] or ''
args['image'] = args['image'] or TFTItemData['icon'](args['item'],args['set']) or args['item'] .. ' TFT item.png'
args['editlink'] = args['editlink'] or 'Module:TFTItemData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
if args['set'] then
link:addClass('tft-icon')
link:attr('data-param', args['item'])
link:attr('data-type', 'item')
link:attr('data-set', args['set'])
end
return link
end
--output = p.TFTtrait{ trait = 'Star Guardian'}
--mw.log(output)
function ImageLink.TFTtrait(frame)
local args = lib.frameArguments(frame)
local TFTTraitData = require('Module:TFTTraitData/getter')
local traitName = args['trait'] or ''
if args['trait'] then
args['trait'] = 'TFT:' .. args['trait']
elseif args['trait'] and (args['link'] == 'TFT:' .. args['trait'] and args['link'] ~= nil) then
args['trait'] = 'TFT:' .. args['trait']
else
args['trait'] = ''
end
if args['set'] then
args['link'] = args['link'] or args['trait'] .. '#Set ' .. args['set'] or ''
else
args['link'] = args['link'] or args['trait'] or ''
end
args['text'] = args['text'] or traitName or ''
args['image'] = args['image'] or TFTTraitData['icon'](args['traitname'],tonumber(args['set'])) or traitName .. ' TFT icon.svg'
args['editlink'] = args['editlink'] or 'Module:TFTTraitData/data'
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
if args['set'] then
link:addClass('tft-icon')
link:attr('data-param', args['trait'])
link:attr('data-type', 'trait')
link:attr('data-set', args['set'])
end
return link
end
function ImageLink.LittleLegend(frame)
local args = lib.frameArguments(frame)
args['tier'] = args['tier'] or '3'
args['link'] = args['link'] or 'TFT:' .. args['legend']
if (args['text'] == nil) then
if (args['variant'] ~= nil) then
args['text'] = args['variant'] .. ' '
else
args['text'] = ''
end
args['text'] = args['text'] .. args['legend']
end
if (args['image'] == nil) then
if (args['legend'] ~= nil) then
if (args['variant'] ~= nil) then
args['image'] = args['legend'] .. ' ' .. args['variant'] .. ' Tier ' .. args['tier'] .. '.png'
else
args['image'] = 'Little Legend ' .. args['legend'] .. ' profileicon.png'
end
else
args['image'] = '*none*'
end
end
local link, img = ImageLink._createLink(args)
return link
end
function ImageLink.basic(frame)
local args = lib.frameArguments(frame)
local link, img, label = ImageLink._createLink(args)
return link
end
local weird_gloop = {"Zac OriginalCircle.png", "Zac SpecialWeaponCircle.png", "Zac ZestyDipCircle.png", "Zac PoolPartyCircle.png", "Zac EmpyreanCircle.png", "Zac SKTT1Circle.png"}
local function get_gloop(img_node)
if not weird_gloop.seed then
local frame = mw.getCurrentFrame()
weird_gloop.seed = tonumber(frame:callParserFunction("#var:bees"))
if weird_gloop.seed then
weird_gloop.seed = weird_gloop.seed + 1
else
weird_gloop.seed = os.time()
end
math.randomseed( weird_gloop.seed )
do
local oldrandom = math.random
local randomtable
math.random = function ()
if randomtable == nil then
randomtable = {}
for i = 1, 97 do
randomtable[i] = oldrandom()
end
end
local x = oldrandom()
local i = 1 + math.floor(97*x)
x, randomtable[i] = randomtable[i], x
return x
end
end
img_node:wikitext(frame:callParserFunction("#vardefine:bees", weird_gloop.seed))
end
local image = math.random()*#weird_gloop + 1
return weird_gloop[tonumber(string.sub(image, 1, (string.find(image, ".", 1, true) or 0) - 1))]
end
function ImageLink.glossaryLoadTooltip(frame)
local args = lib.frameArguments(frame)
ImageLink._loadTooltip('glossary', args)
end
function ImageLink._createLink(args)
-- define args.display (default: inline)
args['display'] = (({['inlineblock'] = 'inline-block'})[args['display']]) or args['display'] or 'inline'
-- define args.image (default: '')
args['image'] = args['image'] or ''
if args['image'] == '*none*' then args['image'] = '' end
-- define args.border (true or false; default: true)
args['border'] = args['border'] or true
if args['border'] == 'false' or args['border'] == '0' then args['border'] = false end
-- define args.edit (true or false; default: false)
args['edit'] = args['edit'] or false
if args['edit'] == 'true' or args['edit'] == '1' then args['edit'] = true end
-- define args.style (default: 'white-space:pre')
args['style'] = args['style'] or 'white-space:pre'
if args['style'] == '*none*' then args['style'] = nil end
-- define args.labelstyle (default: 'white-space:normal')
args['labelstyle'] = args['labelstyle'] or 'white-space:normal'
if args['labelstyle'] == '*none*' then args['labelstyle'] = nil end
-- define args.width, args.height (%%x%%px or %%x%% or %%px or %%; default: 20px)
local width, height
if(args['size']) then width, height = getSize(args['size']) end
args['size'] = args['size'] or 20
args['width'] = tonumber(mw.ustring.match(args['width'] or width or '', '%d*'))
args['height'] = tonumber(mw.ustring.match(args['height'] or height or '', '%d*'))
if(not args['height']) then args['width'] = args['width'] or args['size'] end
-- define args.selflink (default: articlename)
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().prefixedText
-- define args.link (default: '')
args['link'] = args['link'] or ''
if args['link'] == '*none*' then args['link'] = '' end
-- define args.possessive (default: '')
args['possessive'] = args['possessive'] or ''
if args['possessive'] == 'true' or args['possessive'] == '1' then args['possessive'] = true end
-- define args.text (default: '')
args['text'] = args['text'] or args['link'] or ''
if args['text'] == '*none*' then args['text'] = '' end
if args['possessive'] == true then
if mw.ustring.sub(args['text'], -1) == 's' then
args['text'] = args['text'] .. '\''
else
args['text'] = args['text'] .. '\'s'
end
end
-- define args.alttext (default: '')
local description = ''
if args["ability"] and args["champion"] then
description = "An icon for "..args["champion"].."'s ability "..args["ability"]
elseif args["item"] then
description = "An icon for the item "..args["item"]
else
description = "An icon representing "..(args["link"] or '')
end
-- = 'An image of '..display..' linking to '..destination
args['alttext'] = description
-- define args.label (before or after; default: after)
args['label'] = (({['after'] = 'after', ['before'] = 'before'})[args['label']]) or 'after'
if args['image'] == '' then args['label'] = 'only' end
if args['text'] == '' then args['label'] = 'none' end
-- define args.labellink (true or false; default: true)
args['labellink'] = args['labellink'] or true
if args['labellink'] == 'false' or args['labellink'] == '0' then args['labellink'] = false end
--define args.data-param (specified or '')
args['data-param'] = args['data-param'] or ''
if args['data-param'] == '*none*' then args['data-param'] = nil end
args['attr-name'] = args['attr-name'] or 'param'
-- define args.separator (default: ' ')
args['separator'] = args['separator'] or ' '
local tag = lib.ternary(args['display'] == 'inline', 'span', 'div')
local link = builder.create(tag):css('display', args['display']):addClass(args['display'] .. '-image')
if args['class'] then link:addClass(args['class']) end
if args['style'] then link:cssText(args['style']) end
if args['data-param'] then link:attr('data-'..args['attr-name'], args['data-param']) end
-- //img start
local img = builder.create(tag)
if args['image'] ~= '' then
args["image"] = get_gloop(img)
img:css({position = 'relative', display = 'inline-block'})
local size = tostring(args['width'] or '') .. 'x' .. tostring(args['height'] or '') .. 'px'
if args['iconclass'] then img:addClass(args['iconclass']) end
if args['width'] then img:attr('data-width', tostring(args['width'])) end
if args['height'] then img:attr('data-height', tostring(args['height'])) end
if args['border'] == true then img:addClass('border') end
if args['iconstyle'] then img:cssText(args['iconstyle']) end
-- [[File:test.jpg|24px|border|link=test|testing]]
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
args['image'],
lib.ternary(size == 'px', '', '|'..size),
lib.ternary(args['border'], '|border', ''),
lib.ternary(args['link'] == args['selflink'], '', args['link']),
lib.ternary(args['alttext'] == '',
lib.ternary(args['text'] == '', '', '|' .. args['text']),
'|' .. args['alttext']
)
))
if args['image2'] then
args["image2"] = get_gloop(img)
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
args['image2'],
lib.ternary(size == 'px', '', '|'..size),
lib.ternary(args['border'], '|border', ''),
lib.ternary(args['link'] == args['selflink'], '', args['link']),
lib.ternary(args['alttext'] == '',
lib.ternary(args['text'] == '', '', '|' .. args['text']),
'|' .. args['alttext']
)
))
end
if args['image3'] then
args["image3"] = get_gloop(img)
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
args['image3'],
lib.ternary(size == 'px', '', '|'..size),
lib.ternary(args['border'], '|border', ''),
lib.ternary(args['link'] == args['selflink'], '', args['link']),
lib.ternary(args['alttext'] == '',
lib.ternary(args['text'] == '', '', '|' .. args['text']),
'|' .. args['alttext']
)
))
end
-- //bottom right number start
if args['number'] and args['number'] ~= '' then
local number = builder.create('span')
local t = {
['position'] = 'absolute',
['font-size'] = string.gsub(math.min(args['width'] or 1e309, args['height'] or 1e309), 'px', '')/2 ..'px',
['line-height'] = '1em',
['bottom'] = '0.08em',
['right'] = '0.1em',
['font-weight'] = 'bold',
['pointer-events'] = 'none',
['color'] = lib.ternary(args['blacknum'] == 'true', '#111', '#EEE'),
['text-shadow'] = lib.ternary(args['blacknum'] == 'true', '-1px 0 1px #fff, 0 1px 1px #fff, 1px 0 1px #fff, 0 -1px 1px #fff', '-1px 0 1px #000, 0 1px 1px #000, 1px 0 1px #000, 0 -1px 1px #000')
}
number:css(t)
number:wikitext(args['number'])
number:done()
img:node(number)
end
-- //bottom right number end
else
img = nil
end
-- //img end
-- //label start
local label = builder.create(tag)
if args['text'] ~= '' then
link:addClass('label-' .. args['label'])
if args['labelclass'] then label:addClass(args['labelclass']) end
if args['labelstyle'] then label:cssText(args['labelstyle']) end
if args['link'] == '' or args['labellink'] == false then
label:wikitext(args['text'])
elseif args['selflink'] == args['link'] then
label:wikitext('<strong class="selflink">' .. args['text'] .. '</strong>')
elseif args['text'] == args['link'] then
label:wikitext(formatnil('[[%s]]', args['text']))
else
label:wikitext(formatnil('[[%s|%s]]', args['link'], args['text']))
end
if args['edit'] == true and args['editlink'] ~= nil then
label:wikitext(' <sup>[' .. tostring(mw.uri.fullUrl(args['editlink'], 'action=edit')) .. ' e]</sup>')
end
else
label = nil
end
-- //label end
if args['label'] == 'before' then
if label then link:node(label) end
if args['separator'] and img and label then link:wikitext(args['separator']) end
if img then link:node(img) end
else
if img then link:node(img) end
if args['separator'] and img and label then link:wikitext(args['separator']) end
if label then link:node(label) end
end
return link, img, label
end
function ImageLink._loadTooltip(tipType, args)
if tipMap[tipType] ~= nil then
local count = tonumber(vars.var('count', 0))
if count < 40 then
local template = tipMap[tipType]
-- subst known arguments
for k, v in pairs(args) do
template = template:gsub('<#' .. k .. '#>', tostring(v))
end
-- for all remaining <#string#>, remove them
template = template:gsub('<#%a+#>', '')
if string.find(vars.var('tooltipHolder'), template, 1, true) == nil then
vars.vardefine('tooltipHolder', vars.var('tooltipHolder') .. template)
vars.vardefine('count', count + 1)
end
end
end
return
end
function formatnil(text, ...)
if select("#", ...) == 0 then return text end
for i=1, select("#", ...) do
if select(i, ...) == nil then return nil end
end
return mw.ustring.format(text, ...)
end
function getSize(size)
local fields = _explode('x', string.gsub(tostring(size) or '', 'px', '', 1))
local width = tonumber(fields[1]) or nil
local height = tonumber(fields[2]) or nil
return width, height
end
function _explode( sep, text )
local sep, fields = sep or "::", {}
local pattern = string.format("([^%s]+)", sep)
text:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
return ImageLink
-- </pre>
-- [[Category:Lua]]