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

Jameela Jamil diz que levou soco no rosto após rejeitar ficar com um homem

Jameela Jamil - Getty Images
Jameela Jamil Imagem: Getty Images

da Universa, em São Paulo

26/03/2019 11h28

Jameela Jamil, conhecida pela série "O Bom Lugar", revelou que chegou a ser fisicamente agredida por um homem após rejeitar um convite para sair com ele. Na época, a atriz tinha 19 anos.

A história foi relembrada por Jameela no Twitter no domingo (24) em uma série de posts em que ela também relata um assédio que ela sofreu recentemente.

"Saí com uma amiga. Um homem me olha. O homem se aproxima de mim para me dar o número dele. Eu explico que tenho namorado, mas o agradeço por oferecer. Ele então ameaça a minha carreira, diz que é bom que eu me lembre que eu o rejeitei. E então grita comigo dizendo que eu sou de baixo nível..."

Uma seguidora então observou que "é triste" que Jameela tivesse que mencionar um namorado para conseguir se desvencilhar de uma aproximação agressiva. Ela explicou que adota este tipo de discurso desde que foi agredida por um assediador.

"Eu uma vez disse 'não, obrigada' para um homem quando tinha 19 anos e não tinha uma desculpa. Ele me deu um soco no rosto. Depois disso, se eu tiver ou não tiver um namorado, eu digo que tenho. Ser mulher é verdadeiramente e constantemente assustador. É como existir sobre uma camada fina de gelo."

Em resposta à atriz, outras mulheres compartilharam histórias semelhantes. Uma seguidora afirmou que já foi chamada de "lésbica de TPM" por não se interessar por um homem que demonstrou interesse por ela e outra disse que tem um acordo com amigos do sexo masculino mais próximos em que, caso se sinta ameaçada por qualquer motivo, pode segurar a mão deles sem ter que explicar a situação.

Diante do tuíte de uma garota que contou ter sido "tocada de maneira inapropriada" por um homem enquanto esperava o transporte público, e que depois foi xingada de 'vadia feia' por manifestar seu desconforto, Jameela concluiu: "É assim que é ser uma menina neste mundo."