Usuário(a):Chairhandlers/script-atualizaçãoepisódios.js

Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.

  • Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Internet Explorer / Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
$(function($) {
	setTimeout(function() {
		var portletlink = mw.util.addPortletLink('p-tv', '#', 'Atualizar episódios');
		$(portletlink).click( function(e) {
			e.preventDefault();
			// Conteúdo da caixa de texto
			var EpisodiosM;
			var wpTextbox1 = document.getElementById('wpTextbox1');
			var wpTextbox1_V = wpTextbox1.value.split("\n");
			
			// Declarar as variáveis
			var Episodios = false; var RTitulo = false; var linha;
			var DataTransmissaoOriginal = false; var NumeroEpisodio = false; var RmvRefs = false;
			
			// Percorrer conteúdos uma linha por vez
			for (var i = 0; i < wpTextbox1_V.length; i++) {	
				// Recuperar linha particular
				linha = wpTextbox1_V[i];
				
				// Remover o conjunto de parâmetros de referências, e na próxima linha de episódios
				if (RmvRefs && (linha.toLowerCase().indexOf('lista de episódios') >= 0 || linha.trim() == '}}')) RmvRefs = false;
				
				// Atualizar episódios em {{Info/Televisão}}, se existir
				if (!EpisodiosM) {
					EpisodiosM = linha.match(/(\s*\|\s*episódios\s*=\s*(<onlyinclude>)?)(\d+)(.*)/);
					if (EpisodiosM) Episodios = parseInt(EpisodiosM[3])+1;
				}
				
				// Verificar se a primeira aparição de RTítulo for encontrada
				if (!RTitulo) {
					// Se a linha conter RTítulo, definir para <<RTítulo>> (será removido mais tarde).
					var RTituloM = linha.match(/(\s*\|\s*RTítulo\s*=\s*)<(.*)/);
					if (RTituloM) {
						linha = '<<RTítulo>>';
						RTitulo = true;
						RmvRefs = true;
					}
					
					// Conseguir o número do episódio para adicionar ao resumo
					var NumeroEpisodioM = linha.match(/(\s*\|\s*NúmeroEpisódio\s*=\s*)(.*)/);
					if (NumeroEpisodioM) NumeroEpisodio = NumeroEpisodioM[2];
				} else if (!DataTransmissaoOriginal) {
					// Se RTítulo for encontrado mas DataTransmissãoOriginal não for definido, encontrar a próxima ocorrência
					// de DataTransmissãoOriginal para atualizar {{Episódios exibidos}}, se existir
					var DataTransmissaoOriginalM = linha.match(/(\s*\|\s*DataTransmissãoOriginal\s*=\s*)\{\{[s|S]tart date\|([^\}]*)\}\}/);
					if (DataTransmissaoOriginalM) DataTransmissaoOriginal = DataTransmissaoOriginalM[2];
				}
				
				// Remover referências de diretor/escritor/etc.
				if (RmvRefs) linha = linha.replace(/<ref(.*)\/(ref)?\>/g,"");
				
				// Atualizar linha
				wpTextbox1_V[i] = linha;
			}
			
			NumeroEpisodio = (NumeroEpisodio?NumeroEpisodio:Episodios);
			
			// Salvar valores ou obter valores salvos
			if (DataTransmissaoOriginal) {
				// Se NúmeroEpisódio/DataTransmissãoOriginal foi encontrado, tirá-lo da página de temporada transcluída para a atualização da página LoE
				localStorage.setItem('NúmeroEpisódio', NumeroEpisodio);
				localStorage.setItem('DataTransmissãoOriginal', DataTransmissaoOriginal);
			} else if (localStorage.getItem('DataTransmissãoOriginal') || localStorage.getItem('NúmeroEpisódio')) {
				// Se NúmeroEpisódio/DataTransmissãoOriginal não foi encontrado, obtê-lo da página de temporada transcluída, exceto para a atualização da página LoE
				DataTransmissaoOriginal = localStorage.getItem('DataTransmissãoOriginal');
				localStorage.removeItem('DataTransmissãoOriginal');
				NumeroEpisodio = localStorage.getItem('NúmeroEpisódio');
				localStorage.removeItem('NúmeroEpisódio');
			}
			
			// Alertar a não-existência de DataTransmissãoOriginal/NúmeroEpisódio
			var update = true;
			if (!DataTransmissaoOriginal && !NumeroEpisodio) {
				aviso('Certifique-se de atualizar a página de temporada transcluída individual primeiro, depois a página de Lista de Episódios, para salvar o número do episódio e a data de exibição.');
				update = false;
			}
			
			// Atualizar sumário
			var sumario = document.getElementById('wpSummary');
			if (sumario.value.indexOf('Atualização]]; exibido') >= 0) sumario.value += " ["+NumeroEpisodio+"]";
			else if (update) sumario.value += "[[Usuário:Chairhandlers/script-atualizaçãoepisódios.js|Atualização]]; exibido ["+NumeroEpisodio+"]";
			
			// Concatenar valores da caixa de texto novamente, mas sem <<RTítulo>>
			var wpTextbox1NewValue = '';
			for (i = 0; i < wpTextbox1_V.length; i++) if (wpTextbox1_V[i] != '<<RTítulo>>') wpTextbox1NewValue += wpTextbox1_V[i]+"\n";
			
			// Atualizar |episódios=
			if (EpisodiosM) {
				if (RTitulo) wpTextbox1NewValue = wpTextbox1NewValue.replace(EpisodiosM[1]+EpisodiosM[3], EpisodiosM[1]+Episodios); // Página da Temporada
				else wpTextbox1NewValue = wpTextbox1NewValue.replace(EpisodiosM[1]+EpisodiosM[3], EpisodiosM[1]+NumeroEpisodio); // Página Principal
			}
			// Atualizar {{Episódios exibidos}} se existir
			if (DataTransmissaoOriginal) wpTextbox1NewValue = wpTextbox1NewValue.replace(/(\{\{Episódios exibidos\|)((\d*)\|(\d*)\|(\d*))/, "$1"+DataTransmissaoOriginal);
			if (NumeroEpisodio) wpTextbox1NewValue = wpTextbox1NewValue.replace(/((\{\{Episódios exibidos\|)(.*)(\|\s*num\s*=))(\d+)/, "$1"+NumeroEpisodio);
			wpTextbox1NewValue = wpTextbox1NewValue.replace(/((\{\{Episódios exibidos\|)(.*)(\|\s*finalizada\s*=))([\d\.]+)/, "$2$3");
			
			// Redefinir caixa de texto com nova versão
			wpTextbox1.value = wpTextbox1NewValue;
		});
	},900);
});