Módulo: La lista de archivos se puede aplicar a cualquier página de discusión o archivo de discusión y devolverá enlaces a todos los archivos numerados de esa página o su página principal. De forma predeterminada, el módulo utiliza la convención de nomenclatura especificada en WP:ARCHIVE , Talk:PAGENAME/Archive 1
con una A mayúscula, un espacio antes del número y sin ceros a la izquierda. Por lo general, este módulo no debe sustituirse; de esa manera, la lista de enlaces se actualizará cada vez que se agregue un nuevo archivo numerado. Para facilitar el acceso, se puede utilizar {{ lista de archivos }}.
Este módulo se utiliza en {{ Archivos }} para producir un cuadro de enlaces de archivos numerados sin ingresarlos todos manualmente.
La función principal. Devuelve una lista de enlaces de archivos.
{{#invoke:Lista de archivos|principal| raíz =| enlaces =| nobr =| prefijo =| espacioprefijo =| prefijo de enlace =| espacioprefijoenlace =| septiembre =| líneasep =| inicio =| máximo =| automático =| dejar la primera celda en blanco =}}
La función de conteo. Devuelve el número del archivo más reciente.
{{#invoke:Lista de archivos|recuento| raíz =| prefijo =| espacioprefijo =}}
Los parámetros válidos son:
root = <root>
- utilícelo para especificar una raíz distinta a la de la página desde la que se transcluye la plantilla.links = #
- el número de enlaces a mostrar por línea. El valor predeterminado es 10.nobr = yes
- configúrelo para yes
eliminar todos los saltos de línea. Este parámetro no se puede utilizar junto con |links=
.prefix = <prefix>
- un prefijo personalizado para los archivos, sin el número. El valor predeterminado es "Archivo".prefixspace = yes
- agrega un espacio entre el prefijo y el número de archivo para los prefijos especificados con |prefix=
.linkprefix = <linkprefix>
- un prefijo personalizado para los enlaces de visualización, sin el número. El valor predeterminado está en blanco. Si auto=long, use 'none' para dejarlo en blanco.prefixspace = yes
- agrega un espacio entre el prefijo del enlace y el número de archivo para los prefijos especificados con |linkprefix=
.sep = <sep>
- el separador de enlaces de archivos. El valor predeterminado es el separador de coma para el idioma establecido en sus preferencias: " ,
". Si está configurado en dot
( ), ( ), ( ) o ( ), entonces utiliza ese separador como se especifica para su idioma predeterminado. Si es cualquier otro valor, ese valor se utiliza tal cual. Si se llama a este módulo desde #invoke, se eliminan los espacios en blanco, pero si se llama desde otro módulo, se conservan los espacios en blanco. Esto permite que otros módulos usen este módulo para crear wikitables, etc. Si se llama desde #invoke, el problema de los espacios en blanco se puede solucionar usando (para espacios) y (para nuevas líneas). ·
pipe
|
comma
,
tpt-languages
⧼tpt-languages-separator⧽
 
<br />
linesep = <linesep>
- el separador de líneas de enlaces de archivos. Los valores de entrada posibles son los mismos que para el |sep=
parámetro y el texto separador predeterminado es <br />
. La frecuencia con la que se muestra el valor depende del valor de |links=
.start = #
- el número de archivo desde el que empezar a enumerar archivos. Debe ser menor que el número de archivo más grande, o |max=
si se especifica.max = #
- el número de archivo más grande para enumerar. Esto anula la detección automática de números de páginas de archivo.auto = long
- salidas como tabla. Cambia el valor predeterminado de los enlaces a 3 y el prefijo de enlace a 'Archivo'.leavefirstcellblank = yes
- deje vacía la primera celda de la primera fila, de modo que cada fila comience en un múltiplo del número de enlaces por línea. En otras palabras, esto alinea la primera columna para que contenga números redondos (múltiplos del links
parámetro). Esto puede hacer que las listas de archivos largas sean más fáciles de leer. Esta opción está desactivada de forma predeterminada por motivos de compatibilidad.La antigua plantilla {{ archive list }} se limitaba a detectar 200 archivos. Este módulo no tiene tal limitación. Sin embargo, con un número muy elevado de archivos, este módulo podría alcanzar el costoso límite de llamadas a funciones . En una página sin otras plantillas que llamen a funciones costosas, este módulo debería poder generar más de 400.000 enlaces de archivos. En páginas con otras plantillas que realizan llamadas a funciones costosas, el módulo puede fallar antes.
-- Este módulo implementa {{archive list}} en Lua y agrega algunas características nuevas. -- Procese un argumento numérico para asegurarse de que sea un número entero positivo. función local ProcessNumArg ( num ) si num entonces num = tonumber ( num ) si tipo ( num ) == 'número' entonces num = math.floor ( num ) si num >= 0 entonces devuelve num end end end devuelve nil end - Comprueba si existe una página, pasando por pcall , en caso de que superemos el límite de la función costosa. función local checkPageExists ( título ) si no es título entonces error ( 'No se pasó ningún título a checkArchiveExists' , 2 ) finaliza local noError , titleObject = pcall ( mw . title . new , title ) si no es noError entonces - Si ya superamos lo costoso El límite de función luego asume que la página no existe. devuelve falso; de lo contrario , si titleObject , devuelve titleObject . existe sino devuelve falso : devuelve falso si se le da un título incorrecto. end end end : comprueba cada enésimo archivo para ver si existe y devuelve el número del primer archivo que no existe. Es necesario hacer esto en lotes porque cada verificación es una llamada de función costosa y queremos evitar hacer demasiadas para no exceder el límite de la función costosa. función local checkArchives ( prefijo , n , inicio ) local i = inicio local existe = verdadero mientras existe existe = checkPageExists ( prefijo .. tostring ( i ) ) si existe, entonces i = i + n end end return i end - Devuelve el número de archivo más grande, usando checkArchives() - y comenzando en intervalos de 1000. Esto debería darnos un - máximo de 500,000 archivos posibles antes de que alcanzar el límite de funciones costosas. función local getBiggestArchiveNum ( prefijo , inicio , máximo ) : devuelve el valor de máximo si se especifica. max = ProcessNumArg ( max ) si max devuelve max end . De lo contrario , detecta el número de archivo más grande. inicio = inicio o 1 local check1000 = checkArchives ( prefijo , 1000 , inicio ) si check1000 == inicio , luego devuelve 0 - Devuelve 0 si no se encontraron archivos. finalizar local check200 = checkArchives ( prefijo , 200 , check1000-1000 ) local check50 = checkArchives ( prefijo , 50 , check200-200 ) local check10 = checkArchives ( prefijo , 10 , check50-50 ) local check1 = checkArchives ( prefijo , 1 , check10 ) - 10 ) - check1 es la primera página que no existe, por lo que queremos restarla en uno para encontrar el archivo más grande existente. return check1 - 1 end - Obtiene el prefijo del enlace del archivo (el título de las páginas del archivo - menos el número). función local getPrefix ( raíz , prefijo , espacioprefijo ) local ret = raíz o mw . título . obtener título actual (). prefixedText ret = ret .. '/' si prefijo entonces ret = ret .. prefijo si prefixSpace == 'yes' entonces ret = ret .. ' ' fin si no ret = ret .. 'Archivo ' fin return ret fin -- Obtener el número de archivos a colocar en una línea. Establezca en -- math.huge si no debe haber saltos de línea. función local getLineNum ( links , nobr , isLong ) local linksToNum = tonumber ( links ) local lineNum si nobr == 'yes' o ( links y no linksToNum ) entonces lineNum = math.huge - Si los enlaces son un número, procéselo. Los valores y expresiones negativos , como links=8/2, produjeron algunos valores interesantes con la plantilla anterior, pero los ignoraremos por simplicidad. elseif escriba ( linksToNum ) == 'número' y linksToNum >= 0 entonces : la plantilla anterior redondeaba los decimales al entero más cercano. lineNum = math.floor ( linksToNum ) si lineNum == 0 entonces - En la plantilla anterior, los valores de enlaces entre 0 y 0,999 - suprimían los saltos de línea. lineNum = math.huge end else if isLong == true entonces lineNum = 3 - Predeterminado a 3 enlaces en largo else lineNum = 10 - Predeterminado a 10 en el extremo corto retorno lineNum end - Obtiene el prefijo para colocar antes del archivo Enlaces. función local getLinkPrefix ( prefijo , espacio , isLong ) : obtiene el prefijo del enlace. ret local = '' si es Largo == verdadero entonces ---- El valor predeterminado de la plantilla antigua durante mucho tiempo es 'Archivo ' si tipo ( prefijo ) == 'cadena' entonces si prefijo == 'ninguno' entonces -- 'ninguno' anula el prefijo vacío ret = '' else ret = prefijo si espacio == 'sí' entonces ret = ret .. ' ' fin fin si no ret = 'Archivar ' fin si no --el tipo no es largo si tipo ( prefijo ) == 'cadena' entonces ret = prefijo si espacio == 'yes' luego ret = ret .. '' end end end return ret end -- Obtenga el número desde el cual comenzar a enumerar archivos. función local getStart ( inicio ) inicio = procesoNumArg ( inicio ) si comienza, luego regresa inicio, de lo contrario, devuelve 1 final final - Obtenga si se debe dejar una celda en blanco en la primera fila y columna - Si los enlaces comienzan en 1 y lineNum es una ronda número, esto alinea la primera columna para comenzar en un múltiplo de lineNum, que puede ser un buen número redondo función local getLeaveFirstCellBlank ( leaveFirstCellBlank ) return LeaveFirstCellBlank == 'yes' o LeaveFirstCellBlank == 'y' o LeaveFirstCellBlank == 1 end -- Procesar el parámetro del separador. función local getSeparator ( sep ) si sep y escribe ( sep ) == 'cadena' entonces si sep == 'punto' o sep == 'tubería' o sep == 'coma' o sep == 'idiomas tpt' entonces devolver mw .mensaje . new ( sep .. '-separator' ): Plain () else return sep end else return nil end end - Genera la lista de enlaces de archivos. glargs.max debe ser cero (para - sin archivos) o un valor entero positivo. función local generateLinks ( glargs ) si tipo ( glargs ) ~= 'table' o no glargs . max o no glargs . prefijo y luego error ( 'se pasaron argumentos insuficientes para generar enlaces' , 2 ) fin : si aún no hay archivos, devuelva un mensaje y un enlace para crear uno. si glaciares . max == 0 entonces si glargs . isLong == verdadero entonces glargs . max = 1 : se muestra un enlace rojo de archivo para formato largo ; de lo contrario : se muestra un error corto y se muestra un enlace de creación para devolución corta 'no hay archivos todavía ([[' .. glargs . prefix .. '1|create]])' end end : devuelve un error html si el número inicial es mayor que el número máximo. inicio local = glargs . inicio o 1 si inicio > glargs . max luego devuelve '<span class="error">Valor inicial "' .. tostring ( start ) .. '" es mayor que el número de archivo más reciente "' .. tostring ( glargs . max ) .. '".< /span>' end local linkPrefix = glargs . linkPrefix o '' local lineNum = glargs . lineNum o 10 local sep = '' -- El separador largo predeterminado son elementos de celda, el corto es ', ' local lineSep = '' - El salto de línea largo predeterminado es el de los elementos de fila, el corto es '\n' si es glargs . isLong == verdadero entonces sep = glargs . sep o '' sep = sep .. '</td><td>' lineSep = glargs . lineSep o '' lineSep = lineSep .. '</td></tr><tr><td>' else sep = glargs . septiembre o mw . mensaje . nuevo ( 'separador de coma' ): llanura () lineSep = glargs . lineSep o '<br />' end : genera los enlaces del archivo. local lineCounter = 1 : el contador para ver si necesitamos un salto de línea o no. local ret = {} : una tabla que contiene las cadenas que se devolverán. si glaciares . isLong == true entonces --La versión larga es una tabla table.insert ( ret , "<table style= \" ancho: 100%; padding: 0px; text-align: center; background-color: transparent; \" >< tr><td>" ) finaliza si glargs . dejarFirstCellBlank entonces - Una primera celda vacía alinea la primera columna en múltiplos de lineNum table.insert ( ret , sep ) lineCounter = lineCounter + 1 end for archiveNum = start , glargs . max hacer enlace local = mw . cuerda . format ( '[[%s%d|%s%d]]' , glargs . prefix , archiveNum , linkPrefix , archiveNum ) table.insert ( ret , link ) -- Si no necesitamos una nueva línea, generamos una coma. No necesitamos una coma después del último enlace.si lineCounter < lineNum y archiveNum < glaciares . max entonces table.insert ( ret , sep ) lineCounter = lineCounter + 1 - Genera nuevas líneas si es necesario. No necesitamos una nueva línea después del último enlace. elseif lineCounter >= lineNum y archiveNum < glargs . max entonces table.insert ( ret , lineSep ) lineCounter = 1 end end if glargs . isLong == true entonces --La versión larga es una tabla table.insert ( ret , "</td></tr></table>" ) end return table.concat ( ret ) end -- Determina si el formato debe ser largo función local findFormType ( auto ) si auto == nil o auto == '' luego devuelve falso elseif auto == 'largo' luego devuelve verdadero de lo contrario devuelve falso final final - Obtenga los datos del archivo y páselo a generateLinks(). función local _main ( args ) local isLong = findFormType ( args . auto ) prefijo local = getPrefix ( args . root , args . prefix , args . prefixspace ) local lineNum = getLineNum ( args . links , args . nobr , isLong ) local linkPrefix = getLinkPrefix ( args . linkprefix , args . linkprefixspace , isLong ) inicio local = getStart ( args . start ) local max = getBiggestArchiveNum ( prefijo , inicio , args . max ) local sep = getSeparator ( args . sep ) local lineSep = getSeparator ( args.linesep ) local LeaveFirstCellBlank = getLeaveFirstCellBlank ( args . Leavefirstcellblank ) local glargs = { start = start , max = max , prefijo = prefijo , linkPrefix = linkPrefix , isLong = isLong , sep = sep , lineNum = lineNum , lineSep = lineSep , dejarFirstCellBlank = dejarFirstCellBlank } return generateLinks ( glargs ) end - Una función contenedora para hacer que getBiggestArchiveNum() esté disponible desde - #invoke. función local _count ( args ) prefijo local = getPrefix ( args . root , args . prefix , args . prefixspace ) local archiveMax = getBiggestArchiveNum ( prefix ) return archiveMax función final makeWrapper ( func ) función de retorno ( frame ) - Si estamos siendo llamados de #invoke, obtenga los argumentos de #invoke , si existen, o pase los argumentos al marco principal. De lo contrario, suponga que los argumentos se pasan directamente desde otro módulo o desde la consola de depuración. origArgs locales si frame == mw . getCurrentFrame () luego origArgs = marco : getParent (). argumentos para k , v en pares ( frame.args ) hacen origArgs = frame . args break end else origArgs = frame end - Ignora los valores en blanco para parámetros distintos de "enlaces", que funciona de manera diferente dependiendo de si está en blanco o ausente. argumentos locales = {} para k , v en pares ( origArgs ) hazlo si k == 'enlaces' o v ~= '' entonces args [ k ] = v end end return func ( args ) end end return { main = makeWrapper ( _main ), contar = makeWrapper ( _count ) }