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

Após entrevista de ex abusivo de Rowling, organizações trans a defendem

A escritora J.K. Rowling, em Londres; ex-marido confirmou que a agrediu durante o casamento - Reprodução
A escritora J.K. Rowling, em Londres; ex-marido confirmou que a agrediu durante o casamento Imagem: Reprodução

De Universa, em São Paulo

12/06/2020 10h27Atualizada em 12/06/2020 13h00

Várias organizações beneficentes voltadas para a causa transgênero saíram em defesa de J.K. Rowling, a autora de "Harry Potter", após o tabloide britânico "The Sun" publicar uma entrevista com o ex-marido dela.

Na matéria, que apareceu na primeira página do jornal, o ex de Rowling itiu que a agredia e disse que "não lamenta por isso". Ele afirmou que os incidentes, revelados por Rowling em um ensaio em seu site pessoal, foram fatos isolados, e disse que o relacionamento não tinha "um padrão de abuso".

A organização Mermaids, que trabalha apoiando crianças transgênero, escreveu no Twitter: "Nós condenamos a capa do jornal 'The Sun' de hoje. Como uma caridade trans, a nossa equipe lida com casos de abuso doméstico regularmente, e temos solidariedade inquestionável com todas as vítimas desta violência. Nenhuma vítima, ou grupo vulnerável, deveria ser usado para vender jornais".

A Gendered Intelligence, que busca dar melhor qualidade de vida para adultos trans no Reino Unido, seguiu a mesma linha: "Solidariedade com J.K. Rowling neste momento em que um jornal de circulação nacional deu voz a seu abusador. Estamos unidos em condenar isso — não vamos ser transformados em inimigos nesta luta. As pessoas trans sofrem com os mesmos sistemas de opressão, e nós somos contra todas as violências, contra todas as mulheres".

Os comentários da autora

A polêmica em torno de Rowling começou na noite do último dia 6 de junho, quando ela fez uma "brincadeira" no Twitter sobre um artigo do site Devex que mostrava como o novo coronavírus afeta desproporcionalmente "pessoas que menstruam". Rowling ironizou que já havia um termo mais simples para pessoas que menstruam: mulheres.

Os seguidores da autora logo apontaram, no entanto, que homens trans também menstruam, e que mulheres trans não menstruam — e nem por isso não são mulheres. Rowling continuou tuitando sobre o assunto depois.

"Respeito o direito de toda pessoa trans de viver da maneira que lhe parecer autêntica e confortável. Eu marcharia com você se fosse discriminado por ser trans. Ao mesmo tempo, minha vida foi moldada por ser mulher. Não acredito que seja odioso dizer isso", escreveu.

Ela explicou ainda que é "empática com pessoas trans há décadas" e que pensar que ela odeia pessoas trans porque considera questões de gênero "é absurdo".

O ensaio

Em resposta à polêmica sobre suas declarações inicias, a autora assinou um extenso ensaio postado em seu site oficial, onde disse se preocupar com o bem estar de pessoas trans, mas criticou uma "explosão de ativismo" que, no ponto de vista dela, está ameaçando a segurança de mulheres.

Neste mesmo texto, ela falou sobre o seu casamento abusivo, e disse que por isso se solidariza com pessoas trans que sofrem violências.