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

Protesto em Brasília lança boneco Privileco, crítica ao Congresso e ao STF

Versão do boneco inflável foi lançada em Brasília - Hanrrikson Andrade/UOL
Versão do boneco inflável foi lançada em Brasília Imagem: Hanrrikson Andrade/UOL

Hanrrikson de Andrade

Do UOL, em Brasília

26/05/2019 14h41Atualizada em 26/05/2019 15h52

Movimentos de direita que organizam o ato pró-governo em Brasília lançaram hoje o "Privileco", uma versão do "Pixuleco" --inflável que caracteriza o ex-presidente Lula com roupa de presidiário-- para criticar o Judiciário e o Parlamento. O boneco foi uma das atrações da manifestação na capital federal.

O ativista André Lui, que é assessor parlamentar da deputada federal Carla Zambelli (PSL-SP), declarou que o Privileco surgiu para simbolizar a crítica aos "entraves" supostamente criados no Congresso e no STF (Supremo Tribunal Federal) para "atrapalhar" o governo do presidente Jair Bolsonaro (PSL).

Autor intelectual do boneco inflável e criador do Pixuleco, Paulo Gusmão relatou ao UOL que o projeto se baseia na ideia do "lobo em pele de cordeiro", expressão que simbolizaria políticos e membros do Judiciário que fazem lobby contra as reformas de Bolsonaro.

Enquanto a Secretaria de Segurança Pública estimou 20 mil pessoas, os organizadores do ato em Brasília calculam que pelo menos 50 mil estiveram na Esplanada dos Ministérios na manhã de hoje, de acordo com a coordenadora da ONM (Organização Nacional dos Movimentos), Lúcia Otoni.

O grupo iniciou a concentração na altura da Biblioteca Nacional e seguiu em direção à Praça dos Três Poderes, onde estão o Palácio do Planalto e o Congresso. Parte dos manifestantes foi direto para o gramado situado em frente às Casa Legislativa. Não houve registro de confusão.

A maioria dos participantes vestia roupas nas cores da bandeira brasileira, verde e amarela. Havia várias faixas e cartazes em favor de medidas como a reestruturação dos ministérios do governo Bolsonaro, o pacote anticrime o ministro da Justiça e Segurança Pública, Sergio Moro, e a reforma da Previdência.

Por volta de 12h30, um dos carros de som convocou o público a cantar o hino nacional. Algumas pessoas se emocionaram durante a execução. Outras sucumbiram ao forte calor em Brasília e começaram a retornar pela Esplanada dos Ministérios em retirada.

Atos pró-governo ocorrem em vários estados

UOL Notícias