;(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 empadinha caprese; aprenda a receita

Empadinha caprese da Ana Maria Braga - Reprodução/Ana Maria Braga
Empadinha caprese da Ana Maria Braga Imagem: Reprodução/Ana Maria Braga

De Nossa, em São Paulo

03/07/2020 11h33

Empadinha caprese foi a receita de hoje feita por Ana Maria Braga no programa "Encontro com Fátima Bernardes", da TV Globo.

Uma receita de preparo fácil, que leva em torno de 1h30 para ser feita e que rende até 20 porções médias ou 32 pequenas.

Ingredientes da massa

1/4 de xícara de chá de manjericão

3/4 de xícara de chá de manteiga sem sal em cubos

1/4 de xícara de chá de parmesão ralado fino

1 e 3/4 de xícara de chá de farinha de trigo

Ingredientes do recheio

1 xícara de chá de leite (240 ml)

1 xícara de chá rasa de queijo prato ralado fino (100 g)

1 xícara de chá rasa de muçarela ralada bem fino (100 g)

1/2 pote de requeijão (100 g)

1 ovo batido

Ingredientes do tomate confitado

1/2 bandeja de tomates-cereja em metades (150 g)

1/2 colher de chá de sal

1/2 colher de chá de açúcar

2 folhas de louro

1 dente de alho laminado

Pimenta calabresa a gosto

2 colheres de sopa de azeite de oliva

Tomilho e alecrim a gosto

Modo de preparo da massa

Reserve a farinha e triture os outros ingredientes no processador por cerca de 3 minutos.

Transfira a mistura para uma tigela, coloque a farinha e mescle tudo até homogeneizar.

Crie forminhas de empada e reserve-as.

Modo de preparo do recheio

Leve o leite com os queijos e o requeijão ao fogo médio. Mexa tudo até derreter (leva em torno de 5 minutos).

Fora do fogo - e sempre mexendo -, acrescente o ovo e tempere com o sal a a pimenta-do-reino a gosto.

Distribua tudo nas forminhas e acomode-as em uma assadeira.

Leve a assadeira ao forno médio preaquecido (180° C) por cerca de 40 minutos ou até as empadas dourarem. Sirva com o tomate confitado.

Modo de preparo do tomate confitado

Misture os ingredientes em um refratário e leve ao forno médio pré-aquecido (180° C) por cerca de 25 minutos.