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

Boulos ataca vice e 'obras eleitoreiras'; Covas foca em gestão na pandemia

Do UOL, em São Paulo*

20/11/2020 00h11Atualizada em 20/11/2020 08h05

No segundo debate entre candidatos no segundo turno para a Prefeitura de São Paulo, as estratégias dos dois adversários foram diferentes.

Guilherme Boulos (PSOL) atacou o vice na chapa de Bruno Covas (PSDB) e a gestão do atual prefeito durante a pandemia. Já o tucano focou em exaltar sua experiência e as medidas tomadas para enfrentar o novo coronavírus.

Boulos disse que Covas priorizou "obras eleitoreiras", como outras gestões tucanas, que "abandonaram a prefeitura".

"A prefeitura preferiu obras eleitoreiras, todo mundo viu, calçada nova sendo quebrada, um monte de recapeamento na véspera de eleição, e não fez as obras com o dinheiro que estava lá disponível. Esse dinheiro existe", criticou, dizendo que priorizará, se eleito, moradias populares.

Também pediu para Covas responder se colocaria a mão no fogo por Ricardo Nunes (MDB), seu vice na chapa.

Segundo o jornal Folha de S.Paulo, uma entidade ligada a Nunes pagou com dinheiro público empresas investigadas na máfia das creches e uma dedetizadora que pertence à família do parlamentar. Ao UOL, a assessoria de Nunes disse que "a relação do vereador com a entidade se deve pelo trabalho social que tem com dezenas de entidades".

Covas defendeu seu vice, dizendo que ele não tem nenhum processo no Judiciário. "Não há um indício de que ele seja qualquer caso de corrupção. Ele, sim, foi lutar para conseguir recursos para a cidade. Ele conseguiu retomar R$ 1,2 bilhão que os bancos deviam para a cidade de São Paulo. Fazer discurso é muito fácil; o difícil é enfrentar bancos como o vereador Ricardo Nunes fez."

O atual prefeito aproveitou a alta aprovação que tem da população na gestão durante a pandemia da covid-19. Disse que falar em lockdown depois das eleições é fake news e que a volta às aulas ainda é prematura pelo que dizem os técnicos da área da saúde.

"Sei da aflição que pais e mães têm [pela volta das escolas], mas não é o momento", disse Covas. Segundo ele, há ainda uma quantidade muito grande de crianças não imunizadas. O tucano voltou a dizer que o vírus não é de esquerda, nem de direita, e que precisa ser enfrentado. "São Paulo fez a lição de casa. Todos que buscaram receberam tratamento."

O psolista, por sua vez, lamentou que o governador João Doria e o presidente Jair Bolsonaro tenham tornado a questão uma disputa política. "É estranho o governo definir a data pós-eleição para decidir sobre a quarentena."

Covas disse que enfrentaria o vírus "sem pressão".

Por sua vez, questionou Boulos sobre sua defesa da gestão de Fernando Haddad (PT) na prefeitura. Questionou, por exemplo, o encerramento do programa, pela gestão petista, do Mãe Paulistana, voltado para gestantes.

"Bruno, eu não vou interromper nenhum programa que esteja trazendo benefício. Pelo contrário, vou ampliar", respondeu Boulos.

Covas e Boulos istraram melhor o tempo disponível. Na abertura do programa, cada um tinha quatro minutos para usar no início ou no final do debate. Ambos terminaram com exatos dois minutos e quatro segundos. E assim continuaram, com tempos equivalentes durante todo o evento.

Covas está na frente nas pesquisas

Na primeira pesquisa feita pelo Ibope, Bruno Covas lidera com 47% de intenções de voto totais. Boulos (PSOL) tem 35%. A margem de erro é de três pontos percentuais, para mais ou para menos.

Hoje, o Datafolha apontou índices parecidos: Covas com 48% e 35% para Boulos, considerando os votos totais. A margem de erro também é de três pontos percentuais.

* Colaboraram Beatriz Montesanti, Carolina Marins, Cleber Souza, Felipe Oliveira, Gilvan Marques, Guilherme Botacini, João Victor Miranda, Leonardo Martins, Lucas Borges Teixeira e Roberto Júnior.