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

Técnico do PSG interrompe pergunta sobre indisciplina para defender Neymar

Christophe Galtier, técnico do PSG - Bertrand Guay/AFP
Christophe Galtier, técnico do PSG Imagem: Bertrand Guay/AFP

Colaboração para o UOL, em Maceió

16/07/2022 11h13

O novo técnico do PSG, Christophe Galtier, já está traçando o que pretende para o time nesta nova temporada. Ele deu entrevista ao jornal francês L'Equipe e, numa das perguntas, o Neymar foi usado para dar um exemplo de indisciplina. Galtier, que pretende usar Neymar como meio-campista, interrompeu a pergunta e defendeu o brasileiro.

Repórter: E se por acaso Neymar chegar atrasado a um treino...
Galtier: Mas por que Ney?
Repórter: Porque aconteceu com ele na temporada ada.
Galtier: Mas isso acontece em todos os vestiários.
Repórter: Mas em Paris, o eco não é o mesmo que em Saint-Étienne, Lille ou Nice.

"É verdade. Isso tem eco internacional. (Ele faz uma pausa.) Haverá regras de vida que serão postas em prática, as quais apresentarei ao grupo. Haverá algumas coisas negociáveis, algumas não negociáveis. Vou trocar com os jogadores porque é preciso levar em conta as obrigações extraesportivas dos jogadores, mas regras muito precisas terão que ser respeitadas. Eles terão que se comprometer. E, quem quer que seja o jogador, se ele não tiver motivos válidos para não respeitá-las, ele ficará de lado por conta própria. Vai acontecer naturalmente. Também não estamos no exército", complementou o técnico.

Nesta janela de transferências, vários rumores de uma possível transferência de Neymar surgiram, inclusive mencionando que o próprio clube não teria interesse em contar com os serviços do brasileiro. Galtier, por outro lado, disse que já imagina como será o seu posicionamento e elogiou o craque brasileiro.

"Uma equipe é sempre mais forte com grandes jogadores. E Neymar é um. Nós conversamos muito sobre isso desde a reapresentação. No campo ofensivo, haverá tempo de jogo para todos. Eu sei onde Neymar pode ficar confortável, seja um pouco mais avançado ou na frente de dois meio-campistas. Neymar, como o Leo (Messi), eles são facilitadores, jogadores que têm essa capacidade de se encontrar nas entrelinhas e de ser decisivo", disse.