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

São Paulo diminui bancada da bala na Assembleia Legislativa para 2023

Deputados conversam durante sessão na Assembleia Legislativa de São Paulo - José Antonio Teixeira/Alesp
Deputados conversam durante sessão na Assembleia Legislativa de São Paulo Imagem: José Antonio Teixeira/Alesp

Do UOL, em Brasília

05/10/2022 04h00

A Alesp (Assembleia Legislativa de São Paulo) terá menos deputados estaduais vinculados às forças policiais na chamada bancada da bala nos próximos quatro anos.

Um levantamento do Instituto Sou da Paz aponta que, nas eleições do último domingo (2), o estado elegeu sete parlamentares da segurança pública: dois policiais civis, três policiais militares, um policial federal e um membro das Forças Armadas. Em 2018, foram eleitos 11 deputados estaduais para a bancada —nove eram policiais e dois eram militares.

Neste ano, dos sete deputados da bancada da bala, cinco são do Partido Liberal, ao qual o presidente da República, Jair Bolsonaro (PL), é filiado. São eles:

  • Major Mecca (PL) - 224.462 votos;
  • Tenente Coimbra (PL) - 209.705 votos;
  • Delegado Olim (PP) - 201.349 votos;
  • Capitão Conte Lopes (PL) - 192.454 votos;
  • Agente Federal Danilo Balas (PL) - 94.552 votos;
  • Capitão Telhada (PP) - 83.438 votos;
  • Delegada Graciela (PL) - 68.955 votos.

Foram os únicos sete eleitos de um universo de 114 candidatos à Alesp vinculados às forças de segurança neste ano, ainda de acordo com o Sou da Paz. Em 2018, foram 88 candidatos da área e, em 2014, 44 candidaturas.

Felippe Angeli, gerente de Advocacy do Instituto Sou da Paz, analisa que há investimento nas candidaturas militares, mas com pouco retorno eleitoral em pleitos estaduais.

"Temos uma tendência de investimento nas candidaturas, mas há um sucesso eleitoral na Câmara dos Deputados", afirma. "As assembleias têm pautas diferenciadas. Essas questões de costumes, armamentismo, direito penal, associadas a candidaturas dos policiais, encontram pouco eco, porque as assembleias não têm competência de votar esses assuntos. Mas, sim, as pautas corporativas", conclui.

As PMs, principalmente, têm tido cada vez mais participação política nas eleições. Neste ano, as candidaturas bateram recorde. Segundo os dados oficiais do TSE (Tribunal Superior Eleitoral), no Brasil, 822 candidatos se registraram como PMs para concorrer em outubro. A marca é 36,3% maior do que 2018, quando houve 603 nomes, e mais que o dobro de 20 anos atrás, quando 375 militares estaduais concorreram.

Em São Paulo, também houve recorde. Foram 80 policiais militares da ativa, entre praças e oficiais, que se candidataram para um cargo na Alesp ou na Câmara, conforme noticiou o jornal Folha de S.Paulo.