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

Editorial The New York Times: A triste opção do Brasil

Wilton Junior/Estadão Conteúdo
Imagem: Wilton Junior/Estadão Conteúdo

22/10/2018 12h21

Jair Bolsonaro é um brasileiro de extrema-direita que professa opiniões repulsivas. Ele disse que se tivesse um filho homossexual preferia vê-lo morto; que uma colega parlamentar era feia demais para ser estuprada; que os afro-brasileiros são preguiçosos e gordos; que o aquecimento global são "fábulas do efeito estufa". Ele tem saudade dos generais e das torturas que dominaram o Brasil durante 20 anos. No próximo domingo, no segundo turno da eleição, Bolsonaro provavelmente será eleito presidente do Brasil. 

Por trás dessa perspectiva assustadora, há uma história que se tornou comum entre as democracias do mundo, em um nível alarmante. O Brasil está emergindo de sua pior recessão; uma ampla investigação chamada Operação Lava Jato revelou uma corrupção cruel no governo; um ex-presidente popular, Luiz Inácio Lula da Silva, está preso por corrupção. Sua sucessora, Dilma Rousseff, sofreu impeachment; o sucessor dela, Michel Temer, está sob investigação; a violência criminal é avassaladora. Os brasileiros estão desesperados por mudanças.

Contra esse pano de fundo, as opiniões rudes de Bolsonaro são interpretadas com ingenuidade, sua carreira obscura de congressista, como a promessa de um forasteiro que vai limpar os estábulos, e sua garantia de um punho de ferro, como esperança de um recuo da média recorde de 175 homicídios por dia no ano ado. Como cristão evangélico, ele prega uma mistura de conservadorismo social e liberalismo econômico, embora confesse um entendimento apenas superficial da economia.

Parece conhecido? Ele é o último em uma longa linhagem de populistas que aproveitaram uma onda de descontentamento, frustração e desespero para alcançar o mais alto cargo em seus respectivos países. Não é de surpreender que ele seja muitas vezes descrito como o Donald Trump brasileiro.

Se chegar ao palácio presidencial, um perdedor será o meio ambiente, especificamente as florestas tropicais da Amazônia, às vezes chamadas de os pulmões da Terra por seu papel na absorção do dióxido de carbono. Bolsonaro prometeu reverter várias proteções às florestas tropicais para abrir mais terras para o poderoso agronegócio brasileiro. Ele levantou a perspectiva de se retirar do acordo climático de Paris, abolir o Ministério do Meio Ambiente e parar a criação de reservas indígenas --tudo isso em um país até recentemente elogiado por sua liderança na proteção do meio ambiente. 

Não foi só a mensagem do "boi, bala e Bíblia" que levou Bolsonaro à linha de frente. O popular Lula continuou um forte adversário, apesar de preso, até que o Superior Tribunal Eleitoral decidiu em agosto que ele é inelegível. Como substituto, o Partido dos Trabalhadores (PT), de esquerda, escolheu Fernando Haddad, ex-professor, ministro da Educação e prefeito de São Paulo.

Embora Haddad tenha sobrevivido ao primeiro turno de votação, não superou a associação de seu partido à corrupção e má istração, o que alimentou uma espécie de espírito "qualquer coisa menos o PT". As pesquisas o mostram muito atrás de Bolsonaro no segundo turno.

A opção cabe aos brasileiros. Mas é um momento triste para a democracia quando a discórdia e a decepção conduzem os eleitores à distração e abrem a porta a populistas ofensivos, rudes e agressivos.