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

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Danilo vira exemplo no Palmeiras para recuperação de "crias"

Danilo, durante partida entre Palmeiras e Al Ahly - Michael Regan - FIFA/FIFA via Getty Images
Danilo, durante partida entre Palmeiras e Al Ahly Imagem: Michael Regan - FIFA/FIFA via Getty Images

Do UOL, em Dubai (Emirados Árabes)

09/02/2022 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Danilo fez mais uma excelente partida ontem (8) na vitória do Palmeiras contra o Al Ahly, do Egito, na semifinal do Mundial. A regularidade do jovem mostra como sua cabeça tão elogiada internamente faz a diferença na comparação com as outras Crias da Academia e pode até servir de exemplo aos companheiros.

Assim como os outros garotos, ele se destacou em jogos da Libertadores de 2020. A grande diferença é que o volante não precisou de muitos avisos da comissão e da diretoria que para manter o nível alto ele precisaria se esforçar ainda mais depois de ir bem nas primeiras chances que teve.

Patrick de Paula foi cortado da competição depois de receber diversos recados públicos e privados da diretoria e comissão por falta de atenção e dedicação. Sua parte técnica nunca foi criticada, mas a cabeça não acompanhou os pés.

Ainda tratado como grande joia do futuro, ele já foi chamado mais de uma vez para reuniões para que seu completame todo mudasse. Há, no entanto, compreensão com o fato de Patrick nunca ter tido estrutura e instrução o suficiente após uma vida muito difícil, sempre no subúrbio.

Gabriel Menino é outro tratado como craque que não conseguiu manter o nível por falta de foco. Ele já atuou no sacrifício físico no ado recente, pediu para se tratar melhor, mas nunca conseguiu recuperar o bom futebol. Testado na direita e depois devolvido ao meio-campo, ele não é nem sombra do que já foi.

Já Renan é um jovem que ainda é elogiado pela postura e pelo o que mostra em campo, mas acabou cortado pela concorrência de peso em uma competição como o Mundial.

O Palmeiras investe forte em categorias de base e se tornou referência em revelar jovens nos últimos anos. Não há internamente o discurso para se livrar dos que caíram de produção, mas há o constante aviso que a concorrência só vai aumentar.

Além de Danilo, vale a menção sobre o jogo de ontem que Dudu, Raphael Veiga e Luan jogaram demais. O Palmeiras dá sinais que consegue manter a boa mistura entre juventude e experiência.