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

Braide (Podemos) e Duarte Júnior (Republicanos) fazem 2º turno em São Luís

Eduardo Braide (Podemos) e Duarte Jr. (Republicanos) disputam a prefeitura de São Luis  - Reprodução/Facebook/Arte-UOL
Eduardo Braide (Podemos) e Duarte Jr. (Republicanos) disputam a prefeitura de São Luis Imagem: Reprodução/Facebook/Arte-UOL

Carlos Madeiro

Colaboração para o UOL

15/11/2020 22h38Atualizada em 16/11/2020 01h13

O deputado federal Eduardo Braide (Podemos) vai disputar o segundo turno da eleição em São Luís contra o deputado estadual Duarte Júnior (Republicanos). Os candidatos obtiveram, respectivamente, 37,77% e 22,16% do total de votos na capital maranhense.

O governador Flávio Dino (PCdoB), que se ausentou da campanha até agora, entrará ao lado do republicano no segundo turno.

Eduardo Braide, 44, já havia tido uma votação surpreendente em 2016, quando desbancou nomes de grupos tradicionais da política local e foi ao segundo turno contra o então prefeito Edvaldo Holanda (PSC), que acabou vencendo a disputa. O bom desempenho garantiu a nova candidatura.

Desta vez, mesmo sem apoios importantes, Braide liderou a corrida durante todas as pesquisas eleitorais, mas foi perdendo o fôlego nas últimas semanas.

Durante o primeiro turno, ele foi "acusado" de esconder o apoio de bolsonaristas no estado, como do senador Roberto Rocha (PSDB). Sempre que perguntado sobre alianças, ele repetiu que sua aliança é "com o povo".

Entre os partidos da base de Dino, não houve acordo para um nome único e várias candidaturas ligadas ao governador disputaram o primeiro turno. Para evitar atritos, Dino não participou da campanha até então.

Agora no segundo turno, Dino promete entrar de cabeça no apoio a Duarte, 34. O representante do Republicanos deve receber ainda a ajuda de outros candidatos da base estadual que ficaram fora do segundo turno.

Duarte fez campanha atrelando sua experiência istrativa ao período em que foi presidente do Procon na esfera estadual. Ele repetiu quase como um mantra da campanha a boa gestão que teria feito à frente do órgão.

Sarneys abandonaram o páreo

Na capital maranhense, a família Sarney tentou voltar à disputa eleitoral. A candidatura de Roseana Sarney (MDB) chegou a ser lançada para prefeitura, mas ela desistiu poucos dias antes da convenção com índices de intenção de votos baixos.

O nome escolhido para a disputa foi o do deputado Adriano Sarney (PV), mas que apareceu apenas com 4% das intenções de voto e acabou anunciando a renúncia da disputa no dia 27 de setembro. Depois disso, a família se manteve distante da eleição na capital.