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

Podcast

Posse de Bola

Programa semanal de futebol com Juca Kfouri, Mauro Cezar Pereira, Arnaldo Ribeiro e Eduardo Tironi


OPINIÃO

Posse de Bola #228: Flamengo em crise, Botafogo em êxtase e acusação de racismo no Corinthians

Do UOL, em São Paulo

16/05/2022 10h54

A sexta rodada do Brasileirão não ajudou o Flamengo a espantar a crise e as críticas ao técnico Paulo Sousa, depois de um empate com o Ceará, mas também teve arbitragem polêmica na virada do São Paulo sobre o Cuiabá, a emoção de John Textor na vitória do Botafogo e um caso grave no empate entre Inter e Corinthians, com o lateral português Rafael Ramos chegando a ser detido após acusação de racismo.

No podcast Posse de Bola #228, os jornalistas Arnaldo Ribeiro, Eduardo Tironi, Juca Kfouri e Mauro Cezar Pereira analisam os principais fatos da rodada, além das vitórias de Atlético-MG e Palmeiras, o Cruzeiro líder da Série B e o Vasco vencendo em São Januário.

Arnaldo afirma que o clubismo acaba sendo maior do que as bandeiras sociais em meio a casos graves como a acusação de racismo contra Rafael Ramos e critica a falta de um posicionamento mais direto do Corinthians.

"O clube de futebol, o atleta, o treinador, eles representam milhões, são valores fundamentais que precisam ser defendidos a ferro e fogo, mas na verdade os diretores poucas vezes conseguem representar a história de cada clube. Acho que faltou ao Corinthians nas duas situações uma postura mais clara, mais definida e menos discreta do que vem sendo, mas eu também não espero grande coisa da cartolagem do Corinthians, assim como não espero das outras", diz Arnaldo.

"O Corinthians, acho que tem os seus motivos, muitas vezes coloca como um clube em que as causas sociais estão acima das causas esportivas e futebolísticas e na verdade isso na prática é uma grande balela", completa.

Já sobre a emoção de John Textor, que fez a festa com a torcida do Botafogo após a vitória sobre o Fortaleza, Juca Kfouri vê um pouco de exagero por parte do empresário ao dizer que na Premier League não há a demonstração de paixão pelo futebol como ele viu no estádio Nilton Santos, mas ressalta a forma como o Botafogo é resgatado a partir da SAF, com o americano à frente.

"Ele estava realmente eufórico, foi lá comemorar com a torcida, pegou a bandeira, foi linda aquela cena, ver a torcida do Botafogo naquele entusiasmo, foi tudo muito legal. Agora, obviamente ele cometeu um exagero porque talvez ele tenha razão na comparação com o amor do torcedor brasileiro com a maioria dos times da Premier League. Certamente, o Liverpool não está dentro deste rol", diz Juca.

"O que eu acho que é irável aí e digno de nota é ver esse ressurgimento do Botafogo. Eu que sou a favor da SAF, nunca disfarcei isso, não se trata de fazer apologia do capitalismo, mas apenas de reconhecer que dentro do sistema capitalista mil vezes você ter um empresário competente na gestão de um clube do que os cartolas brasileiros, que agem como se fossem donos do clube, deixam os clubes em situações pré-falimentares ou falimentares como nós vemos e não resolvem nada. Eu prefiro ter um John Textor", conclui.

Posse de Bola: Quando e onde ouvir?

A gravação do Posse de Bola está marcada para segundas e sextas-feiras às 9h, sempre com transmissão ao vivo pela home do UOL ou nos perfis do UOL Esporte nas redes sociais (YouTube, Facebook e Twitter).

A partir de meio-dia, o Posse de Bola estará disponível nos principais agregadores de podcasts. Você pode ouvir, por exemplo, no Spotify, Apple Podcasts, Google Podcasts, Amazon Music e Youtube --neste último, também em vídeo. Outros podcasts do UOL estão disponíveis em uol.com.br/podcasts.