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

Josias de Souza

Heleno vê 'chantagem' do Congresso e aconselha resposta: 'Foda-se!'

FÁTIMA MEIRA/FUTURA PRESS/FUTURA PRESS/ESTADÃO CONTEÚDO
Imagem: FÁTIMA MEIRA/FUTURA PRESS/FUTURA PRESS/ESTADÃO CONTEÚDO

Colunista do UOL

19/02/2020 06h15

Receba os novos posts desta coluna no seu e-mail

Email inválido

Após celebrar o fato de ter transformado o Planalto num bunker "totalmente militarizado", Jair Bolsonaro assiste à formação da primeira trinca em sua tropa. Os ministros de quatro estrelas Luiz Eduardo Ramos e Augusto Heleno divergem sobre o poder dos congressistas de controlar o pagamento de emendas que eles enfiaram no Orçamento de 2020, destinando verbas para seus redutos eleitorais.

Contrário aos termos de um acordo celebrado por Ramos com a cúpula do Congresso, Heleno defendeu o endurecimento no trato com o Legislativo. Manifestou-se no intervalo de um evento ocorrido no Palácio da Alvorada. Fez isso numa rodinha que incluía, além de Ramos, os ministros Paulo Guedes (Economia) e Onyx Lorenzoni (Cidadania).

Por uma trapaça da sorte, as palavras do general foram captadas pela transmissão ao vivo feita pelo Planalto na internet. Estão registradas em notícia do Globo. Heleno tratou como chantagem o selo de pagamento impositivo que deputados e senadores grudaram nas emendas. "Nós não podemos aceitar esses caras chantagearem a gente o tempo todo", declarou, antes de arrematar com uma sugestão de autofornicação: "Foda-se!"

Desprezados por Jair Bolsonaro, os líderes partidários ajustaram a Lei de Diretrizes Orçamentárias às suas conveniências. Além de impor a obrigatoriedade do pagamento de suas emendas, os parlamentares se autoconcederam poderes para definir coisas como a ordem dos desembolsos. Não restaria aos ministérios senão liberar as verbas. Sob pena de sofrer sanções. Bolsonaro vetou a novidade.

O Congresso equipou-se para derrubar o veto do presidente. Farejando o risco de derrota, Ramos negociou. Em troca da manutenção do veto presidencial, o Planalto encaminharia um projeto que traduzisse o entendimento. Nele, parte da verba carimbada pelos parlamentares (R$ 10,5 bilhões) seria liberada para que os ministérios investissem segundo as suas necessidades. O bolo a ser repartido entre os parlamentares seria de R$ 31 bilhões.

A proposta deveria ser discutida numa reunião convocada pelo presidente do Senado e do Congresso, Davi Alcolumbre, com os líderes partidários. Mas o governo não enviou o projeto. E a reunião foi cancelada por Alcolumbre, que postou no Twitter uma mensagem em timbre de poucos amigos: "O Parlamento aguarda do governo o envio do projeto..."

À noite, na casa oficial da presidência do Senado, Alcolumbre reuniu os líderes; o vizinho Rodrigo Maia, presidente da Câmara; e os ministros Ramos e Guedes. Nada de Heleno —sem Heleno. Conversaram sobre as emendas orçamentárias e as reformas que demoram a sair do papel: tributária e istrativa. Tudo foi empurrado para depois do Carnaval.