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

Focaccia

Reprodução/Mira Filmes
Imagem: Reprodução/Mira Filmes

600 min

3 porções

Médio

Ingredientes

Pré- preparo

  • 50 grama(s) Levain (fermento natural)

Focaccia

  • 180 grama(s) de água
  • 250 grama(s) de farinha de trigo
  • 50 grama(s) de levain (fermento natural)
  • 1 ou 2 tomates
  • 10 grama(s) de azeite
  • 5 grama(s) de sal
  • Azeitonas, alecrim e manjericão a gosto

Modo de preparo

Pré- preparo

É necessário fazer o levain previamente ou providenciá-lo.

Você pode aprender a fazê-lo do zero em casa clicando no link no final desta receita.

Ou pegar um pouco de alguém. Normalmente, quem gosta de fazer pão também gosta de dar levain para os amigos.

Focaccia

Coloque 180g de água numa vasilha, usando a balança para medir. Nesta receita, os líquido também serão medidos por gramas.

Em seguida, adicione o levain.O levain deve boiar na água. Se ele afundar, é sinal de que ele não está num ponto bom. Se ele não tiver ao menos dobrado de tamanho ainda, espere mais tempo até atingir o pico. Se já tiver atingido o pico e depois murchado, acrescente mais água e farinha e espere mais algumas horas.

Com a mão, misture a água e o levain até ficar uniforme. Adicione a farinha e misture a massa sem medo de ser feliz, até ficar homogênea. Lembre de sujar só uma das mãos e de deixar a outra sempre limpa, segurando a vasilha. Deixe descansando por pelo menos 40 minutos.

Após esse descanso, adicione 5g de sal, 12g de água e 10g de azeite. Comece a misturar, esticando e dobrando a massa, e deixe descansar por mais 30 minutos.

Após esse descanso, repita a técnica de esticar e dobrar a massa novamente e espere mais 30 minutos. Faça isso mais 2 ou 3 vezes.

Ao final de 2 ou 3 horas, unte uma forma com azeite, inclusive nas bordas, e espalhe a massa da focaccia. Deixe descansar em temperatura ambiente por volta de 8 horas.

É hora de decorar a focaccia: acrescente as fatias de tomate, alecrim, manjericão e azeitonas. Um fio de azeite por cima dá aquela arrematada final. Pré-aqueça o forno em 250 graus e deixe a focaccia assar por uns 20 minutos.

Reparta em pedaços e buon appetito!

Receita do programa Marinando na Quarentena. Veja o episódio completo, no qual Marina Person mostra como fazer essa receita de focaccia.

Aprenda também a fazer o fermento natural para pães levain.