| Line 1: |
Line 1: |
| | -- This module implements [[Template:Icon]]. | | -- This module implements [[Template:Icon]]. |
| | | | |
| − | local data = mw.loadData('Module:Icon/data') | + | require("strict") |
| | + | local yesNo = require("Module:Yesno") |
| | + | local getArgs = require("Module:Arguments").getArgs |
| | + | local getPlain = nil |
| | | | |
| | local p = {} | | local p = {} |
| | | | |
| − | function p._main(args) | + | -- Determine whether we're being called from a sandbox |
| | + | local sandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) and '/sandbox' or '' |
| | + | |
| | + | -- Implements [[Template:Icon]] |
| | + | -- Returns the icon image corresponding to a string (like 'B') |
| | + | function p._main(args, data) |
| | + | local data_module = 'Module:Icon/data'..sandbox |
| | + | data = data or mw.loadData(data_module) |
| | local code = args.class or args[1] | | local code = args.class or args[1] |
| | local iconData | | local iconData |
| Line 16: |
Line 26: |
| | end | | end |
| | return string.format( | | return string.format( |
| − | '[[File:%s%s|%s|link=]]', | + | '[[File:%s%s%s|%s|class=noviewer|alt=%s]]', |
| | iconData.image, | | iconData.image, |
| | iconData.tooltip and '|' .. iconData.tooltip or '', | | iconData.tooltip and '|' .. iconData.tooltip or '', |
| − | args.size or '16x16px' | + | iconData.link == false and '|link=' or '', |
| | + | args.size or '16x16px', |
| | + | iconData.alt or '' |
| | ) | | ) |
| | + | end |
| | + | |
| | + | -- Implements [[Template:Icon link]], a superset of [[Template:Icon]] |
| | + | -- Returns an icon, plus a suitably formatted wikilink |
| | + | function p._link(args, data) |
| | + | args.size = args.size or args.iconsize |
| | + | local icon = p._main(args, data) |
| | + | -- If no link given in args[2], default back to [[Template:Icon]] |
| | + | if not args[2] then |
| | + | return icon |
| | + | end |
| | + | -- Strip wiki markup out of link |
| | + | getPlain = getPlain or require("Module:Text").Text().getPlain |
| | + | local link = getPlain(args[2]) |
| | + | local display = args[3] or args[2] |
| | + | -- italicize display string, if requested |
| | + | if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then |
| | + | display = '<i>'..display..'</i>' |
| | + | end |
| | + | -- if display is link, just use standard wlink |
| | + | if link == display then |
| | + | return icon..' [['..link..']]' |
| | + | end |
| | + | return icon..' [['..link..'|'..display..']]' |
| | end | | end |
| | | | |
| | function p.main(frame) | | function p.main(frame) |
| − | local args = {} | + | local args = getArgs(frame,{parentFirst=true}) |
| − | for k, v in pairs(frame:getParent().args) do
| |
| − | args[k] = v
| |
| − | end
| |
| | return p._main(args) | | return p._main(args) |
| | + | end |
| | + | |
| | + | function p.link(frame) |
| | + | local args = getArgs(frame,{parentFirst=true}) |
| | + | return p._link(args) |
| | end | | end |
| | | | |
| | return p | | return p |