;(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 dá cargo em Madri para diretor da PF, a 11 dias do fim do governo

Márcio Nunes de Oliveira será adido policial federal na embaixada do Brasil em Madri - Reprodução/Ministério da Justiça
Márcio Nunes de Oliveira será adido policial federal na embaixada do Brasil em Madri Imagem: Reprodução/Ministério da Justiça

Do UOL, em São Paulo

20/12/2022 09h10Atualizada em 20/12/2022 14h59

O presidente nomeou o atual diretor-geral da PF (Polícia Federal), Márcio Nunes de Oliveira, para a função de adido policial federal na Embaixada do Brasil em Madri, na Espanha, pelo prazo de três anos.

A designação foi publicada na edição de hoje do DOU (Diário Oficial da União) e é assinada por Bolsonaro e pelos ministros da Justiça, Anderson Torres, e das Relações Exteriores, Carlos França.

Oliveira foi nomeado em fevereiro deste ano, quando a PF lidava com inquéritos sensíveis para Bolsonaro e seus aliados. Dias antes, a corporação havia apontado que Bolsonaro cometeu crime de violação de sigilo funcional ao divulgar conteúdo de um inquérito sigiloso a respeito de ataque hacker aos sistemas do TSE (Tribunal Superior Eleitoral).

Oliveira era número 2 de Torres na Justiça. À frente da PF, ele:

  • negou, em ofício enviado ao STF, que as trocas que realizou em diretorias tenha interferido nas atividades da PF;
  • classificou como "verdadeira ilação" dizer que houve instrumentalização do órgão em prol da candidatura à reeleição de Bolsonaro;
  • proibiu celulares em reuniões e gerou reclamação de delegados.

A nomeação de Oliveira foi a quinta ao cargo na gestão Bolsonaro. O delegado Alexandre Ramagem, amigo da família do presidente, não chegou a assumir o posto por decisão do STF (Supremo Tribunal Federal).

Conforme mostrou reportagem do jornal Folha de S. Paulo no início deste mês, com a derrota de Bolsonaro na eleição, o comando da PF já vinha definindo qual seria o destino dos dirigentes após o fim do governo.

Além de Oliveira, que está na PF desde 2002, outros integrantes da cúpula da corporação devem ocupar cargos no exterior.

Indicado pelo presidente Luiz Inácio Lula da Silva (PT) para ser ministro da Justiça, Flávio Dino já anunciou o delegado Andrei Rodrigues como diretor-geral da PF a partir do ano que vem.