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

Na reta final, Crivella e Paes trocam o amor pelo terror

Os candidatos Eduardo Paes e Marcelo Crivella usaram nas propagandas depoimentos de pessoas que tiveram covid  - Reprodução de TV
Os candidatos Eduardo Paes e Marcelo Crivella usaram nas propagandas depoimentos de pessoas que tiveram covid Imagem: Reprodução de TV

Matheus Pichonelli

Colunista do UOL

23/11/2020 14h39Atualizada em 23/11/2020 14h49

A menos de uma semana das eleições e vendo seu adversário, Eduardo Paes (DEM), abrir mais de 30 pontos percentuais de vantagem, segundo as últimas pesquisas, Marcelo Crivella (Republicanos) trocou o amor pelo terror em sua propaganda eleitoral.

Desde o fim de semana o atual prefeito tem levado ao ar uma série de depoimentos de pessoas que sobreviveram à covid-19 no município. Um deles, entre lágrimas, cita nominalmente o candidato à reeleição. Os demais preferiam focar as homenagens às equipes médicas e até a Deus por terem saído dos hospitais com vida.

Quase metade da propaganda foi ocupada pelo choro e abraço entre parentes e pacientes ao fim da internação.

Na mensagem final, a candidata a vice, Andréa Firmo, afirma que já comandou uma missão de paz da ONU e sabe o "quanto é importante um comandante com experiência para ar pelo deserto e vencer os momentos mais difíceis". Ela diz que "estamos no meio da pandemia e não podemos mudar o nosso comandante agora" e pergunta: "você trocaria o piloto de um avião no meio de uma turbulência?"

Em sua fala, Crivella anuncia que tem uma segunda onda de covid-19 vindo aí e "já pensou deixar a cidade nas mãos de quem não teve a experiência que eu vivi?"

A curiosidade é que na sequência ele volta a aparecer entre beijos e abraços com Jair Bolsonaro, que já chamou a epidemia de gripezinha, pediu que o país enfrentasse a doença "de peito aberto" e classificou o risco de segunda onda de conversinha.

A questão da saúde do município também foi tratada por Paes em seu programa. Ele levou ao ar uma montagem do atual prefeito estilizado como Johnny Depp no filme "A Fantástica Fábrica de Fake News" e explorou o caso dos Guardiões do Crivella, servidores escalados pelo rival para constranger e impedir a elaboração de reportagens sobre as condições dos hospitais durante a pandemia.

O candidato, que tem elevado o tom contra o adversário, acusou Crivella de tentar calar a população e o chamou de "traíra".

Também apostando no terror, abriu amplo espaço no programa para o depoimento de uma mulher que não consegue tratamento nas clínicas do município e que viu a mãe morrer à espera de um exame. A fala ia na linha do "tudo antes era bom e hoje está péssimo".

Em outro depoimento, uma eleitora diz querer seu "ex de volta" —um mote da campanha até aqui.

Entre as propostas listadas, Paes promete combater a epidemia de ansiedade e depressão no Rio e fechou a mensagem com imagens dos cariocas sambando novamente, como se reforçasse a imagem sorumbática do adversário que não sabe sambar.

No sábado, ele já tinha levado ao ar uma propaganda mostrando os Sete Pecados de Crivella, entre as quais a "incompetência" e a "falsidade".

Na reta final, a disputa pela Prefeitura do Rio virou ringue de MMA com mensagem existencial: o inferno é o outro.