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

Sormani critica investimento do São Paulo em Dani Alves: 'Não vale'

Sormani não acha que vale a pena São Paulo seguir com Dani Alves - Fernando Alves/AGIF
Sormani não acha que vale a pena São Paulo seguir com Dani Alves Imagem: Fernando Alves/AGIF

Colaboração para o UOL, em São Paulo

09/02/2021 19h28

O final da temporada para o São Paulo pode ser marcado por saídas de jogadores e uma reformulação no elenco, que ainda não tem um novo comandante definido. Em meio às especulações de quem sai e quem fica, Daniel Alves é apontado como um peso nas finanças do clube e, para o comentarista da ESPN, Fábio Sormani, o Tricolor poderia contratar bem com o alívio salaria após uma saída de Dani.

"Não vale, o que o São Paulo gasta com o Daniel Alves, dá para contratar uns três jogadores do mesmo nível que ele, e que podem decidir, coisa que o Daniel não conseguiu fazer no São Paulo. Eu acho ele um bom jogador, mas não é o jogador que ele acha que é e que muita gente acha também. Já listei inúmeros jogadores melhores que ele, uns dez na frente do Daniel Alves na história da lateral no Brasil", disse Sormani.

Camisa 10 do São Paulo, Daniel chegou em 2019 com status de ídolo, depois de 17 anos na Europa e inúmeros conquistas por onde ou. A fama de 'homem-título' veio como uma esperança ao torcedor, que não comemora um campeonato desde a Sul-Americana de 2012. Por essa responsabilidade, Sormani argumenta que o jogador não é cara que decide, como imaginavam muitos.

"Quando ele chega no São Paulo com a missão de mostrar todo o potencial daquele jogador, ele não consegue, porque ele não fazia a diferença antes. Então, eu não gastaria com ele, se fosse o São Paulo, reforçaria o elenco ou pagaria dívidas", completou.

Com a renovação ainda incerta, São Paulo e Daniel Alves ainda têm mais três jogos até o fim da temporada. O próximo compromisso do time é contra o Ceará, na próxima quarta (10), no Morumbi, pelo Brasileirão.