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

Fred Nicácio e Gabriel se acertam: 'Vamos ter respeito um com o outro'

BBB 23: Gabriel e Fred Nicácio se abraçam - Reprodução/Globoplay
BBB 23: Gabriel e Fred Nicácio se abraçam Imagem: Reprodução/Globoplay

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

24/01/2023 13h21Atualizada em 24/01/2023 13h21

Uma das maiores tretas da temporada do BBB 23 (Globo), Gabriel e Fred Nicácio sentaram para conversar e esclarecer pendências.

O brother mais votado da casa de vidro chamou o médico para se desculpar. "Eu queria ter esse perdão pra você, pra um dia eu ser perdoado pelos outros. Pela Bruna, pela família da Bruna. Eu prefiro estar falando aqui e me arrepender lá na frente. Tipo, você sair e continuar falando mal de mim. Prefiro me arrepender de você não ter me perdoado do que me arrepender de não ter tido essa conversa com você", disse Gabriel.

Fred também falou sobre a treta. "O Sapato veio falar comigo ontem. Ele falou: 'O Gabriel é um menino. Ele tá aprendendo. Ele tem 23 anos, ele tá aprendendo muita coisa. Eu sei que você é médico, pensa numa pessoa que tá doente, que precisa tomar remédio. Pensa no Gabriel como um cara doente, que precisa tomar remédio. Isso aqui tá sendo remédio pra ele'. E eu ainda falei: 'Eu entendo, mas às vezes o doente não quer tomar remédio'. E agora eu tô vendo que você quer tomar remédio. E é isso, brother, isso já basta", disse o médico, completando: "Não importa o que foi feito, importa que a gente tá mudando a direção. E não importa a velocidade da parada, importa a direção. Tá nítido a mudança de direção que você tá tendo, pra mim isso é o suficiente".

Os dois combinaram de se respeitar no jogo. "Vamos ter respeito um com o outro. A gente vai dar bom dia, vai ficar tranquilo. Eu sei que você não vai ser um cara falso, eu não vou ser um cara falso. E bota fé que eu tô tentando mudar e ser um cara melhor pra todo mundo aqui, e pra você também. Não quero que a gente saia com esse bagulho no peito", disse Gabriel, agradecendo o rival: "Muito obrigado pela sua empatia. Porque você podia muito bem aqui falar: 'Você tá doente, mas não tô a fim de te ajudar'. Você podia ter feito isso. Eu tava com medo de chamar você e tentar isso".

Fred também agradeceu: "Não iria fazer bem pra ninguém, nem pra você nem pra mim. Obrigado por você ter aberto essa oportunidade de deixar isso resolvido, e vida que segue", disse o médico.

BBB 23: Confira o pódio dos participantes do reality no Jogo da Discórdia

Enquete UOL BBB 23: Qual dupla você quer mandar para o Quarto Secreto?

Enquete encerrada

Total de 99202 votos
72,27%
Reprodução/Globoplay