;(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();
})();
Solange chora e sela paz com Erasmo após discussão em jogo da discórdia
A Fazenda 2021: Solange chora explicando por que se sentiu atacada por Erasmo Imagem: Reprodução/Playplus
Colaboração para Splash, em São Paulo
02/11/2021 11h15Atualizada em 02/11/2021 17h38
Solange Gomes e Erasmo Viana conversaram hoje depois de entrarem em guerra após o jogo da discórdia, que aconteceu na noite de domingo em "A Fazenda 13" (RecordTV). A peoa acusou o influenciador de agressão à mulher, enquanto Erasmo a chamou de preguiçosa e disse que a ex-banheira do Gugu estava "esperando um príncipe encantado". Solange tentou bater em Erasmo e precisou ser contida por outros peões.
A peoa começou a conversa dizendo que não conhecia a relação de Erasmo Viana com a ex-mulher, Gabriela Pugliesi, e pediu desculpas se engoliu o "até", quando acusou o peão de ser alguém que "'até' bate em mulher".
Ela disse que ficou ferida quando Erasmo disse que ela estaria esperando um "príncipe encantado", porque sempre foi extremamente estereotipada por trabalhar com o corpo e sensualidade. Solange ainda contou que, quando engravidou, foi acusada de tê-lo feito propositalmente para conseguir dinheiro. Ela reiterou que é difícil criar a filha como mãe solo.
A peoa ainda disse que, a forma com que Erasmo gritou no dia do jogo da discórdia a remeteu à forma com que um ex abusivo gritava com ela. "Eu prometi para mim mesma que nenhum homem gritaria mais comigo", falou, com a voz embargada.
Imagem: Reprodução/Playplus
O influenciador fitness pediu desculpas pelas coisas que falou e apontou que a ex-banheira do Gugu também trouxe assuntos que são delicados para ele, como o fim de seu casamento e acusá-lo do crime de violência doméstica.
Erasmo também citou o episódio em que Solange disse que ele era grosseiro por não se dispor a encher o balde para ela quando ela estava na baia. "Você foi querer usar isso contra mim, sendo que não é um defeito. Você poderia ter se incomodado e falado de outra forma. Sendo que, quando você pediu [para pegar água com o balde outras vezes], eu peguei pra você".
Os dois entraram em consenso que não conheciam a história do outro e, por isso, não poderiam dizer coisas tão graves a respeito do outro. Eles concordaram em seguir o jogo de forma respeitosa.
A Fazenda 2021: Os looks escolhidos por Adriane Galisteu para o reality
1 / 72
A Fazenda 2021: Adriane Galisteu na noite da nona eliminação
Reprodução/PlayPlus
2 / 72
A Fazenda 2021: Adriane Galisteu na noite da formação da oitava roça
Reprodução/PlayPlus
3 / 72
A Fazenda 2021: Adriane Galisteu em noite de festa com show sertanejo
Reprodução/Playplus
4 / 72
Aooo peoa!
A Fazenda 2020: Adriane Galisteu fez a estreia com look da Beyoncé