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

Eduardo Paes define seus 23 secretários municipais; veja lista

O prefeito eleito do Rio de Janeiro, Eduardo Paes, em reunião ontem com todo o secretariado - Beth Santos/Divulgação
O prefeito eleito do Rio de Janeiro, Eduardo Paes, em reunião ontem com todo o secretariado Imagem: Beth Santos/Divulgação

Do UOL, em São Paulo

14/12/2020 08h03

O prefeito eleito do Rio de Janeiro, Eduardo Paes (DEM), anunciou ontem a lista completa do secretariado municipal. Ontem, ele reuniu pela primeira vez todos os secretários e anunciou os quatro novos indicados para as pastas de Ciência e Tecnologia, Willian Coelho; da Terceira Idade, Júnior da Lucinha; de Habitação, Fábio Coutinho e de Proteção e Defesa dos Animais, Vinícius Cordeiro.

"Fizemos uma primeira análise de alguns aspectos, coloquei uma série de questões, lembrei a todos a enorme responsabilidade que temos", disse Paes durante o encontro realizado em um hotel de Copacabana, na zona sul da cidade.

Ao todo serão 23 pastas, oito a mais que a do atual prefeito Marcelo Crivella. Paes disse que isso não aumentará os gastos da prefeitura.

Confira a lista do secretariado de Paes:

  • Salvino Oliveira -- Juventude
  • Renan Ferreirinha -- Educação
  • Maína Celidonio -- Transporte
  • Joyce Trindade -- Mulher
  • Katia Souza -- Infraestrutura
  • Marcus Faustini -- Cultura
  • Chicão Bulhões -- Desenvolvimento Econômico, Inovação e Simplificação
  • Cristiano Beraldo -- Turismo
  • Brenno Carnevale -- Ordem Pública
  • Vinicius Cordeiro -- Proteção Animal
  • Jorge Felippe Neto -- Trabalho e Renda
  • Willian Coelho -- Ciência e Tecnologia
  • Júnior da Lucinha -- Terceira Idade
  • Fábio Dalmasso Coutinho -- Habitação
  • Marcelo Calero -- Governo e Integridade
  • Pedro Paulo -- Fazenda e Planejamento
  • Gulherme Schleder -- Esporte
  • Washington Fajardo -- Planejamento Urbano
  • Daniel Soranz -- Saúde
  • Ana Laura Secco -- Conservação
  • Laura Carneiro -- Assistência Social
  • Marli Peçanha -- Ação Comunitária
  • Eduardo Cavalier -- Desenvolvimento Sustentável e Meio Ambiente

Os nomes dos subprefeitos da cidade e responsáveis pelas autarquias também foram anunciados. Assumem as subprefeituras na gestão de Paes Diego Vaz Ferreira (Zona Norte), Ana Maria Ribeiro (Zona Sul), Edson Menezes (Zona Oeste), Leonardo Leal Regis (Centro), Talita Galhardo (Jacarepaguá), Wagner Coé (Tijuca), Rodrigo Toledo (Ilha do Goverador, Fundão, Paquetá) e Raphael Lima (Barra da Tijuca).