;(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();
})();
Dan Dan Mian é composto por macarrão com copa lombo cozida na wok com mistura de pimentas asiáticas e molho de ostra, mix de hortaliças aromáticas e cebola roxa. Para se jogar e automaticamente se sentir enrolado num cobertor quentinho.
Ingredientes
430 grama(s) de macarrão grosso (futomen)
50 grama(s) de folhas verdes temperadas (ver receita abaixo)
200 grama(s) de copa lombo refogada (ver receita abaixo)
90 grama(s) de taberu rayu chili oil (óleo de chilli japonês)
Pimenta shichimi togarashi para finalizar
Copa lombo refogada
100 grama(s) de copa lombo moída
3 grama(s) de sal refinado
pimenta do reino moída à gosto
5 grama(s) de gengibre ralado
1 dente(s) de alho ralado
30 grama(s) de cebola branca em cubos bem pequenos
10 grama(s) de óleo de canola
30 grama(s) de cogumelo eryngui em cubos pequenos
10 mililitro (ml) de shoyu
6 mililitro (ml) de óleo de pimenta layu
2 mililitro (ml) de molho de pimenta com feijão fermentado toban djan
2 mililitro (ml) de molho de ostra
10 mililitro (ml) de vinho de arroz chinês
10 grama(s) de slurry simples (6g água e 4g de amido misturados)
60 mililitro (ml) de água
Folhas verdes temperadas
30 grama(s) de cebola roxa em julienne
20 grama(s) de cebolinha em tiras
1 folha(s) de shisso verde
12 grama(s) de coentro despetalado
18 grama(s) de hortelã despetalada
12 mililitro (ml) de vinagre de arroz
12 mililitro (ml) de óleo de canola
10 mililitro (ml) de shoyu
Modo de preparo
Cozinhe o macarrão e coloque em dois pratos fundos.
Misture o taberu rayu chili oil à copa lombo refogada e coloque sobre os macarrões.
Finalize com a salada temperada por cima de tudo e salpique a pimenta shichimi togarashi.
Copa lombo refogada
Tempere a copa lombo moída com o sal e pimenta do reino. Reserve.
Na a, aqueça o óleo e refogue alho, gengibre e pasta de pimenta toban djan. Adicione em seguida a cebola e refogue até ficar macia e transparente. Adicione a copa lombo temperada previamente e mexa durante toda a refoga para que a carne fique bem soltinha e refogue por igual.
Quando estiver bem refogada e sequinha, junte o cogumelo e adicione o shoyu e o vinho de arroz, mexa até o álcool evaporar.
Adicione o óleo de pimenta layu e o molho de ostra, misture bem e entre com a água filtrada e o slurry, mexa bem até o slurry cozinhar e a mistura ficar densa e brilhante.
Folhas verdes temperadas
Rasgue a folha de shisso. Misture todas as folhas e a cebola.
Na hora de servir, junte os líquidos e misture bem para temperar a salada.
Receita do chef Thiago Bañares, do Tan Tan
Serviço: R. Fradique Coutinho, 153, Pinheiros - São Paulo (SP) Funcionamento: Terça a domingo, 19h - 23h30 Sábado, 12h - 16h / 19h - 23h30 Último domingo do mês, fechado
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.