Diferencia entre revisiones de «Módulo:Lista de episodios»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Anulando también "AltTítulo" conjuntamente con el resumen breve
Arreglar un error de negritas innecesarias al usar el modelo de encabezado previo [aquí sí]
Línea 148: Línea 148:
if args['EpisodioNúmero'] then
if args['EpisodioNúmero'] then
if (args['EpisodioNúmero'] == '') then args['EpisodioNúmero'] = frame:expandTemplate{title='TableTBA'}; end
if (args['EpisodioNúmero'] == '') then args['EpisodioNúmero'] = frame:expandTemplate{title='TableTBA'}; end
EpisodioNumero = mw.html.create('th')
EpisodioNumero = mw.html.create('td')
:attr('scope','row')
:attr('scope','row')
:attr('id','ep'..idtrim(idtrim(args['EpisodioNúmero'],' ----'),'<'))
:attr('id','ep'..idtrim(idtrim(args['EpisodioNúmero'],' ----'),'<'))

Revisión del 18:09 25 dic 2018

Icono de documentación de módulo Documentación del módulo[ver] [editar] [historial] [purgar]

A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]



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

Véase también



Esta documentación está transcluida desde Módulo:Lista de episodios/doc.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.

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/sublist'})
	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 = nil
			args['AltTítulo'] = nil
		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 then
		if not args.ResumenBreve:find('%S') then
			args.ResumenBreve = nil
		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 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('td')
				: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 cursivas; 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'].."'''''"
		end
		
		if args['RTítulo'] then
			title_string = title_string..args['RTítulo']
		end
		
		-- Rodea el AltTitle con cursivas; no hay nada si está vacío
		if args['AltTítulo'] and args['AltTítulo']:find('%S') then
			title_string = title_string.."<br>''"..args['AltTítulo'].."''"
		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
			-- Si el título está en blanco, establezca el título sin procesar en TBA
			if args['Título'] == '' and (args['RTítulo'] == '' or not args['RTítulo']) then args['RTítulo'] = frame:expandTemplate{title='TableTBA'}; end
			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:Listas 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: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 month, day, year = args.FechadeEmisionorig:gsub("&nbsp;"," "):match("(%a+) (%d+), (%d+)")
					if month == nil then
						day, month, year = args.FechadeEmisionorig:gsub("&nbsp;"," "):match("(%d+) (%a+) (%d+)")
					end
					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, Augosto=8, Septiembre=9, Octubre=10, Noviembre=11, Diciembre=12}
						local seconds = os.time()-os.time({year=year,month=MONTHS[month],day=day,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:Listas de episodios con colores de línea defectuosos]]' 
			elseif black_cr < 7 and white_cr < 7 then
				categories = categories..'[[Categoría:Listas de episodios con colores de línea no conformes]]' 
			end
		else
			categories = categories..'[[Categoría:Lista de episodios usando LineaColor predeterminado]]'
		end
		
		if args.TopColor and args.TopColor ~= '' then
			categories = categories..'[[Categoría: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: Listas de episodios con TopColor inválidos]]'
			end
		end
	end
	
	-- 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 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