;(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

José Luiz Portella

OPINIÃO

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

Moro vai ajudar Lula e Bolsonaro

Sergio Moro  - Lula Marques/Agência PT
Sergio Moro Imagem: Lula Marques/Agência PT

Colunista do UOL

23/10/2021 08h43Atualizada em 23/10/2021 08h58

Se Sergio Moro for candidato pelo Podemos, vai contribuir imensamente para colocar Bolsonaro no segundo turno com Lula, e, consequentemente, dar a vitória final a Lula. É um paradoxo.

Os votos dele vêm de eleitores que não gostam nem de Bolsonaro, nem de Lula, por todas as circunstâncias conhecidas, logo, no primeiro turno, ele retirará votos de outro candidato que poderia se alçar a terceira via e derrotar Lula no segundo turno.

Moro não tem temperamento nem perfil para ser político. Já mostrou isso no ministério, onde se conduziu debilmente, mesmo para os seus eleitores. O pacote anticrime que ofertou foi fraco e desconstruído no Congresso.

Ele não consegue aglutinar parlamentares, nem propor soluções realmente transformadoras nem na ótica que ele possui de Brasil. Independentemente de se discordar ou concordar com ele no mérito, ele é ruim na consecução de políticas públicas. Ainda pior, como possível candidato.

Ele foge do debate, como o fez quando foi afastado por Bolsonaro de forma humilhante, sumiu do cenário, abrigou-se na iniciativa privada e exilou-se nos Estados Unidos. Não foi um agente de combate ao governo. Não tem jeito para a política.

Ou seja, vai vagar com uma votação que não a de dois dígitos. Vai tirar votos de quem? De uma possível terceira via, inutilmente, pois não logrará alcançar a votação necessária para excluir Bolsonaro do segundo turno.

Se não derreter mais, o que é possível, Bolsonaro deve sustentar um piso em torno de 23%, no mínimo 20%. Para assegurar uma terceira via no segundo turno é preciso um candidato que assuma o patamar primeiro de 15%, isso catalisaria o processo de crença na candidatura e teria que alcançar 25%.

Nem Moro, nem Ciro vão atingir esses patamares, tanto pelo temperamento, como pelos vícios de origem que carregam. Ciro seria um bom ministro, conforme o governo, todavia, infelizmente, é um mau candidato e não se dispõe a mudar.

Moro também, porque era naturalmente um juiz e não um político. Quis mudar seu papel sem ter essência. A húbris lhe extirpou a carreira. E ela pode lhe fazer, de novo, efetuar um erro crasso, fenomenal. Se Moro for candidato, ele será o melhor eleitor de Bolsonaro no primeiro turno, e de Lula no segundo turno. Errar é humano, insistir no erro já é outra coisa.

Moro, Ciro e candidatos que não aglutinam, fragmentam a votação de quem não gosta de Lula e Bolsonaro, funcionando como agentes dos inimigos que têm.

Eles têm inteligência para compreender isso. Resta saber se os respectivos egos permitirão.

A vida é cheia de contradições e paradoxos. Moro está a caminho de ajudar seus maiores adversários. Outro gol contra.