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

São Paulo

SPFC envia ofício ao Itamaraty e se dispõe a ajudar brasileiros na Ucrânia

Brunno Carvalho

Do UOL, em São Paulo

24/02/2022 15h38

O São Paulo enviou no início da tarde de hoje (24) um ofício ao Itamaraty, direcionado ao ministro das relações exteriores, Carlos França, pedindo ajuda aos brasileiros que estão na Ucrânia, país que desde a noite de ontem começou a sofrer ataques da Rússia. O clube ainda se colocou à disposição para colaborar com "ações humanitárias que venham ser coordenadas para amparar as famílias que venham ser resgatadas".

O documento ao qual o UOL Esporte teve o foi assinado pelo presidente Julio Casares. Pela manhã, ele já havia compartilhado em suas redes sociais um vídeo de brasileiros que jogam no Shakhtar Donetsk e no Dínamo de Kiev, que pediram ajuda às autoridades para deixarem o país do leste europeu.

"Evidentemente que o resgate que se mostra imperioso não deve se limitar aos brasileiros ligados ao esporte, mas a todos irmãos que se encontram em situação assemelhada a essas famílias que estão conectadas com nossa instituição", prossegue Casares no ofício.

As tensões entre Rússia e Ucrânia aumentaram no início da madrugada de hoje quando o presidente russo, Vladimir Putin, autorizou uma "operação militar especial" no leste ucraniano.

Após o anúncio de Putin, houve relatos de explosões em Kiev, capital da Ucrânia, e em Kharkiv, a segunda maior cidade, no nordeste do país. Em Maripuol, cidade portuária no leste do país, ao menos duas explosões foram ouvidas hoje. Também há relatos em Odessa, no Mar Negro. Em Kramatorsk, cidade que serve de quartel-general para as forças ucranianas, foram ouvidas pelo menos quatro fortes explosões.

O Shakhtar Donetsk, um dos clubes ucranianos com mais brasileiros, não treina nem manda mais seus jogos na cidade de Donetsk desde 2014 por causa dos conflitos do país com a Rússia nas regiões separatistas. Naquele ano, a Rússia teve um embate com a Ucrânia pela anexação da região da Crimeia e o CT do Shakhtar foi danificado por ações militares.

Em entrevista à "BBC Brasil", o embaixador do Brasil em Kiev, capital da Ucrânia, Norton Rapesta, afirmou que os brasileiros que estão em regiões afetadas serão evacuados. Ele afirmou que os detalhes da operação serão anunciados nas próximas horas.

São Paulo