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

Danilo Lavieri

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Seleção brasileira faz de manifesto uma "nota de repúdio" que muda pouco

Seleção brasileira perfilada para a partida contra o Paraguai pelas Eliminatórias - Christian Alvarenga/Getty Images
Seleção brasileira perfilada para a partida contra o Paraguai pelas Eliminatórias Imagem: Christian Alvarenga/Getty Images

Colunista do UOL

09/06/2021 00h39Atualizada em 09/06/2021 00h56

Receba os novos posts desta coluna no seu e-mail

Email inválido

O manifesto divulgado após a vitória contra o Paraguai pelos jogadores da seleção brasileira se transformou em uma grande nota de repúdio, no melhor estilo Brasil dos últimos anos, quando absurdos e mais absurdos eram combatidos com palavras, mas sem ações que de fato mudam algo na história. Evolução se faz com atitude.

Uma carta como essa que deixa claro que os jogadores são contra a Copa América só serviria de algo se houvesse ação de verdade, até porque o texto não traz nada nem que poderíamos considerar "forte" ou que justificasse a preocupação do grupo. Do que adianta falar que é contra, mas entrar em campo, comemorar gols e brigar pelo título enquanto cerca de 2 mil pessoas morrem por dia? Se Argentina e Colômbia não tinham condições de receber, por que o Brasil pode ser a sede?

A carta ainda afirma que não quer se transformar em algo político. Ir contra uma competição como essa não deveria ser encarado como ato dessa natureza, mas, sim, como uma medida a favor da ciência e da saúde. Mas, hoje, no Brasil, por incrível que pareça, combater uma pandemia virou tema político.

Isso para nem entrar no mérito que a competição só está no Brasil por questões políticas, que teve trabalho da CBF em parceria com o Governo Federal. Como falar que não é política?

Se jogadores como Neymar, Casemiro, Thiago Silva que já têm dinheiro para gerações, já são consagrados na Europa, já têm lugar garantido na história na seleção não fizerem nada para que o futebol mude e seja um ambiente mais organizado e respeitado na sociedade como um todo, que tipo de atleta teria esse poder?

No fim, imaginar que a seleção finalmente não tentaria ser alheia aos problemas do seu povo e daria um o rumo à aproximação do torcedor foi apenas um devaneio temporário. Do jeito que fica, parece que o objetivo era apenas a saída de Rogério Caboclo da presidência da CBF. Para que nenhuma expectativa fosse criada, era simples: a carta deveria ser divulgada no início de toda a polêmica.