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

Vereador diz ter sido vítima de racismo na Faria Lima: 'Aterrorizado'

Vereador de Embu das Artes, Abidan Henrique (PSB) disse ter sofrido racismo ontem em evento. - Redes sociais/ @AbidanHenrique
Vereador de Embu das Artes, Abidan Henrique (PSB) disse ter sofrido racismo ontem em evento. Imagem: Redes sociais/ @AbidanHenrique

Do UOL, em São Paulo

16/09/2022 15h25

O vereador de Embu das Artes e candidato a deputado estadual Abidan Henrique (PSB) disse ter sofrido racismo e discriminação na tarde de ontem (15) durante um evento no prédio FL Corporate, na Avenida Faria Lima, em São Paulo.

Ele palestraria no local em um evento que era parte da agenda de campanha. Segundo Henrique, ele e dois assessores, também negros, teriam sido impedidos de usar o elevador principal do edifício. Ele afirma que outras pessoas brancas, que estavam com eles, teriam sido autorizadas a usar o equipamento.

Ao UOL, o vereador afirma que sentiu impotência diante do ocorrido. Tanto na entrada quanto na saída, ele afirma, houve discriminação. "Na saída, queríamos chegar no estacionamento, mas fomos 'trancados' em um corredor", afirmou.

"Me senti aterrorizado, não tem outra palavra! Eu senti realmente medo. É muito simbólico o fato ter acontecido na Faria Lima". O vereador também comentou se preocupar com outros funcionários negros que possam ter ado por episódios semelhantes ao dele e ressaltou a importância da luta antirracista na política.

O candidato ao Senado por São Paulo, do mesmo partido de Abidan, Márcio França, se solidarizou nas redes sociais.

A também correligionária e deputada federal, Tabata Amaral, também foi ao Twitter e se manifestou a favor de Abidan.

O vereador disse que se reunirá com seu advogado e tomará medidas judiciais.

O UOL entrou em contato com um representante do prédio FL Corporate. Ele não respondeu aos questionamentos sobre o caso, porque disse que não tinha conhecimento do episódio.