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

Alicia Klein

OPINIÃO

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

Do que palmeirenses precisam para ter sossego nas próximas rodadas

Endrick em ação em Palmeiras x São Paulo, jogo válido pelo Campeonato Brasileiro - Marcello Zambrana/AGIF
Endrick em ação em Palmeiras x São Paulo, jogo válido pelo Campeonato Brasileiro Imagem: Marcello Zambrana/AGIF

18/10/2022 13h04

Receba os novos posts desta coluna no seu e-mail

Email inválido

Parte da torcida do Palmeiras - e da imprensa - começou a falar em ansiedade e tensão em relação ao título brasileiro. A equipe leva oito pontos de vantagem sobre o Internacional, com seis partidas para o fim. O confronto direto na rodada derradeira mantém acesa a chama de quem quer acreditar que o campeonato não acabou.

Mas acabou. Essa sensação meio pessimista causada pelos dois empates seguidos do Alviverde, casados com duas vitórias do Colorado, parece-me quase uma busca pelo sofrimento desnecessário. A lembrança de um 2009 que guarda pouquíssima semelhança com o que este Palmeiras se tornou.

Desnecessário não apenas pela confortável distância e a consistente campanha do time de Abel Ferreira, mas especialmente pelo momento do país. Com tudo que tem sido este mês de outubro, esta desagradável espera pelo dia 30, para que buscar sarna para coçar-se?

O que eu gostaria de ressaltar nesta terça-feira besta, porém, não é o iminente hendeca/unodeca/undeca. E, sim, o outro destaque de 2022. Endrick Felipe Moreira de Sousa.

Tente se lembrar do que você estava fazendo com 16 anos. Merda, provavelmente. Se era uma pessoa melhor do que eu e não estava errando, é razoável supor que também não estivesse realizando grandes coisas. Estava sendo adolescente, como quase todas e todos nós.

Aos 16 minutos do segundo tempo contra o São Paulo, aos 16 anos, Endrick entrou para disputar sua segunda partida profissional por um dos maiores times do continente. Atual bicampeão da Libertadores, virtual campeão brasileiro, time com duas derrotas na competição. Em casa, contra um dos maiores rivais. O mais jovem da história a estrear com essa camisa.

Dois lances ficaram marcados. Em uma arrancada, arrancou a expulsão do jovem zagueiro tricolor Lucas Beraldo, deixando o adversário com dois a menos em campo. Domínio, confiança, explosão.

Mas o mais impressionante, curiosamente, foi uma jogada que não deu em nada. Exatamente nesta falta, depois de a arbitragem tirar o malandro Beraldo de campo, Gabriel Menino e Gustavo Scarpa postaram-se para bater na entrada da área. O posicionamento de Endrick, dentro da área, completamente sozinho, pronto para receber a bola e girar para o gol, é uma pintura. Os colegas não viram e Menino mandou por cima do gol.

Sério, vale rever o lance algumas vezes. A perspicácia tática de um garoto dessa idade é notável. Talvez mais do que sua força e velocidade, que todos já conhecem bem. A tal habilidade de jogar sem bola, tão preciosa e valorizada pelo mundo.

É cedo, muito cedo, para fazer previsões.

Não é cedo, porém, para a torcida palmeirense empolgar-se. Parar de ficar caçando pelo em ovo e desfrutar os frutos de uma base enormemente vencedora. Ver e rever os primeiros momentos daquele que os privilegiados da era Abel Ferreira poderão dizer ter testemunhado.

Mais Endrick e menos desassossego. Já basta o Brasil para tirar a paz das pessoas.