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

Palmeiras não teme queda técnica sem Felipe Melo e aposta em novos líderes

Felipe Melo comemora com a torcida a conquista do tricampeonato da Libertadores pelo Palmeiras - REUTERS/Mariana Greif
Felipe Melo comemora com a torcida a conquista do tricampeonato da Libertadores pelo Palmeiras Imagem: REUTERS/Mariana Greif

Colunista do UOL

07/12/2021 11h37

Receba os novos posts desta coluna no seu e-mail

Email inválido

A avaliação da diretoria do Palmeiras e da comissão é que a saída de Felipe Melo será substituída nos aspectos mais importantes: tecnicamente e na liderança. Além disso, a mudança deixa um marco importante de renovação do elenco que tem sido muito vitorioso nos últimos anos. A reformulação do grupo inclusive foi citada por Maurício Galiotte, presidente do clube, como um dos motivos que levaram a não renovar com o volante.

Dentro de campo, a substituição é considerada a mais tranquila, visto que Danilo vive grande fase e consegue cumprir com ainda mais vigor físico a posição de primeiro volante. Os concorrentes são Patrick de Paula e Matheus Fernandes. Não está descartada a chegada de mais um nome para o setor, especialmente porque Danilo Barbosa não deve continuar.

Nas últimas partidas em que o time foi representado pelo sub-20, como no empate de ontem em 0 a 0 com o Athletico-PR, atual finalista da Copa do Brasil, os jovens vivem um novo período de avaliação, que traz mais dificuldades que no dia a dia de treinamento. A contratação de um atleta para o setor, no entanto, não está entre as prioridades de Abel. O que mais tira o sono do treinador é a chegada de um camisa 9 e de um meia que também possa jogar mais à frente.

O que mais foi debatido internamente foi o buraco de liderança deixada por Felipe Melo. O jogador era um dos mais experientes e teve atuações marcantes em partidas decisivas, como a contra o Atlético-MG, pela semifinal da Libertadores, quando ficou marcado pelos combates com Hulk.

Fora de campo, ele também era um dos mais ativos nas preleções, como a que ficou famosa na final da Libertadores, e na hora de tentar ajudar os mais jovens. Em várias ocasiões que ficava no banco, ele atuava quase como um terceiro assistente de Abel Ferreira dando instruções táticas.

Os candidatos a esse cargo são Gustavo Gómez, que dividia a faixa de capitão com o meio-campista, Weverton, Dudu e Willian, que são atletas mais experientes e já tem representatividade no elenco. O último tem contrato até o fim do ano que vem, mas sua saída não pode ser descartada. Nos últimos dias, Willian teve seu nome ligado ao Santos.

Felipe foi bastante elogiado por ser extremamente profissional, apesar de ter acumulado alguns arranhões públicos nas relações com profissionais que estiveram no comando, seja como foi com Cuca, que era treinador, ou mais recentemente com Maurício Galiotte, presidente palmeirense até o dia 15 de dezembro.

Internamente, o volante é extremamente respeitado, recebeu várias homenagens e tem seu nome repetidamente colocado na história do Palestra Itália. Isso, no entanto, não impede a diretoria de considerar que todo ciclo tem seu fim.

Siga também as opiniões de Danilo Lavieri no Twitter e no Instagram