Módulo:Lista de episodios
Apariencia
Uso
Crea una Lista de episodios estándar con
{{#invoke:Lista de episodios|lista}}
o una sublista (que elimina resúmenes y títulos alternativos de la lista principal cuando se especifica) con
{{#invoke:Lista de episodios|sublista}}
Categorías de mantenimiento
- Categoría:Wikipedia:Listas de episodios con colores de línea defectuosos
- Categoría:Wikipedia:Listas de episodios con colores de línea no conformes
- Categoría:Wikipedia:Listas de episodios con desviaciones de fila
- Categoría:Wikipedia:Listas de episodios con TopColor inválidos
- Categoría:Wikipedia:Listas de episodios que no usan Tabla de episodios
- Categoría:Wikipedia:Listas de episodios con fechas de emisión sin formato
- Categoría:Wikipedia:Listas de episodios con fechas de emisión alternativas con formato incorrecto
Véase también
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 ''
-- 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 = 'var(--border-color-subtle, #c8ccd1);' -- '#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 = 'var(--background-color-base, #fff);' -- '#E9E9E9'
elseif on_initial_page and args.ResumenBreve and args.ResumenBreve ~= 'no' then
top_color = 'var(--background-color-neutral-subtle, #f8f9fa);' -- '#F2F2F2'
end
if top_color then
table_row:css('background-color', top_color)
table_row:css('color', 'inherit')
end
-- 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'])
if top_color then
table_row:css('background-color', top_color)
table_row:css('color', 'inherit')
end
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