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

Ashley Graham, isolada com filho: 'Não achei que o veria crescer tão perto'

Ashley Graham posa com o filho Isaac - REPRODUÇÃO/INSTAGRAM
Ashley Graham posa com o filho Isaac Imagem: REPRODUÇÃO/INSTAGRAM

De Universa em São Paulo

24/06/2020 09h55Atualizada em 24/06/2020 10h56

Ashley Graham disse que entrar em quarentena pouco depois de dar à luz tem sido uma experiência interessante. Em entrevista à Harper's Bazaar, a modelo contou que entrou no isolamento ditado pela pandemia do novo coronavírus poucos meses depois de ter o primeiro filho, Isaac, com o marido Justin Ervin.

"Ter um filho mudou minhas prioridades de formas que eu nunca poderia imaginar. Quer dizer, ter um filho, primeiro, e depois ficar em quarentena com ele. Eu não achei que poderia vê-lo crescer tão de perto, diante dos meus olhos", disse.

"Estamos em quarentena em Nebraska [nos EUA] com a minha mãe, na mesma casa onde eu cresci. É como voltar a tempos mais simples, e isso me lembrou que eu não preciso de tanta coisa na vida... A família vem em primeiro lugar", afirmou.

Ativismo

Ashley falou também sobre os protestos antirracistas que se espalharam pelo mundo desde a morte de George Floyd sob custódia policial. Citando também o nome de outros norte-americanos negros vítimas do racismo policial, ela refletiu sobre o papel de celebridades aliadas à causa.

"Este não é um momento para ficar calado. E eu sei que, como figura pública, o meu dever é advogar por mudanças, por reformas, usar minha plataforma para elevar vozes que precisam ser ouvidas. Este momento já deveria ter acontecido há muito tempo, e eu acredito que exista um pouco de esperança na forma como as pessoas de todos os tipos se juntaram em solidariedade à causa", comentou.

"No entanto, não podemos esquecer que este movimento não pode parar se realmente quisermos ver algum tipo de justiça, e se quisermos confrontar o racismo sistêmico. Acredito que, como aliados, precisamos voltar nossa atenção a líderes negros e nos perguntar como podemos apoiar o que eles estão fazendo, ajudá-los a concretizar a sua visão de um futuro melhor", continuou.

"Por fim, precisamos perguntar às pessoas públicas negras, mas também àquelas que estão ao nosso redor, com quem temos relacionamentos pessoais, como podemos nos alinhar melhor à visão de futuro deles, que é a mesma que todos nós deveríamos estar perseguindo", completou.