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

Marinando

Marina Person faz um prato vegano delicioso: quiche caprese com Nátaly Neri

Siga a Universa no

De Universa

25/12/2019 04h00

Marina Person e Chiko Guarnieri recebem a youtuber Nátaly Neri, estudante de Ciências Sociais, e que se dedica ao estudo da educação com recorte étnico-racial. A jovem de 22 anos, que participa de coletivos feministas e é ligada a Movimentos Negros, ajudou-os a preparar um belo quiche caprese vegano, como todos os pratos do programa.

Nátaly Neri conta que, na infância, os parentes corriam atrás das crianças com uma cabeça de leitoa nas mãos. "Eu via minhas tias quebrando o pescoço de galinhas e um dia decidi que não comeria mais outros animais", ela conta.

Confira a receita e veja o vídeo!

INGREDIENTES:
80g de castanha de caju
1 xícara de farinha de grão-de-bico
1/3 de xícara de água
2 colheres de sopa de azeite
2/3 de xícara de água
100g de tomates-cereja cortados ao meio
6 colheres de sopa de azeite
Tomilho a gosto
2 colheres de sopa de polvilho azedo
1 dente de alho
1/3 xícara manjericão
3 colheres de sopa de azeite
Sal, pimenta do reino e tempero a gosto

MODO DE PREPARO:

1 - Deixe a castanha de molho em água quente por 1 hora
2 - Pré-aqueça o forno a 200°
3 - Misture a farinha com 1/3 de água e 2 colheres de sopa de azeite com uma pitada de sal até formar uma massa homogênea.
4 - Unte uma fôrma e disponha a massa. Em seguida espete com um garfo por toda a assadeira. Leve ao forno por cerca de 15 minutos ou até que esteja seca.
5 - Em outra assadeira, despeje os tomates-cereja e regue as 6 colheres de sopa de azeite. Tempere com sal e tomilho e leve para o forno por 30 minutos ou até que estejam levemente caramelizados.
6 - Descarte a água da castanha de caju e bata no liquidificador com 2/3 de xícara de água, sal, pimenta do reino e o polvilho azedo até formar um líquido homogêneo.
7 - Em uma a, refogue o alho com um fio de azeite até dourar e adicione o creme de castanha, mexendo sempre até ficar bem grosso.
8 - Adicione metade dos tomates ao creme e disponha a mistura sobre a massa da quiche, adicionando o restante dos tomatinhos por cima. Leve ao forno por mais 10 minutos ou até dourar bem a massa.
9 - Bata o manjericão no liquidificador juntamente com 3 colheres de azeite até formar um pesto uniforme.
10 - Espalhe por cima da quiche e está pronto para servir!

Fonte: Blog Vegana Prática (Ju Couto)

Marinando