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

Ao presidente da França, Zuckerberg rejeita apagar posts de ódio em 24h

O presidente da França, Emmanuel Macron, posa com executivo-chefe e cofundador do Facebook, Mark Zuckerberg, antes de sua reunião no palácio Elysee, em Paris - Yoan Valat/AFP
O presidente da França, Emmanuel Macron, posa com executivo-chefe e cofundador do Facebook, Mark Zuckerberg, antes de sua reunião no palácio Elysee, em Paris Imagem: Yoan Valat/AFP

Da EFE, em Paris

12/05/2019 12h58

O presidente da França, Emmanuel Macron, e o executivo-chefe do Facebook, Mark Zuckerberg, analisaram nesta sexta-feira (10) a maneira de conter o discurso de ódio na internet, em um momento no qual o governo francês quer endurecer a legislação do país sobre o conteúdo postado nas redes sociais.

O objetivo já anunciado por Macron é poder retirar o conteúdo denunciado em 24 horas e promover a adoção de uma legislação similar dentro da União Europeia (UE).

Zuckerberg, que foi ao Palácio do Eliseu, sede do governo da França, deseja por outro lado limitar o alcance de uma postagem. Em vez de excluir o conteúdo, a proposta seria criar ferramentas para que outros usuários não possam compartilhá-lo ou evitar que esse material seja sugerido na linha do tempo de outras pessoas.

Segundo fontes do governo da França, o fundador do Facebook teria criticado o prazo de 24 horas e sugerido que ele não aparecesse na nova legislação que deve ser proposta por Macron. Não há, por enquanto, um calendário para que as medidas sejam discutidas.

Zuckerberg também pediu à França a "mínima incerteza possível em nível jurídico" na desejada regulamentação dos conteúdos, para poder se adaptar bem às mudanças aplicadas no país.

Os dois, segundo as fontes, saíram satisfeitos da reunião, que precede encontros nos quais o assunto também será abordado, como a conferência internacional Viva Technology, que acontecerá nos próximos dias 16 e 18 de maio em Paris, ou a Cúpula do G7, em agosto, na cidade de Biarritz, no sudoeste da França.

Lola Aronovich: há uma década sendo alvo de grupos de ódio na web

Veja relato