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

WhatsApp vai facilitar conversa de você com você mesmo; veja mais mudanças

FG Trade/iStock
Imagem: FG Trade/iStock

Colaboração para Tilt*

01/11/2022 12h17

O WhatsApp começou a testar um recurso chamado "mensagens para você mesmo". A ideia aparentemente é oferecer um jeito mais prático para a pessoa abrir um chat com ela mesma.

A novidade foi observada na versão de testes (número 2.22.24.2) do aplicativo para o Android, segundo informações do site WABetaInfo, que costuma divulgar novidades e rumores sobre a plataforma.

Não há informações sobre quando o recurso estará disponível.

    Como pode funcionar?

    Muitos usuários do WhatsApp usam a opção de bate-papo com seu próprio número para manter salvos e concentrados em um único local fotos, vídeos e áudios. Tem gente que usa mensagens de texto como lembretes e salva nesse chat links para ler depois.

    Vale lembrar que até o momento existem duas formas de conversar com você mesmo no WhatsApp.

    1. Criando um grupo e deixando apenas você dentro dele
    2. Usar um link na plataforma que permite abrir uma conversa nova -- veja como fazer aqui. O processo é o mesmo de quando você precisa conversar com alguém e não tem o número salvo na agenda de contatos.

    Caso o WhatsApp implante o novo recurso, os usuários arão a visualizar um atalho responsável por direcionar a pessoa para uma conversa com ela.

    "Graças a uma futura atualização do aplicativo Android, o bate-papo com seu número de telefone também estará disponível em sua lista de contatos do WhatsApp, para que seja mais fácil para os usuários arem seu próprio bate-papo se ainda não tiverem um em a lista de bate-papos", destaca o site WABetaInfo.

    "Alguns testadores também podem notar uma melhor sincronização de mensagens dentro do chat com seu próprio número de telefone [...]: se você enviar uma mensagem [para ele], será sempre sincronizado com seus outros dispositivos vinculados, pois não é mais um recurso incompatível ao usar vários dispositivos", completa.

    O WhatsApp tem testado outras funcionalidades também. Confira a seguir um resumo do que pode começar a funcionar.

    1. Ícones de imagens em grupos

    Ainda segundo o site, os usuários que não possuírem uma foto de perfil em determinado grupo e tiverem nomes semelhantes com outro contato, automaticamente terão a foto substituída pela imagem padrão desse grupo

    A ideia, ainda em teste, é facilitar a identificação das pessoas.

    2. Silenciar automaticamente grandes bate-papos em grupo

    O WhatsApp também está desenvolvendo um recurso capaz de silenciar automaticamente grandes grupos, uma vez que a plataforma liberou bate-papos de até 1.024 participantes para alguns testadores.

    Ainda não se sabe se a plataforma irá silenciar automaticamente grandes grupos quando os usuários ingressam neles ou se será silenciado quando o grupo atingir 512 participantes - quantidade já liberada para usuários em geral. Por ser uma funcionalidade ainda em desenvolvimento, ela não está disponível nem para testadores beta

    3. Atalhos no teclado

    Atalhos dentro da plataforma para web e desktop devem ser ativados para executar diversos comandos. Uma página de atalhos disponíveis foi divulgada. São eles:

    1. Novo chat: Ctrl + N
    2. Fechar bate-papo atual: Ctrl + C
    3. Novo grupo: Ctrl + Shift + N
    4. Pesquisa geral: Ctrl + F
    5. Pesquisa em bate-papo: Ctrl + Shift + F
    6. Configurações: Ctrl + P
    7. Alternar mudo: Ctrl + M
    8. Alternar leitura: Ctrl + U
    9. de emoji: Ctrl + Shift + M
    10. GIF: Ctrl + G
    11. Bate-papo anterior: Ctrl + Shift

    4. Avatar

    Os usuários poderão criar seus próprios avatares para usarem como uma forma de se expressarem. Após configurar seu avatar, o aplicativo, automaticamente, irá criar um pacote de adesivos para ser compartilhado com seus contatos. O avatar pode ainda ser usado como foto de perfil do seu WhatsApp.

    *Com texto de Nicole D'Almeida, em colaboração para Tilt