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

Danilo Lavieri

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Flamengo repete script egoísta ao ir à Justiça por público no Brasileiro

Rodolfo Landim (foto), presidente do Flamengo, teve atitude mesquinha - Marcelo Cortes/Flamengo
Rodolfo Landim (foto), presidente do Flamengo, teve atitude mesquinha Imagem: Marcelo Cortes/Flamengo

Colunista do UOL

04/08/2021 21h06Atualizada em 04/08/2021 21h29

Receba os novos posts desta coluna no seu e-mail

Email inválido

O Flamengo teve atitude egoísta ao entrar com uma liminar para que suas partidas no Brasileirão voltem a ter público. Como já mostrou agora há pouco a CBF, a atitude da equipe carioca quebra um acordo feito por todos os times no início da competição, quando o combinado era que as arquibancadas só voltariam a ter a presença de torcedores quando todos os participantes tivessem a mesma condição.

O objetivo é claro: manter a igualdade para que nenhuma equipe consiga o apoio de público antes do outro. Mesmo que as cidades tenham autonomia em questões sanitárias, é a CBF que determina regras de suas competições. O ponto central da discussão não é se estamos preparados ou não para ter torcida novamente nos estádios, mas a quebra de um pacto entre os times.

Assusta o Flamengo tomar tal atitude justamente no momento em que os clubes tentam se unir para tomar o controle da competição com a criação de uma nova liga. Alguns dos rivais já demonstraram reação contrária à atuação dos cariocas. O ge.com diz que o Atlético-MG pode seguir o mesmo caminho, mas isso ainda não foi oficializado.

Não houve, por exemplo, esse tipo de acordo entre os participantes da Libertadores. Até por isso, cada clube atua como quer na competição sul-americana após o aval da Conmebol. Os flamenguistas foram para Brasília. Os atleticanos entraram em acordo com a prefeitura de Belo Horizonte e por aí vai.

A atitude é parecida com a que teve o rubro-negro no ano ado, quando o clube recorreu à Justiça para que a partida contra o Palmeiras no ano ado fosse adiada. Na ocasião, o Flamengo alegou que não tinha condições de entrar em campo por conta do surto de covid-19 e tentou cancelar a partida.

A discussão desse caso acima não tem como objetivo colocar em pauta se a bola devia ou não rolar durante a pandemia. O ponto é que os flamenguistas haviam concordado com os outros 19 participantes e com a CBF as condições do protocolo para que o Brasileirão voltasse. Havia uma explicação clara sobre quais circunstâncias cancelariam uma partida. E aquele não era o caso.

O portão fechado é um problema para todas as equipes e afeta o bolso de absolutamente todos os times do país. Por que só o Flamengo acha que merece ter uma condição melhor na Série A? Caso o Cruzeiro repita a atitude e tente ser o único com público na Série B, a crítica pode ser estendida ao time mineiro.