Módulo:Lista de episodios
La documentación para este módulo puede ser creada en Módulo:Lista de episodios/doc
local p = {} local getArgs local yesno = require('Módulo:Yesno') local mm = require('Módulo:Math') local contrast_ratio = require('Módulo:Color contrast')._ratio local HTMLcolor = mw.loadData( 'Módulo:Color contrast/colors' ) function p.sublist(frame) return main(frame,true) end function p.lista(frame) return main(frame,false) end function idtrim(val,search) local valfind = string.find(val, search) if valfind == nil then return val else return string.sub(val, 0, valfind-1) end end function main(frame, sublist) if not getArgs then getArgs = require('Módulo:Argumentos').obtenerArgumentos end local args -- La mayoría de los parámetros aún deberían mostrarse cuando están en blanco, así que no elimine los espacios en blanco if sublist then args = getArgs(frame, {removeBlanks = false, wrappers = 'Plantilla:Lista de episodios/sublista'}) else args = getArgs(frame, {removeBlanks = false, wrappers = 'Plantilla:Lista de episodios'}) end local title = mw.title.getCurrentTitle() local page_title = mw.title.getCurrentTitle().text local initiallist_title = args['1'] or '' -- ¿Está esta lista en la misma página que la página llamando directamente a la plantilla? local on_initial_page -- Solo la sublist tenía algo de ocultación, por lo que solo es necesario verificar if sublist then on_initial_page = mw.uri.anchorEncode(page_title) == mw.uri.anchorEncode(initiallist_title) -- avoid processing ghost references if not on_initial_page then args.ResumenBreve = 'no' args['AltTítulo'] = '' end else -- Las listas normales SIEMPRE pueden mostrar el resumen on_initial_page = true end -- Declare todas las posibles etiquetas <td> / <th> aquí, y la cadena de retorno local EpisodioNumero,EpisodioNumero2,Titulo,Aux1,DirigidoPor,EscritoPor, DirigidoPor,Aux2,Aux3,FechadeEmisionorig,AltFecha,AltFecha2,CodigodeProd, Audiencia,Aux4,return_table -- Necesita solo este parámetro eliminado si está en blanco, no hay otros if args.ResumenBreve and args.ResumenBreve == "" then args.ResumenBreve = 'no' end if args.ResumenBreve then if not args.ResumenBreve:find('%S') then args.ResumenBreve = 'no' end end -- Color predeterminado a azul claro local linea_color = args.LineaColor or 'CCCCFF' -- Agregue # al color si es necesario, y establezca el color predeterminado si no es válido if HTMLcolor[linea_color] == nil then linea_color = '#'..(mw.ustring.match(linea_color, '^[%s#]*([a-fA-F0-9]*)[%s]*$') or '') if linea_color == '#' then linea_color = '#CCCCFF' end end -- Lista de nombres de parámetros para probar -- Mantener este orden como está local cell_names = { 'EpisodioNúmero2', 'Título', 'Aux1', 'DirigidoPor', 'EscritoPor', 'Aux2', 'Aux3', 'FechadeEmisiónorig', 'AltFecha', 'AltFecha2', 'CódigodeProd', 'Audiencia', 'Aux4' } -- ¿Hay una manera de llamar a una variable por su nombre almacenado como una cadena? Dudo -- Esta lista hace coincidir las cadenas con las variables de celda de tabla local td_tags = { ['EpisodioNúmero2'] = EpisodioNumero2, ['Título'] = Titulo, ['Aux1'] = Aux1, ['DirigidoPor'] = DirigidoPor, ['EscritoPor'] = EscritoPor, ['DirigidoPor'] = DirigidoPor, ['Aux2'] = Aux2, ['Aux3'] = Aux3, ['FechadeEmisiónorig'] = FechadeEmisionorig, ['AltFecha'] = AltFecha, ['AltFecha2'] = AltFecha2, ['CódigodeProd'] = CodigodeProd, ['Audiencia'] = Audiencia, ['Aux4'] = Aux4, } local table_row = mw.html.create('tr') :addClass('vevent') :css('text-align','center') local row_color = yesno(args.RowColor, false) if args.RowColor and string.lower(args.RowColor) == 'on' then row_color = true end local top_color local epn = mm._cleanNumber(args['EpisodioNúmero']) or 1 if args.TopColor then top_color = '#'..args.TopColor elseif row_color and on_initial_page and mm._mod(epn,2) == 0 then top_color = '#E9E9E9' elseif on_initial_page and args.ResumenBreve and args.ResumenBreve ~= 'no' then top_color = '#F2F2F2' else top_color = 'inherit' end table_row:css('background',top_color) -- Esto decidirá el colspan= de la celda de resumen -- Comience como 1 porque EpisodioNúmero siempre se crea local nonnil_params = 1 -- Creado por separado porque es la única etiqueta <th> if args['EpisodioNúmero'] then if (args['EpisodioNúmero'] == '') then args['EpisodioNúmero'] = frame:expandTemplate{title='TableTBA'}; end EpisodioNumero = mw.html.create('th') :attr('scope','row') :attr('id','ep'..idtrim(idtrim(args['EpisodioNúmero'],' ----'),'<')) :css('text-align','center') :wikitext(args['EpisodioNúmero']) table_row:css('background',top_color) table_row:node(EpisodioNumero) end -- El wikitexto en la celda Título está un poco más involucrado que los otros. local function add_title() local title_string = '' -- El título en comillas; no hay nada si está vacío if args['Título'] and args['Título']:find('%S') then title_string = title_string..'«'..args['Título']..'»' elseif not ( (args['TítuloTrans'] and args['TítuloTrans']:find('%S')) or (args['TítuloNativo'] and args['TítuloNativo']:find('%S')) ) then title_string = title_string .. frame:expandTemplate{title='TableTBA'} end if args['RTítulo'] then title_string = title_string..args['RTítulo'] end -- Rodea el AltTítulo con comillas; no hay nada si está vacío if args['AltTítulo'] and args['AltTítulo']:find('%S') then if title_string ~= '' then title_string = title_string .. '<br>' end title_string = title_string..'«'..args['AltTítulo']..'»' elseif args['TítuloTrans'] and args['TítuloTrans']:find('%S') then if title_string ~= '' then title_string = title_string .. '<br>' end title_string = title_string .. 'Transcripción: «' .. args['TítuloTrans'] .. '»' end if args['TítuloNativo'] and args['TítuloNativo']:find('%S') then if args['TítuloNativoIdioma'] and args['TítuloNativoIdioma']:find('%S') then title_string = title_string .. ' (en '..frame:expandTemplate{title='Obtener idioma', args={args['TítuloNativoIdioma']}} ..': <span lang="'..args['TítuloNativoIdioma']..'">'..args['TítuloNativo'].. '</span>)' else title_string = title_string .. ' (' .. args['TítuloNativo'] .. ')' end end if args['RAltTítulo'] then title_string = title_string..args['RAltTítulo'] end return title_string end local categories = '' for _,v in ipairs(cell_names) do -- El título está en el medio, por lo que probablemente sea mejor simplemente volver atrás una y otra vez en lugar de hacer 2 nodos -- luego el título, y luego el resto en un bucle if v == 'Título' then nonnil_params = nonnil_params + 1 local title_text = add_title() td_tags[v] = mw.html.create('td') td_tags[v]:wikitext(title_text) :addClass('resumen') :css('text-align','left') table_row:node(td_tags[v]) elseif args[v] then -- Fechas de emisión que no usan {{Fecha}} if v == 'FechadeEmisiónorig' and args[v] ~= '' and string.match(args[v], '%d%d%d%d') ~= nil and string.match(args[v], '2C2C2C') == nil and string.find(args[v],'dtfecha') == nil and on_initial_page and title.namespace == 0 then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con fechas de emisión sin formato]]' end -- Fechas de emisión alternativas que utilizan {{Fecha}} if v == 'AltFecha' and args[v] ~= '' and string.find(args[v],'dtstart') ~= nil and on_initial_page and title.namespace == 0 then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con fechas de emisión alternativas con formato incorrecto]]' end -- Establecer celdas vacías en TBA / TBD if args[v] == '' then -- Establezca en N/A si los espectadores no han estado disponible durante cuatro semanas, de lo contrario, configúrelo como TBD if v == 'Audiencia' and args.FechadeEmisionorig and args.FechadeEmisionorig ~= '' then local day, month, year = args.FechadeEmisionorig:gsub(" "," "):match("(%d+) de (%a+) de (%d+)") if day == nil then args[v] = frame:expandTemplate{title='TableTBA',args={'TBD'}}; else local MONTHS = {enero=1, febrero=2, marzo=3, abril=4, mayo=5, junio=6, julio=7, agosto=8, septiembre=9, octubre=10, noviembre=11, diciembre=12} local seconds = os.time()-os.time({day=day,month=MONTHS[month],year=year,hour=0,min=0,sec=0}) if seconds >= 60*60*24*7*4 then args[v] = frame:expandTemplate{title='TableTBA',args={'N/A'}}; else args[v] = frame:expandTemplate{title='TableTBA',args={'TBD'}}; end end else args[v] = frame:expandTemplate{title='TableTBA'}; end end nonnil_params = nonnil_params + 1 td_tags[v] = mw.html.create('td') td_tags[v]:wikitext(args[v]) table_row:node(td_tags[v]) end end -- El código de producción también tiene un atributo adicional, así que agréguelo por separado aquí if td_tags['CódigodeProd'] and args['CódigodeProd'] and (string.find(args['CódigodeProd'],'TBA') == nil) then td_tags['CódigodeProd']:attr('id','pc'..idtrim(idtrim(args['CódigodeProd'],' ----'),'<')) end -- agregue estas categorías solo en el espacio principal y solo si están en la página donde se usa la plantilla if on_initial_page and title.namespace == 0 then if args.LineaColor and args.LineaColor ~= '' then local black_cr = contrast_ratio{args.LineaColor, 'black', ['error'] = 0} local white_cr = contrast_ratio{'white', args.LineaColor, ['error'] = 0} if frame:expandTemplate{title='ColorToLum',args={args.LineaColor}} == '' then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con colores de línea defectuosos]]' elseif black_cr < 7 and white_cr < 7 then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con colores de línea no conformes]]' end else -- categories = categories..'[[Categoría:Wikipedia:Listas de episodios usando LineaColor predeterminado]]' end if args.TopColor and args.TopColor ~= '' then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con desviaciones de fila]]' -- Rastrea los colores superiores que tienen un índice de contraste de color inferior a AAA con -- respecto del color del texto, color del enlace o color del enlace visitado. Ver -- [[en:WP:COLOR]] para más información sobre los requisitos de contraste de color. local text_cr = contrast_ratio{args.TopColor, 'black', ['error'] = 0} local link_cr = contrast_ratio{args.TopColor, '#0B0080', ['error'] = 0} local visited_link_cr = contrast_ratio{args.TopColor, '#0645AD', ['error'] = 0} if text_cr < 7 or link_cr < 7 or visited_link_cr < 7 then categories = categories..'[[Categoría:Wikipedia:Listas de episodios con TopColor inválidos]]' end end end -- Agrego una categoría de mantenimiento que será eliminada si se usa a través de Tabla de episodios -- Nota: el nombre de esta categoría debe coincidir aquí y en el Módulo:Tabla de episodios categories = categories .. '[[Categoría:Wikipedia:Listas de episodios que no usan Tabla de episodios]]' -- No muestre el resumen si esto se está transcluyendo en la página de la lista inicial -- Inclúyelo en todas las otras listas if on_initial_page and args.ResumenBreve and args.ResumenBreve ~= 'no' then local bottom_wrapper = mw.html.create('tr') :addClass('expand-child') -- corregir las listas en el breve resumen local ss = args.ResumenBreve if ss:match('^[*:;#]') or ss:match('^{|') then ss = '<span></span>\n' .. ss end if ss:match('\n[*:;#]') then ss = ss .. '\n<span></span>' end local ResumenBreve = mw.html.create('td') :addClass('description') :css('border-bottom','solid 3px '..linea_color) :attr('colspan',nonnil_params) :newline() :wikitext(ss) bottom_wrapper:node(ResumenBreve) return tostring(table_row)..tostring(bottom_wrapper)..categories else return tostring(table_row)..categories end end return p