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

Gabi Martins chora ao expor traição de Lincoln Lau: 'Facada nas costas'

Gabi Martins e Lincoln Lau - Reprodução/Instagram
Gabi Martins e Lincoln Lau Imagem: Reprodução/Instagram

Colaboração para Splash, em São Paulo

17/03/2023 21h29

Gabi Martins, 26, usou sua rede social para expor uma traição do ex-namorado, Lincoln Lau. A cantora surgiu aos prantos ao falar sobre a pressão psicológica que vem sofrendo após terminar o namoro de quatro meses.

Ela ainda compartilhou prints de supostas trocas de mensagens entre Lincoln e Kamille Milane Loquetti, uma mulher que o modelo teria chamado para ir à sua casa enquanto estava se relacionando com Gabi.

A ex-BBB disse, em seus stories, que Lincoln foi abusivo durante os três últimos meses que aram juntos.

"Estou tentando ficar calma, ainda tentando entender as coisas, mas estou extremamente decepcionada, como uma facada nas costas. Descobri hoje a traição. Na segunda-feira, ele fez uma live e deixou vazar o áudio de uma mulher. Os fãs me alertaram, cheguei a questionar e ele desconversou. Preferi acreditar nele, que obviamente mentiu", começou Gabi.

Gabi, então, disse que no começo do relacionamento ele era uma pessoa leve e tranquila: "Depois começou a fazer muitas exigências sobre minha forma de falar, de me vestir... Ele me ligava a cada cinco minutos perguntando onde eu estava, queria que eu provasse que estava trabalhando compondo, que eu mostrasse minhas amigas", explicou.

No desabafo, ela disse que precisava provar ser fiel a ele diariamente: "Foram várias situações desagradáveis que ei."

Por exemplo, escondeu minha roupa no Carnaval porque achou inadequada, queria que eu colocasse uma blusa enquanto era musa do camarote, e eu não coloquei. Ele pegou meu celular e saiu correndo na frente de todo mundo, e eu correndo atrás para ele devolver. Gabi

"ados alguns processos de amadurecimento, descobri que mesmo sendo uma mulher forte e independente, também posso ser uma vítima. Além disso, cabe a mim decidir a hora de parar e não ceder a nenhum tipo de pressão psicológica. Esta sou eu, esta é a Gabi que a vida formou, que não vai deixar se intimidar e vai lutar sempre por seus direitos e por sua liberdade. E fica a dica: a traição e o desvio de conduta de um homem não podem ser ancorados em uma doença séria e com clara necessidade de tratamento", escreveu ela em seu Twitter.

"Nunca espere o pior acontecer, você pode virar uma estatística se não souber identificar alguns sinais. Escolhi me escolher, a assim sempre será! Me priorizar não é abandono, é uma prova de amor a mim e ao próximo!", completou.

Gabi Martins post - Reprodução/Instagram - Reprodução/Instagram
Imagem: Reprodução/Instagram

Gabi Martins faz desabafo - Reprodução/Instagram - Reprodução/Instagram
Imagem: Reprodução/Instagram

 Gabi Martins expõe prints - Reprodução/Instagram - Reprodução/Instagram
Imagem: Reprodução/Instagram