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

Paris reabre totalmente cafés e restaurantes em nova fase do fim da quarentena

Cafés parisienses voltam à normalidade após anúncio do controle da covid-19 no país - Getty Images
Cafés parisienses voltam à normalidade após anúncio do controle da covid-19 no país Imagem: Getty Images

16/06/2020 09h54

Essa segunda-feira (15) marcou mais uma fase no processo de relaxamento do confinamento na França. Bares, cafés e restaurantes de Paris e redondezas voltaram a acolher seus clientes, após quase três meses fechados por causa da pandemia de Covid-19. Desde o início de junho os estabelecimentos da capital podiam servir, mas apenas nos terraços e nas calçadas.

Um café no balcão antes do trabalho, uma taça de vinho ou de champanhe com amigos no happy hour, um jantar romântico em um dos charmosos restaurantes de Paris. O ritual, que praticamente faz parte do patrimônio francês, estava suspenso desde que o governo decidiu, em 17 de abril, fechar todos os comércios considerados não-essenciais.

Em um país que tem a gastronomia como parte de seu DNA, a medida foi vivida como uma punição. Talvez por esse motivo, quando o governo decidiu reabrir apenas os terraços dos bares, cafés e restaurantes da região parisiense em 2 de junho os moradores da capital se sentiram injustiçados.

Mas tudo isso faz parte do ado. Nesta segunda-feira, logo no início do dia, os habitués já batiam ponto para o café matinal. "Até que enfim eu reencontro meu balcão", celebrava o parisiense Dominique. "Aqui podemos falar com todo mundo. Não como nas últimas semanas, quando tínhamos que manter um metro de distância, usar aquelas máscaras. Agora, é bem melhor. É como voltar a viver!", desabafa. Quem ouve o relato quase esquece que as autoridades insistem que o vírus ainda circula no território e que o distanciamento físico e uso de máscaras de proteção, principalmente em ambientes fechados, não devem ser abandonados. Pelo menos por enquanto.

Mas para os donos dos estabelecimentos, a reabertura total era urgente. "Tivemos o dobro da clientela esta manhã", celebra Pierre, proprietário do café Les Deux Coupoles, no norte da capital. Vários clientes habituais voltaram. Alguns estão acostumados e querem mesmo é ficar no balcão".

Apesar do clima de festa, os donos dos bares, cafés e restaurantes sabem que ainda falta muito para que o setor volte a funcionar normalmente. Muita gente continua trabalhando em casa, o que faz com que a hora do almoço nos restaurantes perca boa parte de sua clientela. Além disso, mesmo se o governo anunciou a reabertura das fronteiras em boa parte do território europeu, os turistas, que ajudam a encher os bares e cafés, ainda não estão de volta. E não se sabe quando os estrangeiros vão retomar suas viagens para viver um pouquinho da vida parisiense.