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

Milícias de Gaza voltam a lançar projéteis, e Israel responde com bombardeios

31.mar.2019 - Parentes do adolescente Bilal al-Najjar, 17, choram durante seu funeral em Khan Yunis, no sul da Faixa de Gaza. Ele está entre as quatro pessoas mortas ontem por disparos israelenses, segundo autoridades palestina  - Mahmud Hams/AFP
31.mar.2019 - Parentes do adolescente Bilal al-Najjar, 17, choram durante seu funeral em Khan Yunis, no sul da Faixa de Gaza. Ele está entre as quatro pessoas mortas ontem por disparos israelenses, segundo autoridades palestina Imagem: Mahmud Hams/AFP

31/03/2019 03h14

As milícias palestinas de Gaza lançaram pelo menos cinco projéteis contra o território de Israel na madrugada de hoje, sem deixar vítimas até o momento, enquanto o exército israelense respondeu com bombardeios sobre alvos militares.

Os projéteis lançados da Faixa, controlada pelo movimento islamita Hamas e sob bloqueio israelense desde 2007, acionaram as sirenes antiaéreas no Conselho Regional de Eshkol, obrigando a população a correr aos refúgios.

"Cinco lançamentos foram identificados da Faixa de Gaza rumo a território israelense", informou o exército, que não detalhou se eram foguetes, bombas ou outro tipo de disparos.

Por volta das 3h30 (horário local, 21h30 de sábado em Brasília), os militares explicaram em comunicado que, "em resposta" aos projéteis, "tanques das Forças de Defesa de Israel atacaram um número de postos militares do Hamas" no enclave.

Ontem aconteceu uma mobilização em massa na Faixa para comemorar o primeiro aniversário da denominada Grande Marcha do Retorno, que se iniciou há um ano com eatas de protesto contra o bloqueio e exigindo o regresso dos refugiados aos seus lares.

Em paralelo às marchas, também ocorreram neste último ano dezenas de incidentes violentos contra a cerca de separação, lançamentos de centenas balões e bombas que provocaram incêndios em Israel e oito ondas de violência com projéteis e bombardeios de resposta, a última esta semana.

Neste período morreram 275 palestinos, 198 deles nas manifestações e o restante em outros incidentes violentos, e dois soldados israelenses.