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

Escola de ética do PSDB e do Covas é a do Aécio, do Alckmin, diz Boulos

O candidato do PSOL a prefeito de São Paulo, Guilherme Boulos, participa de agenda de campanha em Heliópolis, na zona sul - Reprodução/Facebook/guilhermeboulos
O candidato do PSOL a prefeito de São Paulo, Guilherme Boulos, participa de agenda de campanha em Heliópolis, na zona sul Imagem: Reprodução/Facebook/guilhermeboulos

Nathan Lopes

Do UOL, em São Paulo

21/11/2020 18h38

As agendas do candidato do PSOL a prefeito de São Paulo, Guilherme Boulos, foram concentradas pela periferia neste sábado (21). E são nas áreas mais distantes do centro que a campanha tende a se concentrar, já que as intenções de voto nas regiões periféricas estão migrando neste segundo turno mais para seu adversário, Bruno Covas (PSDB), que disputa a reeleição.

E, na disputa pelo eleitorado da periferia, Boulos tem apostado em críticas às gestões do PSDB não só na prefeitura da capital, mas também no governo do estado, comandado pelos tucanos desde 1995.

"A experiência do PSDB em 30 anos em São Paulo é roubar dinheiro do Rodoanel, roubar dinheiro do metrô. Até dinheiro da merenda das crianças eles fizeram máfia. Esse tipo de experiência a gente quer longe da gente", disse Boulos.

"Qual é a escola de experiência e de ética de cada um? A minha escola de experiência e de ética é Luiza Erundina [candidata a vice em sua chapa]. A escola de ética do Bruno, do PSDB me parece que é Aécio Neves, é [Geraldo] Alckmin. Aí cada um faça sua comparação." Os políticos do PSDB citados por Boulos são alvo de investigações da PF (Polícia Federal).

Discursos para a periferia

Em suas críticas à gestão de Covas nos discursos para a periferia, Boulos cita, por exemplo, mudanças no Bilhete Único e problemas envolvendo o Leve Leite. "A gente vai governar para todo mundo, mas com prioridade para o povo", disse Boulos no último ato do dia, em Paraisópolis, na zona sul. "Eles só sabem falar em privatização. Essa turma é tarada por privatização."

Nos pronunciamentos, o candidato do PSOL faz promessas que vão do transporte gratuito para desempregados a programas de moradia na cidade. Falas semelhantes foram feitas mais cedo, em agenda em Heliópolis, onde também fez caminhadas —o que, mais uma vez, gerou aglomerações apesar de especialistas em saúde defenderem o distanciamento social na pandemia.

Boulos têm corrido contra o tempo para mudar o cenário apontado pelas pesquisas. Se a eleição fosse hoje, Datafolha e Ibope apontam que Covas seria reeleito. O segundo turno acontece em 29 de novembro, daqui a pouco mais de uma semana.

"Vai ser de virada. Vai ser aos 48 do segundo tempo. Vai ser com gosto, com sofrimento. Vai ser com emoção. Mas nós vamos ganhar essa prefeitura e devolvê-la para o povo no dia 29", disse Boulos.