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

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
m Deshecha la edición 112822265 de Franar8 (disc.)
Etiqueta: Deshecho
Coherencia entre nombres de parámetros; y cambio a comillas angulares
Línea 159: Línea 159:
-- Rodear el título con comillas; no hay comillas si está vacío
-- Rodear el título con comillas; no hay comillas si está vacío
if args.Title and args.Titulo:find('%S') then
if args['Título'] and args['Título']:find('%S') then
title_string = title_string..'"'..args.Titulo..'"'
title_string = title_string..'«'..args['Título']..'»'
end
end
Línea 169: Línea 169:
-- Rodea el AltTitle con comillas; no hay comillas si está vacío
-- Rodea el AltTitle con comillas; no hay comillas si está vacío
if args.AltTitulo and args.AltTitulo:find('%S') then
if args.AltTitulo and args.AltTitulo:find('%S') then
title_string = title_string..'<br>"'..args.AltTitulo..'"'
title_string = title_string..'<br>«'..args.AltTitulo..'»'
end
end
Línea 183: Línea 183:
-- 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
-- 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
-- luego el título, y luego el resto en un bucle
if v == 'Titulo' then
if v == 'Título' then
-- Si el título está en blanco, establezca el título sin procesar en TBA
-- Si el título está en blanco, establezca el título sin procesar en TBA
if args.Titulo == '' and (args.RTitulo == '' or not args.RTitulo) then args.RTitulo = frame:expandTemplate{title='TableTBA'}; end
if args['Título'] == '' and (args.RTitulo == '' or not args.RTitulo) then args.RTitulo = frame:expandTemplate{title='TableTBA'}; end
nonnil_params = nonnil_params + 1
nonnil_params = nonnil_params + 1
local titulo_text = add_title()
local title_text = add_title()
td_tags[v] = mw.html.create('td')
td_tags[v] = mw.html.create('td')
td_tags[v]:wikitext(title_text)
td_tags[v]:wikitext(title_text)

Revisión del 23:42 22 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.sublista(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 sublista 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.ShortSummary = 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,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',
		'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,
		['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.EpisodioNumero) 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.EpisodioNumero then
		if (args.EpisodioNumero == '') then args.EpisodioNumero = frame:expandTemplate{title='TableTBA'}; end
		EpisodioNumero = mw.html.create('th')
				:attr('scope','row')
				:attr('id','ep'..idtrim(idtrim(args.EpisodioNumero,' ----'),'<'))
				:css('text-align','center')
				:wikitext(args.EpisodioNumero)
		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 = ''
		
		-- Rodear el título con comillas; no hay comillas 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.RTitulo then
			title_string = title_string..args.RTitulo
		end
		
		-- Rodea el AltTitle con comillas; no hay comillas si está vacío
		if args.AltTitulo and args.AltTitulo:find('%S') then
			title_string = title_string..'<br>«'..args.AltTitulo..'»'
		end
			
		if args.RAltTitulo then
			title_string = title_string..args.RAltTitulo
		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.RTitulo == '' or not args.RTitulo) then args.RTitulo = 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('summary')
					: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],'dtstart') == 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.CodigodeProd and args.CodigodeProd and (string.find(args.CodigodeProd,'TBA') == nil) then
		td_tags.CodigodeProd:attr('id','pc'..idtrim(idtrim(args.CodigodeProd,' ----'),'<'))
	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