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

Molho pesto: receita com salsinha e castanhas-do-pará inova o clássico

Marina Person

Colaboração para Nossa

07/08/2020 10h01

Pesto! A receita de hoje do Marinando na Quarentena traz uma versão brasileiríssima desse molho clássico italiano.

A receita original, criada em Gênova, no norte da Itália, leva pinolis e manjericão. Mas aqui apostamos nas nossas castanhas-do-pará e na salsinha para criar um versão original e, você vai ver, igualmente deliciosa.

Super versátil, o pesto faz par perfeito com massas, mas também combina com legumes (nós apostamos na beterraba, como você confere no vídeo), sopas e até em entradinhas — basta cobrir uma torradinha ou uma fatia de pão (que você já aprendeu por aqui como fazer) para ser feliz.

Mestre dos molhos

Quer ter um repertório completo de molhos para incrementar suas receitas? Sugerimos receitas e dicas para você ficar mestre nas pastas:

Molho de tomate (pomodoro)

Eis outra versão de molho que é unanimidade e combina com praticamente todo tipo de massa. Vai bem com pastas recheadas, com macarrão do tipo longo - espaguete e papardelle, por exemplo -, com nhoque e, é claro, em lasanhas.

Bechamel

O tradicional molho branco, clássico da culinária sa, combina demais com lasanha, nhoque (recheado, principalmente) e massas de todos os tipos. Permite, inclusive, a adição de outros ingredientes, como frutos do mar, embutidos e legumes, para incrementar o molho.

Bolonhesa

Um dos molhos mais tradicionais, que nasceu lá na italiana Bolonha, é também dos mais versáteis. Fica bom com nhoque, lasanha, espaguete, tagliatelle, talharim, bucatini, fusile, papardelle e massas tubulares em geral. Vale testá-lo com sua massa preferida, não importa qual seja.

Alho e óleo

A combinação supersimples no quesito ingredientes é inversamente proporcional ao agradável sabor dessa combinação, costumeiramente usada no preparo de espaguete.

Carbonara

Num primeiro momento, há quem estranhe pensar que a combinação de bacon, queijo e ovo renda um sabor harmônico, mas não só é equilibrado como, também, delicioso.

A carbonara, cuja origem envolve várias teorias, é bastante indicada para o preparo de espaguete, sua versão mais clássica. Mas também pode ser testada com outras variedades de massas longas e com formas variadas.

Alfredo

Fettuccine é a massa clássica associada ao molho Alfredo, originalmente italiano e feito com manteiga e queijo. Mas o talharim também cai muito bem, assim como outras massas longas.

Ragu de linguiça

Este é um molho que deixa qualquer prato encorpado. As pastas tubulares casam maravilhosamente com a combinação de molho de tomate e carne suína. Entretanto, massas longas, como fettuccine e talharim, são outras que se revelam sensacionais.

Funghi

O molho à base de cogumelo eia sem cerimônia em vários cardápios: vai do espaguete ao talharim, a pelo tagliatelle, combina bem com o penne e, ainda, com o papardelle. Mas a criatividade do cozinheiro é o limite com esse molho superversátil.