Mudanças

Ir para navegação Ir para pesquisar

Módulo:Categoria ver também

3 514 bytes adicionados, 19h16min de 27 de março de 2020
Criou página com '-- This module implements {{Category see also}} local mHatnote = require('Módulo:Hatnote') local p = {} local function makeWikitextError(msg) return string.format( '<st...'
-- This module implements {{Category see also}}

local mHatnote = require('Módulo:Hatnote')

local p = {}

local function makeWikitextError(msg)
return string.format(
'<strong class="error">Erro: %s ([[Predefinição:Categoria ver também]])</strong>',
msg
)
end

-- Gets the length of the sequence seq. Usually this should be done with the #
-- operator, but we need to work with tables that get their values through an
-- __index metamethod.
local function getSequenceLength(seq)
local length = 0
for i in ipairs(seq) do
length = i
end
return length
end

-- Given a table of options, returns a function that formats categories for
-- those options.
--
-- Options:
-- project - a project code such as "fr" (for the French Wirchelp)
-- showPrefix - a boolean value for whether to show the "Category:" prefix
-- (and the project prefix if specified)
--
-- This is implemented as a function generator rather than a simple function
-- so that we can just process the options once, instead of every time we
-- generate a category.
local function newCategoryLinker(options)
local formatString
if options.project then
if options.showPrefix then
formatString = '[[:' .. options.project .. ':Categoria:%s]]'
else
formatString = '[[:' .. options.project .. ':Categoria:%s|%s]]'
end
else
if options.showPrefix then
formatString = '[[:Categoria:%s]]'
else
formatString = '[[:Categoria:%s|%s]]'
end
end
return function (category)
local title = mw.title.new(category)
local pageName, display
if not title then
-- category is not a valid title, usually because of invalid
-- characters like < or [. Raise an error and suppress the stack
-- level information so that we can catch it and format the error
-- message as wikitext.
error(string.format(
"'%s' não é um nome de categoria válido",
category
), 0)
elseif title.namespace == 14 then -- Category namespace
pageName = title.text
display = title.text
else
pageName = title.prefixedText
display = category
end
-- We can get away with using two arguments even when
-- options.showDisplay is false, as string.format ignores extra
-- arguments as long as there is an argument for each flag in the
-- format string.
return formatString:format(pageName, display)
end
end

function p._main(args)
local nLinks = getSequenceLength(args)

if nLinks < 1 then
return makeWikitextError('ao menos um parâmetro obrigatório')
end

local makeCategoryLink = newCategoryLinker{
project = args.project or args.projeto,
showPrefix = nLinks == 1,
}

local links = {}
for i, cat in ipairs(args) do
local success, categoryLink = pcall(makeCategoryLink, cat)
if success then
links[i] = categoryLink
else
-- If there was an error, then categoryLink is the error message.
return makeWikitextError(categoryLink)
end
end

local formatString
if nLinks == 1 then
formatString = '%s: %s.'
else
formatString = '%s: as categorias %s.'
end

-- Don't output a comma before the "and" if we have only two links.
local conjunction
conjunction = ' e '

local hatnoteText = formatString:format(
args.LABEL or args['RÓTULO'] or args['ETIQUETA'] or 'Ver também',
mw.text.listToText(links, ', ', conjunction)
)
return mHatnote._hatnote(hatnoteText, {selfref = true})
end

function p.main(frame)
local args = require('Módulo:Arguments').getArgs(frame, {
wrappers = 'Predefinição:Categoria ver também',
})
return p._main(args)
end

return p

Menu de navegação