Advertisement:
Module:Portal-inline: Difference between revisions
Jump to navigation
Jump 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 trackingEnabled = true -- Check whether to do tracking in this namespace -- Returns true unless the page is one of the banned namespaces local function checkTrackingNamespace() local thisPage = mw.title.getCurrentTitle() if (thisPage.namespace == 1) -- Talk or (thisPage.namespace == 2) -- User...") |
m (1 revision imported) |
||
(2 intermediate revisions by one other user 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 04:28, 15 September 2022
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 148,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