Lompat ke isi

Modul:Portal-inline

Ḍâri Wikipèḍia bhâsa Madhurâ, lombhung pangataowan mardhika


TemplateStyles' src attribute must not be empty.

TemplateStyles' src attribute must not be empty.

TemplateStyles' src attribute must not be empty.

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 mw.ustring.format('<span class="nowrap">%s </span>%s%s',
		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