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

'Bater no telhado': a técnica israelense para alertar civis antes de bombardear Gaza

Avião israelense perto de Sderot, no sul de Israel; em ofensiva contra túneis do Hamas - Jack Guez/AFP
Avião israelense perto de Sderot, no sul de Israel; em ofensiva contra túneis do Hamas Imagem: Jack Guez/AFP

Da AFP, em Jerusalém

20/05/2021 10h16Atualizada em 20/05/2021 10h43

Mensagem de texto, ligação ou tiro de advertência: o Exército israelense utiliza a controversa técnica "roof knocking" ("bater no telhado", em tradução livre) em alguns de seus bombardeios sobre Gaza para pedir aos civis que se retirem antes de um ataque iminente e, com isso, proteger-se de possíveis acusações.

No sábado à tarde, no enclave palestino bloqueado por Israel há quase 15 anos, Jawad Mehdi, proprietário de um prédio comercial que abriga os escritórios de veículos de imprensa internacionais, recebeu uma ligação de um oficial israelense.

Por telefone, o oficial pediu em árabe que o prédio fosse evacuado dentro de uma hora. O proprietário tentou negociar um prazo maior e a conversa se prolongou. O edifício de 13 andares, evacuado em pânico, foi pulverizado uma hora depois.

O Exército de Israel, que inventou o "roof knocking", nomeado "hakesh bagag" em hebraico desde 2009 e adotado em 2016 pelo Exército americano no Iraque, introduziu esta técnica de tiro de advertência — ampliada a ligações, mensagens ou até mesmo lançamento de panfletos — em sua comunicação de guerra.

No entanto, segundo as ONGs de defesa dos direitos humanos, a advertência não isenta as "forças atacantes" de sua responsabilidade em relação ao direito humanitário internacional.

Razões morais

"Enviamos um pequeno míssil vazio para atingir o telhado e avisar aos civis que precisam evacuar o prédio. Continuamos em observação para garantir que se retirem", explica à AFP um responsável da aviação militar israelense, que pediu anonimato. "Quando temos a maior certeza possível sobre a evacuação do prédio, disparamos", afirma.

Embora este funcionário encarregado do protocolo mencione "razões morais", que incitam o Exército a limitar os "danos colaterais sobre os civis", Israel também tem a intenção de se proteger de eventuais acusações.

A procuradora-geral do Tribunal Penal Internacional (TPI), Fatou Bensouda, abriu uma investigação por supostos crimes de guerra nos territórios palestinos, especialmente durante a guerra de Gaza de 2014.

A Promotoria militar israelense está incluída na elaboração de alguns desses protocolos de advertência.

Mohamad al-Hadidi se pergunta por que nunca recebeu essa ligação no sábado ado, quando sua esposa e quatro de seus cinco filhos morreram em um bombardeio israelense em um edifício do acampamento de Al-Shati, onde a família ava a noite.

"O que nós fizemos para merecer sermos bombardeados, sem nenhum alerta, sem que nos pedissem para nos retirarmos?", questiona.

O Exército não forneceu dados sobre o número de "roof knockings" desde 10 de maio, início da escalada militar com o Hamas, movimento no poder em Gaza.

"Promovemos mais de 1.000 ataques. Quando se trata de infraestruturas, podemos usar esta técnica, mas não quando se trata da eliminação de terroristas", afirma o responsável da aviação militar.

Para a Anistia Internacional, "emitir um alerta não absolve as forças atacantes de suas obrigações em virtude do direito internacional humanitário com os civis", destaca à AFP sua porta-voz para a região, Sara Hashash.