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

Esse conteúdo é antigo

PRF diz que protestos bolsonaristas em SC parecem ações de black blocs

Fogo em bloqueio golpista em Santa Catarina contestando a eleição - Divulgação/PRF
Fogo em bloqueio golpista em Santa Catarina contestando a eleição Imagem: Divulgação/PRF

Do UOL, em São Paulo

21/11/2022 12h48Atualizada em 21/11/2022 13h18

A PRF (Polícia Rodoviária Federal) afirmou hoje em nota que o método usado por manifestantes favoráveis ao presidente Jair Bolsonaro (PL) para bloquear estradas em Santa Catarina lembra ações de terroristas ou de black blocs.

"Os métodos utilizados lembraram os de terroristas ou de black blocks (sic): bombas caseiras feitas de garrafas com gasolina, rojões, óleo derramado intencionalmente na pista, 'miguelitos' (pregos usados para furar pneus), pedras, além de barricadas com pneus queimados, latões de lixo, e troncos de árvores cortados e jogados deliberadamente na pista", listou a corporação em nota.

A PRF disse ainda que houve cerca de 30 bloqueios entre a última sexta-feira e a madrugada de hoje no estado, e que a maioria delas foi "criminosa e violenta".

"A maioria das paralisações deste final de semana teve caráter diferente das realizadas logo após as eleições. Na maior parte dos casos, tratava-se de ocorrências criminosas e violentas, promovidas no período noturno por baderneiros, homens encapuzados extremamente violentos e coordenados", diz o comunicado.

Um homem de 37 anos, identificado como líder de um dos grupos, foi preso na madrugada de sábado em ville, suspeito de associação criminosa, prejuízo ao transporte público, deterioração de patrimônio alheio e desobediência à ordem legal de um funcionário público. Ele não teve direito à fiança e segue no presídio regional de ville, segundo a PRF.

"Embora várias pessoas estivem com o rosto encoberto para não serem identificados, pessoas com atuação de liderança no movimento foram identificadas e novas prisões podem ocorrer nos próximos dias", disse a polícia em nota.

Ataque à concessionária no MT

No sábado (19), homens armados atacaram a base da concessionária que istra a BR-163 entre Nova Mutum e Lucas do Rio Verde, em Mato Grosso. O local foi alvejado por tiros e coquetéis molotov, em meio a um bloqueio de manifestantes favoráveis a Jair Bolsonaro.

Atos semelhantes acontecem no país desde 30 de outubro, quando Luiz Inácio Lula da Silva (PT) derrotou Bolsonaro no segundo turno das eleições. Os manifestantes contestam o resultado das urnas e pedem intervenção militar.