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

Crivella apresenta mais de 400 páginas de defesa contra impeachment no Rio

12.jun.2018 - O prefeito do Rio, Marcelo Crivella (PRB), durante evento da prefeitura - Marcelo Regua/Agência O Globo
12.jun.2018 - O prefeito do Rio, Marcelo Crivella (PRB), durante evento da prefeitura Imagem: Marcelo Regua/Agência O Globo

Gabriel Sabóia

Do UOL, no Rio

17/04/2019 22h22

O prefeito do Rio de Janeiro, Marcelo Crivella (PRB), apresentou hoje a sua defesa à denúncia que motivou a abertura de um processo de impeachment contra ele na Câmara dos Vereadores da cidade.

No documento com mais de 400 páginas, Crivella argumenta aos 51 vereadores da capital fluminense que não beneficiou duas concessionárias que istravam anúncios publicitários em pontos de ônibus ao renovar os seus contratos sem licitação.

A chamada Comissão Processante - formada pelos vereadores Willian Coelho (MDB), Luis Carlos Ramos Filho (Podemos) e Paulo Messina (PROS) - analisará o documento enviado por Crivella e tem até o próximo dia 29 para redigir um relatório favorável ou contrário à cassação do prefeito.

Ainda que a Comissão Processante opte pelo arquivamento do processo de impeachment, esta decisão será votada pelo plenário da Câmara, que pode decidir pela continuidade do rito de deposição de Crivella.

Linha sucessória alterada pela morte do vice-prefeito

Se Crivella for cassado, o presidente da Câmara, Jorge Felippe (MDB), assumirá temporariamente a Prefeitura do Rio. Isso porque o vice-prefeito eleito da cidade, Fernando Mac Dowell, morreu no ano ado, fazendo de Felippe o primeiro na linha sucessória do município.

O resultado da votação pela abertura de processo de impeachment mostrou, em números, a perda de apoio do prefeito na Câmara Municipal do Rio de Janeiro. É o quarto pedido analisado pela Casa desde 2016 para que ele tenha o mandato cassado, mas apenas o primeiro a ser acolhido.

Com a Câmara cheia, foram 35 votos favoráveis ao impeachment, mais que o dobro do registrado em duas votações anteriores, em 2018.

Entenda o pedido de impeachment

De acordo com o pedido de impeachment, o prefeito renovou no fim de 2018 um contrato com duas empresas, sem licitação. A medida teria beneficiado as concessionárias Adshel e Cemusa, ambas controladas por grupos estrangeiros.

As duas empresas tinham direito de explorar anúncios em pontos de ônibus e outdoors por 20 anos - o contrato havia sido firmado em 1999 e acabaria neste ano.

Depois desse período, os mobiliários urbanos ariam a pertencer ao município. Crivella teria, então, renovado a concessão sem licitação - o que causou prejuízos aos cofres públicos, segundo argumentou a denúncia.