;(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 mantém ataques a Mourão nas redes sociais

Abr.2019 - Carlos Bolsonaro x Hamilton Mourão - montagem horizontal - Arte BOL: Sergio Lima/AFP e Taís Vilela/UOL
Abr.2019 - Carlos Bolsonaro x Hamilton Mourão - montagem horizontal Imagem: Arte BOL: Sergio Lima/AFP e Taís Vilela/UOL

Amanda Pupo, Felipe Frazão e Matheus Lara

Brasília

23/04/2019 21h54

O vereador do Rio Carlos Bolsonaro (PSC), filho do presidente Jair Bolsonaro, manteve durante esta terça-feira, 23, os ataques ao vice-presidente Hamilton Mourão. Só na terça foram três tuítes com críticas ao vice. À noite, ele resgatou uma declaração, feita em setembro de 2018, uma semana após o atentado a Bolsonaro.

"Naquele fatídico dia em que meu pai foi esfaqueado por ex-integrante do PSOL e o tal de Mourão em uma de suas falas disse que aquilo tudo era vitimização". O porta-voz da Presidência, general Rêgo Barros, afirmou que Bolsonaro quer um ponto final na desavença pública.

Segundo o porta-voz, Bolsonaro disse que Mourão terá o apreço do presidente, mas afirmou que estará "sempre ao lado" do filho. A jornalistas, Mourão tentou amenizar a situação e afirmou que todo mundo emite sua opinião". "Quando um não quer dois não brigam", disse ele, afirmando ser esta sua "linha de ação". "Vamos manter a calma", completou.

Convite

Em uma crítica na terça, 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. "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.

"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.

'Último suspiro'

Horas mais tarde, Carlos Bolsonaro usou as redes sociais para criticar uma fala de Mourão sobre a crise econômica e política vivida pela Venezuela. Na postagem de Carlos, Mourão aparece dando uma entrevista na qual menciona o apoio dos militares venezuelanos ao presidente Nicolás Maduro e diz que a população do país vizinho "tem que estar desarmada porque senão nós iríamos para uma guerra civil na Venezuela, o que seria horrível para o hemisfério como um todo".

A fala de Mourão foi classificada por Carlos como "pérolas que mostram muito mais do que palavras ao vento, mas algo que já acontece há muito tempo".