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

Palmeiras

Como agiu rede informal que flagrou Lucas Lima e Patrick do Palmeiras

Patrick de Paula posta vídeo se desculpando nas redes sociais - Instagram
Patrick de Paula posta vídeo se desculpando nas redes sociais Imagem: Instagram

Diego Iwata Lima

De São Paulo

22/06/2021 04h00

Não existia um grupo específico de mensagens com planos para flagrar Lucas Lima e Patrick de Paula, do Palmeiras. Ambos foram abordados furando protocolos do Plano SP de prevenção à covid-19 em eventos clandestinos. O meia foi flagrado à 1h de sexta-feira. Patrick, na noite de domingo. O clube anunciou que vai multá-los e afastá-los do elenco por tempo indeterminado.

"Não existe grupo organizado", afirmou ao UOL André Guerra, presidente da Mancha Alviverde.

Convidados presentes ao evento fechado em que Lucas Lima se encontrava, na Vila Olímpia, na sexta-feira (18), mandaram mensagens para conhecidos. Os vídeos viralizaram no WhatsApp, foram postados em perfis nas redes sociais, e só então torcedores das redondezas ligados à organizada se mobilizaram para se dirigirem até lá.

No domingo, o que aconteceu foi parecido. A informação de que Patrick estava em uma casa noturna no Tatuapé, zona leste da cidade, veio de pessoas que estavam no evento. As mensagens foram enviadas e, por volta das 23h, segundo os torcedores relatam, Patrick foi abordado.

Patrick atacou em público, mas pediu desculpas à torcida

Em vídeo publicado na noite desta segunda-feira (21) em redes sociais, Patrick, de cabelos novamente pintados de preto e sem brincos, comentou o assunto. Afirmou que estava em um restaurante com a namorada e amigos, do qual tentou sair antes das 22h, e não conseguiu, por conta da fila no caixa.

O relato difere um pouco do que foi publicado por sua assessoria de imprensa mais cedo na segunda. Na versão dos assessores, ele estava no local com familiares.

No vídeo, Patrick também repudia a violência com que foi abordado. No comunicado no Instagram, ele pede desculpas "ao verdadeiro torcedor palmeirense". O UOL apurou que o jogador mandou mensagem pedindo desculpas à Mancha Alviverde por meio do Instagram, conforme fizera no domingo, após o incidente com o brinco durante o jogo contra o América-MG.

Palmeiras