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

Sonha em morar pelo mundo de graça? Airbnb dará chance a 12 pessoas

Casa na árvore, em Atlanta: um dos AirBnbs mais desejados do mundo - Divulgação
Casa na árvore, em Atlanta: um dos AirBnbs mais desejados do mundo
Imagem: Divulgação

De Nossa

11/06/2021 11h31

A pandemia tornou o conceito de nômade digital mais presente. Poder trabalhar de casa, para alguns, é poder trabalhar de onde quiser. Pensando nisso, o Airbnb pretende oferecer a 12 pessoas dez meses de hospedagem gratuita.

Chamado de Live Anywhere on Airbnb (em português, viva em qualquer lugar com o Airbnb), o projeto oferece aos selecionados a oportunidade de morar em lugares diferentes sem custos. Quem mora no Brasil, no entanto, não poderá se candidatar à campanha.

A proposta do site de hospedagens é entender como será a adaptação a essa "vida dos sonhos" e estudar a possibilidade de oferecer produtos similares para nômades digitais do futuro.

"Cabine ecológica e design", em Catuçaba (SP): disponível no AirBnb - Divulgação - Divulgação
"Cabine ecológica e design", em Catuçaba (SP): disponível no AirBnb
Imagem: Divulgação

Os doze escolhidos vão poder escolher onde e por quanto tempo ficar em cada lugar. Além disso, terão o direito de levar três convidados na aventura.

O Airbnb dará até US$ 12 mil para tornar possível o deslocamento de um lado para o outro do mundo e de US$ 12 mil a US$ 24 mil em créditos para gastar no site. O valor dependerá do número de convidados.

Depois dos primeiros cinco meses, os participantes deverão escolher se querem sair ou seguir no programa. Se desejarem ficar, ganharão um novo valor em créditos.

"Mansão do Joá", no Rio de Janeiro: hospedagens incríveis - Divulgação - Divulgação
"Mansão do Joá", no Rio de Janeiro: hospedagens incríveis
Imagem: Divulgação

Como se inscrever

Ficou interessado? As inscrições estão abertas no site e vão até o dia 30 de de junho. O processo seletivo é destinado a maiores de 18 anos e aos moradores de alguns países. Da América do Sul, só Argentina e Chile entraram na seleção.

Ter o aporte válido até fevereiro de 2023 e conseguir conversar em inglês são outros requisitos necessários. Veja como funciona as cinco etapas:

  • 1ª: preenchimento de dados e respostas a perguntas sobre o entusiasmo do candidato em participar do projeto;
  • 2ª: os 20 finalistas, que serão anunciados no dia 5 de julho, arão por uma nova etapa baseada em criatividade, individualidade e no ânimo em compartilhar as suas experiências durante o programa;
  • 3ª: envio de um vídeo de dois minutos até 9 de julho cuja ideia é demonstrar o desejo de se viver um ano com o Airbnb;
  • 4ª: entrevista para chegar à lista de 12 pessoas;
  • 5ª: basicamente fechar o contrato e consentir na participação da publicidade relacionada ao programa. Os escolhidos arão por uma formação em julho e agosto.