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

Marks & Spencer se desculpa após barrar cliente transgênero em provador

Fachada da loja Marks & Spencer - Toby Melville/Reuters
Fachada da loja Marks & Spencer Imagem: Toby Melville/Reuters

De Universa, em São Paulo.

20/02/2020 15h56

Resumo da notícia

  • Marks & Spencer pediu desculpas formais a um cliente transgênero após constrangê-lo
  • Myla Corvidae nasceu com o gênero feminino e agora se identifica como não-binário
  • Cliente disse não que não tem mais vontade de frequentar a loja

A varejista Marks & Spencer pediu desculpas formais a um cliente transgênero após uma funcionária se recusar a deixá-lo usar o provador destinado a homens. Myla Corvidae, 30, nasceu com o gênero feminino e agora se identifica como não-binário.

Durante uma viagem de compras a Aberdeen, na Escócia, Corvidae encontrou vários itens na seção de moda masculina da Marks & Spencer e procurou o provador mais próximo para experimentá-los. Depois de descobrir que não havia atendente nos vestiários, Corvidae entrou e começou a experimentar os itens.

No entanto, quando foi procurar por um tamanho diferente, uma das funcionárias disse que Corvidae não poderia provar as roupas nos vestiários localizados na seção masculina.

"Ela me disse que eu não podia usar os vestiários por serem 'apenas para homens' e disse que eu precisava usar os vestiários no térreo, que são para mulheres", explicou Corvidae.

Depois de Corvidae fazer uma reclamação, um porta-voz da Marks & Spencer itiu que a funcionária cometeu "um erro" e expressou um pedido formal de desculpas pessoalmente e por carta.

Apesar do pedido de desculpas da empresa, Corvidae disse que se sente incapaz de retornar à loja por conta do sofrimento causado pela situação.

"Com honestidade, eu não acho que o pedido de desculpas foi suficiente, não deveria ter acontecido e perdi a confiança na Marks & Spencer como uma empresa por não defender pessoas trans como eu", lamentou.

A loja disse que a empresa oferece provadores que possuem cubículos com fechaduras individuais "para garantir que cada cliente se sinta confortável e tenha a privacidade de que precisa".