;(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 confirma saída de chefe da Apex, pivô de crise no Itamaraty

O novo presidente da Apex, Mário Vilalva, após reunião com o presidente Jair Bolsonaro e o ministro das Relações Exteriores, Ernesto Araújo  - Divulgação
O novo presidente da Apex, Mário Vilalva, após reunião com o presidente Jair Bolsonaro e o ministro das Relações Exteriores, Ernesto Araújo Imagem: Divulgação

Luciana Amaral e Talita Marchao*

Do UOL, em Brasília e em São Paulo

10/01/2019 19h51Atualizada em 10/01/2019 20h35

O presidente Jair Bolsonaro (PSL) confirmou nesta quinta-feira (10) a demissão do presidente da Apex Brasil (Agência Brasileira de Promoção de Exportações e Investimentos), Alex Carreiro. O presidente reuniu-se com o indicado pelo chanceler Ernesto Araújo, o embaixador Mário Vilalva, em seu gabinete hoje.

A demissão de Carreiro havia sido anunciada por Araújo na quarta-feira, mas o presidente da Apex recusou a demissão e seguiu trabalhando normalmente nesta quinta.

A assessoria de imprensa da Apex, órgão vinculado ao Itamaraty, confirmou que Carreiro efetuou, mesmo após o anúncio de que sairia, "despachos internos e recebeu para audiências autoridades de Estado". 

Substituto é próximo de militares

Araújo indicou o embaixador Mauro Vilalva para substituir Carreiro. Ex-embaixador no Chile, em Portugal e na Alemanha, o diplomata tem experiência em negociações comerciais e é próximo de militares ligados ao governo, segundo fontes relataram ao UOL.

Pelo Twitter, o chefe do Itamaraty afirmou que a demissão foi pedida pelo próprio Carreiro. Mas relatos que circulavam hoje davam conta que o ex-presidente da Apex não aceitou a saída, motivada por atritos com a empresária Letícia Catelani.

Indicada para a diretoria de Negócios da agência por Araújo, Catelani foi alvo de reclamação do chefe demitido. Ela, por sua vez, não gostou de Carreiro ter exonerado 18 pessoas em menos de uma semana no governo e queria reverter as demissões. (Com Agência Estado)