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

Black blocs rasgam bandeira verde e amarela em ato na Paulista

Herculano Barreto Filho e Nathan Lopes

Do UOL, em São Paulo

02/10/2021 18h02Atualizada em 02/10/2021 19h06

Um grupo de black blocs rasgou uma bandeira verde e amarela de cerca de 100 metros no asfalto da avenida Paulista, próximo à rua Augusta, em meio ao ato de hoje (2) à tarde contra o presidente Jair Bolsonaro (sem partido).

Com rostos cobertos por toucas-ninja e guarda-chuvas para impedir que fossem identificados, cerca de 30 manifestantes danificaram o objeto. A ação foi registrada pelo UOL.

A bandeira pertencia ao movimento Juventude Pátria Livre, ligado ao PCdoB.

Black Bloc - Herculano Barreto Filho/UOL - Herculano Barreto Filho/UOL
Black blocs rasgaram bandeira em ato na Paulista
Imagem: Herculano Barreto Filho/UOL

"Esse grupo vem justamente para vandalizar símbolos identificados com o Brasil em todos os atos. Também estamos aqui para protestar contra o Bolsonaro", disse Keila Pereira, secretária de comunicação do movimento.

Lucca Gidra, diretor de cultura da UMES (União Municipal dos Estudantes Secundaristas), conta que os black blocs atacaram a bandeira no momento em que os movimentos estudantis estavam discursando no caminhão de som. "Se aproveitar de um momento bem covarde em que não tinha ninguém nosso na bandeira. Foi um ato covarde, eles foram lá e rasgaram a bandeira."

Keila disse que os integrantes do movimento acabaram sendo surpreendidos pela ação. "Quando a gente chegou aqui, eles já estavam rasgando", contou.

Houve princípio de confusão. Após o ato de vandalismo, os black blocs discutiram com outros manifestantes. "Eles queriam bater nos meninos. Aí pedi para que se acalmassem. Rolou uma tensão", relatou Keila.

Após o episódio, o grupo de black blocs seguiu em direção ao Masp, onde ocorrem os discursos, em meio a gritos de ordem.

Gidra diz que o sentimento é de "indignação por eles não entenderem que a bandeira do Brasil é nossa". "E segundo pelo ato violento. A Paulista é um ambiente democrático e a pauta era o 'fora, Bolsonaro'. Muitas vezes, quem tem esse tipo de atitude são os próprios bolsonaristas."

O representante da UMES lembra que, para evitar problemas gerados por black blocs, os atos já deixaram de caminhar e aram a ser parados. "Isso é um problema porque, quando eles fazem isso, acabam não ajudando a população a ir para o ato. A população fica com medo por atitudes dessa minoria."