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

Ana Maria Braga ensina a fazer bolo de maçã; aprenda a receita

Ana Maria Braga mostra como fazer um bolo de maça com casca crocante - Reprodução/TV Globo
Ana Maria Braga mostra como fazer um bolo de maça com casca crocante Imagem: Reprodução/TV Globo

De Nossa, em São Paulo

16/07/2020 11h46

Bolo de maçã é a receita da Ana Maria Braga de hoje para o programa 'Encontro', da Globo. A sobremesa tem três os - bolo, creme de cream cheese e cobertura crocante.

A receita é diferente das tradicionais tortas de maçã encontradas na padaria, mas é fácil de ser feita e a Ana mostrou que não há trabalho nem para desenformar o bolo.

Ingredientes - Bolo

Meia xícara de chá (110 g) de manteiga sem sal amolecida

Meia xícara de chá (80 g) de açúcar mascavo

Um quarto de xícara de chá (50 g) de açúcar

1 ovo inteiro

Um quarto de xícara de chá (60 ml) de óleo

Meia colher de sopa de essência de baunilha

1 xícara e meia de chá (265 g) de farinha de trigo

Meia colher de chá de bicarbonato de sódio

Meia colher de chá de fermento em pó

1 colher de chá de canela em pó

2 maçãs sem casca e sem semente cortadas em cubos pequenos

Ingredientes - Creme

1 xícara de chá (225 g) de cream cheese amolecido

1 colher de chá de essência de baunilha

3 colheres de sopa (50 g) de açúcar

Ingredientes - Cobertura crocante

Três quartos de xícara de chá (150 g) de açúcar

Um quarto de xícara de chá (35 g) de açúcar mascavo

Meia xícara de chá (85 g) de farinha de trigo

1 colher de chá de canela em pó

Meia colher de chá de fermento em pó

6 colheres de sopa (85 g) de manteiga sem sal gelada

Modo de Preparo - Bolo

Coloque em uma batedeira meia xícara de chá de manteiga sem sal amolecida, meia xícara de chá de açúcar mascavo, um quarto de xícara de chá de açúcar e bata por cerca de 1 minuto até obter uma mistura cremosa.

Ainda na batedeira, coloque 1 ovo, um quarto de xícara de chá de óleo, meia colher de sopa de essência de baunilha e bata, só para misturar os ingredientes. Desligue a batedeira.

Na nova mistura, acrescente 1 xícara e meia de chá de farinha de trigo, meia colher de chá de bicarbonato de sódio, meia colher de chá de fermento em pó, 1 colher de chá de canela em pó e misture delicadamente com uma espátula.

Junte 1 xícara e meia de chá de maçã sem casca e sem semente cortadas em cubos pequenos, misture e despeje numa assadeira e reserve.

Modo de Preparo - Creme de Queijo

Misture em uma tigela 1 xícara de chá de cream cheese amolecido, 1 colher de chá de essência de baunilha, 3 colheres de sopa de açúcar e espalhe sobre a massa do bolo.

Modo de Preparo - Cobertura crocante

Em uma tigela, misture com as mãos três quartos xícara de chá de açúcar, meia xícara de chá de açúcar mascavo, meia xícara de chá de farinha de trigo, 1 colher de chá de canela em pó, meia colher de chá de fermento em pó, 6 colheres de sopa de manteiga sem sal gelada até formar uma farofa.

Polvilhe esta farofa sobre o creme de queijo e leve para assar em forno médio preaquecido a 160°C por 50 min ou até dourar.

Retire do forno, desenforme e deixe esfriar. Sirva em seguida. Açúcar de confeiteiro sobre os pedaços deixa o bolo mais elegante, mas não é essencial.