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

Paes projeta 2º turno com Crivella e diz buscar apoio da esquerda

15.nov.2020 - O ex-prefeito e atual candidato à prefeitura do Rio de Janeiro, Eduardo Paes (DEM), vota em São Conrado - Alexandre Brum/Estadão Conteúdo
15.nov.2020 - O ex-prefeito e atual candidato à prefeitura do Rio de Janeiro, Eduardo Paes (DEM), vota em São Conrado Imagem: Alexandre Brum/Estadão Conteúdo

Gabriel Sabóia

Do UOL, no Rio

15/11/2020 22h18

Com pouco mais de 30% das urnas apuradas, o candidato à Prefeitura do Rio, Eduardo Paes (DEM), realizou um pronunciamento no qual projetou um segundo turno contra Marcelo Crivella (Republicanos) e disse que busca o apoio de eleitores que votaram em Benedita da Silva (PT), Renata Souza (PSOL) e Martha Rocha (PDT). Todas as projeções colocam o ex-prefeito da capital fluminense no segundo turno. Crivella é o segundo colocado.

"Vou buscar o apoio de todos os cariocas, independente do campo ideológico. Temos a gestão de uma pessoa que tem feito a população sofrer. Eu sempre vou debater com todo mundo, vou conversar com o eleitor", afirmou. Questionado se faria contato com lideranças partidárias da esquerda, Paes foi lacônico.

"Meus grandes apoios são esses aqui [e apontou para a a esposa, Cristine Paes, e para os três filhos que estavam presentes]. Quero o apoio de todos os eleitores, sim, mas eu não vou ficar falando desse tipo de diálogo", completou.

Já pensando no segundo turno, que será realizado no próximo dia 29, Paes não poupou críticas ao iminente adversário. "Nessa eleição, temos que continuar debatendo sobre uma Prefeitura que funcionou, que deu certo, na qual a população tinha o aos serviços básicos, e sobre uma gestão que abandonou a cidade. Esse é o debate a ser travado", afirmou.

Sobre o apoio do presidente Jair Bolsonaro (sem partido) a Crivella, Paes disse não se importar. "Eu acho que o carioca entende como uma tragédia a gestão do Crivella. As urnas mostram o quanto o carioca rejeita e istração de uma pessoa despreparada. Sobre o apoio, essa discussão é sobre o Rio, não é sobre direita ou esquerda. Eu vou trabalhar em parceira com todos os es, não vou ficar preocupado com o apoio de A ou B", concluiu.