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

Grêmio vence jogo de bastidores contra Fla e agora quer "revanche" em campo

Pedro H. Tesch/AGIF
Imagem: Pedro H. Tesch/AGIF

Jeremias Wernek

Do UOL, em Porto Alegre

16/09/2021 04h00

O Grêmio perdeu as duas partidas contra o Flamengo, o time rubro-negro está na semifinal da Copa do Brasil e chega lá com placar agregado muito favorável. Mas o clube gaúcho volta do Rio de Janeiro com uma vitória que considera mais importante, diante do duelo já decidido desde agosto: o efeito suspensivo para a liminar que permitia ao Fla atuar com torcida no Maracanã. Na prática, o time gremista pode buscar revanche no Brasileirão. Naquele que é considerado, há dias, um jogo-chave para a equipe de Felipão.

Flamengo e Grêmio se enfrentam no domingo (19), às 20h30 (de Brasília), de novo no Maracanã, pela 21ª rodada do Campeonato Brasileiro. Com 19 pontos, o time gaúcho tem chance matemática de sair pela primeira vez da zona de rebaixamento.

O Grêmio viajou ao Rio de Janeiro para atuar contra o Fla, dentro e fora de campo. No gramado do Maracanã, Felipão escalou time com apenas quatro titulares desde o início. Uma estratégia para preservar a equipe de olho no Campeonato Brasileiro.

Fora do estádio, a diretoria fez visita à sede da CBF e ganhou apoio de peso na busca por efeito suspensivo da liminar do Flamengo, em nova petição coletiva. Em determinado momento da quarta-feira (15), o Grêmio chegou a alimentar expectativa de obter resposta do STJD (Superior Tribunal de Justiça Desportiva) antes mesmo do jogo de volta das quartas de final da Copa do Brasil. Não deu.

A diretoria gremista, ainda assim, assistiu ao duelo confiante de que o Tribunal acolheria o novo pedido dos clubes contra a liminar do Flamengo. Sob pena de a articulação para adiar a 21ª rodada do Campeonato Brasileiro sair do papel, com apoio da CBF.

Do fato para a simbologia, o efeito suspensivo reforça o discurso do Grêmio de que a partida de domingo (19) será diferente. Luiz Felipe Scolari e a diretoria trabalham com a ideia de uma partida distinta contra o Flamengo. A meta interna é apresentar desempenho semelhante ao do primeiro tempo do jogo de ida da Copa do Brasil, em Porto Alegre, mas com regularidade depois do intervalo. Na etapa final, mesmo com um jogador a mais por quase todo tempo, o time de Felipão levou 4 a 0 e viu a classificação sumir.

O Grêmio viaja de volta ao Rio de Janeiro no sábado (18). No dia seguinte, no Maracanã sem torcida, o clube busca revanche diante do Flamengo dentro de campo. A vitória atual ainda é só extracampo.