stringtranslate.com

Módulo: Lista de archivos

-- 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 ) }