A continuación se muestra la documentación transcluida desde la subpágina /doc.
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.
{{#invoke: Detección de espacio de nombres | main | page = | main = | talk = | portal = | category = | user = | wikipedia = | education program = | mediawiki = | book = | timedtext = | template = | special = | media = | file = | image = | help = | module = | other = | demospace = | subjectns = }}
|demospace=
está puesto en un valor de espacio de nombres no válido.|demospace=
no está puesto, entonces el módulo utiliza la página actual.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 |
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
.
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.
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.
--[[ -------------------------------------------------------------------------------- -- -- -- 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 table-responsive " 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.wikitable table-responsive NamespaceHeader, 'Dominio') local aliasesHeader = checkValue(cfg.wikitable table-responsive AliasesHeader, '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="duhoc-es wikitable table-responsive "' .. '\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| '
.. param .. '' .. '\n| ' elseif j == 2 then ret = ret .. ''
.. param .. '' else ret = ret .. ', '
.. param .. '' end end end ret = ret .. '\n|-' .. '\n|}' return ret end return p