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

Coxinha de rabada

Médio

Ingredientes

Massa

  • 1 litro(s) de leite
  • 500 grama(s) de farinha de trigo
  • 20 grama(s) de alho batido
  • 50 grama(s) de caldo de galinha em pó
  • 100 grama(s) de manteiga
  • 50 mililitro (ml) de óleo

Recheio

  • 5 quilo(s) de rabada cortada e limpa
  • 100 grama(s) de alho batido
  • 600 grama(s) de tomate picado
  • 400 grama(s) de cebola picada
  • 100 grama(s) de pimentão verde
  • 100 grama(s) de pimentão vermelho
  • 1 lata de cerveja preta
  • 100 mililitro (ml) de óleo de soja
  • 100 grama(s) de salsão
  • 100 grama(s) de alho-poró
  • 10 grama(s) de tomilho
  • 10 grama(s) de louro
  • 50 grama(s) de sal

Montagem

  • 200 mililitro (ml) de leite
  • 1 ovo

Modo de preparo

Massa

Bata no liquidificador o alho e o óleo. Leve a mistura para dourar em um a. Acrescentar o leite e deixar ferver. Quando isso acontecer, juntar a farinha aos poucos. Acrescentar o caldo de galinha e a manteiga derretida. Misturar na a até ficar com a textura desejada. Deixar esfriar. Sovar a massa até que fique bem lisa.

Recheio

Colocar o óleo de soja na a de pressão e selar os pedaços de rabada. Reservar a carne. Na mesma a (sem lavar), refogar o alho, a cebola, o tomate e os pimentões. Deixar soltar um pouco o líquido dos ingredientes. Acrescentar o salsão e o alho-poró e refogar.

Voltar a carne para a a e acrescentar a lata de cerveja preta para ajudar a soltar o fundo da a. Juntar o louro, o tomilho e o sal. Cobrir com água. Fechar a a de pressão e cozinhar por 1 hora.

Retirar a rabada da a após o cozimento. Deixar esfriar para que possa tirar a carne do osso. Desfiar a carne. Colocar em outra a a carne desfiada com 500 mililitros do caldo da rabada para reduzir.

Montagem

Moltar as coxinhas com 30 gramas de massa. Acrescentar 15 gramas de rabada desfiada e fechar o salgado. Para empanar, bater o ovo com o leite em um refratário. Pegar duas tigelas e colocar farinha de rosca em uma e farinha panko em outra. ar o salgado no leite, na farinha de rosca, no leite novamente e finalmente na panko. Fritar em óleo a 180 graus. Servir em porção com seis mini coxinhas.
Coxinha de rabada - Teresa Cristina - Zo Guimaraes /UOL - Zo Guimaraes /UOL
Imagem: Zo Guimaraes /UOL

Receita de Toninho Momo, do Bar do Zeca, apresentada no programa Botequim da Teresa, apresentado pela cantora Teresa Cristina. Confira todos os episódios da temporada no YouTube de Nossa (e se inscreva para saber as novidades).