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

Nada de Ganso: Mario culpa gesto para a torcida por saída de Oswaldo do Flu

Mario Bittencourt em coletiva de imprensa no CT Carlos Castilho - Caio Blois/UOL Esporte
Mario Bittencourt em coletiva de imprensa no CT Carlos Castilho Imagem: Caio Blois/UOL Esporte

Caio Blois

Do UOL, no Rio de Janeiro

04/10/2019 14h30

Em coletiva de imprensa no CT Carlos Castilho, o presidente Mario Bittencourt refutou mais uma vez a tese de que a briga com Paulo Henrique Ganso foi decisiva para a demissão do técnico Oswaldo de Oliveira. De acordo com o mandatário do Fluminense, o gesto feito pelo treinador em direção à torcida após o empate com o Santos foi o estopim para tornar "insustentável" a manutenção dele no comando da equipe.

"O Oswaldo não saiu por conta do problema com o Ganso. Ele teve uma atitude intempestiva na saída de campo após uma animosidade enorme que já existia e isso só tornou a situação mais insustentável. A reação ofensiva à torcida que torna isso. A torcida é a razão de existirmos. Nós devemos ar os momentos de dificuldade sem atingir os torcedores. Quando aconteceu, aquilo se tornou insustentável", declarou.

O presidente também negou que a decisão, bem como a demissão de Fernando Diniz, tenha sido precipitada. Para ele, era o momento de decidir, e por isso, confirmou a manutenção de Marcão.

"Não existe dentro do futebol reações precipitadas, porque trabalhamos todos os dias, às vezes mais de 16 ou 17 horas. Acontecem decisões que dão certo ou não dão certo ao longo do tempo. Isso vale para qualquer ramo de atividade também. Um bom gestor toma muitas decisões, porque pior do que tomar decisões equivocadas é não tomar decisões", disse.

Mario também revelou as consultas a treinadores à época da contratação de Oswaldo. Restaram infrutíferas as tentativas de contratar Dorival Júnior, que se recupera de um problema de saúde, e Abel Braga, que apesar da negativa ao Tricolor, acabou aceitando proposta para dirigir o Cruzeiro.

"Não houve precipitação, nós discutimos amplamente e é fato público que tivemos opções anteriores. Nós procuramos o Dorival, que nos disse que estava com uma proposta. Depois, ele me ligou isoladamente, e disse que tinha o problema de saúde que só tornou público agora. Tentamos também o Abel, que não quis pegar um trabalho na época. E aí optamos pelo Oswaldo. Ele saiu por critérios técnicos e também porque a relação com a torcida se tornou insustentável. A partir do momento que se cria essa situação, quando não há o entendimento e não reagir da melhor maneira com o torcedor".

Fluminense