Module:Portal-inline: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
Created page with "local getImageName = require( 'Module:Portal' ).image local p = {} local function checkPortalExists(portal) return not (mw.title.makeTitle(100, portal).id == 0) end local..." |
m 1 revision imported |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
local | -- determine whether we're being called from a sandbox | ||
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) | |||
local sandbox = isSandbox and '/sandbox' or '' | |||
local getArgs = require('Module:Arguments').getArgs | |||
local yesno = require('Module:Yesno') | |||
local portalModule = require('Module:Portal'..sandbox) | |||
local getImageName = portalModule._image | |||
local checkPortals = portalModule._checkPortals | |||
local processPortalArgs = portalModule._processPortalArgs | |||
local p = {} | local p = {} | ||
local function | -- Function to format error message and tracking category | ||
-- Arguments: | |||
-- errMsg: string, or nil/false if no error | |||
-- trackingCat: string for tracking category (or empty string) | |||
local function formatError(errMsg, trackingCat) | |||
local result = trackingCat or '' | |||
if errMsg then | |||
local errTag = mw.html.create('span') | |||
errTag:addClass("error") | |||
errTag:css("font-size",'100%') | |||
errTag:wikitext("Error: "..errMsg) | |||
result = tostring(errTag)..result | |||
end | |||
return result | |||
end | end | ||
local function image(portal, args) | |||
local size = args.size == "tiny" and "16x16px" or "32x28px" | |||
return string.format('[[File:%s|class=noviewer|%s]]',getImageName(portal,true), size) | |||
local function | |||
local | |||
end | end | ||
local function link(portal, args) | |||
local displayName = "" | |||
if not (args.text == "" or args.text == nil) then | |||
local function | displayName = args.text | ||
local | elseif args.short then | ||
displayName = portal | |||
else | |||
displayName = portal .. " portal" | |||
end | end | ||
return | return string.format('[[Portal:%s|%s]]',portal,displayName) | ||
end | end | ||
function p._main(portals, args) | function p._main(portals, args) | ||
mw.logObject(args) | mw.logObject(args) | ||
-- Normalize all arguments | |||
if args.redlinks == 'include' then args.redlinks = true end | |||
for key, default in pairs({tracking=true,redlinks=false,short=false}) do | |||
if args[key] == nil then args[key] = default end | |||
args[key] = yesno(args[key], default) | |||
end | end | ||
local trackingCat = '' | |||
local errMsg = nil | |||
-- Check for existing categories, drop if not. | |||
if | -- Possible generate tracking category & error message if needed | ||
args.minPortals = args.minPortals or 1 | |||
args.maxPortals = args.maxPortals or 1 | |||
portals, trackingCat, errMsg = checkPortals(portals,args) | |||
-- use more specific tracking cat for inline portal | |||
trackingCat = mw.ustring.gsub(trackingCat,"Portal templates","Portal-inline template") | |||
-- either too many/few portals, or no portals left after filtering, then return | |||
if errMsg or #portals == 0 then | |||
return formatError(errMsg, trackingCat) | |||
-- | |||
return | |||
end | end | ||
return image(portals[1],args)..' '..link(portals[1],args)..(trackingCat or '') | |||
end | end | ||
function p.main(frame) | |||
local origArgs = getArgs(frame) | |||
local portals, args = processPortalArgs(origArgs) | |||
return p._main(portals, args) | |||
end | end | ||
return p | return p |
Latest revision as of 20:04, 28 November 2023
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. |
This Lua module is used on approximately 218,000 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 depends on the following other modules: |
This module implements Template:Portal-inline. This module excepts one unnamed parameter which is the portal to link to and several named parameters:
size
— optional; Specify|size=tiny
to show a 16×16 image instead of the usual size.text
— optional; Specify|text=(name)
for a different associated name to appear.short
— optional; Specify|short=anything
to remove portal from the output.redlinks
— optional; Specify|redlinks=yes
to show the portal if it is redlinked.
-- determine whether we're being called from a sandbox
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true)
local sandbox = isSandbox and '/sandbox' or ''
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local portalModule = require('Module:Portal'..sandbox)
local getImageName = portalModule._image
local checkPortals = portalModule._checkPortals
local processPortalArgs = portalModule._processPortalArgs
local p = {}
-- Function to format error message and tracking category
-- Arguments:
-- errMsg: string, or nil/false if no error
-- trackingCat: string for tracking category (or empty string)
local function formatError(errMsg, trackingCat)
local result = trackingCat or ''
if errMsg then
local errTag = mw.html.create('span')
errTag:addClass("error")
errTag:css("font-size",'100%')
errTag:wikitext("Error: "..errMsg)
result = tostring(errTag)..result
end
return result
end
local function image(portal, args)
local size = args.size == "tiny" and "16x16px" or "32x28px"
return string.format('[[File:%s|class=noviewer|%s]]',getImageName(portal,true), size)
end
local function link(portal, args)
local displayName = ""
if not (args.text == "" or args.text == nil) then
displayName = args.text
elseif args.short then
displayName = portal
else
displayName = portal .. " portal"
end
return string.format('[[Portal:%s|%s]]',portal,displayName)
end
function p._main(portals, args)
mw.logObject(args)
-- Normalize all arguments
if args.redlinks == 'include' then args.redlinks = true end
for key, default in pairs({tracking=true,redlinks=false,short=false}) do
if args[key] == nil then args[key] = default end
args[key] = yesno(args[key], default)
end
local trackingCat = ''
local errMsg = nil
-- Check for existing categories, drop if not.
-- Possible generate tracking category & error message if needed
args.minPortals = args.minPortals or 1
args.maxPortals = args.maxPortals or 1
portals, trackingCat, errMsg = checkPortals(portals,args)
-- use more specific tracking cat for inline portal
trackingCat = mw.ustring.gsub(trackingCat,"Portal templates","Portal-inline template")
-- either too many/few portals, or no portals left after filtering, then return
if errMsg or #portals == 0 then
return formatError(errMsg, trackingCat)
end
return image(portals[1],args)..' '..link(portals[1],args)..(trackingCat or '')
end
function p.main(frame)
local origArgs = getArgs(frame)
local portals, args = processPortalArgs(origArgs)
return p._main(portals, args)
end
return p