;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Carla Araújo

General Heleno cria nuvem negra para a democracia ao atacar STF

22.fev.2019 - Jair Bolsonaro e general Augusto Heleno durant reunião sobre Venezuela -  Marcos Corrêa/PR
22.fev.2019 - Jair Bolsonaro e general Augusto Heleno durant reunião sobre Venezuela Imagem: Marcos Corrêa/PR

Do UOL, em Brasília

22/05/2020 19h23

Receba os novos posts desta coluna no seu e-mail

Email inválido

O ministro do Gabinete de Segurança Institucional (GSI), Augusto Heleno, não representa as Forças Armadas, não fala pelo Exército, mas hoje quis e falou pelo presidente Jair Bolsonaro.

Heleno vinha perdendo protagonismo nas decisões presidenciais, enquanto crescia a força dos outros dois generais - um ainda na ativa - que formam a ala militar palaciana. Nesta sexta-feira (22), ao escrever uma "Nota à Nação Brasileira" e falar em "consequências imprevisíveis para a estabilidade nacional", o ministro faz uma ameaça. E não foi velada.

A palavra imprevisível não foi escolhida à toa. Militares têm por hábito zelo e cuidado com a escolha das mensagens. A palavra também faz parte de uma guerra. O governo do presidente Jair Bolsonaro já elegeu algumas batalhas, incluindo a de narrativas.

O que Heleno quis falar à nação é que o ministro Celso de Mello teria extrapolado o poder ao ter pedido de apreensão do celular do presidente da República. Mas o ministro do STF fez apenas o seu trabalho.

Manifestou-se em uma ação pedindo análise da Procuradoria-Geral da República. É um trâmite burocrático, não é uma "perseguição". Não é de hoje, é fato, que o Supremo já mostrou que há sangue político por ali, mas, no caso em questão, me parece que o decano está apenas levando adiante investigações de supostos crimes cometidos pelo presidente.

Vídeo torna cenário "imprevisível"

No vídeo da reunião ministerial de 22 de abril, divulgado hoje justamente por Celso de Mello, o presidente pede que ministros "não falem com a imprensa", xinga, defende armar a população, ouve barbaridades das autoridades que, com ele, comandam o país. Creio que realmente torna o cenário político do país algo "imprevisível".

Na quarta-feira, Heleno rechaçou publicamente a possibilidade de uma "intervenção" ou de um golpe militar.

Hoje, o ministro aponta que o cenário pode ficar incerto a ponto de ter que mudar de opinião.

Não se gosta de lembrar o golpe e a ditadura entre os militares. Boa parte do generalato atual tem um discurso de que estão "a serviço da pátria".

A nota teve apoio de alguns generais e auxiliares do governo e encontrou eco no universo bolsonarista.

No entorno de Heleno, alguns generais que conhecem o colega há muitos anos, itiram preocupação com as consequências.

"Acho que não caberia a ele e sim a AGU (Advocacia-Geral da União) emitir uma nota dentro dos padrões jurídicos. Isto pode se transformar em nuvens negras para nossa democracia", avaliou um colega general que conhece bem o atual ministro do GSI.