Módulo:Detección de espacio de nombres
A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]
Este módulo permite imprimir un texto diferente dependiendo del espacio de nombres en el que se encuentre una página determinada. Se trata de una implementación Lua de la plantilla {{Detecta espacio de nombres}}
, con algunas mejoras: todos los espacios de nombres y todos los alias de espacio de nombres son compatibles, y los nombres de espacio de nombres se detectan automáticamente para la wiki local.
Uso
{{#invoke: Detección de espacio de nombres | main | page = <!-- página para detectar el espacio de nombres, si no es la página actual --> | main = <!-- texto para volver al espacio de nombres principal --> | talk = <!-- texto para volver a los espacios de nombres de discusión --> <!-- texto para volver a espacios de nombres de sujetos específicos --> | portal = | category = | user = | wikipedia = | education program = | mediawiki = | book = | timedtext = | template = | special = | media = | file = | image = | help = | module = | other = <!-- texto para volver a espacios de nombres no especificados --> | demospace = <!-- espacio de nombres para mostrar texto --> | subjectns = <!-- ponga "yes" para tratar a las páginas de discusión como la página de asunto correspondiente --> }}
Parámetros
- main - devuele si la pagina está en el espacio de nombres principal.
- talk - devuele si la pagina está en un espacio de nombres de discusión. Esto puede ser cualquier espacio de nombres de discusión - coincidirá con cualquiera de "Talk:", "Wikipedia talk:", "User talk:", etc.
- Parámetros de asuntos, por ej. wikipedia, user, file... - devuele si la página está en el espacio de nombres correspondiente. Este módulo acepta a todos los espacio de nombres de asunto como parámetros, incluyendo namespace aliases y virtual namespaces. Vea más abajo para una lista de valores admitidos.
- other - devuele si no se especificaron parámetros para el espacio de nombres de la página. Este texto también se devuelve si
|demospace=
está puesto en un valor de espacio de nombres no válido. - subjectns - si se está en una página de discusión, usar el asunto correspondiente de la página. Se puede poner con valores de "yes", "y", "true" o "1".
- demopage - especifica una página para detectar el espacio de nombres. Si no se especifica, y si el parámetro
|demospace=
no está puesto, entonces el módulo utiliza la página actual. - demospace - obliga al módulo a comportarse como si la página estuviera en el espacio de nombres especificado. A menudo usado para demostraciones.
Parámetros del espacio de nombres
Los valores posibles para los parámetros del espacio de nombres de asunto son los siguientes:
Dominio | Nombres Alternativos |
---|---|
main
|
|
usuario
|
user , usuaria
|
wikipedia
|
project , wp
|
archivo
|
file , imagen , image
|
mediawiki
|
|
plantilla
|
template
|
ayuda
|
help
|
categoría
|
category , cat
|
portal
|
|
wikiproyecto
|
pr
|
anexo
|
|
timedtext
|
|
módulo
|
module
|
accesorio
|
gadget
|
accesorio definición
|
gadget definition
|
Función de tabla
Usar lo siguiente para mostrar una tabla con los diferentes parámetros de espacio de nombres posibles:
{{#invoke:Detección de espacio de nombres|table|talk=yes}}
Para incluir el parámetro para espacios de nombres de discusión, usar |talk=yes
.
Portando a diferentes wikis
Este módulo está diseñado para ser portable. Para usarlo en una wiki diferente, todo lo que se necesita hacer es cambiar los valores en Módulo:Detección de espacio de nombres/configuración. Las instrucciones están disponibles en esa página.
Detalles técnicos
El módulo usa una página de datos en Módulo:Detección de espacio de nombres/data. Esta página se carga con mw.loadData, lo que significa que se procesa una vez por página en lugar de una vez por #invoke. Esto se hizo por razones de rendimiento.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.
--[[
--------------------------------------------------------------------------------
-- --
-- DETECCIÓN DE ESPACIO DE NOMBRES --
-- --
-- Este módulo implementa la plantilla {{namespace detect}} en Lua, con --
-- algunos implementos: todos los espacios de nombres y todos los alias de --
-- espacio de nombres son soportados, y los nombres de espacio de nombres --
-- son detectados automaticamente para una wiki local. El módulo también --
-- puede usar el correspondiente valor del espacio de nombres de asunto si --
-- esta siendo usado en una página de discusión. Los nombres de los --
-- Parámetros pueden ser configurados para diferentes wikis alterando los --
-- valores en la tabla "cfg" localizada en --
-- "Módulo:Detección de espacio de nombres/configuración". --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Módulo:Detección de espacio de nombres/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Módulo:Yesno')
local mArgumentos -- Lentamente inicializar Módulo:Argumentos
local mTableTools -- Lentamente inicializar Módulo:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Obtiene un valor de la tabla t1 para la primera clave
-- en la matriz t2 donde un archivo no-nil de t1 existe
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Devuelve true si el valor es igual a un valor en la matriz t.
-- De lo contrario devuelve false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Obtener el objeto de página, pasando la función a través
-- de pcall en caso de errores, por ej. estar sobre el
-- límite del costoso conteo de funciones.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Proporcionada compatibilidad hacia atrás con otros módulos
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- Esta función obtiene el nombre del espacio de nombres
-- a partir del objeto de página.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Manejar "demospace = main" correctamente.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Obtener el espacio de nombres de asunto si la opción
-- está puesta, de otra manera usa "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- devolver nil si el objeto de página no existe.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Comprobar los parámetros almacenados en la tabla de asignaciones
-- para cualquier coincidencia.
local namespace = getNamespace(args) or 'other' -- "other" evita las claves de una tabla con valor nil
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- Si no hay coincidencias, devolver los parámetros a otros
-- espacio de nombres. Esto pasa si allí no hay un texto especificado
-- para el espacio de nombres que fue detectado o si el parámetro
-- "demospace" del espacio de nombres no es un espacio de nombres valido.
-- Notar que el parámetro para el espacio de nombres detectado debe ser
-- completamente ausente para que esto pase, no solo en blanco.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArgumentos = require('Módulo:Argumentos')
local args = mArgumentos.obtenerArgumentos(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Crear una "wikitable" de todos los parámetros del espacio
-- de nombres de asuntos, para propósitos de documentación.
-- El parámetro "talk" es opcional, en ese caso necesita ser
-- excluido de la documentación.
--]]
-- Cargar módulos e inicializar variables.
mTableTools = require('Módulo:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Si se utiliza el parámetro "talk".
-- Obtener los nombres del encabezado.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Dominio')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Nombres Alternativos')
-- Poner los espacio de nombres en orden.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Agregar 1, ya que la matriz debe comenzar con 1;
-- nsid 0 se perdería de otra manera.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Construir la tabla.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p