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

Danilo Lavieri

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

São Paulo precisa enxugar elenco para poder agir no mercado da bola

Luciano tenta bicicleta na partida entre Botafogo e São Paulo - Jorge Rodrigues/AGIF
Luciano tenta bicicleta na partida entre Botafogo e São Paulo Imagem: Jorge Rodrigues/AGIF

Colunista do UOL

23/02/2021 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

O torcedor do São Paulo está bastante chateado com o fim da temporada e tem razão nisso. Para piorar a situação, a equipe do Morumbi vive problemas financeiros e a atuação da diretoria no mercado da bola depende de condições extremamente favoráveis para negociar com jogadores em fim de contrato ou com uma enxugada no elenco, especialmente pensando nos que ganham mais e não rendem.

O jogador que simboliza essa questão do custo-benefício é Daniel Alves. Em aspectos técnicos, é bem claro que é um dos melhores do time, mas ele não consegue manter a regularidade necessária para justificar seu salário superior a R$ 1 milhão. Não é à toa que ele tem milhões atrasados. Há ainda outros jogadores que custaram caro, também não ganham pouco e estão encostados, como é o caso de Pablo.

Ao menos no discurso, Julio Casares, o novo presidente, já deixou claro que tem a intenção de não gastar mais do que pode. Até mesmo Hernán Crespo falou dessa situação em sua coletiva de apresentação. Se mantiver essa premissa, a atuação da diretoria nas contratações fica diretamente atrelada à diminuição dos custos atuais para poder assumir novos.

Na previsão orçamentária, não há nem R$ 40 milhões disponíveis para contratações e a dívida apontada chega na casa dos R$ 600 milhões. Por conta disso, os mais de R$ 80 milhões obtidos com a venda de Brenner não poderão ser usados integralmente para a chegada de novos atletas.

Há a previsão de pagamento, a partir de março, de R$ 14 milhões que o time não pagou aos seus atletas por conta da crise de covid. Apesar de ser parcelado durante todo o ano, isso significa mais de R$ 1 milhão por mês.

Foi no meio de todo esse contexto que Crespo precisou decidir que não daria folga aos atletas e que usaria o Paulistão para conhecer seu elenco. Como se não bastassem todas essas dificuldades, o São Paulo agora ainda corre o risco de ter de disputar uma pré-Libertadores no início da nova temporada e enfrentar uma pressão que pode comprometer todo o ano de 2021.