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

Josias de Souza

ANÁLISE

Texto baseado no relato de acontecimentos, mas contextualizado a partir do conhecimento do jornalista sobre o tema; pode incluir interpretações do jornalista sobre os fatos.

Doria imprime na própria pele tatuagem de elitista

Colunista do UOL

07/06/2021 18h54

Receba os novos posts desta coluna no seu e-mail

Email inválido

Em política, tudo o que precisa ser explicado não é bom. Todo o mal começa com as explicações. Durante a pandemia, o governador de São Paulo João Doria vem se especializando em fornecer o material que seus adversários usarão contra ele na campanha presidencial de 2022. No penúltimo escorregão, Doria deixou-se filmar e fotografar neste domingo, tomando sol num hotel chique do Rio de Janeiro, sem máscara.

Os filhos de Bolsonaro cuidaram para que as imagens corressem as redes sociais. Doria foi vendido pelo bolsonarismo como um personagem que faz o avesso do que impõe aos paulistas em matéria de precaução sanitária. A assessoria do governador apressou-se em confirmar que Doria esteve na piscina do hotel de luxo, "em momento de descanso" com sua mulher, "sem promover aglomerações."

Como qualquer brasileiro, Doria tem todo o direito ao repouso. Mas talvez devesse considerar a hipótese de desfrutar do conforto de sua mansão. Ou de ambientes privados proporcionados por amigos. Não foi a primeira vez que o governador escorregou.

No final do ano ado, Doria trancou o estado de São Paulo em casa e voou para Miami. Refugiou-se no estrangeiro com sua mulher horas depois de impor a volta do isolamento dos paulistas à draconiana fase vermelha. Fotografado, teve de dar meia-volta. Mal aterrissou nos Estados Unidos, Doria correu às redes sociais para anunciar que retornaria a São Paulo, cancelando uma folga que duraria dez dias.

A imagem do banho de sol no Rio surgiu num instante em que Doria tem dificuldades para convencer o PSDB, seu partido, de que pode ser um bom candidato ao Planalto em 2022. Uma das deficiências que o tucanato enxerga em Doria é sua baixa projeção nacional.

Alega-se que o governador é visto como um personagem elitista. Doria parece empenhado em dar razão aos correligionários. É como se imprimisse na própria pele uma tatuagem de elitista. Certos políticos, que descuidam da própria imagem, não costumam ser vistos pelo eleitor como políticos certos.