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

Patrick de Paula se despede do Palmeiras e agradece a Abel Ferreira

Patrick de Paula, volante do Palmeiras - Cesar Greco / Palmeiras
Patrick de Paula, volante do Palmeiras Imagem: Cesar Greco / Palmeiras

[email protected] (Redação)

22/03/2022 18h50

Acertado com o Botafogo, Patrick de Paula utilizou seu Instagram para se despedir do Palmeiras nesta terça-feira (22). O jogador de 22 anos agradeceu a Abel Ferreira, destacou que sempre se dedicou em campo e falou sobre as alegrias que estarão para sempre em sua memória.

Patrick chegou ao Verdão em 2017, após se destacar na Taça das Favelas. Desde que fez sua estreia como profissional do Palmeiras, em 2020, o volante participou de 103 partidas e marcou oito gols. Seu grande momento pela equipe principal foi justamente em sua primeira temporada, quando converteu a cobrança que garantiu o título do Paulista sobre o Corinthians, no Allianz Parque.

Veja o texto de Patrick na íntegra:

As histórias são feitas de início, meio e fim. Hoje é dia do final de um ciclo vitorioso e de muito aprendizado na minha carreira.

Me despeço do clube que me proporcionou os melhores momentos da minha vida até aqui e, ao escrever essa despedida me encho de orgulho desta trajetória, mas acima de tudo, gratidão por ter tido o privilégio de poder fazer parte da história desta família chamada Palmeiras.

Da base ao profissional pude realizar sonhos de criança e, ao lado dessa torcida fantástica, comemorar títulos históricos e gols em clássicos. Aqui também fiz amigos que levarei para minha vida e aprendi a ser homem, pai e amadurecer como profissional.

Obrigado a todos meus colegas que estiveram ao meu lado ao longo desses anos, a todo staff do clube, aos funcionários que são nossa família dentro do CT e a toda torcida que faz do Palmeiras um dos maiores clubes do mundo.

Deixo meu agradecimento especial ao João Paulo e ao Abel Ferreira, ambos que me ajudaram a crescer pessoalmente e profissionalmente.

Sempre que estive em campo, dei o meu melhor pelo clube, pois sei a responsabilidade que tenho ao defender essa camisa, sei da importância que temos para torcida e a grandeza que é vestir este manto.

Por isso, peço desculpas se em algum momento falhei, mas saibam que sempre foi com o objetivo de acertar e buscar dar o meu melhor por vocês, pela minha família e pelo Palmeiras.

Os mais de 10 títulos e mais de 100 jogos foram sempre com muito empenho e suor, e as alegrias vividas ficarão para sempre na minha memória e no meu coração.

Pela minha família, por mim, por tudo que vivi: Obrigado, Palmeiras!

Patrick já está no Rio de Janeiro e deve ser anunciado pelo Botafogo ainda nesta semana. O Glorioso desembolsará seis milhões de euros (cerca de R$ 33 milhões) para adquirir 50% dos direitos econômicos do volante.

O Palmeiras entendeu que a proposta é vantajosa do ponto de vista financeiro, ainda mais considerando as várias opções que Abel Ferreira tem para o meio-campo. Além disso, o volante viu a mudança de ares com olhos positivos, já que perdeu prestígio com o técnico português desde 2021.

Patrick se encaixa no perfil de reforço que John Textor, dono de 90% da SAF do Botafogo, pretende trazer para o clube: jovem, com potencial de desenvolvimento e revenda a longo prazo. O time alvinegro a por uma grande reestruturação nesta temporada.