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

Repórter do SBT na Ucrânia detalha estratégia de proteção: 'Não ser alvo'

O jornalista Sergio Utsch, do SBT, faz a cobertura da guerra entre a Ucrânia e a Rússia - Reprodução / SBT
O jornalista Sergio Utsch, do SBT, faz a cobertura da guerra entre a Ucrânia e a Rússia Imagem: Reprodução / SBT

Colaboração para Splash, em Maceió

01/03/2022 11h07

O repórter do SBT, Sérgio Utsch, que tem feito a cobertura da guerra travada entre a Rússia e a Ucrânia, detalhou uma estratégia de proteção orientada pelas autoridades ucranianas, como forma de minimizar as chances de se tornar alvo das tropas russas que invadiram o país europeu na semana ada.

Por meio de seu perfil no Twitter, Utsch contou que a orientação é manter as luzes dos cômodos posicionados de frente para as ruas apagadas, a fim de não chamar a atenção dos invasores.

"Um dos procedimentos de segurança adotados em Kiev é apagar as luzes dos cômodos posicionados para a rua. É uma precaução para não chamar a atenção e não virar alvo", publicou.

No Twitter, o repórter também tem relatado alguns destaques da guerra, como o fato de ter começado a nevar em Kiev, o que pode ser vantajoso para as forças de Moscou, que são melhores "equipadas" para operar nesse contexto climático.

Repórter deixa Kiev

Hoje, Sérgio Utsch anunciou nas redes sociais que, em meio as tensões de uma provável tomada de Kiev pelas tropas da Rússia, ele e milhares de pessoas estão deixando a capital ucraniana, mas têm enfrentado grandes congestionamentos.

"Estamos a 100 quilômetros de Kiev. Congestionamento enorme. Estamos parados há quase uma hora. Milhares, como nós, tentam se afastar da capital", escreveu em uma postagem.

Posteriormente, Sérgio Utshc contou que foram necessárias seis horas de viagem para conseguir percorrer 200 quilômetros.

"Muitos congestionamentos e inúmeras barricadas para sair de Kiev. [Uma] sirene tocou agora em uma das cidades pelas quais já amos", explicou, sem revelar para onde está indo.

No sexto dia do confronto armado entre Rússia e Ucrânia, as tropas de Moscou continuam suas investidas para se apoderar da capital Kiev. Enquanto não obtém êxito, o exército russo tem feito ataques em outras frentes, a exemplo de Kharkiv, segunda maior cidade ucraniana, em uma ação que deixou ao menos 10 mortos e 20 feridos.

Outro ataque a uma base militar em Okhtyrka deixou mais de 70 soldados ucranianos mortos e também fez vítimas fatais entre os russos.

A crise também se reflete no número de refugiados: Segundo a ONU (Organização das Nações Unidas), 660 mil ucranianos já deixaram o país com medo dos confrontos.