Module:Portal-inline
From Thetacola Wiki
Revision as of 21:25, 4 June 2022 by en>Hike395 (automatically call Module:Portal/sandbox under test + new interface to getImageName)
File:Full-protection-shackle.svg | 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. |
File:Ambox warning orange.svg | This Lua module is used on approximately 212,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. |
File:Lua-Logo.svg | This module depends on the following other modules: |
This module implements Template:Portal-inline. This module accepts 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