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

Mês do Orgulho LGBTQ+

Parada LGBT inunda São Paulo exigindo 'respeito' em um Brasil conservador

Público durante a Parada LGBTQ+ em São Paulo neste domingo (23), na Avenida Paulista - Jardiel Carvalho/UOL
Público durante a Parada LGBTQ+ em São Paulo neste domingo (23), na Avenida Paulista Imagem: Jardiel Carvalho/UOL

23/06/2019 20h20

São Paulo, 23 Jun 2019 (AFP) - A tradicional Parada do orgulho LGBT começou na manhã deste domingo em São Paulo exigindo "respeito" à diversidade, em um ano em que o Brasil estreia um governo ultraconservador, com Jair Bolsonaro na presidência.

A 23a edição da festa foi realizada, como todos os anos, nas avenidas Paulista e Consolação da capital econômica da América Latina. Cheia de cores, fantasias e música, transmitiu uma forte mensagem política.

"Vim lutar contra a homofobia e a falta de respeito", afirmou Monique Barber, de 31 anos, que no começo do evento disse ter sofrido um ataque verbal em plena avenida Paulista. "Temos um político homofóbico como presidente e estamos vendo as coisas retrocederem, imagine ser atacado na própria Parada LGBT", acrescentou.

O rosto de Bolsonaro e a hashtag #elenão estamparam vários cartazes que circularam na marcha este domingo, prometendo "resistência".

"Preconceito tem cura, mas com educação", indicava um cartaz que avançava esta manhã em paralelo ao primeiro caminhão de som do desfile.

"Vivemos um momento de retrocesso político e social com Bolsonaro à frente do Brasil, por isso que temos que responder vindo aqui hoje", disse Regina Flores, de 58 anos, que participa da Parada pela primeira vez.

Felipe Ferreira, de 27 anos, disse que o Brasil atual o assusta. "Temos um governo homofóbico e que promove e facilita o porte de armas. Um presidente que não acha que a homofobia é crime e empodera os intolerantes", comenta.

Ferreira, que vive no litoral paulista, explica que a comunidade LGBT é ainda mais vulnerável no interior do país. "Andar de mãos dadas com seu companheiro pode te custar a vida", diz o ativista com uma bandeira arco-íris amarrada no pescoço.

- Empatia -Marina Fernandes, de 19 anos, veio do litoral paulista para "apoiar o movimento". A jovem, que se define como heterossexual, decidiu se unir pela primeira vez à Parada. "Vim porque sinto empatia e porque acredito no respeito ao outro, não precisa ser homossexual para isso", comentou.

Em um domingo ensolarado e morno, o tempo contribuiu para a realização da que é considerada uma das maiores mobilizações pró-LGBT do mundo e que este ano pretendia reunir cerca de três milhões de pessoas.

Dezenove carros de som cruzaram as avenidas que se estendem até o centro da cidade. As atrações principais foram a Spice Girl Mel C, que reou os sucessos do grupo britânico à tarde, além das cantoras Karol Conká, Iza e Luísa Sonza.

O tema deste ano é "50 anos de Stonewall", em homenagem aos protestos contra batidas policiais nesse bar de Nova York em 1969, que se tornaram um marco da luta pelos direitos da comunidade LGBT.

As luzes dos semáforos de pedestres da avenida Paulista foram adaptadas para o evento, e exibiram nos últimos dias casais de bonecos do mesmo sexo.

Um posto médico foi instalado, assim como enormes decorações com as cores do arco-íris, símbolo do movimento. Alguns comércios se somaram à festa com a bandeira colorida.

Mês do Orgulho LGBTQ+