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

Nina Lemos

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Gal apoiou a democracia; não é justo que ela tenha ido embora logo agora

Gal Costa morreu nesta quarta-feira aos 77 anos                      -  MANUELA SCARPA/DIVULGAÇÃO
Gal Costa morreu nesta quarta-feira aos 77 anos Imagem: MANUELA SCARPA/DIVULGAÇÃO

Colunista de Universa

09/11/2022 13h15

Gal Costa, que morreu hoje aos 77 anos, nos deixa órfãos e de luto. Isso porque ela é uma deusa e nós, mulheres brasileiras, devemos muito a ela, à sua liberdade e coragem. Hoje, choramos a morte de um ícone e uma inspiração.

Gal é vanguarda desde sempre e, assim, nos ajudou a abrir muitos caminhos. Ela "desbundou", o que significava ser livre, ainda lá nos anos 1970, com seus amigos e parceiros da vida toda, Caetano Veloso, Gilberto Gil e Maria Bethânia.

Desde sempre foi uma musa, uma cantora genial e uma lançadora de tendência. Era ela a cantora de "Baby", hino da geração dos meus pais, onde fala sobre "tomar sorvete na lanchonete, andar com a gente, nos ver de perto".

Nessa época, Gal era tão musa que a praia que frequentava no Rio de Janeiro ganhou o nome de "Dunas da Gal", o reduto dos descolados em Ipanema, só para a gente lembrar o quanto ela era um ícone de comportamento.

Gal nos acompanhou pela vida toda. Lembro de pular "o balancê, balancê" quando era criança, época em que os adultos me contavam sobre como eram maravilhosos os shows de Gal Costa.

E depois, já adulta, Gal virou religião minha e dos meus amigos com o moderníssimo álbum "Recanto", de 2012, com canções escritas por Caetano, que também produziu o disco, junto de seu filho Moreno Veloso. Vi esse show inúmeras vezes. Chorei em todas.

Ali, Gal canta funk e música eletrônica, moderníssima. Com letras maravilhosas que pareciam prenúncio dos tempos que viriam, ela falava "que neguinho vai para Europa e States e volta cheio de si, neguinho só quer saber de filme em shopping".

Na capa, posou mostrando suas rugas. Linda do mesmo jeito que sempre foi. Na época, há dez anos, ela já anunciava: "Cara do mundo, tempos de escuridão".

Dez anos depois, Gal apoiou Lula e a democracia em seus shows. Ela foi uma das primeiras a fazer o L. Não é justo que ela tenha ido embora logo agora que os "tempos de escuridão" podem nos dar uma trégua. Mas a sua parte ela fez. Mais do que a grande maioria de nós, mortais. Gal é imortal. E o dia em que ela nos deixa devia ser feriado.

"Tudo dói", como ela mesmo canta.