Diff: Module:Icon
Comparing revision #1 (2022-10-21 08:04:06) with revision #2 (2023-02-02 06:54:21).
| Old | New |
|---|---|
-- This module implements [[Template:Icon]]. |
-- This module implements [[Template:Icon]]. |
require("strict") |
require("strict") |
local yesNo = require("Module:Yesno") |
local yesNo = require("Module:Yesno") |
local getArgs = require("Module:Arguments").getArgs |
local getArgs = require("Module:Arguments").getArgs |
local getPlain = nil |
local getPlain = nil |
local p = {} |
local p = {} |
-- Determine whether we're being called from a sandbox |
-- Determine whether we're being called from a sandbox |
local sandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) and '/sandbox' or '' |
local sandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) and '/sandbox' or '' |
-- Implements [[Template:Icon]] |
-- Implements [[Template:Icon]] |
-- Returns the icon image corresponding to a string (like 'B') |
-- Returns the icon image corresponding to a string (like 'B') |
function p._main(args, data) |
function p._main(args, data) |
local data_module = 'Module:Icon/data'..sandbox |
local data_module = 'Module:Icon/data'..sandbox |
data = data or mw.loadData(data_module) |
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 |
if code then |
if code then |
code = code:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case |
code = code:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case |
iconData = data[code] |
iconData = data[code] |
end |
end |
if not iconData then |
if not iconData then |
iconData = data._DEFAULT |
iconData = data._DEFAULT |
end |
end |
return string.format( |
return string.format( |
'[[File:%s%s%s|%s|class=noviewer|alt=%s]]', |
'[[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 '', |
iconData.link == false and '|link=' or '', |
iconData.link == false and '|link=' or '', |
args.size or '16x16px', |
args.size or '16x16px', |
iconData.alt or '' |
iconData.alt or '' |
) |
) |
end |
end |
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]] |
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]] |
-- Returns an icon, plus a suitably formatted wikilink |
-- Returns an icon, plus a suitably formatted wikilink |
function p._link(args, data) |
function p._link(args, data) |
args.size = args.size or args.iconsize |
args.size = args.size or args.iconsize |
local icon = p._main(args, data) |
local icon = p._main(args, data) |
-- If no link given in args[2], default back to [[Template:Icon]] |
-- If no link given in args[2], default back to [[Template:Icon]] |
if not args[2] then |
if not args[2] then |
return icon |
return icon |
end |
end |
-- Strip wiki markup out of link |
-- Strip wiki markup out of link |
getPlain = getPlain or require("Module:Text").Text().getPlain |
getPlain = getPlain or require("Module:Text").Text().getPlain |
local link = getPlain(args[2]) |
local link = getPlain(args[2]) |
local display = args[3] or args[2] |
local display = args[3] or args[2] |
-- italicize display string, if requested |
-- italicize display string, if requested |
if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then |
if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then |
display = '<i>'..display..'</i>' |
display = '<i>'..display..'</i>' |
end |
end |
-- if display is link, just use standard wlink |
-- if display is link, just use standard wlink |
if link == display then |
if link == display then |
return icon..' [['..link..']]' |
return icon..' [['..link..']]' |
end |
end |
return icon..' [['..link..'|'..display..']]' |
return icon..' [['..link..'|'..display..']]' |
end |
end |
function p.main(frame) |
function p.main(frame) |
local args = getArgs(frame,{parentFirst=true}) |
local args = getArgs(frame,{parentFirst=true}) |
return p._main(args) |
return p._main(args) |
end |
end |
function p.link(frame) |
function p.link(frame) |
local args = getArgs(frame,{parentFirst=true}) |
local args = getArgs(frame,{parentFirst=true}) |
return p._link(args) |
return p._link(args) |
end |
end |
return p |
return p |