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

Chico Alves

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Policiais Antifascismo criticam Bolsonaro por assassinato de petista no PR

Marcelo Arruda - Reprodução
Marcelo Arruda Imagem: Reprodução

Colunista do UOL

14/07/2022 13h16

O Movimento Policiais Antifascismo emitiu nota sobre o assassinato do guarda municipal e militante petista Marcelo Arruda, em Foz do Iguaçu, no Paraná. Ele foi morto no sábado (9) pelo agente penal bolsonarista Jorge José Guaranho na festa que comemorava seu aniversário, toda decorada com símbolos do PT.

O texto qualifica o assassinato como crime político e se refere a Guaranho como trabalhador "que foi recrutado pelo fascismo bolsonarista". "Desejamos que o policial penal agressor seja julgado dentro do devido processo legal, e não com vingança privada. Puxou o gatilho intoxicado por frases como: 'vamos fuzilar a petralhada', 'a ditadura matou pouco'", diz a nota.

Os Policiais Antifascismo comentam que, apesar de ser tratado como herói, por ter resistido e conseguido conter o agressor que poderia realizar uma tragédia ainda maior, "é vital deixar claro que quem foi assassinado foi um trabalhador policial". Também reconhecem a bravura da policial civil Pâmela Silva, mulher de Marcelo, na defesa de seu companheiro e dos outros convidados da festa de aniversário.

O texto afirma que "o governo Bolsonaro manipula policiais, instrumentaliza nossas corporações e não nos reconhece enquanto trabalhadores". Segue dizendo que "o presidente interveio na autonomia da Polícia Federal, aboliu a histórica formação humanizada e atuação cidadã da Polícia Rodoviária Federal, realizou uma reforma da previdência que retirou direitos - inclusive reduzindo pensão das viúvas de policiais que morreram em serviço, não concedeu qualquer reposição econômica das perdas inflacionárias para as carreiras federais, não estabeleceu qualquer política de enfrentamento à depressão e ao suicídio, tão presentes nas carreiras policiais".

O grupo também critica as iniciativas armamentistas de Bolsonaro. "O atual presidente arma a população colocando em risco a segurança de todos, inclusive a dos policiais", diz a nota. "A democracia deveria ser marcada pelo esforço da mediação de conflitos por meio do debate e não pela fraqueza das armas. O atual presidente e seu grupo de seguidores, reunidos no chamado bolsonarismo, creem nas armas e na guerra como solução para questões sociais, esvaziando as políticas públicas e a transformação social capaz de enfrentar os problemas históricos estruturais que marcam nosso país".