Module:Icon: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
m (3 revisions imported) |
Kinsey Reports>WOSlinker (use require("strict") instead of require("Module:No globals")) |
||
Line 1: | Line 1: | ||
-- This module implements [[Template:Icon]]. | -- This module implements [[Template:Icon]]. | ||
local | 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| | '[[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}) | ||
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 |
Revision as of 08:04, 21 October 2022
This module displays an icon depending on the code it is given. It implements Template:Icon.
This Lua module is used on approximately 584,000 pages, or roughly 8870% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
From wikitext
From wikitext this module should be used via Template:Icon. Please see the template page for documentation.
From Lua
To use this module from another Lua module, first load it:
<syntaxhighlight lang="lua"> local mIcon = require('Module:Icon') </syntaxhighlight>
Then you can make icons with the _main function.
<syntaxhighlight lang="lua"> mIcon._main(args) </syntaxhighlight>
The args variable is a table of arguments. This corresponds to the parameters accepted by Template:Icon - please see the template page for parameter documentation.
Data
The icon data is stored at Module:Icon/data. See the instructions there for how to add and remove icons.
-- This module implements [[Template:Icon]]. require("strict") local yesNo = require("Module:Yesno") local getArgs = require("Module:Arguments").getArgs local getPlain = nil local p = {} -- 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 iconData if code then code = code:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case iconData = data[code] end if not iconData then iconData = data._DEFAULT end return string.format( '[[File:%s%s%s|%s|class=noviewer|alt=%s]]', iconData.image, iconData.tooltip and '|' .. iconData.tooltip or '', 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 function p.main(frame) local args = getArgs(frame,{parentFirst=true}) return p._main(args) end function p.link(frame) local args = getArgs(frame,{parentFirst=true}) return p._link(args) end return p