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

Vitor Guedes

OPINIÃO

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

Virada épica do Botafogo sobre o Inter e o lixo escandaloso do VAR

Savio Pereira Sampaio expulsa Philipe Sampaio, do Botafogo, na partira contra o Inter pelo Brasileirão - Pedro H. Tesch/AGIF
Savio Pereira Sampaio expulsa Philipe Sampaio, do Botafogo, na partira contra o Inter pelo Brasileirão Imagem: Pedro H. Tesch/AGIF

Colunista do UOL

19/06/2022 20h31Atualizada em 19/06/2022 20h31

Para quem não briga com fatos e com as imagens, é desnecessário dizer que o VAR é um lixo maldito e que toda semana desmoraliza a mentirosa tese de que ele chegou ao futebol para minimizar os erros.

Dizer que o apito brasileiro (lixo do VAR incluso) é ainda pior que a média mundial também é brindar o óbvio ululante, ainda que seja mentira que só aqui tenha aberrações cometidas pelo circo eletrônico. Na última final da aclamada arbitragem da Liga dos Campeões, o Real Madrid teve um gol legal surrupiado pelo circo do VAR e o caso só não foi mais debatido porque o Real foi campeão apesar da arbitragem.

Falemos de Inter 2 x 3 Botafogo, jogo que foi destruído pelo apito logo no início quando, com o "auxílio" bizarro e escandaloso do lixo do VAR (operado pelo fanfarrão Rafael Trasci), o soprador de apito Savio Pereira Sampaio expulsou Philipe Sampaio e inventou um pênalti para o Inter em lance que não foi absolutamente nada.

Com o presente dado, o Inter abriu o placar, com Edenilson cobrando o "pênalti" criado pelo lixo do VAR e confirmado pelo banana do juiz. E, jogando com um a mais, ampliou com Bustos.

O Botafogo, na raça, diminuiu com Vinicius Lopes e, no segundo tempo, de forma épica e improvável, virou com Erison e, na última bola, Hugo. Após o gol, legal, o pau comeu solto, cena lamentável que se repetiu após o apito final.

Pior do que a atuação do Inter, que, em casa, com a mais e com dois gols de frente, cedeu a virada, só a desastrosa atuação do apito. Savio Pereira Sampaio não pode apitar nem no Desafio ao Galo. E, na várzea, não tem palhaçada de VAR para atrapalhar quem já é ruim.

O Botafogo, que ganhou do Flamengo e do São Paulo em jogos em que foi ajudado pelo lixo do VAR (gol mal anulado de Gabigol, pênalti escandaloso ignorado em Calleri), virou para cima do Inter apesar de ser operado vergonhsamente pelo mesmo VAR. Com a subserviência e conivência do soprador de apito encarnado.

E diziam que o VAR vinha para auxiliar o apito e blá-bla-blá. Essa culpa e essa vergonha eu não carrego! Viva a memória!!