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

PM cerca pelo quinto dia zona do Rio com guerra de tráfico e milícia

31/07/2018 22h36

O Comando de Operações Especiais da Polícia Militar realiza, pelo quinto dia consecutivo, operação nas favelas do Rola e Antares, zona oeste do Rio, devido a guerra entre traficantes de drogas e milicianos que lutam pelo controle da região, a terceira mais populosa do município do Rio. A operação prossegue sem dia para terminar, até que a região esteja totalmente estabilizada, com os líderes do tráfico de drogas e milicianos presos. Devido aos confrontos diários, várias famílias retiraram tudo de dentro das casas e abandonaram os imóveis. Pelas redes sociais, outros diziam que não podiam sair de casa por medo do confronto, devido às armas de grosso calibre, como fuzis, utilizados pelos criminosos. O BRT que circula pela região ficou suspenso por várias hoje e só no começo da manhã começou a circular, mesmo assim com atraso. A PM cerca com blindados e viaturas a Avenida Santa Cruz, principal ligação entre os bairros de Campo Grande e Santa Cruz. Equipes do Batalhão de Santa Cruz com apoio do Batalhão de Ações com Cães, Batalhão de Polícia de Choque e Batalhão de Operações Policiais Especiais (Bope) estão atuando nas comunidades do Rola e Antares, com a finalidade de estabilizar a região e prender os envolvidos em uma disputa territorial entre quadrilhas de criminosos rivais e milicianos. De acordo com um balanço da PM, na noite de domingo (29), policiais do Choque, em deslocamento para Santa Cruz, apreenderam dois fuzis AK-47, munições e um automóvel usado por criminosos na Estrada do Campinho, em Campo Grande. As guarnições trafegavam pela via quando avistaram carros e motocicletas em atitude suspeita. Ao fazer a abordagem, criminosos atiraram e houve confronto. Na fuga, o grupo abandonou um carro onde foram encontras as armas e munições. Durante vasculhamento na comunidade do Antares, policiais prenderam um homem com um rádio transmissor e drogas. Equipes do Choque entraram em novo confronto com criminosos armados durante a noite de segunda-feira (30) e dois homens foram feridos, sendo socorridos para a Unidade de Pronto-Atendimento (UPA) da região. Com eles, foram apreendidos duas pistolas automáticas, um carregador, munição intacta, um carregador sem munição, 720 cápsulas de cocaína, 500 papelotes de crack, 25 papelotes de cocaína e 225 cartuchos de maconha. Na tarde de hoje (31), equipes do batalhão da PM de Santa Cruz foram acionadas para verificar a presença de dois corpos na região da Rua Jaú, na comunidade do Rola. Mais dois homens foram mortos em confronto e um foi preso, de acordo com a polícia. Houve apreensões em diversos pontos das comunidades, entre elas, um carro recuperado, dois fuzis apreendidos e dois carregadores para este tipo de arma, uma submetralhadora, além de duas pistolas automáticas.