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

Isolado, Bolsonaro se apega a Crivella em ações contra o coronavírus

O presidente Jair Bolsonaro (sem partido) - Andressa Anholete/Getty Images
O presidente Jair Bolsonaro (sem partido) Imagem: Andressa Anholete/Getty Images

Gabriel Sabóia

Do UOL, no Rio

01/04/2020 12h21

Isolado politicamente por se opor ao confinamento como estratégia para combater o novo coronavírus, o presidente da República Jair Bolsonaro (sem partido) tem visto no prefeito do Rio de Janeiro, Marcelo Crivella (Republicanos), sua "tábua de salvação"

Em meio a embates com governadores como Wilson Witzel (PSC), do Rio, e João Doria (PSDB), de São Paulo, Bolsonaro é aguardado na próxima sexta-feira (3) na capital fluminense, onde participará da inauguração de um hospital de campanha montado pela Prefeitura.

De olho no apoio para as eleições municipais deste ano, Crivella pretende surfar no discurso da cooperação entre União e os municípios e recebe Bolsonaro de braços abertos.

Na última semana, o prefeito fez mais um aceno de parceria com o governo federal: poucas horas depois de Bolsonaro defender o isolamento vertical —no qual apenas grupos de risco ficariam reclusas, prática vista com ressalvas para o caso do Brasil— Crivella publicou um decreto autorizando a volta do funcionamento de alguns estabelecimentos do Rio.

Na mesma semana, em uma postagem na internet, o chefe do Executivo carioca celebrou a filiação do vereador Carlos Bolsonaro e do senador Flávio Bolsonaro (RJ) ao Republicanos, partido do qual faz parte.

Além de se mostrar próximo ao eleitorado evangélico —Crivella é bispo licenciado da Igreja Universal do Reino de Deus e sobrinho do bispo Edir Macedo— Bolsonaro acredita que a parceria pode se contrapor ao discurso adotado pelo governador Witzel, que reclama frequentemente da falta de diálogo com a União.

Berço do bolsonarismo, o Rio de Janeiro tem se mostrado um suspiro para a popularidade do presidente. Sem poder lançar candidatos para concorrer pelo Aliança pelo Brasil (partido criado por ele, mas com registro ainda não aprovado pelo Tribunal Superior Eleitoral), Bolsonaro vê seu apoio ser disputado no Rio por Crivella e pelo deputado federal Otoni de Paula (PSC).

Crivella é submetido a exame após agenda intensa

Crivella se submeteu na tarde de ontem a um exame que vai comprovar se ele foi, ou não, contaminado pelo coronavírus. O teste ocorre após a secretária municipal de Saúde, Beatriz Busch, ter sido contaminada com a covid-19. O diagnóstico foi confirmado pela assessoria de imprensa da Prefeitura.

Busch e Crivella tiveram contato estreito nas últimas semanas em agendas públicas e em reuniões da força-tarefa montada contra a pandemia da doença. Ainda não se sabe quando será divulgado o resultado do exame feito pelo prefeito.

Além dela, pelo menos outros dois membros do secretariado de Crivella têm sido monitorados. São eles: a secretária municipal de Educação, Talma Suane e o secretário de envelhecimento Saudável, Felipe Michel.

Crivella tem mantido o ritmo das suas agendas públicas — muitas delas, ocasionando aglomerações. Na última semana, por exemplo, ele participou de atividades nas plataformas da Central do Brasil e visitou o Sambódromo do Rio, onde está sendo montado um abrigo para moradores de rua.

Em mais de uma ocasião, o prefeito do Rio foi questionado por que mantém aglomerações e organiza entrevistas com um único microfone. Em reuniões com o seu secretariado, ele também já ouviu críticas quanto às medidas adequadas de higiene.