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

Ricardo Feltrin

OPINIÃO

Opinião: Aos 60 anos, Xuxa virou uma voz feroz da democracia

Xuxa Meneghel - Divulgação/Blad Meneghel
Xuxa Meneghel Imagem: Divulgação/Blad Meneghel

Colunista do UOL

27/03/2023 04h05

Xuxa Meneghel é prova de que é possível renascer a qualquer ponto da vida, com qualquer idade. Claro, isso também só ocorreu porque ela foi abençoada com um dom. O de comunicar.

Para mim, a diferença entre um apresentador e um comunicador é que o segundo consegue falar com todas as idades, raças, credos, classes sociais e gêneros. O comunicador pleno também se posiciona.

Nesse quesito, Xuxa é um caso único.

A maioria das personalidades nacionais da TV evita se pronunciar por questões políticas ou financeiras.

Ela, não.

Não me lembro de outra celebridade que nos últimos cinco anos tenha sofrido tanto linchamento, cancelamento; que tenha gasto tanto dinheiro para processar homofóbicos famosos ou anônimos; que tenha colocado a cara e as redes sociais para bater (e apanhar).

Nos últimos anos, se tornou uma bandeira da democracia, da ciência, do movimento LGBT; e agora também do veganismo.

Xuxa hoje combate a homofobia e a transfobia apresentando um reality com drags. Nem parece, mas é um simbólico tapa de plumas e paetês na cara dos intolerantes.

Globo? Que Globo?

Curiosamente, ela está conseguindo afastar de sua aura até mesmo o nome Globo.

Notem que, em muitas entrevistas com ela, atualmente, os jornalistas nem sequer mais perguntam sobre Globo. Descolou.

Hoje ela produz conteúdo (em vídeo e letras) transbordando diversidade, respeito ao próximo, educação e educação alimentar.

Fora, fascistas

Notem também que Xuxa baniu de sua vida qualquer um (a) que mexeu com sua consciência. Por exemplo, fechou a porta de sua casa para ex-amigos que declararam apoio à ditadura e fizeram declarações homofóbicas. Botou essa gente para correr.

Xuxa pediu a cassação da Damares. Bateu boca com os filhotes de Bolsonaro; aguentou linchamento de olavistas e até de apresentadores e donos de outras TVs; mas ficou firme.

Lembram que ela não deu nem sequer um autógrafo para uma bolsonarista?!

Isso, para mim, se chama índole. Consciência de si e de seu lugar no mundo e em seu próprio país.

Quando o Brasil mais precisou, ela estava lá na trincheira.

Ainda está. Que Xuxa fique mais 60 anos com a gente.

Ricardo Feltrin no Twitter, Facebook, Instagram, site Ooops e YouTube