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

'Vamos reabrir a cidade', diz Sebastião Melo em discurso após ir a 2º turno

Sebastião Melo (sem máscara) comemorou ida ao segundo turno ao lado do candidato a vice-prefeito Ricardo Gomes - Mateus Raugust/Divulgação
Sebastião Melo (sem máscara) comemorou ida ao segundo turno ao lado do candidato a vice-prefeito Ricardo Gomes Imagem: Mateus Raugust/Divulgação

Hygino Vasconcellos

Colaboração para o UOL, de Porto Alegre

16/11/2020 01h22

O candidato a prefeito de Porto Alegre Sebastião Melo (MDB) prometeu retirar as restrições impostas na cidade pela pandemia do coronavírus caso vença Manuela D'Ávila (PCdoB) no segundo turno das eleições municipais. Os dois derrotaram ontem o atual prefeito e candidato à reeleição Nelson Marchezan Júnior (PSDB).

"Nós vamos reabrir essa cidade, porque se a roda da economia não girar, não tem dinheiro para creche, não tem dinheiro para tapar buraco, não tem dinheiro para acolher morador em situação de rua", disse o político.

Sebastião Melo (ao centro, erguendo uma folha na mão) comemorou ida para 2º turno em Porto Alegre - Mateus Raugust/Divulgação - Mateus Raugust/Divulgação
Sebastião Melo (ao centro, erguendo uma folha na mão) comemorou ida para 2º turno em Porto Alegre
Imagem: Mateus Raugust/Divulgação

Melo, que já foi vice-prefeito entre 2013 e 2017, disse que não irá aumentar impostos e que vai cancelar a elevação dos valores do IPTU (Imposto Predial e Territorial Urbano) aprovada por Marchezan.

"A partir de primeiro de janeiro, nós vamos reabrir todas as atividades econômicas que estiverem fechadas. Todas!", frisou, aos gritos em pronunciamento após os resultados do TSE (Tribunal Superior Eleitoral) mostrarem seu avanço ao segundo turno.

Prometeu ainda oferecer parcelamento do IPTU e do ISS (Imposto sobre Serviços de Qualquer Natureza).

Aianças

A partir de amanhã, o político já deve discutir alianças. "Vamos reunir a coordenação da campanha, não temos tempo para esperar. Vamos nos rearranjar, vamos conversar com parceiros", disse Melo. Em seguida, disse que dois adversários já entraram em contato, declarando apoio: Valter Nagestein (PSD) e Gustavo Paim (PP).

Melo observou que, nesta nova fase da corrida eleitoral, será preciso "comparar biografias" e "ver quem tem experiência para governar a cidade em um momento de crise". Disse ainda que agora a disputa é "mano a mano", com cinco minutos para cada candidato. E chamou Manuela como "aquela outra que disputa a eleição".

"Aquilo que em 1 minuto e 26 segundos a gente não podia explicar, agora nós vamos ter condições de explicar profundamente o projeto que nos diferencia profundamente daquela outra que disputa a eleição", afirmou.