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

Se eleito, Boulos promete fiscalizar parcerias e valorizar 'gestão direta'

O candidato Guilherme Boulos (PSOL) durante "Encontro de Partidos em Apoio a Boulos e Erundina" - Roberto Casimiro/FotoArena/Estadão Conteúdo
O candidato Guilherme Boulos (PSOL) durante 'Encontro de Partidos em Apoio a Boulos e Erundina' Imagem: Roberto Casimiro/FotoArena/Estadão Conteúdo

Do UOL, em São Paulo

23/11/2020 23h51

Candidato à prefeitura de São Paulo, Guilherme Boulos (PSOL) declarou hoje em entrevista ao Roda Viva, da TV Cultura, que não pretende fazer cortes em organizações sociais que atuam nas áreas de Saúde e Educação, mas que pretende, sim, fiscalizar as parcerias.

Não vou fazer qualquer ruptura, até porque isso geraria um caos no atendimento à população. Mas eu vou valorizar o serviço público e a gestão direta. E, no caso das OS [Organizações Sociais] e terceirizações, fazer a fiscalização, botar a lupa onde tem contrato errado e garantir que os trabalhadores sejam respeitados

Boulos mencionou ter entrado com uma ação na Justiça Eleitoral contra seu adversário, Bruno Covas (PSDB), por usar "máquina pública e a rede de entidades parceiras da prefeitura para criar terrorismo entre os profissionais de educação infantil das creches dizendo que vou chegar e demitir todo mundo e romper contratos".

Mais cedo, os advogados do psolista acionaram a Justiça Eleitoral por suposto abuso de poder. A ação tem como base um áudio divulgado pelo secretário da Educação, Bruno Caetano, criticando Boulos e dizendo que ele faria alterações em creches conveniadas da cidade.

Existem entidades parceiras, tanto na educação como OS [Organizações Sociais] da Saúde, algumas delas prestam bom serviço. Inclusive na educação infantil, muitas delas prestam bom serviço. Nesse caso, os convênios serão mantidos. É a ampliação da rede que quero fazer a partir de contratação direta e gestão direta

* Colaboraram Felipe Oliveira, Gilvan Marques, João Victor Miranda e Juliana Arreguy