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

Thaís Oyama

Por que o ministro Salles, o "Weintraub sem guarda-chuva", não cai

O ministro Ricardo Salles: longe de ser o foco das labaredas - Marcos Corrêa/PR
O ministro Ricardo Salles: longe de ser o foco das labaredas Imagem: Marcos Corrêa/PR

Colunista do UOL

29/09/2020 11h51

O ministro Ricardo Salles não é uma unanimidade apenas entre ambientalistas. O que se diz dele no Palácio do Planalto já seria suficiente para fazer suas orelhas arderem.

As críticas mais ácidas ao titular do Meio Ambiente não vêm do Anexo II, onde despacha o vice Hamilton Mourão — na condição de presidente do Conselho da Amazônia, obrigado a interagir com o ministro desde o início do ano.

Elas vêm do núcleo duro do governo, ao menos da parte com crachá: os generais Augusto Heleno, Luiz Ramos e Braga Netto (na parte sem crachá estão familiares do presidente e agregados).

Para esse primeiro grupo, Salles executa ações de forma atabalhoada, em momentos inoportunos e sem antes costurar os apoios necessários, como no recente caso envolvendo o Conselho Nacional do Meio Ambiente (Conama).

O Conama, depois de ser reestruturado por Salles, ou a ser controlado majoritariamente por membros do governo federal. Ontem, orientado pelo ministro, o conselho acabou com duas regras que protegiam áreas de restingas e manguezais.

A revogação dessas regras — que abrirá espaço para o setor imobiliário avançar sobre as faixas de vegetação das praias e para os produtores de camarão explorarem áreas extras nos mangues— coincidiu com o momento em que o governo Bolsonaro é enxovalhado, no Brasil e fora dele, pelo atraso no combate aos incêndios no Pantanal e pelos novos números de desmatamento na Amazônia.

As decisões do Conama inflamaram ainda mais as críticas e já estão sendo contestadas no Ministério Público Federal e no Supremo Tribunal Federal.

A falta de timing do ministro Salles no episódio enfureceu os generais do Palácio. Para ilustrar a falta de aptidão do ministro para o cargo, alguns o comparam ao ministro Eduardo Pazuello, que sem alarde teria conseguido vencer resistências políticas numa área igualmente sensível como a da Saúde.

Outra comparação, mas com viés inverso, é com o histriônico ex-ministro da Educação Abraham Weintraub, que entre uma trapalhada e outra, gostava de exibir-se nas redes sociais em performances artísticas, incluindo recitais de gaita e danças com guarda chuva. Como o colega demitido, Salles arrumaria mais confusão do que soluções.

Antes do caso dos manguezais, outro episódio que havia unido o núcleo duro contra Salles foi aquele em que o ministro decidiu botar a boca no Twitter e lavar roupa suja do governo ao ter sua pasta ameaçada de corte orçamentário. Não encontrou quem ficasse ao seu lado.

Diante de tanta insatisfação, por que Salles não cai?

Porque Bolsonaro não quer.

E por que Bolsonaro não quer? Primeiro, porque Salles apanha da imprensa e ministro que apanha da imprensa merece o especial apreço do presidente e seus filhos (o contrário é igualmente verdadeiro: os elogiados entram imediatamente na alça de mira do clã, caso do ex da Saúde, Luiz Henrique Mandetta).

Depois, porque Bolsonaro pensa rigorosamente como Salles - ou melhor, o ministro é quem pensa igual ao presidente, apenas executa mal os seus desejos.

Com Salles ou sem Salles, portanto, as labaredas continuarão ardendo. O foco do incêndio não está na Esplanada dos Ministérios.