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

Conheça 3 aplicativos para denunciar casos de homofobia

Aplicativos têm sido criados para levantar estatísticas, indicar representantes legais ou mapear locais de risco para LGBT - Getty Images/iStockphoto
Aplicativos têm sido criados para levantar estatísticas, indicar representantes legais ou mapear locais de risco para LGBT Imagem: Getty Images/iStockphoto

Paulo Gratão

Colaboração para Universa

16/07/2019 04h00

Desde junho, quando o STF decidiu que o crime de homofobia deve ser equiparado ao de racismo, aplicativos têm sido criados para levantar estatísticas, indicar representantes legais ou mapear locais de risco para LGBT.

Na esteira da criminalização, o aplicativo Oi Advogado, pensado para conectar pessoas a advogados, por exemplo, criou uma funcionalidade que ajuda a localizar especialistas para denunciar crimes de homofobia. De acordo com uma das coordenadoras do app, Tiziane Machado a busca pelo serviço cresceu significativamente nas últimas semanas.

Aplicativo Oi Advogado cria funcionalidade específica para denúncia de homofobia - Divulgação - Divulgação
Aplicativo Oi Advogado cria funcionalidade específica para denúncia de homofobia
Imagem: Divulgação

"Um terço das pessoas que entra na plataforma diariamente está em busca de informações sobre direitos LGBT. Houve um crescimento também do lado dos advogados cadastrados que oferecem esses serviços", afirma.

O aplicativo é gratuito para usuários, os advogados é quem pagam para poder utilizá-lo. De acordo com Tiziane, todos os profissionais têm seus registros checados na OAB e podem gerar conteúdo.

Informação e segurança

Todxs já recebeu mais de 200 denúncias de homofobia, em todo o Brasil - Divulgação - Divulgação
Todxs já recebeu mais de 200 denúncias de homofobia, em todo o Brasil
Imagem: Divulgação

Um casal gay, amigo de Italo Alves, um dos fundadores da Todxs, foi expulso de um restaurante em Fortaleza, pois estava de mãos dadas. O casal saiu do restaurante e não tomou nenhuma providência, pois não sabia que existia uma lei municipal (9885/12) que multa estabelecimentos que cometem homofobia.

"Nesse momento, percebemos a necessidade de criar um espaço onde as pessoas LGBT do Brasil pudessem consultar as leis de proteção à nossa comunidade. Foi então que surgiu a Todxs, uma organização de educação e transformação", diz o diretor de comunicação do aplicativo, Paulo Vitor Matos.

Além do canal de consulta à legislação, a ferramenta disponibiliza informações sobre organizações em todo o Brasil que trabalham em prol da comunidade, e possui um espaço para denúncias de violência.

Quando uma pessoa sofre agressão, ela a descreve no aplicativo e, assim, ajuda a mapear locais inseguros para LGBT. Eles já receberam cerca de 200 ocorrências. Já a consulta legislativa, foi ada por 10 mil usuários.

Botão de pânico deve ser lançado este ano

Foi durante as últimas eleições, quando surgiram relatos de casos de homofobia, que o arquiteto e urbanista Bruno Jordão de Miranda, 25, e alguns amigos tiveram a ideia do aplicativo Nohs Somos.

No último mês de março, ele sentou-se com os amigos Hottmar Loch, Nadyne Garcia, Felipe Figueira, Douglas Gimli e, juntos, deram forma ao projeto. Atualmente, o aplicativo busca investimentos. De acordo com Miranda, são necessários R$ 88 mil; e 36% deles foi arrecadado. A ferramenta deve ser lançada até o fim do ano em Florianópolis (SC), cidade-sede da Nohs Somos, e em 2020 em todo o país.

"Será uma rede de apoio mútuo para situações de emergência. Terá um 'botão do pânico', em que pessoas próximas receberão localização e sinalização do que está acontecendo com a vítima. E também um mapeamento de locais seguros, apontados pelos próprios usuários, bem como uma lista de serviços que prestam assistência a pessoas LGBT", explica.

Recentemente, a Rappi criou um QR Code com o objetivo de levantar doações para a criação do aplicativo.