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

Bolsonaro sobre troca na PF: 'Quem manda sou eu'

O presidente Jair Bolsonaro no Palácio da Alvorada, em Brasília - Gabriela Biló/Estadão Conteúdo
O presidente Jair Bolsonaro no Palácio da Alvorada, em Brasília Imagem: Gabriela Biló/Estadão Conteúdo

Daniel Weterman e Mariana Haubert

Em Brasília

16/08/2019 09h54

O presidente Jair Bolsonaro afirmou hoje que "ficou sabendo" que quem assumirá a chefia da Polícia Federal no Rio de Janeiro será o chefe da PF no Amazonas, Alexandre Silva Saraiva. A afirmação vem um dia depois de a Polícia Federal divulgar que o superintendente da corporação em Pernambuco, Carlos Henrique Oliveira Sousa, é quem substituiria o chefe da PF no Rio, Ricardo Saadi. A informação foi antecipada em reportagem do Estadão/Broadcast.

"O que eu fiquei sabendo... Se ele resolver mudar, vai ter que falar comigo. Quem manda sou eu... deixar bem claro", afirmou Bolsonaro. "Eu dou liberdade para os ministros todos. Mas quem manda sou eu", reforçou.

"Está pré acertado que seria lá o de Manaus", afirmou, sem esclarecer a quem se referia.

Ontem, Bolsonaro alegou "questões de produtividade" e "um sentimento" para tirar Saadi do comando da PF no Rio. Questionado nesta sexta se havia partido dele mesmo a decisão, Bolsonaro afirmou apenas que "não interessa o motivo".

"Pergunta para o ministro da Justiça, Sergio Moro. Já estava há três, quatro meses para sair o cara de lá. Quando vão nomear alguém, falam comigo. Eu tenho poder de veto ou vou ser um presidente banana agora, cada um faz o que bem entende e tudo bem? Não."

Bolsonaro também afirmou que Saadi "vai produzir melhor em outro lugar" e disse que não questionou a "falta de produtividade" do delegado. "Eu falei sobre produtividade e não falta de produtividade", disse.

Na quinta, o presidente falou sobre sua decisão ao comentar mudanças na Receita Federal. Hoje ele afirmou que se tiver que fazer mudanças no órgão, fará.