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

São Paulo

SPFC conversa com Calleri e Gabriel Neves e corre contra o fim da janela

Calleri, em ação pelo São Paulo em 2016 - PAULO WHITAKER/Reuters
Calleri, em ação pelo São Paulo em 2016 Imagem: PAULO WHITAKER/Reuters

Brunno Carvalho

Do UOL, em São Paulo

28/08/2021 22h27

O São Paulo ainda mantém esperanças de reforçar o time antes do fechamento da janela de transferências internacionais, que acontece na segunda-feira (30). A diretoria retomou conversas com o atacante Jonathan Calleri e com o meia Gabriel Neves, sonhos antigos do clube.

As conversas com o atacante argentino foram retomadas pouco mais de um mês depois de o Deportivo Maldonado, clube uruguaio que detém os direitos econômicos de Calleri, rejeitar uma oferta feita pelo São Paulo. Na sequência, a diretoria foi atrás de Darío Benedetto, mas a alta pedida feita pelos empresários do atacante inviabilizaram o negócio.

Durante participação em live com o narrador Nilson César no início do mês, Muricy Ramalho, coordenador de futebol do São Paulo, afirmou que as pedidas feitas pelos agentes de Calleri e Benedetto inviabilizaram os negócios. "A gente começou uma conversa, um namoro, mas na hora que fomos ver, não tinha condição".

Próximo do fim da janela, Calleri ainda não conseguiu outra equipe para jogar. Por causa disso, as conversas com o São Paulo foram retomadas. Apesar das tratativas, os problemas financeiros da equipe paulista fazem com que a negociação seja tratada com cautela, principalmente porque o objetivo da diretoria é começar a pagar pelo jogador apenas no ano que vem.

O São Paulo monitora desde o início da gestão Julio Casares a situação do jogador. Pesa a favor dele a identificação com a torcida. Calleri jogou no time do Morumbi por apenas seis meses, mas marcou 16 gols e foi importante na campanha da Libertadores, em que a equipe chegou na semifinal.

O caso de Gabriel Neves é um pouco mais complicado. Ele ainda tem mais um ano e meio de contrato com o Nacional, do Uruguai. O meia é um desejo antigo do São Paulo, mas as conversas no início do ano não evoluíram. Agora, a diretoria tenta mais uma vez viabilizar o negócio. Caso se concretize, a tendência é que o uruguaio chegue, inicialmente, por empréstimo.

Em entrevista ao colunista do UOL Menon, Carlos Belmonte, diretor de futebol do São Paulo, disse que o clube precisava se reforçar com um volante, um zagueiro canhoto e um atacante.

São Paulo