;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Carolina Brígido

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

O que muda com Alexandre de Moraes no comando do TSE

Edson Fachin e Alexandre Moraes - Reprodução
Edson Fachin e Alexandre Moraes Imagem: Reprodução

Colunista do UOL

16/08/2022 04h00

Os discursos de Alexandre de Moraes e Edson Fachin são alinhados. Ambos pregam o fim da disseminação de notícias falsas e do discurso de ódio nas campanhas. Ambos também combatem de forma firme as críticas do presidente Jair Bolsonaro ao sistema eleitoral. Então: o que muda, na prática, com a saída de Fachin e a entrada de Moraes no comando do TSE (Tribunal Superior Eleitoral)?

A grande diferença entre os dois é que Fachin não tem muita interlocução com o meio político nem com os militares. Moraes, por sua vez, tem relação estreita com os dois universos. Portanto, apesar de ter sido alçado a um dos principais adversários do presidente Jair Bolsonaro, a expectativa é que Moraes inaugure nesta terça-feira (15) uma gestão de diálogo mais intenso com o governo e aliados.

Fachin tem perfil mais discreto. Levou meses até começar a responder aos ataques de Bolsonaro ao TSE e à urna eletrônica. Moraes tem um estilo mais direto - e, por isso, incomoda mais Bolsonaro. O ministro atingiu apoiadores do presidente em decisões tomadas no STF (Supremo Tribunal Federal). Bloqueou contas em redes sociais e mandou prender quem ataca integrantes do Judiciário.

Embora não tenha comparecido pessoalmente aos atos em defesa da democracia na semana ada, Moraes demonstrou apoio ao movimento em sua conta no Twitter na semana ada. Bolsonaro criticou os atos - que chamou de "micareta do PT".

Moraes e Bolsonaro já protagonizaram embates públicos inflamados. Em resposta às decisões tomadas nos inquéritos das fake news e dos atos antidemocráticos, Bolsonaro discursou várias vezes contra o ministro. Em agosto do ano ado, pediu o impeachment de Moraes ao Senado. O caso foi arquivado dias depois.

Na presidência do TSE, Moraes não planeja bater de frente com o presidente da República. Ao contrário. Ele deve reforçar o diálogo com pessoas ligadas a Bolsonaro - como o presidente da Câmara, Arthur Lira (PP-AL), e o procurador-geral da República, Augusto Aras. A ideia é tentar arrefecer os ânimos diante de um ambiente político conflagrado.

Moraes tem também planos de pacificar a relação da Justiça Eleitoral com os militares. O ministro tem bom diálogo com o comando das Forças Armadas e deve usar esse trunfo para tentar atrair o apoio político dos militares. Fachin hoje descarta receber representantes das Forças Armadas em reunião fechada para discutir as eleições de outubro. A esperança dos militares é que eles sejam mais prestigiados na nova gestão do TSE.

Moraes pertenceu aos quadros do PSDB e foi secretário municipal de Transportes da cidade de São Paulo (de 2007 a 2010) na gestão de Gilberto Kassab. Também foi secretário estadual de São Paulo na gestão Geraldo Alckmin em duas pastas: Defesa da Cidadania (2002 a 2005) e Segurança Pública (2014 a 2015).

Ainda que preze pelo diálogo, Moraes promete não relevar radicalismos. No mês ado, proibiu que canais bolsonaristas façam postagens que associem o PT ao fascismo, ao nazismo ou ao crime organizado. Há duas semanas, mandou prender um apoiador de Bolsonaro por ameaças a ministros da Corte e ao ex-presidente Luiz Inácio Lula da Silva. Entre ministros do STF e do TSE, a postura firme de Moraes é bem avaliada.