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

Briga entre primos no Recife tem memes e provocações nas redes sociais

João Campos (PSB) e Marília Arraes (PT) disputam a Prefeitura do Recife  - Reprodução/Facebook/Arte-UOL
João Campos (PSB) e Marília Arraes (PT) disputam a Prefeitura do Recife Imagem: Reprodução/Facebook/Arte-UOL

Matheus Pichonelli

Colunista do UOL

18/11/2020 14h42Atualizada em 18/11/2020 14h42

Do Recife, uma amiga encaminha um meme que tem sido compartilhado aos montes desde a definição do segundo turno para a prefeitura local.

Na imagem, o ex-governador Miguel Arraes (1916-2005) está numa festa, provavelmente de seu aniversário, e observa a neta segurar os braços de uma criança que se apressava em cortar o bolo. "Peraí, minino. Tu não sabe fazer isso, não!", diz a prima mais velha na montagem.

O mais novo parece na iminência no choro. "Quelu bincá!", responde.

O bisavô repreende: "Solta isso, Joãozinho".

Meme postado por apoiadores da Marília Arraes, candidata do PT contra o primo João Henrique Campos (PSB), no Recife - Reprodução - Reprodução
Meme postado por apoiadores da Marília Arraes, candidata do PT contra o primo João Henrique Campos (PSB), no Recife
Imagem: Reprodução

Parece uma adaptação daquele vídeo-meme em que duas crianças brigam feio na hora de apagar as velas, mas é só uma das muitas armas da campanha na nona maior cidade do país.

Não é difícil reconhecer quem é quem na foto antiga nem a mensagem de fundo, quase uma ordem para o "pivete" da foto segurar a onda e voltar para o fim da fila.

Os primos brigões cresceram, já foram colegas de legenda, mas hoje são adversários em uma das disputas mais acirradas e simbólicas do divórcio dos partidos no campo da esquerda desde 2014.

Marília Arraes, hoje com 36 anos, é a candidata do PT. João Henrique Campos, de 26, concorre pelo PSB. Os partidos, assim como os primos, andavam juntos há até pouco tempo. Hoje estão divididos. E dividiram também uma das oligarquias mais influentes do Nordeste.

Os candidatos reeditam uma disputa que começou na primeira metade da década, quando o ex-ministro e ex-governador Eduardo Campos, pai de João, rompeu com os aliados do PT e se lançou à Presidência contra Dilma Rousseff em 2014. Campos morreu logo no início da campanha daquele ano, em um acidente aéreo.

Apesar do parentesco (são primos de segundo grau, mas primos), Campos e Arraes não têm poupado o porrete na campanha.

Logo após a definição do primeiro turno, a candidata petista correu para o Facebook dizer que não tinha dúvida de que "o amor vai vencer a política do ódio, da mentira e do dinheiro".

O dinheiro, no caso, era uma provocação não muito barata ao primo rico, que conseguiu do fundo eleitoral quase o triplo das verbas adas pela prima, que fez uma campanha mais humilde até aqui.

Em suas redes, ela não tem economizado vídeos e fotos em vermelho estampado colando sua imagem à do ex-presidente Lula, que no começo do ano disse que o Recife precisava de um prefeito, não de um príncipe —em alusão ao filho do seu ex-ministro, de quem já teve apoio em outras campanhas. Marília tem fotos também com outros nomes da legenda, como Fernando Haddad, a quem chama de professor.

Após o primeiro turno, ela publicou em seus Stories uma mensagem de apoio de Chico Buarque, que anos atrás fez uma música em homenagem ao seu avô.

Marília tem se alinhado ainda a outros finalistas da campanha 2020, como Guilherme Boulos (PSOL) e Manuela D'Ávila (PCdoB), com quem anunciou a participação em um evento virtual do MST.

Já João Campos é a direita da esquerda na campanha —sim, é complicado mesmo, mas não perca a linha. Ele não fez questão de esconder o lado "coxinha" (desculpa a expressão tão 2014) na TV. Tem apostado na imagem de bom moço, uma espécie de genro que toda família sonha como prefeito. Aparece sempre com cabelo bem penteado, sem barba por fazer, às vezes com blazer, sempre com camisa social —slim, mas social.

Na campanha, mostrou um lado paternal ao levar para a TV o irmão caçula, que mal chegou a conhecer o pai.

No Instagram, João postou recentemente uma declaração de amor à namorada, a deputada federal Tabata do Amaral (PDT), jovem liderança da Câmara que virou persona non grata na esquerda por conta da sua atuação na reforma da Previdência e outras coisinhas mais.

Ah, sim: tanto João quanto Marília têm fotos com o patriarca Miguel Arraes no feed.

João fala constantemente das lições que aprendeu com o pai. E, antes de a campanha na TV recomeçar, tem provocado a prima mais velha dizendo que "não adianta vir com fake news, que aqui é construção o tempo inteiro". Era uma resposta a boatos de que não participaria de debates promovido por rádios e TVs do Recife ao longo da semana.

"É uma escolha nítida. Quando a pessoa pode escolher entre o futuro e o ado, claro que vai escolher o futuro", provocou ele, em outra postagem. "É no futuro que a gente quer viver, onde a gente quer vencer os problemas, é lá onde a gente quer criar a nossa família".

Neste futuro um lado dessa família não vai ter lugar à mesa no almoço de domingo nem na festa de amigo secreto no fim de ano.