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

Josias de Souza

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

PF tira do armário plano de golpe de Bolsonaro

Jair Bolsonaro e Anderson torres - Getty Images
Jair Bolsonaro e Anderson torres Imagem: Getty Images

Colunista do UOL

12/01/2023 19h01

Receba os novos posts desta coluna no seu e-mail

Email inválido

Antes de se refugiar na Flórida, Bolsonaro levou ao ar sua última transmissão ao vivo pelas redes sociais. Aconteceu em 30 de dezembro, antevéspera da posse de Lula. Dirigindo-se aos seus apoiadores, Bolsonaro declarou a certa altura: "Eu busquei dentro das quatro linhas, dentro das leis, saída para isso aí." Ficou subentendido que "isso aí" era a posse do adversário. O capitão insinuou que lhe faltou apoio para uma virada de mesa. "Certas medidas têm que ter apoio do Parlamento, do Supremo, de outros órgãos e instituições."

Na última terça-feira, apenas 12 dias depois desta derradeira live de Bolsonaro, a Polícia Federal realizou batida de busca e apreensão na casa do ex-ministro da Justiça Anderson Torres. Os agentes varejaram o imóvel por ordem do ministro do Supremo Tribunal Federal Alexandre de Moraes. De repente, retiraram do armário do ex-auxiliar de Bolsonaro algo muito parecido com o esboço de um golpe: a minuta de decreto presidencial para instaurar Estado de defesa no Tribunal Superior Eleitoral.

O objetivo da intervenção no TSE, de acordo com o texto da minuta de decreto, seria reverter o resultado da eleição presidencial vencida por Lula. O pretexto seria a apuração de suposto abuso de poder, e pretensas medidas ilegais adotadas pela Justiça Eleitoral antes, durante e depois da eleição presidencial.

Tomado isoladamente, o documento apreendido pela PF complica a situação de Anderson Torres na investigação sobre o Capitólio bolsonarista de 8 de janeiro. Combinada com a live de final de ano, a minuta de decreto aproxima de Bolsonaro o quebra-quebra que deixou um rastro de destruição no Congresso, no Planalto e no Supremo.

O Estado de Defesa está previsto na Constituição. Não serve para intervenções oportunistas em tribunais superiores. Pode ser manejado "para preservar ou restabelecer, em locais s e determinados, a ordem pública ou a paz social ameaçadas por grave e iminente instabilidade institucional ou atingidas por calamidades de grandes proporções na natureza". A coisa precisaria ser submetida ao Conselho da República e ao Conselho de Defesa Nacional.

Na mensagem que levou ao ar antes da posse de Lula, Bolsonaro disse que se recolheu no Alvorada "para não falar" sobre a revolta de seus devotos com o resultado das urnas, "para não tumultuar mais ainda" a conjuntura. "O que houve pelo Brasil", disse Bolsonaro, "foi uma manifestação do povo, que não tinha liderança, não tinha ninguém coordenando."

"Muita gente me critica, diz que eu deveria ter feito alguma coisa", ele acrescentou. "Eu não posso fazer algo que não seja bem feito, e assim os efeitos colaterais sejam danosos." Sem querer Bolsonaro pode ter feito algo bastante útil. Produziu prova contra si mesmo.