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

Twitter incluirá avisos em tuítes com links para a mídia estatal russa

Dado Ruvic/Reuters
Imagem: Dado Ruvic/Reuters

Em San Francisco

01/03/2022 08h15Atualizada em 01/03/2022 08h15

O Twitter colocará advertências em tuítes com links para veículos de imprensa ligados ao Estado russo, anunciou a plataforma nesta segunda-feira (28), já que a mídia vinculada ao Kremlin é acusada de espalhar desinformação sobre a invasão da Ucrânia por Moscou.

Os gigantes das redes sociais estão sob pressão para remover informações enganosas ou falsas sobre o ataque, que atraiu uma feroz condenação internacional.

Os veículos afiliados ao Kremlin, RT e Sputnik, enfrentaram acusações de usar falsas narrativas em um esforço para justificar a guerra.

Yoel Roth, chefe de integridade do Twitter, disse que a plataforma registrou mais de 45 mil tuítes por dia compartilhando links de meios com conexões com o Estado russo.

Além de adicionar avisos que identificam a origem dos links, Roth indicou que a empresa também está "dando os significativos para reduzir a circulação desse tipo de conteúdo no Twitter".

O anúncio ocorre um dia após a empresa-mãe do Facebook, Meta, dizer que grupos pró-Rússia estavam orquestrando campanhas de desinformação nas redes, usando perfis falsos e hackeando contas para disseminar uma imagem da Ucrânia como um frágil peão da ambiguidade do Ocidente.

A equipe de cibersegurança da gigante da tecnologia, que também é proprietária do Instagram, informou que bloqueou uma série de contas falsas ligadas à Rússia que faziam parte de um plano para minar a Ucrânia.

O Twitter e o Facebook foram atingidos por restrições de o na Rússia desde a invasão e atualmente estão "em grande parte inutilizáveis", relatou o grupo de monitoramento da web NetBlocks.

As redes sociais se tornaram uma das frentes na invasão russa da Ucrânia, não só como palco de desinformação, mas também de acompanhamento em tempo real do rápido desenvolvimento deste conflito, que marca a maior crise geopolítica na Europa em décadas.