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

Esse conteúdo é antigo

Ativista Greta Thunberg exige reação 'emergencial' a mudanças climáticas

Ativista Greta Thunberg discursa diante de comitê do Parlamento Europeu em Bruxelas - Yves Herman
Ativista Greta Thunberg discursa diante de comitê do Parlamento Europeu em Bruxelas Imagem: Yves Herman

Matthew Green

Da Reuters, em Londres

16/07/2020 10h12

A ativista sueca Greta Thunberg fez um apelo a líderes europeus hoje para adotarem ações emergenciais contra a mudança climática, dizendo que as pessoas no poder praticamente "desistiram" da possibilidade de proporcionar um futuro decente para as próximas gerações.

Em uma carta aberta também assinada por vários milhares de pessoas, incluindo cientistas climáticos, economistas, atores e ativistas, a jovem de 17 anos pediu aos países que comecem a tratar a mudança climática e o colapso ecológico "como uma emergência".

A carta foi divulgada antes de uma cúpula do Conselho Europeu de amanhã, na qual nações da União Europeia de 27 membros tentarão acertar o próximo orçamento do bloco e um pacote de recuperação para reagir ao choque econômico da pandemia de coronavírus.

As reivindicações da carta incluem uma suspensão imediata de todos os investimentos na exploração e na extração dos combustíveis fósseis, paralelamente ao fim rápido dos subsídios concedidos a eles.

Ela também pediu "orçamentos de carbono" anuais obrigatórios para limitar a quantidade de gases de efeito estufa que os países podem emitir para maximizar as chances de cumprir um teto de 1,5 grau Celsius na elevação das temperaturas globais médias, uma meta entronizada no acordo climático de Paris de 2015.

"Entendemos e sabemos muito bem que o mundo é complicado e que o que pedimos pode não ser fácil. As mudanças necessárias para salvaguardar a humanidade podem não parecer muito realistas", disse a carta.

"Mas é anda menos realista acreditar que nossa sociedade conseguiria sobreviver ao aquecimento global para o qual rumamos, além de outras consequências ecológicas desastrosas do andar da carruagem atual."

A carta pediu políticas climáticas concebidas para proteger os trabalhadores e os mais vulneráveis e reduzir as desigualdades econômicas, raciais e de gênero, além de medidas para "salvaguardar e proteger" a democracia.