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

Crivella lança campanha à reeleição apelando ao bolsonarismo

Marcelo Crivella e Rogéria Bolsonaro na convenção do Republicanos - Douglas Macedo/ Divulgação
Marcelo Crivella e Rogéria Bolsonaro na convenção do Republicanos Imagem: Douglas Macedo/ Divulgação

Igor Mello

Do UOL, no Rio

07/09/2020 17h31

O prefeito do Rio de Janeiro, Marcelo Crivella (Republicanos), lançou na tarde desta segunda-feira (7) sua campanha à reeleição procurando mais uma vez associar sua imagem a Jair Bolsonaro. Rogéria Bolsonaro, ex-mulher do presidente e pré-candidata a vereadora pelo partido, foi tratada como uma celebridade na convenção.

A candidatura de Crivella foi homologada sem a definição da vaga de vice —negociada com outros partidos, com ênfase para o PSL. Até o momento marcham com o prefeito Patriota, Progressistas, Solidariedade, Podemos, PTC e PRTB. As convenções vão até o dia 16.

Crivella dedicou boa parte de seu discurso para comparar o desgaste político que vive com o atentado sofrido por Bolsonaro durante a campanha de 2018 —o presidente foi esfaqueado por Adélio Bispo em Juiz de Fora (MG). O prefeito equiparou a iniciativa de Bolsonaro seguir na disputa com sua disposição para superar as críticas.

"O que nos move é o que moveu nosso presidente quando acordou naquela UTI esfaqueado: haja o que houver, verás que um filho teu não foge à luta", disse.

Ao longo de seu governo, Crivella conviveu com denúncias de aparelhamento da máquina pública e enfrentou pedidos de impeachment — o mais recente, apresentado após a TV Globo revelar que comissionados da prefeitura eram escalados em unidades de saúde para atacar jornalistas, foi rejeitado na semana ada.

Crivella - Douglas Macedo/ Divulgação - Douglas Macedo/ Divulgação
Marcelo Crivella na convenção do Republicanos
Imagem: Douglas Macedo/ Divulgação

Face pública da dobradinha entre Crivella e o clã Bolsonaro, Rogéria foi tratada como uma estrela na convenção —realizada em um centro de convenções de um shopping na zona norte do Rio, nas proximidades do principal templo da Igreja Universal do Reino de Deus na capital.

Ao chegar, já com o evento em curso, Crivella fez questão de se sentar ao lado da primeira mulher de Bolsonaro. Ela também foi convidada a discursar, destaque dado apenas a dirigentes do Republicanos e de partidos aliados.

Rogéria Bolsonaro - Igor Mello/ UOL - Igor Mello/ UOL
Rogéria Bolsonaro posa para foto com funcionárias durante convenção do Republicanos
Imagem: Igor Mello/ UOL

Usando uma figura bíblica, Crivella comparou a mais nova aliada à Virgem Maria, mãe de Jesus Cristo para os cristãos.

"Rogéria nos deu um senador com 4 milhões de votos, um deputado federal com 1 milhão de votos, um vereador com centenas de milhares de votos", disse.

As associações ao governo Bolsonaro foram feitas por todos os principais aliados do prefeito. Crivella ainda fez ataques à imprensa e ao antecessor Eduardo Paes (DEM), que será um de seus rivais na disputa.