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

Douglas Costa: nos planos do São Paulo e com ofertas da MLS e Qatar

MARCELO OLIVEIRA/FUTURA PRESS/FUTURA PRESS/ESTADÃO CONTEÚDO
Imagem: MARCELO OLIVEIRA/FUTURA PRESS/FUTURA PRESS/ESTADÃO CONTEÚDO

Jeremias Wernek

Do UOL, em Porto Alegre

20/12/2021 04h00

O futuro de Douglas Costa deve ficar um pouco mais claro a partir de hoje (20), quando representantes do jogador deverão conversar com o Grêmio sobre os próximos os. Maior salário do elenco gremista que foi rebaixado, o meia-atacante tem saída tratada como iminente em Porto Alegre. O São Paulo tem interesse, mas não é o único. A concorrência é forte e já mexeu com a cabeça do ex-jogador de Bayern de Munique e Juventus.

O UOL Esporte mostrou que um clube do Qatar tem interesse em Douglas Costa. Com oferta milionária para contrato de três anos. Assim como um time da MLS (Major League Soccer), dos Estados Unidos. A proposta americana é menor, mas ainda assim atraente.

No Qatar, Douglas Costa tem à disposição um vínculo com salário alto. Podendo, até mesmo, superar os vencimentos recentes na Europa. Em maio, o jogador rescindiu com o Bayern, voltou à Juventus e foi emprestado ao Grêmio.

Nos Estados Unidos, o clube indicou vaga de jogador especial (critério do regulamento da liga que permite o maior salário do time sob argumento de ser um atleta de renome mundial e com valor agregado para a competição). Além das benesses do padrão de vida local.

No Brasil, o São Paulo se movimentou e apresentou interesse real a Douglas Costa. A ideia no Morumbi é procurar um parceiro econômico para viabilizar o pagamento do salário do meia-atacante, que em Porto Alegre pode receber até R$ 1,5 milhão por mês, em caso de participação em número de jogos do time.

Os dirigentes do Grêmio entendem que a saída de Douglas Costa é inevitável pelo custo e pelo clima entre jogador e clube, na reta final do Brasileirão de 2021. O camisa 10 pediu liberação para festa de casamento, no Rio de Janeiro, às vésperas do jogo contra o Atlético-MG, pela última rodada. Não recebeu autorização. E na partida em si, polemizou ao protagonizar comemoração sem empolgação e com direito a aceno aos torcedores.

Douglas Costa deixou Porto Alegre, logo depois do fim da temporada, e ou pelo Rio de Janeiro. Agora, ele está nas Maldivas. O jogador ainda não se manifestou sobre o rebaixamento do Grêmio.