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

Palmeiras

Em fim do contrato, Felipe Melo deve ser capitão do Palmeiras na final

[email protected] (Redação)

26/11/2021 06h00

Ainda com futuro incerto no Palmeiras, Felipe Melo deve ser titular na final da Copa Libertadores contra o Flamengo, que acontece neste sábado, às 17h (horário de Brasília), no Estádio Centenário, em Montevidéu-URU. Mais do que começar jogando, a tendência é que o volante seja o capitão da equipe.

Abel Ferreira sempre deixou claro que conta com diversos líderes em seu elenco. Além de Felipe Melo, Gustavo Gómez e Weverton são duas das principais lideranças do grupo. No entanto, quando está em campo, o camisa 30 costuma ser o capitão.

A comissão técnica do Verdão, inclusive, programou um cronograma especializado para ter Felipe Melo em sua melhor forma na grande decisão. O volante nem sequer foi relacionado para os jogos contra Santos, São Paulo e Fortaleza, pelo Campeonato Brasileiro.

Na final da Libertadores da temporada ada, contra o Santos, Felipe Melo não foi titular, mas entrou em campo no Maracanã nos acréscimos do segundo tempo, logo após o gol de Breno Lopes.

Felipe Melo tem contrato com o Palmeiras válido até o final deste ano. Como a gestão de Maurício Galiotte chegará ao fim em dezembro, o atual presidente do Alviverde deixou claro que a decisão quanto ao futuro do jogador ficaria a cargo de seu sucessor.

No último final de semana, Leila Pereira foi eleita presidente do Palmeiras e assumirá o comando do clube no dia 15 de dezembro. Perguntada sobre o planejamento para a próxima temporada, a mandatária da Crefisa pontuou que todas as decisões relacionadas ao futebol dependerão da avaliação da comissão técnica.

Desde que estreou pelo Verdão, em 2017, Felipe Melo soma 224 partidas, sendo 204 como titular. O volante já marcou 13 gols e deu sete assistências pelo time alviverde, tendo o Campeonato Brasileiro e os três títulos da temporada ada (Paulista, Libertadores e Copa do Brasil) em seu currículo pelo clube palestrino.

Palmeiras