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

Marco Antonio Villa

OPINIÃO

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

Bolsonaro desrespeita decisão de ministro do STF

O vereador Carlos Bolsonaro com seu pai, o presidente Jair Bolsonaro - Geraldo Magela | Agência Senado
O vereador Carlos Bolsonaro com seu pai, o presidente Jair Bolsonaro Imagem: Geraldo Magela | Agência Senado

Colunista do UOL

28/01/2022 16h24

A recusa de Jair Bolsonaro de comparecer ao depoimento de hoje na Polícia Federal é apenas o primeiro de inúmeros conflitos do presidente da República com o Poder Judiciário. E a cada pesquisa eleitoral com resultados desfavoráveis, a resposta de Bolsonaro será o confronto com os poderes constituídos.

A tendência é de Bolsonaro falar cada vez mais —e de forma desrespeitosa às instituições— para obter apoio automático de cada vez menos eleitores. Desta forma, o seu discurso será dirigido ao bolsonarismo-raíz, os extremistas com forte simpatias nazifascistas.

Este primeiro confronto é apenas um ensaio. Bolsonaro vai aguardar as reações. Diz que pode recorrer ao plenário do STF. Sabe que, dos onze votos, conta com dois garantidos. Mas deve perder, mesmo que por uma pequena margem.

O temor de Bolsonaro não é com um simples depoimento. Isso ele resolve sem grandes problemas. A questão é a abertura de um flanco que ele considera perigoso especialmente para a sua família e, mais especialmente ainda, para o seu filho Carlos, o chefe do gabinete do ódio.

É de conhecimento geral que Carlos é o filho preferido de Bolsonaro. É aquele que dirigiu a campanha de 2018 e deve, na prática, fazer o mesmo neste ano. Foi ele que enfrentou —e venceu— nas urnas a mãe, isto em 1996, quando ainda era menor de idade, sempre agindo a mando do pai.

Carlos tem uma personalidade complexa. É destemperado e não a pressão. Caso as autoridades cheguem até ele - e não faltam motivos— a tendência é que o filho predileto perca as estribeiras. E neste caso, o pai vai entrar em campo para salvar o filho. Salvar do quê? Da prisão.

O vereador está numa sinuca de bico. Não tem foro privilegiado. Poderia obtê-lo sendo candidato a deputado federal, mas a legislação proíbe. A saída seria se o pai —Jair Bolsonaro— renunciasse à Presidência da República. Neste caso não haveria nenhum obstáculo legal. E, ainda, Bolsonaro poderia até se candidatar, por exemplo, ao Senado pelo Rio de Janeiro, garantindo foro privilegiado para si.

As hipóteses apresentadas não são malucas, muito pelo contrário. Bolsonaro sabe que Carlos corre perigo de prisão. Cometeu inúmeros crimes chefiando a quadrilha do gabinete do ódio. O embate com o ministro Alexandre de Moraes é apenas um teste, um ensaio, nada mais que isso. Mas prenuncia que poderemos ter surpresas, inclusive no campo eleitoral.