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

Bastidores do Palmeiras: Luan Silva é o único do elenco com contrato no fim

Luan Silva está se recuperando de cirurgia no joelho no Palmeiras - Cesar Greco/Ag. Palmeiras/Divulgação
Luan Silva está se recuperando de cirurgia no joelho no Palmeiras Imagem: Cesar Greco/Ag. Palmeiras/Divulgação

Thiago Ferri

Do UOL, em São Paulo

28/09/2020 18h27

Com a renovação de Jailson, Luan Silva é o único jogador do elenco do Palmeiras em fim de contrato. O atacante de 21 anos de idade teve em março seu empréstimo do Vitória renovado até o dia 31 de dezembro, mas conseguiu fazer só uma partida até agora. Considerado promissor, ele se recupera de uma cirurgia no joelho esquerdo.

Na época, o Verdão adquiriu 15% dos direitos econômicos de Luan Silva, e tem a possibilidade de comprar mais 35% ao fim do ano. O atacante chegou ao Palmeiras em 2019 e desde então tem sido atrapalhado por lesões. Quando foi contratado, estava tratando uma lesão por rompimento de ligamento do joelho, sofrida ainda na Bahia. Ele fez então um trabalho específico de reequilíbrio muscular e, após se destacar nos treinos, recebeu a camisa 9.

Sua única partida pelo Palmeiras foi contra a Ferroviária, em março. O jogador saiu ainda no primeiro tempo por conta de uma lesão muscular. Ele se recuperou e trabalhava para ficar à disposição quando o futebol voltou, em julho. Sofreu, porém, mais uma contusão na coxa direita, e quando já estava em transição entre a parte física e técnica, houve o novo problema no joelho.

Guerra, fora dos planos e treinando à parte desde o começo de 2020, também tem vínculo por apenas mais três meses.

Veja abaixo até quando vão os contratos no Palmeiras:

Weverton: dezembro de 2024
Jailson: dezembro de 2021
Vinícius Silvestre: dezembro de 2021
Emerson Santos: dezembro de 2022
Felipe Melo: dezembro de 2021
Gustavo Gómez: junho de 2024
Luan: março de 2023
Vitor Hugo: junho de 2024
Marcos Rocha: dezembro de 2022
Mayke: dezembro de 2023
Esteves: dezembro de 2024
Viña: dezembro de 2024
Bruno Henrique: dezembro de 2023
Gabriel Menino: dezembro de 2024
Gustavo Scarpa: dezembro de 2022
Lucas Lima: dezembro de 2022
Patrick de Paula: dezembro de 2024
Ramires: junho de 2023
Raphael Veiga: dezembro de 2023
Zé Rafael: dezembro de 2023
Gabriel Veron: setembro de 2025
Luan Silva: dezembro de 2020
Luiz Adriano: junho de 2023
Rony: dezembro de 2024
Wesley: dezembro de 2024
Willian: dezembro de 2021

Palmeiras