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

ANÁLISE-Biden se beneficia de confronto entre Sanders e Warren em debate democrata

Por James Oliphant
Imagem: Por James Oliphant

15/01/2020 09h02

Por James Oliphant

WASHINGTON (Reuters) - Pré-candidatos presidenciais democratas dos Estados Unidos discutiram na terça-feira sobre guerra, comércio, gênero e o sistema de saúde, em um debate acalorado em Des Moines, no Iowa, Estado que realiza a primária inaugural da disputa em menos de três semanas.

O ex-vice-presidente Joe Biden, que vem dando novos sinais de competitividade em Iowa e New Hampshire e ainda lidera as pesquisas nacionais, só precisava de um desempenho convincente, o que conseguiu.

Ele se beneficiou do fato de grande parte da atenção ter se voltado ao confronto entre os aliados progressistas Bernie Sanders e Elizabeth Warren sobre ele ter dito ou não a ela que uma mulher não conseguiria conquistar a Casa Branca em 2020, o que permitiu a Biden se distanciar da discussão.

Quando Sanders se voltou para Biden, abordou temas que são parte do histórico do rival há tempos: seu voto a favor da guerra do Iraque quando era senador e seu apoio a acordos comerciais globais, como o Acordo de Livre Comércio da América do Norte (Nafta).

A campanha de Sanders chegou ao debate abalada primeiro por reportagens segundo as quais seus voluntários denegriram Warren aos eleitores de Iowa e depois por outra reportagem que afirmou que, em uma reunião particular de 2018, ele disse a Warren que nenhuma mulher poderia se eleger presidente em 2020.

O senador do Vermont o negou vigorosamente ao ser indagado pelo moderador do debate a esse respeito, mas Warren insistiu que ele fez o comentário, essencialmente acusando-o de mentir.

Sanders, portanto, pode ser questionado sobre seu apelo junto às mulheres.

Warren provavelmente se saiu melhor no bate-boca com Sanders no quesito gênero, tentando se mostrar nobre e não se aferrar ao que ele pode ou não ter dito.

Mas ela fez um crítica velada ao pré-candidato mais explicitamente liberal da corrida dizendo existir um "perigo real" de os democratas "escolherem um candidato que não consegue unir nosso partido ou alguém que não valoriza grandes partes do eleitorado democrata".

Warren defendeu o argumento de que as mulheres são melhores como candidatas. "Olhem os homens neste palco. Coletivamente, eles perderam 10 eleições", disse, o que indica que está apostando alto no tema do gênero.