Ir para o conteúdo

Módulo:Labelled list hatnote

De Wiki TokuDrive
Revisão de 04h53min de 5 de julho de 2026 por Tavoraadmin (discussão | contribs) (Importando predefinição/módulo da Wikipédia em português para manter layout)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

-- Lista rotulada -- -- -- -- Este módulo faz o trabalho principal de criar uma nota ('hatnote') -- -- composta por uma lista prefixada por um rótulo terminado em dois pontos, -- -- ou seja, "Rótulo: ['andList' de páginas]", para Predefinição:Ver também e -- -- predefinições similares. --


local mHatnote = require('Módulo:Hatnote') local mHatlist = require('Módulo:Hatnote list') local mArguments -- inicializa preguiçosamente local yesno -- inicializa preguiçosamente local p = {}

-- Padrões globais para este módulo local defaults = { label = 'Ver também', -- Recurso ('fallback') final para argumento de rótulo ('label') labelForm = '%s: %s', prefixes = {'label', 'label ', 'l'}, template = 'Módulo:Labelled list hatnote' }

-- Sequências ('strings') de mensagem localizáveis local msg = { errorSuffix = '#Erros', noInputWarning = 'nenhum nome de página especificado', noOutputWarning = "%s — sem saída: nenhuma das páginas de destino existe." }

-- Função auxiliar que pré-combina parâmetros de exibição em argumentos de página. -- Também compacta arranjos esparsos, como um efeito colateral desejável. function p.preprocessDisplays (args, prefixes) -- Os prefixos especificam quais parâmetros, em ordem, devem ser verificados quanto às opções a serem mostradas -- Cada um deles tem números anexados automaticamente, por exemplo 'label1', 'label 1' e 'l1' prefixes = prefixes or defaults.prefixes local indices = {} local sparsePages = {} for k, v in pairs(args) do if type(k) == 'number' then indices[#indices + 1] = k local display for i = 1, #prefixes do display = args[prefixes[i] .. k] if display then break end end sparsePages[k] = display and string.format('%s|%s', string.gsub(v, '|.*$', ), display) or v end end table.sort(indices) local pages = {} for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end return pages end

-- Função auxiliar para obter um destino de página de uma sequência ('string') de página processada -- por exemplo. "Página|Rótulo" → "Página" ou "Destino" → "Destino" local function getTarget(pagename)

	local pipe = string.find(pagename, '|')

return string.sub(pagename, 0, pipe and pipe - 1 or nil) end

-- Produz uma nota ('hatnote') de lista de páginas rotuladas. -- O quadro principal (definição da predefinição) leva 1 ou 2 argumentos, para um rótulo singular -- e (opcionalmente) plural, respectivamente: -- * {{#invoke:Labelled list hatnote|labelledList|Rótulo singular|Rótulo plural}} -- A predefinição resultante usa os parâmetros de nome de página e rótulo normalmente. function p.labelledList (frame) mArguments = require('Módulo:Arguments') yesno = require('Módulo:Yesno') local labels = {frame.args[1] or defaults.label} labels[2] = frame.args[2] or labels[1] labels[3] = frame.args[3] -- ('no defaulting') labels[4] = frame.args[4] -- ('no defaulting') local template = frame:getParent():getTitle() local args = mArguments.getArgs(frame, {parentOnly = true}) local pages = p.preprocessDisplays(args) local options = { category = yesno(args.category), extraclasses = frame.args.extraclasses, ifexists = yesno(frame.args.ifexists), namespace = frame.args.namespace or args.namespace, selfref = yesno(frame.args.selfref or args.selfref), template = template } return p._labelledList(pages, labels, options) end

local function exists(title) local success, result = pcall(function() return title.exists end) if success then return result else return true end end

function p._labelledList (pages, labels, options) local removednonexist = false if options.ifexists then for k = #pages, 1, -1 do -- itera para trás para permitir remoções suaves local v = pages[k] if mw.ustring.sub(mw.text.trim(v), 1, 1) ~= "#" then local title = mw.title.new(getTarget(v), namespace) if (v == ) or (title == nil) or not exists(title) then table.remove(pages, k) removednonexist = true end end end end labels = labels or {} label = (#pages == 1 and labels[1] or labels[2]) or defaults.label for k, v in pairs(pages) do if mHatnote.findNamespaceId(v) ~= 0 then label = ( #pages == 1 and (labels[3] or labels[1] or defaults.label) or (labels[4] or labels[2] or defaults.label) ) or defaults.label end end if #pages == 0 then if removednonexist then mw.addWarning( string.format( msg.noOutputWarning, options.template or defaults.template ) ) return else return mHatnote.makeWikitextError( msg.noInputWarning, (options.template or defaults.template) .. msg.errorSuffix, options.category ) end end local text = string.format( options.labelForm or defaults.labelForm, label, mHatlist.andList(pages, true) ) local hnOptions = { extraclasses = options.extraclasses, selfref = options.selfref } return mHatnote._hatnote(text, hnOptions) end

return p