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

Abel se viu campeão no Palmeiras um dia antes da final e chorou de saudades

Abel Ferreira recebe banho de gelo de seus comandados no Palmeiras - Cesar Greco
Abel Ferreira recebe banho de gelo de seus comandados no Palmeiras Imagem: Cesar Greco

Thiago Ferri

Do UOL, no Rio de Janeiro

31/01/2021 04h00

Abel Ferreira deu ao Palmeiras o maior título do século, ao vencer o Santos ontem (30) e levantar a taça da Copa Libertadores. O tamanho do feito não tirou a humildade do português, que conquistou o primeiro título de sua carreira e fez muitos agradecimentos.

Todas as manifestações durante a semana no Rio de Janeiro (RJ) mostravam Abel impressionado com o tamanho do momento que vive. Ao tratar do Maracanã, definiu o estádio como "templo do futebol". E, se na tarde de ontem ele correu pelo campo com o troféu na mão, no dia anterior ele já se imaginava fazendo isso.

Durante o reconhecimento do gramado, na sexta (29), o treinador foi registrado com a cabeça levantada em direção ao sol e olhos fechados. A imagem é do momento em que ele visualizou mentalmente a festa de campeão.

"Foi uma foto muito bonita, eu estava vendo a luz do sol, fechei os olhos e só me imaginei recebendo a taça. Foi uma emoção e só o fato de ouvir 'a glória eterna' é inacreditável. Eu disse aos jogadores: aconteça que acontecer, ou ficaremos na história ou seremos eternos. Eu e toda a estrutura gravamos [o nome na história] e conseguimos a glória eterna. É muito poderoso", afirmou.

Abel Ferreira, durante reconhecimento de campo no Maracanã - Divulgação/Conmebol - Divulgação/Conmebol
Abel Ferreira, durante reconhecimento de campo no Maracanã
Imagem: Divulgação/Conmebol

O momento só foi possível porque Abel fez algo que a maioria dos jogadores do futebol sul-americano não teria coragem de fazer: trocou um clube europeu por um brasileiro no início de carreira. O português aceitou a proposta do Palmeiras por entender que teria a chance de alçar voos mais altos no Palmeiras do que no PAOK, da Grécia. O técnico sabia que encontraria um elenco com potencial para conquistar títulos, como o da Libertadores.

Mas como toda decisão, ela teve bônus e ônus. O problema para Abel foi que a decisão o afastou da família. A esposa e suas duas filhas moram ainda em Portugal e, desde a mudança para o Brasil, eles se reuniram apenas no Natal, quando elas foram a São Paulo (SP). A convivência foi pequena, pois o Palmeiras seguia jogando. Falar da distância das crianças foi o motivo que o fez chorar na entrevista coletiva, depois de já se emocionar no gramado do Maracanã.

"É muita hora de estudo, de trabalho. Infelizmente, para ser bom treinador me custa. Eu não posso ter os dois mundos. Sou pior pai, pior filho, pior marido, pior irmão. Sou melhor treinador, não tenho dúvidas nenhuma, mas perco tudo isso. E não há dinheiro nenhum que recupere, e por isso choro no travesseiro: por não estar com as minhas filhas. É só".

Com 26 jogos (15 vitórias, seis empates e cinco derrotas) pelo Palmeiras, Abel Ferreira deu ao Palmeiras o bicampeonato da Libertadores e pode conquistar mais. Nesta semana, a delegação embarca ao Qatar para disputar o Mundial de Clubes e nos dias 28 de fevereiro e 7 de março enfrentará o Grêmio, nas finais da Copa do Brasil.

Veja o gol do título do Palmeiras, marcado por Breno Lopes

Palmeiras