;(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();
})();
Lasanha feita com molho à base chèvre e alho poró, intercalando berinjelas tostadas com toque de missô. Servida com tomatinhos assados e coalhada de castanha de caju fria que dá contraste delicioso.
Ingredientes
Coalhada de castanha de caju
2 xícara(s) de chá de castanhas de caju crua
Suco de 1 limão
1 colher(es) de sopa de vinagre de maça
6 colher(es) de sopa de azeite
sal a gosto
1/4 dente(s) de alho
1 colher(es) de chá de água fervente
Molho de tomatinhos
8 tomatinhos confits
2 colher(es) de sopa de azeite
Manjericão (a gosto)
Molho da berinjela
300 grama(s) de berinjela tostada e sem casca (4 unidades)
2 colher(es) de sopa de azeite
7 grama(s) de alho
40 grama(s) de cebola e salsão
3 folha(s) de louro
20 grama(s) de shoyu
30 grama(s) de saquê Mirin
40 grama(s) de missô
15 grama(s) de cebolinha
125 grama(s) de alho Poró em fatias finas (cortar ao meio na longitude e depois meia lua finas)
60 grama(s) de manteiga
30 grama(s) de farinha de trigo
140 grama(s) de creme de leite fresco
150 grama(s) de leite
70 grama(s) de queijo de cabra tipo chèvre
quanto baste de pimenta do reino a gosto
Sal à gosto (caso necessário)
Montagem
125 grama(s) de massa seca
120 grama(s) de requeijão do Norte (ralado)
Modo de preparo
Coalhada de castanha de caju
Hidrate as castanhas, por 2 horas, cozinhe por mais 30 minutos em caldo de legumes
Bata as castanhas aos poucos adicionando uma parte do caldo e os ingredientes até obter a coalhada bem lisa e sem nenhum sólido.
Molho de tomatinhos
Coloque o azeite na frigideira e esquente os tomatinhos já assados (confit)
Finalizar com manjericão fresco.
Molho da berinjela
Toste ao fogo as berinjelas (escalivada), retire a pele e as sementes, dê uma leve picada.
Em uma frigideira coloque o azeite e refogue o alho, a cebola e o salsão e as folhas de louro.
Acrescente a berinjela, o missô, o shoyu e o saquê.
Incorpore e finalize com a cebolinha. Caso necessário acrescente um pouco de caldo de legumes para alongar.
Molho chèvre
Em uma a coloque a manteiga e refogue lentamente o alho porró até que estejam macio
Tempere com a pimenta do reino e acrescente a farinha de trigo fazendo uma pomada ( roux) e em seguida coloque o creme de leite fresco incorporando o molho, acrescente o queijo e mexa até que esteja totalmente homogêneo.
Acrescente o leite e deixe cozinhar em fogo bem baixo istrando para que não grude o fundo por pelo menos 20 minutos para não ter resquício de farinha de trigo no sabor.
Montagem
Em uma forma inglesa, coloque ao fundo o molho chèvre, as massas e em seguida o de berinjela.
Coloque novamente a massa, em seguida o molho chèvre e queijo manteiga. Prossiga dessa forma até completar.
Leve para o forno coberto com papel alumínio 180°C por 20 minutos, reserve.
No serviço: Cortar fatias da lasanha de aproximadamente 1 dedo e meio. Unir 3 destas e levar ao forno envolvida no papel alumínio 180 graus por aproximadamente 7 minutos, até que esteja quente o suficiente.
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.