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

Karina Bacchi se desculpa após criticar reação de Ewbank a ataque racista

Karina Bacchi pede desculpas após criticar Gio Ewbank  - Reprodução/ Instagram @alexsantanaphotographer @gioewbank @karinabacchi
Karina Bacchi pede desculpas após criticar Gio Ewbank Imagem: Reprodução/ Instagram @alexsantanaphotographer @gioewbank @karinabacchi

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

12/08/2022 22h07Atualizada em 12/08/2022 23h14

Karina Bacchi, 45 anos, se desculpou após criticar a reação de Giovanna Ewbank, 35, aos ataques racistas de uma mulher aos seus filhos, Titi e Bless, em Portugal.

Nos stories do Instagram, a atriz disse "não compactuar ou apoiar" atitudes racistas:

"Jamais sentirei a dor de muitos, mesmo desejando diariamente ajudar a curar feridas. Apesar de também sentir minhas dores e as dores alheias muitas vezes não compartilhadas", iniciou ela.

"Minha intenção jamais será ferir, pois ainda desejo sim ver mais paz no mundo. Mesmo também recebendo insultos daqueles que distorcem minhas palavras ou creem em algo que não sabem a fundo", continuou.

Mesmo assim, mesmo também agredida, não reagirei na mesma medida, continuarei desejando paz, paz, paz. Por um mundo melhor, por todos nós. Sei que jamais serei agredida por ser negra, jamais serei ofendida por minha raça, por pessoas sem coração, por quem não sabe que a cor da pele não define quem somos, mesmo tendo uma bisavó negra e outros familiares também. Karina Bacchi

"Mas já fui chamada de branca nojenta, imunda, entre outros milhares de insultos nos comentários das redes sociais, destilados por pessoas que desejam respeito", se defendeu a atriz. "Sinto sim, dor em ver alguém ando por isso, até mais do que quando eu mesma o. Sinto a dor de ser mulher, a dor de ser mãe, a cruz de ser cristã. Que sejamos mais pacíficos, mais brandos, mais amorosos", concluiu.

Karina Bacchi pede desculpas a Gio Ewbank - Reprodução/Imstagram - Reprodução/Imstagram
Imagem: Reprodução/Imstagram

Karina Bacchi pede desculpas a Gio Ewbank - Reprodução/Imstagram - Reprodução/Imstagram
Imagem: Reprodução/Imstagram

"Exemplo?"

Ontem, em seu podcast "Positivamente", Karina Bacchi citou o caso de racismo sem mencionar o nome de Giovanna Ewbank e se mostrou contrariada pela atriz ter sido exaltada por ter confrontado a mulher.

"Ela para defender os filhos, xingou muito aquela pessoa, cuspiu, bateu e todo mundo a favor daquela pessoa. 'Poxa, que máximo! Ela fez é pouco porque uma mãe leoa faz isso, tem que fazer isso para defender o filho'. [...] Eu concordo que a gente tem que defender os nossos filhos, mas eu não acredito que a defesa esteja em cuspir, em xingar, em bater, em agredir e o povo achando que a pessoa fez pouco", criticou.

Em suas redes sociais, Giovanna Ewbank reagiu à "indireta": "O fato de incomodar mais eu ter revidado agressão racista, mostra como se ignora a violência que meus filhos e os angolanos sofreram. Diz muito mais sobre ela e quem concorda com ela [do] que sobre mim!", disse a mulher de Bruno Gagliasso.