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

Noivos põem câmera em cima de livros, convidam família e se casam por vídeo

Mark Van Name e Jen O"Leary - reprodução/Twitter de Jimmy Van Bramer
Mark Van Name e Jen O'Leary Imagem: reprodução/Twitter de Jimmy Van Bramer

De Universa, em São Paulo

29/04/2020 20h18

O novo coronavírus não tem impedido o amor. Jen O'Leary e Mark Van Name, de Nova York, nos Estados Unidos, se casaram em uma videoconferência que contou com a participação de familiares e amigos. Enquanto respeitam o isolamento, os dois não queriam perder a data que já tinham escolhido para a cerimônia há um ano.

O "dress code" pedia que os convidados usassem "roupas formais para o Zoom" (aplicativo usado para videoconferências), mas calças foram tratadas como "opcionais. Por isso, alguns familiares usaram ternos com bermudas. Um dos amigos é médico e trabalha em hospital, mas deu um jeito de aparecer de jaleco e máscara.

"A única coisa que o Mark fez questão de colocar no convite era a informação sobre calças serem opcionais", disse Jen ao Buzzfeed News, dos Estados Unidos. Eles se tornaram noivos há cerca de um ano e, em março de 2020, correram ao cartório (antes do fechamento do serviço) para garantir o documento matrimonial.

A ideia era adiar a cerimônia até setembro, mas o casal estava triste por não poder dizer "somos marido e mulher" tão cedo. Porém, em 18 de abril, o governador Andrew Cuomo, de Nova York, anunciou que ia uma ordem executiva para permitir que nova-iorquinos obtivessem suas licenças remotamente. Com isto, Jen e Mark se encorajaram.

"Foi o jeito que encontramos para manter o nosso 'dia feliz' original. Todo mundo ficou muito empolgado quando contamos que o casamento aconteceria na mesma data prevista inicialmente, que nós não deixamos a pandemia nos impedir", contou ela. Os dois foram casados no jardim de Jimmy Van Bramer, que tornou a cerimônia oficial.

Enquanto todos os familiares e amigos acompanhavam tudo por videoconferência, Jen e Mark se posicionaram distantes de Jimmy — todos usavam máscaras nos rostos — e confirmaram a união. Vizinhos levaram suas próprias canetas e, distantes uns dos outros, am como testemunhas de que o casal ocorreu dentro da normalidade.