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

Juninho Pernambucano dispara contra treinador de CR7: 'Maior mau-caráter que conheci'

Juninho Pernambucano, quando era dirigente do Lyon - Romain Lafabregue/AFP
Juninho Pernambucano, quando era dirigente do Lyon Imagem: Romain Lafabregue/AFP

04/01/2023 17h15

Ex-dirigente do Lyon, o brasileiro Juninho Pernambucano comentou sobre a transferência de Cristiano Ronaldo para o Al-Nassr, da Arábia Saudita, e também sobre o treinador do clube do Oriente Médio, Rudi Garcia.

Desafeto do comandante francês, o ídolo do Vasco não poupou críticas ao profissional.

"Realmente pensei muito em falar sobre esse cidadão, pois só ao falar o nome dele já sentimos uma pequena falta de energia. Mas como o jogador é o Cristiano Ronaldo, que iro e respeito demais, resolvi responder. A minha experiência com o Rudi Garcia foi péssima. É o maior mau-caráter que conheci em toda a carreira no futebol. Não sabe liderar nada. Lidera pelo medo que impõe nos outros. Só respeita pessoas que têm poder ou de quem ele possa tirar algum proveito na relação", declarou Juninho ao portal "Maisfutebol", de Portugal.

Juninho disse ainda o que esperar da gestão de Rudi Garcia junto com Cristiano Ronaldo e afirmou que o treinador vai se aproveitar da situação para se promover.

"Em relação a CR7, ele não ousará fazer nada que atrapalhe, pelo contrário, até servirá o café da manhã para ele se for preciso. Ele vai tentar ser amigo do Cristiano, ser íntimo e fará tudo para isso. Será um sonho para ele ser amigo do Cristiano Ronaldo. Para Rudi Garcia não importa o sucesso da equipe, a harmonia do vestiário. Importa que ele seja o centro das atenções, mesmo que seja na crise. Mas como todos os seres humanos altamente frios, ele reconhece os maiores que ele e tenta tirar proveito disso. Cristiano Ronaldo é um dos maiores da história do futebol, uma lenda, e Rudi sabe disso", seguiu o brasileiro.

Rudi Garcia chegou ao Lyon em outubro de 2019, três meses após Juninho assumir como diretor do clube. O clima entre os dois, porém, não era dos melhores, e o francês foi demitido em maio de 2021, após não classificar os Gones para a Champions League. O treinador assumiu o Al-Nassr em julho de 2022.