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

'Foi um herói e evitou tragédia maior', diz filho de petista assassinado

Marcelo Arruda com o filho Leonardo, na festa de aniversário em que foi assassinado - Arquivo pessoal
Marcelo Arruda com o filho Leonardo, na festa de aniversário em que foi assassinado Imagem: Arquivo pessoal

Lorena Pelanda

Colaboração para o UOL, em Curitiba

10/07/2022 18h32

"Meu pai foi um herói e evitou uma tragédia ainda maior". O relato é de Leonardo Miranda de Arruda, 26, um dos quatro filhos do líder sindical e guarda municipal Marcelo Arruda, assassinado enquanto comemorava seu aniversário na noite de sábado (9), em Foz do Iguaçu (PR).

Arruda foi morto pelo agente penitenciário Jorge José da Rocha Guaranho, que invadiu a festa gritando "aqui é Bolsonaro". Deixa mulher e os quatro filhos, um deles ainda bebê. Filiado ao PT, foi candidato a vice-prefeito de Foz do Iguaçu pelo partido em 2020.

O filho Leonardo era um dos cerca de quarenta participantes da festa, uma comemoração temática do PT, com bandeiras e cores do partido e foto do ex-presidente e pré-candidato à Presidência Luiz Inácio Lula da Silva.

"O rapaz [Guaranho] chegou falando que ia matar todo mundo. Ele achava que todo mundo era do Partido dos Trabalhadores, mas não, todos estavam ali por causa do aniversariante, não por causa da política", diz Leonardo em entrevista para o UOL.

Depois de ser atingido, Arruda disparou contra Guaranho, que seguia armado —de acordo com o boletim de ocorrência, a arma dele ainda tinha onze munições intactas. Segundo Leonardo, o pai atirou com medo de mais pessoas serem atingidas. Guaranho está internado.

"Foi uma cena de terror, que vai ficar sempre na minha cabeça", fala Leonardo. "É muito triste você dar uma festa e acabar morrendo. Tudo por causa de um discurso de ódio. Esse rapaz apareceu na festa do nada. Ninguém conhecia ele e muito menos foi convidado".

"Meu pai sempre discutiu sobre política, mas nada com violência. Tinha apenas discussões nas redes sociais. Ele nunca teve medo de política", diz o filho da vítima.

"Ele estava comemorando com uma festa temática porque gostava [do PT e do Lula]. Qualquer um tem direito de ter sua opinião política, desde que não invada o espaço do outro, assim como escolher um time de futebol", desabafa o filho.

"Temos que acabar com esse discurso de ódio", defende.

"Meu pai sempre fez uma política justa. Lutava muito pela classe dos trabalhadores. Ele sempre batia de frente com o sistema para alcançar os direitos dos trabalhadores de Foz do Iguaçu", lembra o filho.