;(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();
})();
Quando surgiu e começou a se popularizar, o donut nem tinha cara de rosquinha e parecia mais um cookie. Aliás, quem já viu Homer Simpson babar por "rosquinha" pode até confundir, mas é só uma licença poética da dublagem -- enquanto a massa do donut é frita e deve ser fofinha, a da rosquinha é assada e fica mais firme.
Aprenda como fazer os anéis de massa fofinha e colorida que conquistaram o mundo.
Ingredientes
500 grama(s) de farinha de trigo
80 grama(s) de açúcar
5 grama(s) de sal
40 grama(s) de manteiga
50 grama(s) de ovo (1 ovo grande)
15 grama(s) de fermento biológico seco (ou 45g fermento fresco)
250 mililitro (ml) de água (aproxima.)
300 grama(s) de chocolate branco fracionado
Corante alimentício (rosa, azul, roxo)
Confeitos coloridos
Modo de preparo
Em um bowl coloque a farinha, açúcar o sal e a manteiga. Misture levemente com uma espátula e em seguida acrescente o ovo, misture. Acrescente o fermento biológico e misture mais um pouco, em seguida comece adicionar a água que pode estar levemente aquecida, apenas para acelerar um pouco esse processo da fermentação (não colocar água de uma vez, vá colocando aos poucos e sentindo como está a massa).
Assim que estiver em um ponto que não grude tanto, comece a misturar com as mãos.
Coloque sob uma bancada e sove por aproximadamente 20 minutos até que a massa fique bem lisinha.
Faça uma bolinha com essa massa e coloque em um bowl, cubra com plástico filme e aguarde até a massa dobrar de tamanho. (Aproximadamente 30 min, mas pode variar de acordo com a temperatura do dia e lugar).
Em seguida, transfira a massa para a bancada e abra com um rolo, abra na espessura de 1 dedo aprox.
Corte com um aro redondo grande e um pequeno para fazer o furinho do meio.
Aqueça o óleo, importante não deixar muito quente, coloque o donuts e deixa ficar douradinho de um lado, em seguida vire e espere o outro lado.
Tire do óleo e coloque sobre um papel toalha (demora em torno de 40s a 1 min de cada lado). Depois de frito deixe esfriar completamente.
Para cobertura, derreta o chocolate (microondas ou banho maria), colore com corante alimentício, mergulhe o donuts nela e finalize decorando com confeitos de forma criativa e colorida.
Receita de Salted
Donuts
Imagem: Salted
Eu Mereço!
Em Nossa, plataforma de lifestyle do UOL, domingo será sinônimo de sobremesa. O tradicional dia da preguiça ganha o aconchego açucarado dessa nova série de receitas que encantam pela aparência e pelo paladar. Acompanhe todos os episódios no Canal UOL e no canal do YouTube de Nossa — inscreva-se!
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.