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

Odair Hellmann aceita proposta dos Emirados Árabes e deixa o Fluminense

Odair Hellmann deixará o Fluminense rumo ao Al-Wasl, dos Emirados Árabes -  MAURICIO ALMEIDA/AM PRESS & IMAGES/ESTADÃO CONTEÚDO
Odair Hellmann deixará o Fluminense rumo ao Al-Wasl, dos Emirados Árabes Imagem: MAURICIO ALMEIDA/AM PRESS & IMAGES/ESTADÃO CONTEÚDO

Caio Blois

Do UOL, no Rio de Janeiro

07/12/2020 15h33

O Fluminense foi pego de surpresa na manhã desta segunda-feira (7) e terá que procurar um novo treinador. O técnico Odair Hellmann aceitou uma proposta do Al-Wasl, dos Emirados Árabes, e deixará o clube, atual quinto colocado do Campeonato Brasileiro.

A informação foi primeiro veiculada pelo "ge" e confirmada pelo UOL Esporte. Odair já comunicou seu aceite ao presidente Mário Bittencourt e ao diretor-executivo Paulo Angioni. A diretoria não conseguiu igualar os valores oferecidos pelos árabes. O auxiliar Maurício Dulac deixará o clube junto ao treinador.

Hellmann completou 50 jogos pelo Tricolor na vitória sobre o Athletico, no sábado, pela 24ª rodada do Brasileirão. Os 56% de aproveitamento no comando do Flu, que briga por uma vaga na Libertadores, chamaram a atenção no mercado da bola. Antes de aceitar a proposta árabe, ele já havia recusado três convites em 2020, tanto de clubes do Brasil como do exterior.

O técnico tinha contrato até o fim da temporada, mas com o calendário nacional modificado por conta da pandemia do novo coronavírus, deixará o clube ainda com alguns jogos a serem disputados no Campeonato Brasileiro. Antes, o Fluminense já fora eliminado da Copa Sul-Americana, na primeira fase, e na Copa do Brasil, na quarta fase, além do vice no Campeonato Carioca.

Em sua última entrevista coletiva, Odair reclamara publicamente de alguns setores pelas críticas ao seu trabalho. Internamente, era sabido que o técnico se incomodava em ser pouco valorizado por parte da torcida e opinião pública.

"Na rede social tudo pode, né?! As pessoas ficam escondidas atrás de um computador. E às vezes se dizendo torcedor do Fluminense, mas com certeza não são, porque só atrapalham. Atrapalha o ambiente só falar coisa negativa. Aí quando acontece a derrota, aquilo tudo se potencializa, o que não deveria acontecer. Não deveria nem ter voz esse tipo de situação. E dar ênfase ao verdadeiro torcedor. Não que o torcedor não tem direito de cobrar, de criticar, pelo contrário. Eu estou falando de uma parte bem específica, não estou falando do torcedor", disse.

No clube, entretanto, era muitíssimo bem avaliado tanto pelo elenco, por quem é muito benquisto, quanto pela diretoria. Mário Bittencourt já revelara para pessoas próximas que gostaria de renovar contrato com o treinador até o fim de seu mandato, em 2022, desejo compartilhado com Paulo Angioni.

Em novembro, o UOL Esporte revelou que o técnico ainda não havia sido procurado pela diretoria para tratar de sua renovação, o que aconteceria depois. A vontade pela extensão do vínculo era mútua, mas os valores oferecidos pelos árabes seduziram Odair, que buscará sua independência financeira em um contrato longo no Oriente Médio.

Nesta terça-feira, Odair Hellmann é esperado no CT Carlos Castilho para se despedir do elenco, que será comandado por Marcão até o fim da temporada, de acordo com nota oficial do Fluminense confirmando a saída do treinador.

Fluminense