Este módulo tiene dos funciones portal
y image
produce portal
un cuadro con enlaces a un portal o a varios portales y lo utiliza la plantilla {{ portal }} . Se utiliza con mayor frecuencia en la sección "Ver también" de un artículo. La image
función produce el nombre de la imagen que utiliza el portal especificado.
Consulte aquí , aquí y aquí para ver casos de prueba.
La función de portal produce un cuadro de enlaces de portal.
Uso básico
{{#invoke:Portal|portal | Portal 1 | Portal 2 | Portal 3 |... }}
En los artículos, la salida de la función del portal debe colocarse en la parte superior de la sección Ver también del artículo . Si no hay una sección Ver también , puede colocarla en la sección Enlaces externos ; no es necesario crear una nueva sección solo para albergar esta plantilla. Si tampoco hay una sección de Enlaces externos , simplemente colóquela debajo del texto del artículo en el lugar que parezca más apropiado.
No existen reglas particulares sobre la ubicación de portales en otros tipos de páginas.
Los nombres de las imágenes del portal se almacenan en subpáginas de Module:Portal/images , organizadas por la primera letra del nombre del portal. Por ejemplo, la primera letra de Portal:Feminism es "F", por lo que el nombre de la imagen se almacena en Module:Portal/images/f . Si hay una entrada para un portal en la página correcta, se mostrará la imagen correspondiente junto al enlace del portal. Si no se encuentra ninguna imagen, se mostrará File:Portal-puzzle.svg en su lugar.
También es posible especificar alias para las imágenes del portal. Por ejemplo, el código produce la misma imagen que el código . El alias "Detroit" se encuentra en la página Módulo:Portal/imágenes/aliases .{{Portal|Detroit}}
{{Portal|Metro Detroit}}
El algoritmo de detección de imágenes no distingue entre mayúsculas y minúsculas. Por ejemplo, el código generará la misma imagen que el código (aunque los enlaces del portal serán diferentes). Los nombres del portal se almacenan en minúsculas en las subpáginas de imágenes y la entrada se convierte a minúsculas antes de ser verificada.{{Portal|Detroit}}
{{Portal|detroit}}
Para agregar nuevas imágenes a la lista, realice una solicitud de edición protegida en Template talk:Portal para que un administrador edite la subpágina correcta por usted. Las imágenes del portal deben ser de dominio público o estar disponibles bajo una licencia libre que permita la reutilización comercial y trabajos derivados; las imágenes de uso legítimo no son aceptables. La plantilla {{ Portal icon demonstrate }} puede ser útil para decidir si una imagen es adecuada para su uso como ícono del portal; formatea una imagen utilizando el mismo tamaño y estilo que la plantilla {{ Portal }} utiliza de manera predeterminada.
Puede encontrar una lista de portales y alias de portales sin iconos en Categoría:Plantillas de portal con imagen predeterminada .
El cuadro en el formato derecho con texto pequeño puede incorporar múltiples portales.
{{Portal|Canada}}
{{Portal|Canada|Example}}
Formato en línea para el lado izquierdo con texto de tamaño normal; consulte Plantilla:Portal-inline para obtener una lista de parámetros.
{{Portal-inline|Canada}}
Formato en línea para el lado derecho con texto de tamaño normal: Consulte Plantilla:Portal para obtener más información.
{{Portal|border=no|Canada}}
El formato de barra se utiliza normalmente para portales múltiples. Esta plantilla no pertenece a la sección "Ver también". Según MOS:SECTIONORDER , esta plantilla es de última generación y se ubica debajo de la plantilla de navegación estándar.
{{Portal bar|Canada|Example|border=no}}
Si el módulo se utiliza incorrectamente, la página se agregará a una categoría de seguimiento.
Las categorías de seguimiento no se aplican si se cumple alguna de las siguientes condiciones:
|tracking=
con cualquiera de los siguientes valores: no
, n
,false
La función de imagen produce el nombre de la imagen utilizada por el portal especificado.
{{#invoke:Portal|image|portal}}
{{#invoke:Portal|image|Art}}
→ Bailarina-icono.jpgLa función de duplicación de imágenes devuelve una lista de todas las imágenes que se utilizan en más de un portal (no se incluyen los alias). Esto puede resultar útil para identificar las entradas de imágenes que se deben cambiar para utilizar alias.
{{#invoke:Portal|imageDupes}}
La función de visualización de todos los portales devuelve un cuadro que contiene todos los portales que tienen imágenes. Se utiliza para tareas de mantenimiento y no se debe mostrar en los artículos porque a) hay alrededor de 1000 portales con imágenes y mostrar 1000 imágenes en una página consume muchos recursos del servidor y b) el módulo no tiene forma de saber la capitalización correcta del nombre de un portal, por lo que algunos enlaces a portales no funcionarán. El resultado de esta función se puede ver en Template:Portal/doc/all .
{{#invoke:Portal|displayAll}}
--[==[ Este módulo es una implementación de Lua de la antigua plantilla {{Portal}}. A febrero de 2019, se utiliza en casi 7.900.000 artículos. -- ¡Ten cuidado al actualizarlo! Produce dos funciones: p.portal, que genera una lista de portales, y p.image, que -- produce el nombre de la imagen para un portal individual. -- Los datos de la imagen del portal se guardan en submódulos de [[Module:Portal/images]], que se enumeran a continuación: -- [[Module:Portal/images/a]] - para nombres de portal que comienzan con "A". -- [[Module:Portal/images/b]] - para nombres de portal que comienzan con "B". -- [[Module:Portal/images/c]] - para nombres de portal que comienzan con "C". -- [[Module:Portal/images/d]] - para nombres de portal que comienzan con "D". -- [[Module:Portal/images/e]] - para nombres de portales que comiencen con "E". -- [[Module:Portal/images/f]] - para nombres de portales que comiencen con "F". -- [[Module:Portal/images/g]] - para nombres de portales que comiencen con "G". -- [[Module:Portal/images/h]] - para nombres de portales que comiencen con "H". -- [[Module:Portal/images/i]] - para nombres de portales que comiencen con "I". -- [[Module :Portal/images/j]] - para nombres de portales que comiencen con "J". -- [[Module: Portal/images/k]] - para nombres de portales que comiencen con "K". -- [[Module :Portal/images/l]] - para nombres de portales que comiencen con "L". -- [[Module :Portal/images/m]] - para nombres de portales que comiencen con "M". -- [[Module:Portal/images/n]] - para nombres de portales que comiencen con "N". -- [[Module:Portal/images/o]] - para nombres de portales que comiencen con "O". -- [[Module:Portal/images/p]] - para nombres de portales que comiencen con "P". -- [[Module:Portal/images/q]] - para nombres de portales que comiencen con "Q". -- [[Module:Portal/images/r]] - para nombres de portales que comiencen con "R". -- [[ Module:Portal/images/s]] - para nombres de portales que comiencen con "S". -- [[Module :Portal/images/t]] - para nombres de portales que comiencen con "T". -- [[Module: Portal/images/u]] - para nombres de portales que comiencen con "U". -- [[Module :Portal/images/v]] - para nombres de portales que comiencen con "V". -- [[Module:Portal/images/w]] - para nombres de portales que comiencen con "W". -- [[Module:Portal/images/x]] - para nombres de portales que comiencen con "X". -- [[Module:Portal/images/y]] - para nombres de portales que comiencen con "Y". -- [[Module:Portal/images/z]] - para nombres de portales que comiencen con "Z". -- [[Module:Portal/images/other]] - para nombres de portales que comiencen con cualquier otra letra. Esto incluye números, -- letras con diacríticos,y letras en alfabetos no latinos. -- [[Module:Portal/images/aliases]] - para agregar alias a los nombres de portales existentes. Use esta página para variaciones-- en ortografía y diacríticos, etc., sin importar con qué letra comienza el portal. -- -- Las páginas de datos de imágenes están separadas por la primera letra para reducir la carga del servidor cuando se agregan, cambian o eliminan imágenes. -- Anteriormente, todas las imágenes estaban en una página de datos en [[Module:Portal/images]], pero esto tenía la desventaja de que todas las 5.000.000 de páginas que usan este módulo debían actualizarse cada vez que se agregaba o eliminaba una imagen. ]==] local p = {} -- determinar si nos están llamando desde un sandbox local isSandbox = mw . getCurrentFrame (): getTitle (): find ( 'sandbox' , 1 , true ) local sandbox = isSandbox and '/sandbox' or '' local function sandboxVersion ( s ) return isSandbox and s .. '-sand' or s end local templatestyles = 'Module:Portal' .. sandbox .. '/styles.css' local getArgs = require ( 'Module:Arguments' ). getArgs local yesno = require ( 'Module:Yesno' ) -- Lista de espacios de nombres que no son de discusión que no deben rastrearse (las páginas de discusión nunca se rastrean) local badNamespaces = { 'user' , 'template' , 'draft' , 'wikipedia' } -- Verifica si se debe hacer seguimiento en este espacio de nombres -- Devuelve verdadero a menos que la página sea uno de los espacios de nombres prohibidos local function checkTracking ( title ) local thisPage = title or mw . título . getCurrentTitle () si thisPage . isTalkPage entonces devuelve falso fin local ns = thisPage . nsText : lower () para _ , v en ipairs ( badNamespaces ) hacer if ns == v then return false end end return true end función local matchImagePage ( s ) -- Busca la subpágina de imagen apropiada dado un nombre de portal en minúsculas más la primera letra de ese nombre de portal. if type ( s ) ~= ' string ' or # s < 1 then return end local firstLetter = mw.ustring.sub ( s , 1 , 1 ) local imagePage if mw.ustring.find ( firstLetter , ' ^[az]' ) then imagePage = ' Module : Portal /images/' .. firstLetter .. sandbox else imagePage = 'Module:Portal/images/other' .. sandbox end return mw.loadData ( imagePage )[ s ] end función local getAlias ( s ) -- Obtiene un alias de la página de datos de alias de imagen . local aliasData = mw . loadData ( 'Module:Portal/images/aliases' .. sandbox ) para portal , alias en pares ( aliasData ) hacer para _ , alias en ipairs ( alias ) hacer si alias == s entonces devuelve portal fin fin fin fin local defaultImage = 'Portal-puzzle.svg|link=|alt=' función local getImageName ( s ) -- Obtiene el nombre de la imagen para una cadena dada. si tipo ( s ) ~= 'cadena' o # s < 1 entonces devuelve defaultImage fin s = mw . ustring . lower ( s ) imagen local = matchImagePage ( s ) o matchImagePage ( getAlias ( s )) o defaultImage imagen = mw . ustring . gsub ( imagen , '^Archivo:' , '' ) --- quitar el encabezado incorrecto Archivo: o Imagen: imagen = mw . ustring . gsub ( imagen , '^Image:' , '' ) devuelve imagen fin función local existe ( título ) éxito local , existe = pcall ( función () devuelve título . existe fin ) -- Si éxito = falso, entonces nos quedamos sin llamadas de función de analizador costosas y no podemos verificar si existe -- en ese caso, no arroja un error de Lua devuelve no éxito o existe fin -- Función para verificar los portales de argumentos en busca de errores, generar categorías de seguimiento si es necesario -- La función primero verifica si hay muy pocos/muchos portales proporcionados -- Luego verifica la lista de portales para purgar cualquier portal que no exista -- Argumentos: -- portals: lista sin procesar de portales -- args.tracking: ¿se solicita seguimiento? (no rastreará títulos o espacios de nombres incorrectos) -- args.redlinks: ¿deberían mostrarse los enlaces rojos? -- args.minPortals: número mínimo de argumentos del portal -- args.maxPortals: número máximo de argumentos del portal -- Devuelve: -- portals = lista de portales, con enlaces rojos purgados (si args.redlinks=false) -- trackingCat = categoría de seguimiento posible -- errorMsg = función de mensaje de error p . _checkPortals ( portals , args ) local trackingCat = '' local errMsg = nil -- El seguimiento está activado de forma predeterminada. -- Se desactiva si se cumple alguna de las siguientes condiciones -- 1/ el parámetro "tracking" se establece en 'no, 'n' o 'false' -- 2 / la página actual falla en las pruebas de espacio de nombres o nombre de página local trackingEnabled = args.tracking y checkTracking ( ) args.minPortals = args.minPortals o 1 args.maxPortals = args.maxPortals o - 1 -- comprueba si hay muy pocos portales si # portales < args.minPortals entonces errMsg = ' especifique al menos ' .. args.minPortals .. ' portal' .. ( args.minPortals > 1 y 's' o ' ' ) trackingCat = ( trackingEnabled y ' [[Categoría : Plantillas de portal con muy pocos portales ]]' o ' ' ) return portals , trackingCat , errMsg end -- comprueba si hay demasiados portales si args.maxPortals > = 0 y # portales > args . maxPortals entonces errMsg = 'demasiados portales (máximo = ' .. args . maxPortals .. ')' trackingCat = ( trackingEnabled y '[[Categoría:Plantillas de portal con demasiados portales]]' o '' ) return portals , trackingCat , errMsg end if not args . redlinks o trackingEnabled then -- crea una nueva lista de portales que existen local existingPortals = {} for _ , portal in ipairs ( portals ) do local portalTitle = mw . title . new ( portal , "Portal" ) -- si el portal existe, colóquelo en la lista if portalTitle and exist ( portalTitle ) entonces table.insert ( existingPortals , portal ) -- de lo contrario, establezca la categoría de seguimiento elseif trackingEnabled entonces trackingCat = "[[Categoría:Plantillas de portal con portales con enlaces rojos]]" end end -- Si los enlaces rojos están desactivados, use la lista de portales purgada de enlaces rojos portals = args . redlinks y portales o existingPortals -- si no queda nada después de la purga, establezca la categoría de seguimiento if # portals == 0 and trackingEnabled entonces trackingCat = trackingCat .. "[[Categoría:Páginas con plantilla de portal vacía]]" end end return portals , trackingCat , errMsg end función local portalBox ( args ) return mw . html . crear ( 'ul' ) : attr ( 'rol' , 'navegación' ) : attr ( 'aria-label' , 'Portales' ) : agregarClase ( 'noprint' ) : agregarClase ( args . error y '' o sandboxVersion ( 'portalbox' )) : agregarClase ( args . borde y sandboxVersion ( 'portalborder' ) o '' ) : agregarClase ( sandboxVersion ( args . izquierda y 'portalizquierda' o 'portalderecha' )) : css ( 'margen' , args . margen o nulo ) : nueva línea () fin de la función local fillBox ( raíz , contenidos ) para _ ,elemento en ipairs ( contenido ) hacer entrada local = raíz : etiqueta ( 'li' ) entrada : addClass ( sandboxVersion ( 'portalbox-entry' )) imagen local = entrada : etiqueta ( 'span' ) imagen : addClass ( sandboxVersion ( 'portalbox-image' )) imagen : wikitext ( elemento [ 1 ]) enlace local = entrada : etiqueta ( 'span' ) enlace : addClass ( sandboxVersion ( 'portalbox-link' )) enlace : wikitext ( elemento [ 2 ]) fin retorno raíz fin función p . _portal ( portales , args ) -- Esta función construye el cuadro de portal utilizado por la plantilla {{portal}}. -- Normaliza todos los argumentos si args . redlinks == 'include' entonces args . redlinks = true fin args . addBreak = args [ 'break' ] para clave , predeterminado en pares ({ left = false , tracking = true , nominimum = false , redlinks = false , addBreak = false , border = true }) hacer si args [ clave ] == nulo entonces args [ clave ] = predeterminado fin args [ clave ] = yesno ( args [ clave ], predeterminado ) fin raíz local = portalBox ( args ) seguimiento local Cat = '' errMsg local = nil args.minPortals = args.nominimum y 0 o 1 args.maxPortals = - 1 portals , trackingCat , errMsg = p._checkPortals ( portales , args ) root : wikitext ( trackingCat ) -- si hay un mensaje de error, colóquelo en el cuadro y devuelva if errMsg then if args.border then -- suprima el mensaje de error cuando border = no args . error = true -- recrear el cuadro sin formato sofisticado root = portalBox ( args ) root : wikitext ( trackingCat ) local errTag = root : tag ( 'strong' ) errTag : addClass ( 'error' ) errTag : css ( 'padding' , '0.2em' ) errTag : wikitext ( 'Error: ' .. errMsg ) end return tostring ( root ) end -- si no hay portales (y no hay error), solo devuelve la categoría de seguimiento si # portales == 0 entonces devuelve trackingCat end local contents = {} -- Muestra los portales especificados en los argumentos posicionales. local defaultUsed = nil para _ , portal en ipairs ( portales ) hacer local portalImage = getImageName ( portal ) si portalImage == defaultImage entonces defaultUsed = portal fin local image = string.format ( '[[Archivo:%s|32x28px|class=noviewer]]' , portalImage ) enlace local = string.format ( ' [[Portal:%s|%s%sportal]]' , portal , portal , args.addBreak y ' <br />' o ' ' ) table.insert ( contenido , { imagen , enlace }) fin si defaultUsed y args.tracking y checkTracking ( ) entonces local cat = string.format ( '[[Categoría:Plantillas de portal con imagen predeterminada | %s]]' , defaultUsed ) raíz : wikitext ( cat ) fin retorno astring ( fillBox ( raíz , contenidos )) fin función p . _demo ( imageList , args ) para clave , predeterminado en pares ({ left = false , border = true }) hacer si args [ clave ] == nil entonces args [ clave ] = predeterminado fin args [ clave ] = yesno ( args [ clave ], predeterminado ) fin raíz local = portalBox ( args ) contenido local = {} - Muestra los portales especificados en los argumentos posicionales. para _ , fn en ipairs ( imageList ) hacer imagen local = string.format ( '[[Archivo:%s|32x28px|class=noviewer]]' , fn ) enlace local = string.format ( '[[:Archivo:%s|%s]]' , fn , fn ) tabla.insert ( contenido ,{ imagen , enlace }) fin retorno astring ( fillBox ( root , contents )) fin de la función p._image ( portal , keep ) -- Función contenedora para permitir que se acceda a getImageName() mediante #invoke. -- compatibilidad con versiones anteriores: si se pasa tabla, toma el primer elemento si tipo ( portal ) == 'tabla' entonces portal = portal [ 1 ] fin local nombre = getImageName ( portal ) -- Si keep es sí (o equivalente), entonces permite que se devuelvan todos los metadatos (como los bordes de la imagen) local keepargs = yesno ( keep ) local args = mw.text.split ( name , " |" , true ) local result = { args [ 1 ]} -- el nombre del archivo siempre viene primero local category = '' -- analiza el nombre , buscando argumentos de categoría para i = 2 , # args do local m = mw.ustring . match ( args [ i ], "^%s*category%s*=" ) if keepargs or m then table.insert ( result , args [ i ]) end end -- reensamblar argumentos return table.concat ( result , "|" ) end local function getAllImageTable () -- Devuelve una matriz que contiene todas las subpáginas de imágenes (menos alias) cargadas por mw.loadData. local images = {} for i , subpage in ipairs { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' ,'yo' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , ' w' , 'x' , 'y' , 'z' , 'other' } do local imageTable = mw.loadData ( 'Module:Portal/images/' .. subpage .. sandbox ) for portal , image in pairs ( imageTable ) do local args = mw.text.split ( image , " |" ) images [ portal ] = args [ 1 ] -- solo usa el nombre del archivo de la imagen end end return images end function p._displayAll( portales , args ) -- Esta función muestra todos los portales que tienen imágenes de portal. Esta función es para fines de mantenimiento y no debe utilizarse en artículos por dos razones: 1) hay más de 1500 portales con imágenes de portal y 2) el módulo no registra cómo se escriben en mayúsculas los nombres de los portales, por lo que los enlaces a los portales pueden estar rotos. local lang = mw . language . getContentLanguage () portals = portals o {} para portal en pares ( getAllImageTable ()) do table. insert ( portals , lang : ucfirst ( portal )) end table. sort ( portals ) args . redlinks = args . redlinks o "yes" return p . _portal ( portals , args ) end function p ._imageDupes () -- Esta función busca en las subpáginas de imágenes para encontrar imágenes duplicadas. Si existen imágenes duplicadas, no es necesariamente algo malo, -- ya que diferentes portales pueden elegir la misma imagen. Sin embargo, esta función es útil para identificar imágenes que -- deben ser movidas a un alias de portal para facilitar el mantenimiento. local causes , dupes = {}, {} for portal , image in pairs ( getAllImageTable ()) do if not causes [ image ] then causes [ image ] = portal else table.insert ( dueps , string.format ( 'La imagen "[[:File:%s|%s]]" se usa para ambos portales "%s" y "%s".' , image , image , causes [ image ], portal )) end end if # dueps < 1 then return 'No se encontraron imágenes duplicadas.' else return 'Se encontraron las siguientes imágenes duplicadas: \n * ' .. table.concat ( dupes , ' \n * ' ) end end local function processPortalArgs ( args ) -- Esta función procesa una tabla de argumentos y devuelve dos tablas: una matriz de nombres de portales para su procesamiento por ipairs, y una tabla de -- los argumentos nombrados que especifican opciones de estilo, etc. Necesitamos usar ipairs porque queremos listar todos los portales en el orden -- en que fueron pasados a la plantilla, pero también queremos poder manejar argumentos posicionales pasados explícitamente, por ejemplo -- {{portal|2=Politics}}. El comportamiento de ipairs no está definido si hay valores nulos, por lo que debemos asegurarnos de que se eliminen todos. args = type ( args ) == 'table' and args or {} local portals = {} local namedArgs = {} for k , v in pairs ( args ) do if type ( k ) == ' number' y type ( v ) == ' string' then - Asegúrese de que no tenemos nombres de portales que no sean cadenas. table.insert ( portales , k ) elseif type ( k ) ~= 'number' then namedArgs [ k ] = v end end table.sort ( portales ) for i , v in ipairs ( portales ) do portals [ i ] = args [ v ] end return portals , namedArgs end - Punto de entrada para ordenar portales a partir de otros argumentos con nombre function p._processPortalArgs ( args ) return processPortalArgs ( args ) end function p.image ( frame ) local origArgs = getArgs ( frame ) local portales , args = processPortalArgs ( origArgs ) return p._image ( portales [ 1 ] , args.border ) end function p . demo ( frame ) local args = getArgs ( frame ) local styles = frame : extensionTag { name = 'templatestyles' , args = { src = templatestyles } } return styles .. p._demo ( args , args ) fin de la función local makeWrapper ( funcName ) -- Procesa argumentos externos y los envía a las otras funciones. return function ( frame ) -- Si se llama a través de #invoke, use los argumentos pasados a la plantilla de invocación, o los argumentos pasados a #invoke si existen. De lo contrario , suponga que los argumentos se pasan directamente desde la consola de depuración o desde otro módulo Lua. -- También: recorte los espacios en blanco y elimine los argumentos en blanco local origArgs = getArgs ( frame ) -- cree dos tablas para pasar a func: una matriz de nombres de portales y una tabla de argumentos con nombre. portales locales , args = processPortalArgs ( origArgs ) resultados locales = '' si funcName == '_portal' o funcName == '_displayAll' entonces resultados = frame : extensionTag { nombre = 'templatestyles' , args = { src = templatestyles } } fin devolver resultados .. p [ funcName ]( portales , args ) fin fin para _ , funcName en ipairs { 'portal' , 'imageDupes' , 'displayAll' } hacer p [ funcName ] = makeWrapper ( '_' .. funcName ) fin devolver p