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

Guerra da Rússia-Ucrânia

Notícias do conflito entre Rússia e Ucrânia


Esse conteúdo é antigo

10 meses de guerra: ataque na Ucrânia mata ao menos 5 na véspera de Natal

Imagem do serviço de informações da Ucrânia mostra ataque russo a Kherson - Ukrainian Presidential Press Service/Handout
Imagem do serviço de informações da Ucrânia mostra ataque russo a Kherson Imagem: Ukrainian Presidential Press Service/Handout

24/12/2022 07h37Atualizada em 24/12/2022 09h34

O presidente ucraniano, Volodymyr Zelensky, denunciou neste sábado (24) um ato de "terror" russo para "intimidar" os ucranianos, depois que um ataque no centro de Kherson, no sul da Ucrânia, deixou pelo menos cinco mortos e 20 feridos.

"Nesta manhã de sábado, véspera de Natal, no centro da cidade. Não são instalações militares. Não é uma guerra com regras definidas. Isso é terror, isso é matar para intimidar e por prazer", criticou nas redes sociais. O vice-chefe da istração presidencial, Kyrylo Tymoshenko, anunciou "pelo menos cinco mortos e 20 feridos" neste bombardeio.

"O mundo deve ver o mal absoluto contra o qual estamos lutando", escreveu Volodymyr Zelensky, mais uma vez chamando o exército russo de "terrorista".

O ataque acontece no dia em que a guerra, iniciada pela invasão russa à Ucrânia em 24 de fevereiro deste ano, completa oficialmente 10 meses.

A RFI faz um balanço de dez meses de guerra com a nossa enviada especial à Ucrânia, Catalina Gómez. Com o ar dos meses e com a chegada do inverno, a situação deteriorou-se enormemente devido aos ataques russos às infraestruturas energéticas. Apesar de tudo, ucranianos tentam recuperar pequenos gestos de normalidade.

Natal no contexto bélico

Ela nos conta detalhadamente como os ucranianos se preparam para viver o Natal neste contexto bélico que se prolonga no tempo. Essas datas são comemoradas em partes do país, já que metade dos ucranianos são cristãos ortodoxos e regidos pelo calendário juliano. Por esta razão, celebram o Natal 15 dias depois, em muitos casos.

Apesar de tudo, os ucranianos tentam recuperar pequenos gestos de normalidade enquanto o conflito se consolida no tempo e confiam que, com o renovado apoio dos Estados Unidos e a chegada de novas armas, eles poderão aumentar a pressão sobre os russos.

Com o ar dos meses e sobretudo com a chegada do inverno, a situação se deteriorou enormemente devido aos ataques russos às infraestruturas energéticas e não só às cidades do front, mas também a outras localidades.

Sobre os bombardeios deste sábado, a correspondente da RFI afirma que Putin está apostando em quebrar o moral dos ucranianos. "Hoje está muito frio e os ucranianos seguem dizendo que têm de continuar a resistir, que estão cansados da guerra, mas mesmo com tudo isso, conhecem bem o inimigo e sabem que têm de continuar. Entre agora e fevereiro há dois meses muito difíceis", conta Gómez.

Não é só pela Ucrânia

Poucos dias após a visita de Zelensky aos Estados Unidos, os ucranianos valorizam seus esforços e lhe são extremamente gratos, "mas também lembram que não é apenas uma luta pela Ucrânia, mas algo maior está em jogo". "Eles entendem que é uma luta que pode se espalhar para fora de seus territórios, para outros que já fizeram parte da ex-URSS", afirma a correspondente.

Ninguém sabe. Todo mundo está cruzando os dedos, mas se preparando para que isso se espalhe. Mas sim, há uma certa ilusão de que com a chegada de novas armas a pressão sobre os russos aumentará e os fará recuar.

(Com AFP)