;(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: 'Desculpem as caneladas, não nasci para ser presidente, e sim militar'

Fábio Motta/Estadão Conteúdo
Imagem: Fábio Motta/Estadão Conteúdo

Julia Lindner

Brasília

05/04/2019 16h11

O presidente Jair Bolsonaro fez uma espécie de desabafo e um 'mea culpa' diante das dificuldades que o cargo impõe. "Desculpem as caneladas. Não nasci para ser presidente, nasci para ser militar", disse em discurso no Palácio do Planalto para inauguração do Espaço de Atendimento de Ouvidoria da Presidência da República. Na quinta-feira, 4, o presidente também se desculpou pelas "caneladas" em reunião com presidentes de alguns partidos, segundo o ministro da Casa Civil, Onyx Lorenzoni.

Nesta sexta-feira, 5, em tom de brincadeira, ele também afirmou que às vezes se pergunta o que fez para "merecer isso". "Às vezes me pergunto, meu Deus, o que fiz para merecer isso? É só problema", afirmou sobre a função de presidente da República, rindo, ao finalizar sua fala no evento de inauguração. Ele deu a declaração ao falar que não possui qualquer ambição e que não lhe "sobe à cabeça" o fato de ser presidente.

Depois do evento, ao ser questionado se o cargo é mais difícil do que pensava, o presidente negou e falou que "sabia das dificuldades por ser um País grande". Ele justificou que existem "muitos vícios no Brasil". Citou como fatores de preocupação a violência, a empregabilidade e a educação. Sobre a fala de que "não nasceu para presidente", disse, aos risos, que "tem que se virar para não ser engolido".

Questionado se os problemas mencionados no discurso estariam relacionados também às dificuldades no diálogo com parlamentares e partidos políticos, respondeu que "cada um vai defender seus interesses" e que "isso é natural". "Temos que convencer o pessoal para mostrar a questão da (reforma) da Previdência. Se não aprovar agora, pelo menos grande parte, daqui dois a três anos vai faltar dinheiro para pagar quem está na ativa, vamos virar uma Grécia", declarou na coletiva de imprensa.

O presidente voltou a itir que a proposta de capitalização na reforma da Previdência poderá não ser aprovada pelo Congresso e deixar a proposta para outra oportunidade. Ele já havia falado sobre a possibilidade em café da manhã com jornalistas, pela manhã.

"Nós queremos aprovar o que está aí, mas se os parlamentares entenderem que está complicado, difícil de explicar agora, podem decidir deixar para outra oportunidade", disse na tarde desta sexta a jornalistas. "A gente gostaria que a proposta enviada fosse aprovada na íntegra, mas com toda certeza vai ser aperfeiçoada por parte do parlamento", minimizou Bolsonaro.

Mudanças no MEC? Bolsonaro sinaliza que pode demitir Ricardo Vélez

Band Campinas