stringtranslate.com

Módulo: Cuadro de casos médicos

local  yesno  =  require ( 'Módulo:Yesno' ) local  BarBox  =  unpack ( require ( 'Módulo:Bar' )) local lang = mw . getContentLanguage () local language = lang : getCode () local i18n = require ( 'Módulo:Cuadro de casos médicos/i18n' )[ language ] assert ( i18n , 'no hay traducciones del cuadro a: ' .. mw . language . fetchLanguageName ( language , 'en' )) local monthAbbrs = {} para i = 1 , 12 hacer monthAbbrs [ i ] = lang : formatDate ( 'M' , '2020-' .. ( '%02d' ): format ( i )) fin local p = {} función p . _findIntervalRow ( tRows , nTime , nTol , bAll ) -- Recorre hacia atrás en tRows, asumiendo que tiene entradas nDate que aumentan monótonamente en orden hacia adelante. -- Se devuelve la primera fila con nDate dentro de nTime +-nTol. -- Si la entrada de la tabla nDate es nula, se omitirá la fila. -- Si al retroceder se encuentra una marca de tiempo que se remonta a antes de la ventana de tolerancia, se devuelve nulo. -- Si se llega al final de tRows sin una coincidencia para la ventana de tolerancia, también se devuelve nulo. -- Con bAll presente y verdadero, se devolverán todas las filas hasta la ventana de tiempo especificada, o todas las filas hasta la primera fila, que no se encuentre más allá de nTime +-nTol si no se encontró ninguna coincidencia. local tRet = nil si bAll entonces tRet = {} fin para nRowNum = # tRows , 1 , - 1 hacer si tRows [ nRowNum ] y tRows [ nRowNum ].                                                 nFecha  entonces local nDiff = nHora - tFilas [ nNúmeroFila ]. nFecha si nDiff > - nTol entonces si nDiff < nTol entonces si bAll entonces tRet [ # tRet + 1 ] = tFilas [ nNúmeroFila ] devolver tRet de lo contrario devolver tFilas [ nNúmeroFila ] fin de lo contrario devolver bAll y tRet o nulo fin fin fin si bAll entonces tRet [ # tRet + 1 ] = tFilas [ nNúmeroFila ] fin fin --return tFilas[nNúmeroFila] devolver nil fin función p . _toggleButton ( activo , customtoggles , id , etiqueta ) local encendido = activo y '' o ' mw-collapsed' local apagado = activo y ' mw-collapsed' o '' local outString = '<span class="mw-collapsible' .. encendido .. customtoggles .. '" id="mw-customcollapsible-' .. id .. '" ' .. 'style="border:2px solid lightblue">' .. etiqueta .. '</span>' .. '<span class="mw-collapsible' .. apagado .. customtoggles .. '" id="mw-customcollapsible-' .. id .. ' " > ' .. etiqueta .. ' </span> ' retorna outString fin de la función p . _toggleButton ( año . l , ' mw-customtoggle-' ..año . año , año .                                                                                          año ,  año . año ) fin de función p._monthToggleButton ( año , mes ) local lmon , etiqueta = lang : lc ( mes.mon ) , mes.mon local id = ( año o ' ' ) .. lmon local customtoggles = ' mw -customtoggle-' .. id si mes.s entonces etiqueta = etiqueta .. ' & nbsp ;' .. mes.s -- " Mmm ##" si mes.s ~ = mes.e entonces -- "Mmm ##–## " etiqueta = etiqueta .. ' ' .. mes . e end else customtoggles = customtoggles .. ( month . l y customtoggles .. month . l o '' ) end for i , combination in ipairs ( month . combinations ) do customtoggles = customtoggles .. ' mw-customtoggle-' .. combination -- hasta 2 combinaciones por mes, por lo que no es necesario table.concat() end return p ._toggleButton ( false , customtoggles , id , label ) end function p ._lastXToggleButton ( years , duration , combinationsL ) local months , id = years [ # years ]. months , ' l ' .. duration local i , customtoggles = # months , { ' mw-customtoggle-'                                                                                 ..  id } si # años > 1 entonces año local = años [ # años ]. año mientras meses [ i ]. l hacer customtoggles [ # customtoggles + 1 ] = ' mw-customtoggle-' .. año .. lang : lc ( meses [ i ]. mon ) .. '-' .. id si i == 1 entonces si año == años [ # años ]. año entonces año = años [ # años - 1 ]. año meses = años [ # años - 1 ]. meses i = # meses de lo contrario -- el primer mes también es último mes X o último X abarca más de 2 años, lo que aún no está previsto break end else i = i - 1 end end else while i > 0 y meses [ i ]. l hago customtoggles [ # customtoggles + 1 ] = ' mw-customtoggle-' .. lang : lc ( meses [ i ]. mon ) .. '-' .. id i = i - 1 fin fin para i , combinaciónL en ipairs ( combinacionesL ) hago customtoggles [ # customtoggles + 1 ] = ' mw-customtoggle-' .. combinaciónL -- hasta 3 combinacionesL en 90 días fin devolver p . _toggleButton ( verdadero , tabla. concat (                                                                    customtoggles ),  id ,  mw . ustring . format ( i18n . lastXDays ,  duration )) fin de la función p . _buildTogglesBar ( dateList , duration , nooverlap ) local años = {{ año = dateList [ 1 ]. año , meses = {{ mon = dateList [ 1 ]. mon , combinaciones = {}}}}} local meses , combinacionesL = años [ 1 ]. meses , {} función local addMonth ( mes ) si mes . mon ~= meses [ # meses ]. mon entonces -- nuevo mes si mes . año ~= años [ # años ]. año entonces -- nuevo año años [ # años + 1 ] = { año = mes . año , meses = {}} meses = años [ # años ]. meses -- cambiar lista de meses fin meses [ # meses + 1 ] = { mon = mes . mon , combinaciones = {}} fin fin para i = 2 , # dateList do -- deduplica años y meses si # dateList [ i ] == 0 entonces -- fecha específica addMonth ( dateList [ i ]) meses [ # meses ]. l = meses [                                               # meses ]. l  o  dateList [ i ]. l  -- para que se creen las clases ...-mon y ...-mon-lX elseif # dateList [ i ] == 1 then -- intervalo dentro del mes addMonth ( dateList [ i ][ 1 ]) meses [ # meses ]. l = meses [ # meses ]. l o dateList [ i ]. l else -- intervalo multimensual para j , mes en ipairs ( dateList [ i ]) do addMonth ( mes ) meses [ # meses ]. combinaciones [ # meses [ # meses ]. combinaciones + 1 ] = dateList [ i ]. id end combinacionesL [ # combinacionesL + 1 ] = dateList [ i ]. id : find ( '-l%d+$' ) y dateList [ i ]. id end end if nooverlap then local lastDate = dateList [ # dateList ] meses [ # meses ]. e = tonumber ( os.date ( '%d' , lastDate.nDate o lastDate.nEndDate o lastDate.nAltEndDate ) ) -- fin del último mes local i = # dateList repetir i = i - 1 hasta que i == 0 o ( dateList [ i ] .mon o dateList [                                                i ][ 1 ]. mon )  ~=  meses [ # meses ]. mon si i == 0 entonces -- inicio del primer y último mes meses [ # meses ]. s = tonumber ( os. date ( '%d' , dateList [ 1 ]. nDate )) de lo contrario meses [ # meses ]. s = 1 fin fin años [ # años ]. l = verdadero -- para activar la alternancia y la barra de meses respectiva local monthToggles , divs = {}, nil si # años > 1 entonces local yearToggles , monthsDivs = {}, {} para i , año en ipairs ( años ) hacer yearToggles [ # yearToggles + 1 ] = p . _yearToggleButton ( año ) monthToggles = {} meses = año . meses para j , mes en ipairs ( meses ) hacer monthToggles [ # monthToggles + 1 ] = p . _monthToggleButton ( año.año , mes ) fin monthsDivs [ # monthsDivs + 1 ] = ' < div class="mw-collapsible' .. ( año.l y ' ' o 'mw-collapsed' ) .. ' " id="mw-customcollapsible-' .. año.año .. ' ">' .. table.concat ( monthToggles ) .. '</div>' fin divs =                                                                '<div>'  ..  tabla.concat ( añoToggles )  ..  '</div>'  ..  tabla.concat ( mesesDivs ) de lo contrario para i , mes en ipairs ( meses ) hacer mesToggles [ # mesToggles + 1 ] = p._mesToggleButton ( nil , mes ) fin divs = '<div>' .. tabla.concat ( mesToggles ) .. '</div>' fin divs = divs .. ' <div> ' .. p . _lastXToggleButton ( años , duración , combinacionesL ) .. '</div>' return '<div class="nomobile" style="text-align:center">' .. divs .. '</div>' end local numwidth = { n = 0 , t = 2,45 , m = 3,5 , d = 3,5 , w = 4,55 , x = 5,6 } local bkgClasses = { 'mcc-d' , --muertes 'mcc-r' , --recuperaciones 'mcc-c' , --casos o altlbl1 'mcc-a2' , --altlbl2 'mcc-a3' --altlbl3 } función p . _customBarStacked ( args ) barargs locales = { } barargs [ 1 ] = args [ 1 ] función local _numwidth ( i ) devuelve args.numwidth : sub ( i ,i ) fin si args [ 7 ] o args [ 8 ] entonces -- ¿es aceptable tener uno y no el otro?                                                      barargs [ 2 ]  = '<span class=mcc-r' .. _numwidth ( 1 ) .. '>' .. ( args [ 7 ] o '' ) .. '</span>' .. '<span class=mcc-l' .. _numwidth ( 2 ) .. '>' .. ( args [ 8 ] o '' ) .. '</span>' fin si # args . numwidth == 4 entonces barargs . nota2 = ( args [ 9 ] o args [ 10 ]) y ( args . numwidth : sub ( 3 , 3 ) ~= 'n' y '<span class=mcc-r' .. _numwidth ( 3 ) .. '>' .. ( args [ 9 ] o '' ) .. '</span>' o '' ) .. '<span class=mcc-l' .. _numwidth ( 4 ) .. '>' .. ( args [ 10 ] o '' ) .. '</span>' o '' fin para i = 1 , 5 hacer barargs [ i + 2 ] = args [ i + 1 ] / args . divisor barargs [ 'título' .. i ] = args [ i + 1 ] fin barargs . alinear = ' cdcc ' barargs .bkgclasses = bkgClasses barargs .collapsed = args .barrargs colapsados.id = args .                                                                               id retorna BarBox . stacked ( barargs ) fin de la función p . _row ( args ) barargs local = {} barargs [ 1 ] = ( args [ 1 ] o '⋮' ) .. ( args . note0 o '' ) barargs [ 2 ] = args [ 2 ] o 0 barargs [ 3 ] = args [ 3 ] o 0 si args [ 'alttot1' ] entonces barargs [ 4 ] = args [ 'alttot1' ] de lo contrario si args [ 4 ] entonces barargs [ 4 ] = ( args [ 4 ] o 0 ) - ( barargs [ 2 ] o 0 ) - ( barargs [ 3 ] o 0 ) de lo contrario barargs [ 4 ] = 0 fin barargs [ 5 ] = args [ 5 ] o 0 si args [ 'alttot2' ] entonces barargs [ 6 ] = args [ 'alttot2' ] de lo contrario si args [ 6 ] entonces barargs [ 6 ] = ( args [ 6 ] o 0 ) - ( barargs [ 2 ] o 0 ) - ( barargs [ 3 ] o 0 ) de lo contrario barargs [ 6 ] = 0 fin barargs                                                                 [ 7 ]  =  args [ 7 ] función local changeArg ( firstright , valuecol , changecol ) cambio local = '' si args [ 'firstright' .. firstright ] entonces cambio = '(' .. i18n . na .. ')' de lo contrario si no args [ 1 ] y args [ valuecol ] entonces cambio = '(=)' de lo contrario cambio = args [ changecol ] y '(' .. args [ changecol ] .. ')' o '' fin cambio = cambio .. ( args [ 'nota' .. firstright ] o '' ) devuelve cambio ~= '' y cambio fin barargs [ 8 ] = changeArg ( 1 , 7 , 8 ) barargs [ 9 ] = args [ 9 ] barargs [ 10 ] = changeArg ( 2 , 9 , 10 ) barargs . divisor = args . divisor barargs . numwidth = args . numwidth fechas locales si args . collapsible entonces duración local = args . duración si args . daysToEnd >= duración entonces barargs . collapsed = true de lo contrario barargs . collapsed = false fin si args . nooverlap y args .                                                                              daysToEnd  <  duración  y luego barargs . id = 'l' .. duración elseif args . nFecha, luego fechas = { año = tonúmero ( os.date ( '%Y' , args . nDate )), mon = lang : formatDate ( 'M' , os.date ( '%Y-%m' , args . nDate ) ), l = argumentos . díasToEnd < duración y '-l' .. duración , nDate = args . nFecha } barargs . id = ( args . multiyear y dates . year o '' ) .. lang : lc ( dates . mon ) .. ( dates . l o '' ) else local id , y , m , ey , em = {}, tonumber ( os.date ( '%Y' , args . nStartDate o args . nAltStartDate )), tonumber ( os.date ( '%m' , args . nStartDate o args . nAltStartDate )), tonumber ( os.date ( '%Y ' , args . nEndDate o args . nAltEndDate )), tonumber ( os.date ( '%m' , args . nEndDate o args . nAltEndDate )) fechas = { nStartDate = args . nFechaInicio , nFechaInicioAlt = args.nFechaInicioAlt ,                                                        nEndDate = args.nEndDate , nAltEndDate = args.nAltEndDate }  repeat id [ # id + 1 ] = ( args.multiyear y y o ' ' ) .. lang : lc ( monthAbbrs [ m ] ) dates [ # dates + 1 ] = { year = y , mon = monthAbbrs [ m ] } y = y + math.floor ( m / 12 ) m = m % 12 + 1 hasta que y == ey y m > em o y > ey dates.l = args.daysToEnd < duration y ' -l ' .. duration id = table.concat ( id , ' - ' ) .. ( dates.l o ' ' ) barargs.id = id dates.id = id end else barargs.collapsed = false end return p ._customBarStacked ( barargs ), fechas fin de la función p._buildBars ( args ) local frame = mw.getCurrentFrame () local updatePeriod = 86400 -- la implementación temporal solo admite actualizaciones diarias función local getUnix ( timestamp ) retorno lang : formatDate ( 'U' , timestamp ) fin -- algo de información para el tipo de cambio 'w ' local sChngTp1                                                                       =  argumentos . tipo de cambio1 local sChngTp2 = args . changetype2 local xData1Key = args . right1data o 3 xData2Key = args locales . right2data o 1 xData1Key = ( tipo ( xData1Key ) == "número" ) y ( xData1Key + 1 ) o xData1Key xData2Key = ( tipo ( xData2Key ) == "número" ) y ( xData2Key + 1 ) o xData2Key local nPop = no ( args . population == nil ) y tonumber ( args . population ) o nil bIsW1 local = sChngTp1 == 'w' y nPop bIsW2 local = sChngTp2 == 'w' y nPop filas locales , prevRow , tStats = {}, {} , {} local nData1Diff1Max , nData1Diff1MaxDate , nData2Diff1Max , nData2Diff1MaxDate local nData1i7Max , nData1i7MaxDate , nData2i7Max , nData2i7MaxDate para línea en mw.text.gsplit ( args.data , ' \n ' ) hace i local , barargs = 1 , {} – análisis de parámetros de línea , manejo básico de tipo/ valor faltante para parámetros en mw . texto . gsplit ( línea , ';' ) hacer si parámetro : buscar ( '^%s*%a' ) entonces parámetro                                                                                      =  mw . text . split ( parámetro ,  '=' ) parámetro [ 1 ] = mw . text . trim ( parámetro [ 1 ]) si parámetro [ 1 ]: buscar ( '^alttot' ) entonces parámetro [ 2 ] = tonumber ( marco : callParserFunction ( '#expr' , parámetro [ 2 ])) de lo contrario parámetro [ 2 ] = mw . text . trim ( parámetro [ 2 ]) si parámetro [ 1 ]: buscar ( '^firstright' ) entonces parámetro [ 2 ] = yesno ( parámetro [ 2 ]) de lo contrario si parámetro [ 2 ] == '' entonces parámetro [ 2 ] = nil fin fin barargs [ parámetro [ 1 ]] = parámetro [ 2 ] de lo contrario parámetro = mw . text . trim ( parámetro ) si parámetro ~= '' entonces si i >= 2 y i <= 6 entonces parámetro = tonumber ( marco : callParserFunction ( '#expr' , parámetro )) si no parámetro entonces error (( 'Los parámetros de datos 2 a 6 no deben formatearse. i=%d, línea=%s' ): formato ( i , línea )) fin fin barargs [ i ] = parámetro fin i = i +                                                1 fin fin local bValid , nDateDiff - obtener información de fecha relevante basada en la fila anterior if barargs [ 1 ] then bValid , barargs.nDate = pcall ( getUnix , barargs [ 1 ] ) assert ( bValid , ' fecha no válida " ' .. barargs [ 1 ] .. ' " ' ) if prevRow.nDate o prevRow.nEndDate then nDateDiff = barargs.nDate - ( prevRow.nDate o prevRow.nEndDate ) if nDateDiff > updatePeriod then if nDateDiff == 2 * updatePeriod then prevRow = { nDate = barargs . nDate - updatePeriod } prevRow [ 1 ] = os.date ( '%Y-%m-%d' , prevRow . nDate ) else prevRow = { nStartDate = ( prevRow . nDate o prevRow . nEndDate ) + updatePeriod , nEndDate = barargs . nDate - updatePeriod } fin de filas [ # filas + 1 ] = prevRow fin de lo contrario prevRow . nEndDate = barargs . nDate - updatePeriod si prevRow . nFechaInicio == fila anterior . nEndDate y luego prevRow . nFecha = fila anterior . nEndDate prevRow [ 1 ] = os.date ( '%Y-%m-%d' , prevRow .                                                          nDate ) -- como nAltStartDate asume un intervalo mínimo de varios días, es posible que sea mayor si un lapso anterior verdadero es 1 día elseif prevRow . nAltStartDate y prevRow . nAltStartDate >= prevRow . nEndDate then error ( 'una fila en un grupo de intervalos consecutivos tiene 1 día de duración y falta el parámetro de fecha' ) end end else if barargs . enddate then bValid , barargs . nEndDate = pcall ( getUnix , barargs . enddate ) assert ( bValid , 'fecha final no válida "' .. barargs . enddate .. '"' ) end if prevRow . nDate o prevRow . nEndDate then barargs . nStartDate = ( prevRow . nDate o prevRow . nEndDate ) + updatePeriod si barargs . nFechaInicio == barargs . nEndDate y luego barargs . nFecha = barargs . nEndDate barargs [ 1 ] = os.date ( '%Y-%m-%d' , barargs . nDate ) fin de lo contrario prevRow . nAltEndDate = ( prevRow . nStartDate o prevRow . nAltStartDate ) + barras de período de actualización . nAltStartDate = fila anterior . nAltEndDate + updatePeriod si barargs . nEndDate y barargs . nAltStartDate >= barargs . nEndDate entonces error ( 'una fila en un grupo de intervalos consecutivos tiene una duración de 1 día y falta el parámetro de fecha' ) fin fin fin                                                    - actualice tStats si al menos un tipo de cambio de columna es 'w' local tBarStats = nil si barargs [ 1 ] y ( bIsW1 o bIsW2 ) entonces bValid , barargs . nDate = pcall ( getUnix , barargs [ 1 ]) afirmar ( bValid , 'fecha no válida "' .. barargs [ 1 ] .. '"' ) barargs . nFecha = tonúmero ( barargs . nFecha ) tBarStats = {} local tBarStats1 = tStats [ barargs . nDate - 86400 ] - información de días anteriores local tBarStats7 = tStats [ barargs . nDate - 604800 ] - 7 días antes info local tBarStats14 = tStats [ barargs . nDate - 1209600 ] -- 14 días antes de la información local nData1 = barargs [ xData1Key ] o barargs [ 4 ] local nData2 = barargs [ xData2Key ] o barargs [ 2 ] -- local nData1Diff1Max, nData1Diff1MaxDate, nData12Diff1Max, nData2Diff1MaxDate -- local nData1i7Max, nData1i7MaxDate , nData12i7Max, nData2i7MaxDate si bIsW1 y nData1 entonces tBarStats . nData1 = nData1 -- si existen estadísticas desde el día anterior si no ( tBarStats1 == nil ) y no ( tBarStats1 . nData1 == nil ) entonces tBarStats . nData1Diff1 = nData1 - tBarStats1 . nData1 si nData1Diff1Max == nulo o                                                                     nData1Diff1Max  <  tBarStats . nData1Diff1  entonces nData1Diff1Max = tBarStats . nData1Diff1 nData1Diff1MaxDate = barargs [ 1 ] fin fin -- si existen estadísticas de 7 días antes si no ( tBarStats7 == nil ) entonces si no ( tBarStats7 . nData1 == nil ) entonces tBarStats . nData1Diff7 = nData1 - tBarStats7 . nData1 si nData1i7Max == nil o nData1i7Max < tBarStats . nData1Diff7 / nPop * 100000 entonces nData1i7Max = tBarStats . nData1Diff7 / nPop * 100000 nData1i7MaxDate = barargs [ 1 ] fin fin si no ( tBarStats7 . nData1Diff1 == nil ) entonces tBarStats . nData1P7Diff1 = tBarStats7 . nData1Diff1 fin fin -- si existen estadísticas de 14 días antes si no ( tBarStats14 == nil ) entonces si no ( tBarStats14 . nData1 == nil ) entonces tBarStats . nData1Diff14 = nData1 - tBarStats14 . nData1 fin si no ( tBarStats14 . nData1Diff1 == nil ) entonces tBarStats . nData1P14Diff1 = tBarStats14 . nData1Diff1 end end end si bIsW2 y nData2 entonces tBarStats . nData2 = nData2 -- si existen estadísticas del día anterior si no ( tBarStats1 == nil ) y                                                                      no  ( tBarStats1 . nData2  ==  nil )  entonces tBarStats . nData2Diff1 = nData2 - tBarStats1 . nData2 si nData2Diff1Max == nil o nData2Diff1Max < tBarStats . nData2Diff1 entonces nData2Diff1Max = tBarStats . nData2Diff1 nData2Diff1MaxDate = barargs [ 1 ] fin fin -- si existen estadísticas de 7 días antes si no ( tBarStats7 == nil ) entonces si no ( tBarStats7 . nData2 == nil ) entonces tBarStats . nData2Diff7 = nData2 - tBarStats7 . nData2 si nData2i7Max == nil o nData2i7Max < tBarStats.nData2Diff7 / nPop * 100000 entonces nData2i7Max = tBarStats.nData2Diff7 / nPop * 100000 nData2i7MaxDate = barargs [ 1 ] fin fin si no ( tBarStats7.nData2Diff1 == nil ) entonces tBarStats.nData2P7Diff1 = tBarStats7.nData2Diff1 fin fin -- si existen estadísticas de 14 días antes si no ( tBarStats14 == nil ) entonces si no ( tBarStats14.nData2 == nil ) entonces tBarStats .nData2Diff14 = nData2 - tBarStats14 . nData2 fin si no ( tBarStats14 . nData2Diff1 == nil ) entonces tBarStats . nData2P14Diff1 = tBarStats14 . nData2Diff1                                                                      fin fin fin tStats [ barargs . nDate ] = tBarStats finaliza la función local fillCols ( col , cambio ) datos locales = args [ 'derecha' .. col .. 'datos' ] tipo de cambio local = args [ 'tipo de cambio' .. col ] valor local , num , num anterior si datos == 'alttot1' luego num = barargs . alttot1 o barargs [ 4 ] prevnum = prevRow . alttot1 o prevRow [ 4 ] elseif data == 'alttot2' entonces num = barargs . alttot2 o barargs [ 6 ] prevnum = prevRow . alttot2 o prevRow [ 6 ] de lo contrario, si datos , entonces num = barargs [ datos + 1 ] prevnum = prevRow [ datos + 1 ] fin -- cambio de tipo w si no ( tBarStats == nil ) y no ( tBarStats [ "nData" .. col ] == nil ) entonces nDiff7 local = tBarStats [ "nData" .. col .. "Diff7" ] sChngCmt local = "" si col == 1 y no ( nData1i7Max == nil ) entonces sChngCmt = "máximo histórico: " . . mw . ustring . formato ( '%. 1f' , nData1i7Max ) .. " en "                                                                                   ..  nData1i7MaxDate elseif col == 2 y no ( nData2i7Max == nil ) entonces sChngCmt = "máximo histórico: " .. mw . ustring . format ( '%.1f' , nData2i7Max ) .. " on " .. nData2i7MaxDate fin si nDiff7 == nil entonces cambio = i18n . na de lo contrario cambio = '<span title="' .. sChngCmt .. '">' .. tostring ( mw . ustring . format ( '%.1f' , nDiff7 / args . population * 100000 )) .. '</span>' fin nValor local = tBarStats [ "nData" .. col ] nDiff1 local = tBarStats [ "nData" .. col .. "Diff1" ] nP7Diff1 local = tBarStats [ "nData" .. col .. "P7Diff1" ] nP14Diff1 local = tBarStats [ "nData" .. col .. "P14Diff1" ] sCmnt local si nDiff1 == nulo entonces sCmnt = "" de lo contrario sCmnt = "diario cambio: +" .. lang : formatNum ( nDiff1 ) fin si no ( nP7Diff1 == nil ) y no ( sCmnt == "" ) entonces sCmnt = sCmnt .. ", 7 días antes: +" .. lang :formatNum ( nP7Diff1 ) fin si no ( nP14Diff1 == nil ) y no ( sCmnt)                                                                                 ==  "" )  entonces sCmnt = sCmnt .. ", 14 días antes: +" .. lang : formatNum ( nP14Diff1 ) fin si col == 1 y no ( nData1Diff1Max == nil ) y no ( sCmnt == "" ) entonces sCmnt = sCmnt .. ", máximo histórico: +" .. lang : formatNum ( nData1Diff1Max ) .. " en " .. nData1Diff1MaxDate fin si col == 2 y no ( nData2Diff1Max == nil ) y no ( sCmnt == "" ) entonces sCmnt = sCmnt .. ", máximo histórico: +" .. lang : formatNum ( nData2Diff1Max ) .. " en " .. nData2Diff1MaxDate valor final = '<span title="' .. sCmnt .. '">' .. lang : formatNum ( nValue ) .. '</span>' elseif data y num then -- no se encontró nada en la columna, la fuente y los datos existen valor = changetype == 'o' y '' o lang : formatNum ( num ) -- establece el valor en num si changetype no es 'o' si no es change y no barargs [ 'firstright' ..col ] entonces si prevnum y prevnum ~= 0 entonces -- los datos de la fila anterior si num - prevnum ~= 0 entonces -- los datos han cambiado desde la fila anterior local nChange = num - prevnum si changetype == 'a' entonces -- el tipo de cambio es "absoluto"                                                                                                             si  nChange  >  0  entonces cambio = '+' .. lang : formatNum ( nChange ) fin de lo contrario si changetype == 'w' y args . población entonces -- changetype == 'r' o -- el tipo de cambio es "r" (promedio de recuento durante un período de 7 días) o "w" (incidencia semanal por 100.000 habitantes) si barargs . nDate y filas entonces -- buscar la fila de datos de 7 días antes +- 1 hora local tIntervRow = p . _findIntervalRow ( filas , barargs . nDate - 7 * 24 * 3600 , 3600 , false ) local tPrevDayRow = p . _findIntervalRow ( filas , barargs . nDate - 24 * 3600 , 3600 , false ) si tIntervRow entonces nDatCol local = ( col == 1 ) y 4 o 2 nDiff local = tIntervRow [ nDatCol ] y ( num - tIntervRow [ nDatCol ]) o nulo si changetype == 'r' entonces cambio = nDiff y ( '<span title="Promedio móvil de 7 días de cambio diario">r7: ' .. tostring ( mw . ustring . format ( '%.0f' , nDiff / 7 )) .. '</span>' ) o i18n . na else change = nDiff and ( '<span title="Incidencia de 7 días por cada 100.000 habitantes">' .. tostring ( mw . ustring . format ( '%.1f' ,nDiff / args .                                                                    población * 100000 ))  ..  '</span>' )  o  i18n . na if tPrevDayRow and tPrevDayRow [ nDatCol ] then value = '<span title="cambio diario: +' .. lang : formatNum ( num - tPrevDayRow [ nDatCol ]) .. '>' .. valor .. '</span>' end end else change = i18n . na end else change = i18n . na end else -- el tipo de cambio es "porcentaje", "solo porcentaje" o indefinido porcentaje local = 100 * nChange / prevnum -- calcular porcentaje redondeo local = math.abs ( porcentaje ) >= 10 y '%.0f' o math.abs ( porcentaje ) >= 1 y '%.1f' o '%.2f' porcentaje = tonumber ( redondeo : formato ( porcentaje )) -- redondear a dos cifras sig si porcentaje > 0 entonces cambio = '+' .. lang : formatNum ( porcentaje ) .. '%' elseif percent < 0 then change = lang : formatNum ( percent ) .. '%' else change = '=' end end else -- los datos no han cambiado desde la fila anterior change = '=' end else -- no hay datos en la fila anterior barargs [ 'firstright' .. col ] = true -- se establece en (na) end end end valor de retorno ,cambiar fin si no barargs [ 7 ] entonces                                                                                 barargs [ 7 ],  barargs [ 8 ]  =  fillCols ( 1 ,  barargs [ 8 ]) fin si no barargs [ 9 ] entonces barargs [ 9 ], barargs [ 10 ] = fillCols ( 2 , barargs [ 10 ]) fin filas [ # filas + 1 ] = barargs prevRow = barargs fin --error(mw.dumpObject(tStats)) -- calcular y pasar parámetros repetitivos (excepto daysToEnd) a cada fila local lastRow = filas [ # filas ] local total = { lastRow [ 2 ] o 0 , lastRow [ 3 ] o 0 , [ 4 ] = lastRow [ 5 ] o 0 } total [ 3 ] = lastRow . alttot1 o lastRow [ 4 ] y lastRow [ 4 ] - total [ 1 ] - total [ 2 ] o 0 total [ 5 ] = lastRow . alttot2 o lastRow [ 6 ] y lastRow [ 6 ] - total [ 1 ] - total [ 2 ] o 0 divisor local = ( total [ 1 ] + total [ 2 ] + total [ 3 ] + total [ 4 ] + total [ 5 ]) / ( args . barwidth                                                               -  5 )  --debería ser -3 si los bordes no van hacia adentro local firstDate , lastDate = rows [ 1 ]. nDate , lastRow . nDate o lastRow . nEndDate local multiyear = os.date ( '%Y' , firstDate ) ~= os.date ( '%Y' , lastDate - ( args . nooverlap y args . duration * 86400 o 0 )) si args . collapsible ~= falso entonces args . collapsible = ( lastDate - firstDate ) / 86400 >= args . duration fin local bars , dateList = {}, {} para i , fila en ipairs ( filas ) hacer -- construir filas fila . divisor = divisor fila . numwidth = args . numwidth fila . colapsable = args.colapsable row.duration = args.duration row.nooverlap = args.nooverlap row.daysToEnd = ( lastDate - ( row.nDate o row.nEndDate o row.nAltEndDate ) ) / 86400 row.multiyear = multiyear bars [ # bars + 1 ] , dateList [ # dateList + 1 ] = p._row ( row ) end return table.concat ( bars ,                                                                        ' \n ' ),  dateList fin p . _barColors = { -- también en styles.css '#A50026' , --deaths 'SkyBlue' , --recoveries 'Tomate' , --cases o altlbl1 'Oro' , --altlbl2 'OrangeRed' --altlbl3 } función p . _legend0 ( args ) devuelve '<span style="font-size:90%; margin:0px">' .. '<span style="background-color:' .. ( args [ 1 ] o 'none' ) .. '; borde:' .. ( args . borde o 'none' ) .. '; color:' .. ( args [ 1 ] o 'none' ) .. '">' .. '    ' .. '</span>' .. ' ' .. ( args [ 2 ] o '' ) .. '</span>' fin de la función p . _chart ( args ) para clave , valor en pares ( args ) hacer si ({ float = 1 , barwidth = 1 , numwidth = 1 , changetype = 1 })[ clave : gsub ( '%d' , '' )] entonces args [ clave ] = valor : lower () fin fin local barargs = {} barargs . css = 'Módulo:Gráfico de casos médicos/styles.css' barargs . float = args . float o 'derecha' args .ancho de barra = args . ancho de barra o ancho de barra local 'medio' si args                                                            .barwidth ==    ' delgado' entonces barwidth = 120 elseif args .barwidth == ' medio' entonces barwidth = 280 elseif args .barwidth == 'ancho' entonces barwidth = 400 elseif args .barwidth == 'auto' entonces barwidth = ' auto' else error ( 'ancho de barra no reconocido' ) fin de la función local _numwidth ( i ) nw local = args .numwidth : sub ( i , i ) return assert ( numwidth [ nw ], 'numwidth no reconocido[' .. i .. ' ] ' ) fin de los argumentos .numwidth = args .numwidth o 'mm' si args .numwidth : sub ( 1 , 1 ) == ' n' o args . numwidth : sub ( 2 , 2 ) == 'n' o args . numwidth : sub ( 4 , 4 ) == 'n' entonces error ( '"n" sólo se permite en numwidth[3]' ) fin local buffer = 0.3 --hasta la determinación automática de numwidth local right1width , right2width = _numwidth ( 1 ) + 0.3 + _numwidth ( 2 ) + buffer , 0 si # args . numwidth == 4 entonces right2width = _numwidth ( 3 ) + _numwidth ( 4 ) + buffer si                                                                         args . numwidth : sub ( 3 , 3 )  ~=  'n'  entonces right2width = right2width + 0.3 fin si args . right2 entonces right2width = math.ceil ( right2width / 0.88 * 100 ) / 100 -- de escala td a th de lo contrario right1width = right1width + 0.8 + right2width right2width = 0 fin fin right1width = math.ceil ( right1width / 0.88 * 100 ) / 100 si tonumber ( barwidth ) entonces -- transforma colswidth de th a escala td, agrégalo con espaciado de borde y finalmente transforma a escala de tabla local relwidth = math.ceil ( (( 7.08 + right1width + right2width ) * 0.88 + 0.8 * ( args.right2 y 5 o 4 ) ) * 88 ) / 100 barargs . width = 'calc(' .. relwidth .. 'em + ' .. barwidth .. 'px)' --¿por qué los bordes de la barra van hacia adentro (no +2)? barargs . barwidth = barwidth .. 'px' else barargs . width = 'auto' barargs . barwidth = 'auto' end barargs . lineheight = args . rowheight local title = {} local function spaces ( n ) local nbsp = ' ' return '<span class="nowrap">' .. nbsp : rep ( n ) .. '</span>' end local location                                                                                          =  lang : ucfirst ( mw . ustring . gsub ( args . ubicación ,  i18n . the_ ,  '' )) local navbartitle = args . brote .. i18n . _data .. '/' .. ( args . ubicación3 y args . ubicación3 .. '/' o '' ) .. ( args . ubicación2 y args . ubicación2 .. '/' o '' ) .. ubicación .. i18n . _medicalCasesChart barra de navegación local = requerir ( 'Módulo:barra de navegación' ). _navbar title [ 1 ] = ( args . pretitle y args . pretitle .. '' o '' ) .. args . enfermedad .. '' .. i18n . casosEn .. '' .. args . ubicación .. ( args . ubicación2 y ', ' .. args . ubicación2 o '' ) .. ( args . ubicación3 y ', ' .. args . ubicación3 o '' ) .. ( args . posttitle y '' .. args . posttitle o '' ) .. espacios ( 2 ) .. '(' .. navbar ({ navbartitle , titleArg = ':' .. mw . getCurrentFrame (): getParent (): getTitle (), mini = 1 ,nodiv = 1 })                                                                           .. ')<br />' título [ 2 ] = p . _legend0 ({ p . _barColors [ 1 ], i18n . deaths }) args . recoveries = args . recoveries == nil y true o args . recoveries título [ 3 ] = args . recoveries y espacios ( 3 ) .. p . _legend0 ({ p . _barColors [ 2 ], args . reclbl o i18n . recoveries }) o '' título [ 4 ] = args . altlbl1 ~= 'ocultar' y espacios ( 3 ) .. p . _legend0 ({ p . _barColors [ 3 ], args . altlbl1 o i18n . activeCases }) o '' título [ 5 ] = args . altlbl2 y espacios ( 3 ) .. p . _legend0 ({ p . _barColors [ 4 ], args . altlbl2 }) o '' título [ 6 ] = args . altlbl3 y espacios ( 3 ) .. p . _legend0 ({ p . _barColors [ 5 ], args . altlbl3 }) o '' barra de alternancia local , buildargs = nil , {} args . right1 = args . right1 o i18n . noOfCases args .                                                              duración  =  argumentos . duración  o  15 args . nooverlap = args . sin superposición o construcciones falsas . barwidth = tonumber ( barwidth ) o 280 buildargs . ancho numérico = argumentos . ancho numérico : gsub ( 'd' , 'm' ) si args . página de datos y luego local externalData = require ( 'Módulo: gráfico/datos de casos médicos' ). _compilaciones de datos externos . datos = datos externos ( args ) más buildargs . datos = argumentos . final de datos : si no hay casos right1data y right1 title, utilice buildargs de tercera clasificación . right1data = argumentos . right1data o args . derecha1 == i18n . noOfCases y 3 : si no hay datos right2 y el título right2 es muertes, utilice los buildargs de primera clasificación . right2data = argumentos . right2data o ( args . right2 == i18n . noOfDeaths o args . right2 == i18n . noOfDeaths2 ) y 1 buildargs . changetype1 = ( args . changetype1 o args . changetype o '' ): sub ( 1 , 1 ) -- 1.ª letra buildargs . changetype2 = ( args . changetype2 o args . changetype o '' ): sub ( 1 , 1 ) -- 1.ª letra buildargs . collapsible = args . collapsible                                                        buildargs . duration  =  args . duration buildargs . nooverlap = args . nooverlap buildargs . population = args . population local dateList barargs . bars , dateList = p . _buildBars ( buildargs ) si buildargs . collapsible entonces togglesbar = p . _buildTogglesBar ( dateList , args . duration , args . nooverlap ) fin título [ 7 ] = togglesbar y '<br />' .. togglesbar o '' barargs . title = table. concat ( title ) barargs . left1 = '<div style="width:7.08em">' .. i18n . date .. '</div>' barargs . right1 = '<div class=center style="width:' .. right1width .. 'em">' .. args . right1 .. '</div>' --center no es necesario con el apropiado si args . right2 entonces --numwidth, pero más vale prevenir que curar barargs . right2 = '<div class=center style="width:' .. right2width .. 'em">' .. args . right2 .. '</div>' fin barargs . footer = args . footer local box = BarBox . create ( barargs ) return tostring ( box ) fin local getArgs = require ( 'Module:Arguments' ). getArgs function p .barColors ( marco ) argumentos locales =                                                                  getArgs ( frame ) retorna p . _barColors [ tonumber ( args [ 1 ])] fin de la función p . chart ( frame ) local args = getArgs ( frame , { valueFunc = function ( key , value ) si value y value ~= '' entonces key = key : gsub ( '%d' , '' ) si ({ rowheight = 1 , duration = 1 , rightdata = 1 })[ key ] entonces -- si key in {...} retorna tonumber ( value ) o value fin si ({ recoveries = 1 , collapsible = 1 , nooverlap = 1 })[ key ] entonces retorna yesno ( value ) fin retorna value fin retorna nil fin }) retorna p . _ chart ( args ) fin retorna p