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

Vasco

Diretor de Observatório do Racismo elogia ação do Vasco: "Dando resultado"

Professor Júnior conversa com os jogadores do Vasco sobre racismo antes de treino no CT do Almirante - Departamento de Marketing do Vasco
Professor Júnior conversa com os jogadores do Vasco sobre racismo antes de treino no CT do Almirante Imagem: Departamento de Marketing do Vasco

Bruno Braz

Do UOL, no Rio de Janeiro

08/05/2021 12h00

Diretor do Observatório da Discriminação Racial no Futebol, Marcelo Carvalho elogiou a ação do Vasco realizada na última quarta-feira (5), quando convidou um professor de História para comandar um debate sobre racismo com o elenco profissional antes do treinamento no CT do Almirante.

Em sua avaliação, a atividade fará o atleta ficar mais atento quando sofrer algum tipo de discriminação dentro e fora de campo. Além disso, acredita que o clube transmite um acolhimento ao seu elenco.

"Eu achei a ação muito boa, porque a o conhecimento que a gente fala que precisa ar. Quando tu conversa com os jogadores o que é racismo, se a o entendimento de que não é só insulto e xingamento. Então eles ficarão muito mais atentos quando sofrerem. Quando tu empodera, também mostra que o clube está junto por essa luta. a a mensagem de que quando eles sofrerem racismo no campo ou fora dele, devem se posicionar porque tem o clube por trás. a uma força, um acolhimento necessário", avaliou ao UOL Esporte.

Na concepção de Marcelo Carvalho, o jogador de futebol está mais envolvido com as causas raciais de uns tempos para cá. Além disso, ele já vê outros clubes, além do Vasco, com ações neste sentido.

"Eu acho fundamental [este tipo de ação]. Estou sabendo de outros clubes que estão fazendo essas ações e isso está dando um resultado positivo. Os jogadores estão falando mais de racismo, não estão esperando um caso acontecer para se posicionar", destacou.

Camisa do Observatório vira sucesso de vendas

Camisa do Observatório da Discriminação Racial no Futebol é sucesso de vendas: verba ajuda a manter o projeto - Divulgação / Observatório da Discriminação Racial no Futebol - Divulgação / Observatório da Discriminação Racial no Futebol
Camisa do Observatório da Discriminação Racial no Futebol é sucesso de vendas: verba ajuda a manter o projeto
Imagem: Divulgação / Observatório da Discriminação Racial no Futebol

Voluntário e ainda sem investimento do setor privado, o Observatório da Discriminação Racial no Futebol lançou recentemente uma camisa "para o torcedor antirrascista" com o propósito de ajudar financeiramente o projeto. Ela possui referências africanas e tem sido um sucesso de vendas na internet.

Com modelos que variam entre R$ 99 e R$ 119, os produtos geraram pedidos na pré-venda muito acima das expectativas, algo que fez, inclusive, os idealizadores reorganizarem a logística, já que a fabricante não consegue produzir mais do que 500 camisas num primeiro momento.

"A camisa foi um sucesso, vendeu 400 peças na pré-venda. Nem nós e nem o fornecedor imaginávamos que teríamos estes números. E o legal é que todo mundo que comprou entendia que a camisa estava bonita, mas também sabia que comprando ajudaria o projeto. O Observatório do Racismo ainda é um projeto voluntário, que não recebe grana de instituto, então isso ajuda a manter o projeto. O torcedor está entendendo isso. Muita gente que eu nem esperava que eu ia presentear, já estava comprando", destacou Marcelo.

Vasco