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

Thaís Oyama

Diante da insatisfação dos generais, Bolsonaro procura os cadetes

Bolsonaro tem comparecido a eventos ligados às baixas patentes das Forças Armadas, algo incomum na história da Presidência. Discurso recente do general chefe do Exército foi contra mensagem do presidente sobre "pólvora"  - Marcos Corrêa/PR
Bolsonaro tem comparecido a eventos ligados às baixas patentes das Forças Armadas, algo incomum na história da Presidência. Discurso recente do general chefe do Exército foi contra mensagem do presidente sobre "pólvora" Imagem: Marcos Corrêa/PR

Colunista do UOL

24/11/2020 11h33

Jair Bolsonaro ou a noite do dia 16 de outubro dormindo junto aos cadetes numa ala comum do Hotel de Trânsito da Academia Militar das Agulhas Negras (Aman), em Resende (RJ). Não foi a primeira vez que o presidente foi à academia participar da cerimônia de entrega dos espadins aos aspirantes a oficiais do Exército.

A Aman é a incubadora dos oficiais e futuros comandantes da Força terrestre. Para um presidente egresso das fileiras militares, a presença em um evento como esse é praticamente obrigatória.

Desde agosto, porém, Bolsonaro tem intensificado suas idas a instalações militares e de forças de segurança para prestigiar eventos bem menos solenes.

Neste período, pernoitou num quartel da Polícia do Exército em São Paulo, visitou um posto de Polícia Rodoviária Federal em Registro (SP), esteve na sede do Bope no Rio e, na mesma cidade, prestigiou a formatura de uma turma de paraquedistas do Exército.

Chegou a participar, em setembro, de uma cerimônia de formatura de novos sargentos da Marinha, no que foi considerada por militares uma iniciativa absolutamente inédita da parte de um presidente da República.

Comandante do Exército "bateu de frente" com Bolsonaro

Praças e sargentos sempre estiveram na base de apoio do ex-deputado federal Jair Bolsonaro.

Agora, o périplo presidencial por instalações que abrigam essas categorias se intensifica à medida que cresce o desgaste do ex-capitão junto aos generais.

A recente tensão entre Bolsonaro e o comandante do Exército, Edson Pujol, escancarou esse desgaste.

No último dia 13, durante um seminário promovido pelas Forças Armadas, Pujol declarou que o Exército não pertence ao governo e não tem partido político.

O discurso do praticamente mudo comandante ocorreu dias depois de Bolsonaro ameaçar usar "a pólvora" contra supostas interferências do novo governo americano de Joe Biden na Amazônia — iniciativa que cobriu de vergonha os generais.

Já Bolsonaro, de sua parte, detestou a fala de Pujol, sobretudo por saber da ciência do general de que ela se tornaria pública. Como resposta, escreveu no Twitter mensagem dizendo compartilhar do conceito de apartidarismo do Exército, mas lembrando ser ele, Bolsonaro, o "comandante supremo" das Forças.

Hoje, o presidente dorme melhor junto aos cadetes do que aos generais.