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

Brasil x Sérvia: devoramos o hamburgão tradicional dos rivais; veja receita

Rumo ao Hexa: nova série dá receitas que mesclam pratos típicos dos rivais da seleção com um toque brasileiro. Na estreia, o Pljeskavica sérvio com uma pasta de pimentões, servido no nosso pão de Xis gaúcho - Pedro de Bem/UOL
Rumo ao Hexa: nova série dá receitas que mesclam pratos típicos dos rivais da seleção com um toque brasileiro. Na estreia, o Pljeskavica sérvio com uma pasta de pimentões, servido no nosso pão de Xis gaúcho Imagem: Pedro de Bem/UOL

De Nossa

23/11/2022 17h35

Qual país que participa da Copa do Mundo no Qatar venceria um torneiro de petiscos e pratos típicos?

Para ajudar nesta "disputa", o chef Pedro de Bem, apresentador do programa "Cozinha por Aí" aqui em Nossa (veja as duas temporadas no Youtube de Nossa), começa hoje a série "Rumo ao Hexa".

A cada jogo do Brasil na Copa, ele apresenta uma ou mais receitas tradicionais do país rival da seleção canarinho e faz um mix dos sabores estrangeiros com um toque brasileiro.

Para a estreia com a Sérvia, a receita da vez é a Pljeskavica, um dos pratos nacionais do país e muito popular na região dos Balcãs e nos territórios da antiga Iugoslávia — Bósnia e Hezergovina, Croácia e Montenegro.

Não se assuste com o nome desse, digamos, hamburgão sérvio. A receita é mais fácil de fazer do que pronunciar Pljeskavica.

O hambúrguer grelhado preparado com uma mistura de carnes de porco e boi — às vezes cordeiro também é incluído no blend — geralmente é servido no epinja, um pão redondo e achatado parecido com o árabe pita, porém mais macio. Mas na receita de Pedro o toque brasileiro vem de sua terra, o Rio Grande do Sul: o pão de Xis é usado na montagem.

Para compor o sanduíche, um dos recheios mais tradicionais é o urnebes, uma salada preparada com queijo, alho, pimenta e especiarias. E saladinha de repolho e creme azedo também podem entrar no banquete em forma de sanduba — no final, um Pljeskavica pode chegar a pesar até 800 gramas!

Para sua receita "Rumo ao Hexa", Pedro decidiu inserir outra receita tradicional da Sérvia, o ajvar. A pasta a base de pimentões e berinjela é curinga na mesa.

Ela serve para temperar pratos de peixe ou de carne, vai bem como entradinha para ser saboreada com pão, pode até compor uma massa ou rechear sanduíches, como nesta versão de Pedro de Bem.