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

Chico Alves

OPINIÃO

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

Mais uma vez, Ciro Gomes opta pela neutralidade parisiense

Ciro Gomes (PDT) durante pronunciamento no qual afirmou que apoiará Lula no 2º turno - Reprodução
Ciro Gomes (PDT) durante pronunciamento no qual afirmou que apoiará Lula no 2º turno Imagem: Reprodução

Colunista do UOL

04/10/2022 15h22

Entrou para o folclore político brasileiro a versão de que Ciro Gomes viajou a Paris no segundo turno da eleição de 2018 para não se posicionar quanto à disputa entre Fernando Haddad e Jair Bolsonaro à Presidência. O político cearense se defende, dizendo que esteve na capital sa alguns dias, mas voltou a tempo de votar em Haddad. Saiu pela tangente. Obviamente, o que o PT esperava do ex-aliado naquele momento era que ele declarasse voto e fizesse campanha. Isso não aconteceu.

Algo parecido se verifica na eleição de agora. Em pronunciamento enfático, o presidente do PDT, Carlos Lupi, anunciou à imprensa o apoio da legenda à candidatura de Luiz Inácio Lula da Silva. Disse que a decisão foi tomada de forma unânime e justificou criticando o governo, entre outras coisas, pela "negação da ciência", pela falta de respeito à cidadania, pelo ataque aos negros e pela péssima gestão da pandemia.

Pouco depois, em uma fala gravada em vídeo, Ciro Gomes, que concorreu à Presidência pelo PDT, externou sua posição. Disse que acompanha a decisão do partido - sem fazer qualquer menção ao nome de Lula. Depois desse rápido aceno à candidatura do PT, Ciro só disse palavras duras, dirigidas aos dois candidatos que estão no segundo turno. "Frente às circunstâncias, é a última saída", "lamento que a trilha democrática tenha se afunilado a tal ponto", "duas opções, a meu ver, insatisfatórias".

Se os petistas torciam por alguma manifestação de Ciro que pudesse incentivar seus eleitores a votarem em Lula na segunda e decisiva etapa da votação, não vão encontrá-la nesse vídeo.

Difícil imaginar que o depoimento de hoje convença algum cirista a votar no presidenciável do PT.

A começar pelo diagnóstico equivocado externado por Ciro no início da gravação, quando diz que não acredita "que a democracia esteja em risco nesse embate eleitoral". Assim, minimiza as estocadas que Bolsonaro fez contra as instituições da República, nesses quase quatro anos de mandato, e o coloca em pé de igualdade com Lula.

Adota neutralidade sem ousar se dizer neutro.

Dessa vez, Ciro não pegou um avião para desembarcar em Paris.

Mas se mantiver no restante da campanha a mesma retórica usada no vídeo de hoje, servirá tanto à causa de Lula quanto se estivesse eando pela Avenida Champs-Élysées.