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

Palmeiras

Toronto FC oferece mais, mas Borré ainda prefere Europa ou Palmeiras

Borré durante o jogo entre Palmeiras e River Plate, pela semifinal da Libertadores - Staff Images/Conmebol
Borré durante o jogo entre Palmeiras e River Plate, pela semifinal da Libertadores Imagem: Staff Images/Conmebol

Bruno Andrade e Thiago Ferri

Do UOL, em Lisboa e em São Paulo

05/03/2021 04h00

O Toronto FC, que disputa a Major League Soccer (MLS), resolveu abrir os cofres para levar a melhor na disputa por Santos Borré, mas, a princípio, tem esbarrado no plano de carreira traçado pelo colombiano. O UOL Esporte apurou que o atacante do River Plate (ARG) sonha principalmente com uma proposta tentadora da Europa e vê o Palmeiras como a melhor opção no continente americano.

Entre luvas e salário, o clube canadense está disposto a pagar cerca de US$ 15 milhões (R$ 85 milhões na cotação atual), por um vínculo válido por três temporadas. Os números colocados em cima da mesa, no entanto, agradaram apenas aos representantes oficiais do jogador, o colombiano Helmuth Wenning e o argentino Hernán Berman.

Com a intermediação do agente brasileiro André Cury, o Palmeiras, por sua vez, oferece quase o mesmo valor no total: aproximadamente R$ 80 milhões, mas num contrato de quatro temporadas (4,8 milhões de euros de prêmio de e US$ 2 milhões de salário por ano, livres de imposto), o que automaticamente seria menos vantajoso do ponto de vista financeiro.

Borré, que já conversou com o treinador Abel Ferreira, gostou da investida do Verdão, mesmo inicialmente tendo ficado incomodado por ter sido procurado diretamente por Cury. Por outro lado, avisou que, por consideração, espera ainda uma nova proposta de renovação do River Plate, com quem tem contrato até 30 de junho. Ao que tudo indica, os argentinos não vão chegar aos valores pretendidos pelos envolvidos no negócio.

Sem considerar por enquanto a contratação para março, o que implicaria no pagamento de uma compensação ao River, o Palmeiras já comunicou que vai manter vivo o contato com Santos Borré, com o objetivo de fechar um pré-contrato, a ter validade a partir do meio do ano.

Palmeiras