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

Maju não está só! Relembre jornalistas negras que fazem história na TV

Maju homenageia colegas negras em camiseta - Reprodução/Instagram
Maju homenageia colegas negras em camiseta Imagem: Reprodução/Instagram

Da Universa

14/02/2019 10h24

Maria Júlia Coutinho fará história e, no próximo sábado (16), vai estrear como apresentadora do "Jornal Nacional".

Aos 40 anos, ela será a primeira jornalista negra a sentar à bancada do "JN", o telejornal de maior audiência do país, que completa 50 anos em 2019.

Como Maju, outras jornalistas brasileiras negras marcaram momentos inesquecíveis na televisão e provaram o poder da mulher.

  • AgNews

    Glória Maria

    Primeira repórter negra da televisão, Glória Maria é uma referência no jornalismo e, na Globo, participou de coberturas importantes, além de ser reconhecida como uma das repórteres mais desbravadoras da TV brasileira.

  • Adriane Sanseverino/Divulgação

    Joyce Ribeiro

    Com quase 20 anos de carreira, Joyce Ribeiro foi pioneira nas Eleições 2018. Âncora do Jornal da Cultura desde abril de 2018, depois de ser demitida após 13 anos de SBT, ela foi a primeira mulher negra a mediar um debate eleitoral no Brasil Leia mais

  • Reprodução/Facebook

    Dulcinéia Novaes

    Repórter da Rede Paranaense de Comunicação, afiliada à Globo, ela faz parte do quadro da emissora há 30 anos. No programa "Meu Paraná", faz reportagens e comentários sobre preservação ambiental, valores ecológicos e entrevistas com personalidades

  • Reprodução/RedeTV!

    Luciana Camargo

    Após fazer parte da primeira dupla negra a apresentar um telejornal, a jornalista foi promovida a correspondente da RedeTV! nos Estados Unidos, em Nova York. Ela teve agem por canais como Gazeta, Cultura e Globo. Leia mais

  • Reprodução/Instagram

    Luciana Barreto

    Foi âncora e editora-executiva do Repórter Brasil Manhã, da TV Brasil, já trabalhou nos canais Futura, GNT, BandNews e na TV Bandeirantes. Também mestranda em relações étnico-raciais. Uma semana após anunciar sua saída do Sem Censura, o programa foi suspenso.

  • Reprodução/TV Jornal

    Graça Araújo

    A jornalista, que morreu em 2018 após um AVC, ou pela TV Manchete, TV Pernambuco e se tornou chefe de reportagem da TV Jornal, afiliada do SBT em 1992. Na emissora, comandou o TV Jornal Meio-Dia por 26 anos. Na época, Graça era a única apresentadora negra na televisão pernambucana