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

Botafogo

Botafogo quer Barroca em 2020 para repetir fórmula com Cuca no clube

Eduardo Barroca segue com moral com a diretoria, que tem planos para o treinador em 2020 - Vítor Silva/Botafogo
Eduardo Barroca segue com moral com a diretoria, que tem planos para o treinador em 2020 Imagem: Vítor Silva/Botafogo

Bernardo Gentile

Do UOL, no Rio de Janeiro

24/09/2019 04h00

O técnico Eduardo Barroca assumiu o Botafogo e logo deu boa resposta. Mesmo com elenco limitado, conseguiu manter o time no meio de tabela e ainda com possibilidades de brigar por uma vaga na Libertadores. Apesar de alguns tropeços, o treinador segue com muita moral no clube. Tanto que seu nome é praticamente certo para seguir no Alvinegro em 2020.

Além da identificação com o Botafogo, Barroca tem alguns trunfos a seu favor. A diretoria entende que sua visão de futebol é semelhante àquela valorizada historicamente dentro clube e que ele merece a possibilidade de iniciar uma temporada à frente do time. Nesse caso, o técnico poderia contribuir diretamente com a formação de um novo elenco.

A fórmula seria a mesma utilizada pelo Botafogo uma década atrás com Cuca, que esperou um ano para poder montar um elenco com suas características preferidas. Seu trabalho teve grande repercussão em 2007. Ainda hoje, o bom desempenho no Brasileiro e na Copa do Brasil, na qual caíram na semifinal, além do vice no Carioca, são motivo de orgulho para vários torcedores.

Isso basta para dizer que Cuca marcou época no Botafogo e ainda é parâmetro para outros treinadores. Barroca tem a oportunidade de fazer o Alvinegro novamente jogar um futebol envolvente. O objetivo era que isso ocorresse já em 2019, mas o time perdeu peças importantes e não conseguiu repor no mercado devido à crise financeira que enfrenta.

Ainda assim, o trabalho do treinador é considerado muito positivo no geral. Para seus iradores mais entusiasmados, num momento em que o clube tenta virar empresa, buscando uma gestão mais eficiente e de mais recursos, a expectativa é que o Botafogo possa montar elenco mais qualificado. Nesse cenário hipotético, Barroca ainda é visto como a pessoa certa para comandar o processo.

Botafogo