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

Marcel Rizzo

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Flamengo e Palmeiras correm risco de punição se torcida brigar no Uruguai

Palmeiras x Flamengo: fotos de satélite do estádio Centenário, em Montevidéu - Reprodução
Palmeiras x Flamengo: fotos de satélite do estádio Centenário, em Montevidéu Imagem: Reprodução

Colunista do UOL

12/10/2021 04h00

Se houver confrontos entre torcedores do Flamengo e do Palmeiras antes, durante ou depois da final da Libertadores, que será em Montevidéu, os clubes correm risco de serem punidos pela Comissão de Disciplina da Conmebol, apesar de a segurança da partida de 27 de novembro ser de responsabilidade da confederação.

Como revelou o jornalista Mauro Cezar Pereira em sua coluna no UOL Esporte, o histórico de rivalidade entre torcidas organizadas dos dois times e mensagens mostram que há o risco de brigas, no trajeto dos ônibus do Rio e de São Paulo até a capital do Uruguai, mas também na cidade e imediações do estádio Centenário. Há também receio da polícia uruguaia de confusões com torcedores locais, principalmente do Peñarol por recentes conflitos.

As polícias do Brasil e do Uruguai estão em contato para tentar acompanhar o trajeto dos ônibus e a chegada das torcidas em Montevidéu. A direção da Conmebol também está preocupada, e não só com as organizadas — avalia que pode haver tumultos causados também por torcedores comuns. Por isso os clubes já foram orientados para que criem campanhas contra violência e informem seus fãs que confusões podem prejudicar as equipes em competições futuras da Conmebol.

Segundo o artigo 9 do Código de Disciplina da Conmebol, "as associações membros e os clubes são responsáveis pelo comportamento de seus jogadores, oficiais, membros, público presente, torcedores, assim como qualquer outra pessoa que exerça ou possa exercer algo em seu nome". Mesmo se a confusão ocorrer no deslocamento entre as torcidas, a quilômetros de Montevidéu, o artigo 9 poderia ser aplicado porque entraria no quesito de que a viagem se encaixa como parte da organização da partida.

A punição é variável e depende da gravidade do ocorrido. Uma multa, por exemplo, vai de US$ 100 a US$ 400 mil e as punições esportivas podem ir desde jogar com portões fechados um número determinado de partidas até a proibição de disputar uma competição futura — normalmente punições por briga de torcedores resultam em portões fechados e multa.

A segurança de um jogo da Libertadores é de responsabilidade do clube mandante, com exceção da final, que a a ser da Conmebol — como a contratação de seguranças e policiamento para partida e treinamentos, profissionais para a escolta das delegações, etc. Mas isso não tira a responsabilidade do clube com seus torcedores, mesmo quando são visitantes.

Em 2013, um sinalizador disparado por um corintiano dentro do estádio em Oruro, na Bolívia, matou um garoto de 14 anos, Kevin Spada. O Corinthians foi punido com 18 meses sem seus torcedores em jogos como visitante e uma multa de US$ 200 mil.