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

Carlos Bolsonaro expõe convite com críticas ao governo para palestra de Mourão

O vereador Carlos Bolsonaro, na Câmara Municipal do Rio de Janeiro - Divulgação/Câmara Municipal do Rio de Janeiro
O vereador Carlos Bolsonaro, na Câmara Municipal do Rio de Janeiro Imagem: Divulgação/Câmara Municipal do Rio de Janeiro

Matheus Lara, com colaboração de André Borges

Em São Paulo

23/04/2019 09h50

O vereador carioca Carlos Bolsonaro (PSC-RJ), um dos filhos do presidente Jair Bolsonaro, voltou a atacar Hamilton Mourão nas redes sociais. Carlos traduziu e expôs "o que parece ser", diz, um convite para uma palestra do vice-presidente nos EUA em que Mourão é chamado de "voz da razão e moderação" no governo marcado por 100 dias de "paralisia política".

"Se não visse, não acreditaria que aceitou com tais termos", diz Carlos, indicando supor que Mourão teria consentido com sua descrição no convite. A imagem do comunicado, compartilhada por Carlos, foi publicada ontem por um seguidor do vereador, em resposta a outra publicação em que Carlos critica Mourão. "Traduzindo e expondo logo mais! É inacreditável", escreveu o filho do presidente ainda na segunda-feira, em resposta ao seguidor.

"Os primeiros 100 dias do governo Bolsonaro foram marcados por paralisia política, em grande parte devido às crises sucessivas geradas pelo próprio círculo interno do presidente, se não por ele mesmo", lê-se na imagem compartilhada por Carlos, com versão traduzida por ele. O texto também está disponível no site da Wilson Center, que promoveu o evento.

"Em meio ao marulho político, Mourão emergiu como uma voz de razão e moderação, capaz de atuar em assuntos internos e externos. (...) O ex-general de quatro estrelas também se tornou um dos favoritos dos jornalistas brasileiros - que são frequentemente críticos à nova istração - por sua disposição de se envolver com a mídia e por suas importantes observações sobre a necessidade de o governo valorizar a diversidade de opiniões".

"Já que desta vez não se trata de curtida, vamos ver como alguns irão reclamar", escreveu Carlos, em referência ao "like" de Mourão numa publicação da jornalista Rachel Sheherazade com críticas a Bolsonaro e elogios a ele. A atitude do vice-presidente fez o deputado federal Marco Feliciano (Podemos-SP) protocolar um pedido de impeachment contra Mourão.

Ontem, Carlos postou a curtida de Mourão, com a frase: "Tirem suas conclusões". A crise digital não é mais digital. Envolve publicamente o filho do presidente, visto por Bolsonaro o principal responsável por sua campanha nas redes sociais, e seu vice-presidente, pessoa de tráfego aberto com as forças militares do governo e com o mercado.

Mourão tem sido alvo de aliados de Bolsonaro. Além do filho, ontem, em mais uma troca de ofensas e provocações virtuais, o vice respondeu ao escritor Olavo de Carvalho, que costuma criticar os militares do governo, dizendo que o escritor que vive nos Estados Unidos deveria se dedicar àquilo que sabe fazer, de fato: a astrologia.

Olavo respondeu horas depois, dizendo que não se surpreendia com a ultradireita contrária a Bolsonaro apoiar o vice-presidente.

O episódio levou Bolsonaro a criticar, pela primeira vez, o escritor. Olavo está por trás das indicações de ministros como Ernesto Araújo, que chefia o Itamaraty.

Hamilton Mourão ironiza críticas de Olavo de Carvalho aos militares

redetv