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

Nina Lemos

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Yasmin e Medina: quando um casal grude acha que o mundo gira em torno dele

Yasmin Brunet reclamou que não poderá acompanhar Gabriel Medina nos Jogos Olímpicos de Tóquio - Reprodução/Instagram
Yasmin Brunet reclamou que não poderá acompanhar Gabriel Medina nos Jogos Olímpicos de Tóquio Imagem: Reprodução/Instagram

Colunista de Universa

20/07/2021 04h00

Poucas coisas são mais chatas do que um "casal grude", aquelas pessoas que, quando começam um relacionamento, largam amigos, am a ter uma conta de casal no Facebook e dividem senha das redes sociais. Eles podem ser pessoas ótimas separadamente. Mas a instituição que formam juntos é chata.

Isso porque quando dois seres humanos se unem e formam um casal desses, em casos graves, eles se acham tão especiais que, envoltos na bolha cor-de-rosa onde moram, am a ignorar o resto do mundo e a viver em uma realidade paralela onde só existe o relacionamento dos dois. Isso cria problema com os amigos, com a família deles e, em casos graves, até no trabalho. A modelo Yasmin Brunet e do surfista Gabriel Medina são um exemplo clássico desse tipo de casal.

Os dois conseguiram levar o estereótipo do casal grude as últimas consequências. Se você conseguiu viver até aqui sem saber do que se trata (eles causaram tanto que o assunto está em todo lado) explico: os dois protagonizaram nos últimos meses uma novela onde tentavam convencer o COB (Comitê Olímpico Brasileiro) de que Yasmin PRECISAVA viajar com o marido para as Olimpíadas (!).

Só tem um detalhe, que os dois pareceram ignorar. Nessas Olimpíadas, as viagens de acompanhantes são mega restritas. Afinal, estamos em uma pandemia mundial de um vírus mutante. Uma pandemia tão séria que no ano ado toda a competição foi cancelada. Quem poderia achar que algo assim aconteceria um dia? E outra: alguns especialistas de saúde afirmam que os Jogos desse ano nem deveriam acontecer. O risco de aumento de contaminação com a variante Delta é gigante.

Por isso, os atletas não podem ter a companhia dos familiares. No caso do surf, cada atleta só pode levar uma pessoa da área técnica. E não é que Gabriel e Yasmin cismaram que ela deveria ir ocupando a vaga de "técnico de surf"?

O pedido foi negado. Mas o caso teve vários capítulos, já que os dois, como crianças mimadas que não parecem acostumadas a ouvir não, bateram pé. Deu errado. Medina viajou sem Yasmin. Mas, no aeroporto, declarou: "É chato, não estou indo 100%. É ela quem me dá força e eu gosto de estar junto dela."

Querido Medina, eu poderia te falar tudo que é chato nessa pandemia, mas isso faria essa coluna ficar muito longa, já que a lista é enorme. E no caso de gostar de estar junto de pessoas, muitos de nós não veem seus familiares há quase dois anos por causa da pandemia! E, mesmo assim, ainda nos sentimos privilegiados se nenhum dos nossos familiares morreu.

Duro? Baixo astral? Pode até ser. Mas é a realidade. E não, não existe amor ou relacionamento que justifique a perda de conexão com o mundo real e a capacidade de olhar em volta.

Por mais que vocês se amem, por mais que vocês vivam um momento especial (e isso é ótimo!) o mundo não gira em torno de vocês. Isso vale para qualquer casal apaixonado que se mudou para o mundo da realidade paralela. Aprendam.