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

Justiça manda WhatsApp bloquear vídeo de Russomanno contra Boulos

11 nov. 2020 - Candidatos à prefeitura de São Paulo Celso Russomanno (Republicanos) e Guilherme Boulos (PSOL) durante debate promovido pelo UOL e Folha de S. Paulo - Mariana Pekin/UOL
11 nov. 2020 - Candidatos à prefeitura de São Paulo Celso Russomanno (Republicanos) e Guilherme Boulos (PSOL) durante debate promovido pelo UOL e Folha de S. Paulo Imagem: Mariana Pekin/UOL

Afonso Ferreira

Do UOL, em São Paulo

15/11/2020 13h16

A Justiça eleitoral ordenou que o WhatsApp bloqueie o compartilhamento de um vídeo utilizado pela campanha de Celso Russomanno (Republicanos) contra o adversário na disputa pela Prefeitura de São Paulo Guilherme Boulos (PSOL).

A decisão, emitida hoje pelo juiz eleitoral Emílio Migliano Neto, atende pedido feito pela defesa de Boulos, que acusa Russomanno de propagar fake news contra o pesolista. A defesa de Russomanno negou as acusações.

O vídeo em questão, veiculado nas redes sociais de Russomanno, utiliza trechos de outros dois vídeos produzidos pelo blogueiro bolsonarista Oswaldo Eustáquio, que acusam Boulos de utilizar empresas fantasmas para lavar dinheiro na corrida eleitoral em São Paulo.

Russomano também mencionou o vídeo de Eustáquio durante debate do UOL e da Folha de S.Paulo, que foi retirado do ar a pedido da Justiça Eleitoral, com os candidatos à Prefeitura de São Paulo.

Em outra decisão, a Justiça Eleitoral também mandou o YouTube suspender a conta de Eustáquio. O blogueiro é um dos principais acusados no inquérito das fake news que tramita no STF (Supremo Tribunal Federal).

A defesa de Boulos cita na ação que o vídeo tem sido tem sido compartilhado "massivamente" pelo WhatsApp nos últimos dias antes da eleição. Por isso, sua disseminação deveria ser interrompida.

"[O vídeo] é integralmente dedicado à propagação de mentiras sobre o representante [Boulos] (...), e foi publicado estrategicamente, justamente no momento em que Guilherme Boulos participava de debate eleitoral pela Folha/UOL; e
simultaneamente, no instante em que o também candidato à Prefeitura, Celso Russomanno, mencionou o fato, que não foi noticiado por nenhum veículo de mídia profissional", diz a defesa do pesolista na ação.

Defesa de Russomanno nega envio massivo

Procurada pelo UOL, a defesa de Russomano disse que ainda não foi notificada da decisão e negou o envio massivo do vídeo pelo WhatsApp.

"Não fizemos divulgação massiva por WhatsApp, e o Boulos terá de explicar porque duas empresas dele declararam endereços possivelmente falsos perante à Justiça Eleitoral e à Jucesp (Junta Comercial do Estado de São Paulo)", disse o advogado Arthur Rollo.