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

Fluminense

Flu se resguarda, e contrato de Wellington será de produtividade em 1º ano

Reforço do Fluminense, Wellington terá um contrato de produtividade no primeiro ano - Miguel Locatelli/Athletico
Reforço do Fluminense, Wellington terá um contrato de produtividade no primeiro ano Imagem: Miguel Locatelli/Athletico

Caio Blois

Do UOL, no Rio de Janeiro

06/03/2021 04h00

Reforço para o elenco do Fluminense no mercado da bola, o volante Wellington terá um contrato de produtividade no clube. Por isso, seu vínculo registrado no Boletim Informativo Diário (BID) da Confederação Brasileira de Futebol (CBF) foi de apenas um ano, mas a renovação é "praticamente" automática para 2022.

As lesões que o jogador de 30 anos sofreu no início da carreira, além de um acerto financeiro, fizeram o Tricolor se resguardar e colocar metas no vínculo. Os exames médicos e os testes físicos, por outro lado, revelaram ótima forma, e Wellington terá até o cronograma adiantado.

Com propostas de Grêmio e Atlético-MG no mercado da bola, o volante optou por receber menos para ficar no Rio de Janeiro e jogar no clube das Laranjeiras, mas se alcançar tudo o que está estabelecido no contrato, terá uma valorização no segundo ano de vínculo.

O Flu imaginava que Wellington treinaria em separado para readquirir a forma por uma semana. Mas a fisiologia informou que o jogador está no mesmo nível dos outros atletas e já pode ser integrado ao grupo que treina com o novo técnico Roger Machado, que pediu sua contratação. Jogador e treinador conversaram antes do acerto.

As metas estipuladas no contrato estão longe de aparentarem dificuldade em serem alcançadas. O vínculo prevê uma renovação automática por mais um ano caso o volante seja relacionado em 60% dos jogos, o que aconteceu em todos as temporadas de sua carreira após a ruptura do ligamento cruzado do joelho esquerdo que sofreu no Internacional, em 2015 — o jogador também teve a mesma lesão no joelho em 2012, no São Paulo.

Desde então, o volante ou a cuidar ainda mais da saúde: treina por conta própria nas férias e nos recessos, se alimenta à risca e tem uma idade fisiológica abaixo da que possui. Em sua conta no Instagram, ele costuma compartilhar seus treinamentos, e não sofreu lesões no Athletico, seu último clube, onde conquistou a Copa Sul-Americana, em 2018, e a Copa do Brasil, em 2019.

Além da meta de jogos, outros pontos de produtividade estão estabelecidos no contrato, acertado junto à diretoria do Fluminense nesta semana. O jogador de 30 anos será apresentado no clube na semana que vem.

Fluminense