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

Menon

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Palmeiras ganha mais um título e mostra que ciclo virtuoso não tem fim

Dudu, do Palmeiras, em jogo contra o Atlético-GO em jogo pelo Brasileirão - CARLOS COSTA/FUTURA PRESS/ESTADÃO CONTEÚDO
Dudu, do Palmeiras, em jogo contra o Atlético-GO em jogo pelo Brasileirão Imagem: CARLOS COSTA/FUTURA PRESS/ESTADÃO CONTEÚDO

02/11/2022 18h13Atualizada em 02/11/2022 18h14

No dia 18 de novembro de 2012, um gol de Vagner Love, então no Flamengo definiu o empate por 1 x 1 pela 36° rodada do Brasileiro. Decretou também a queda do Palmeiras para a segunda divisão.

Hoje, 2 de novembro de 2022, exatos 3636 dias depois, o Palmeiras venceu o Brasileirão. Nem precisaria ter entrado em campo, contra o Fortaleza. A vitória do América contra o Inter garantiu o título.

Não foi um plot twist aleatório, da queda ao título. Não, foi apenas mais uma conquista de um ciclo virtuoso que não parece ter data marcada para acabar.

Havia uma luz no fim do túnel e ela era um farol fortíssimo. Desde então, o Palmeiras venceu:

As Libertadores de 2020 e 2021.

Os Brasileiros de 2016, 2018 e 2022.

As Copas do Brasil de 2015 e 2020.

Os Paulistas de 2020 e 2022.

São nove títulos em dez anos. E não estou contando a Copa do Brasil de 2012, ano da queda e a Copa São Paulo de 2022.

E fica a certeza que muito mais virá. Nada é por acaso. Tudo é trabalho bem feito.

O início veio antes da queda, ainda com o presidente Belluzzo, que assinou o contrato com a W/Torre para a construção do novo estádio.

Ele foi inaugurado em 2015, mesmo ano do acordo de patrocínio com a Crefisa. Dois Marcos importantíssimos, um ano após a quase queda de 2014.

Paulo Nobre, com um empréstimo devidamente pago, pavimentou o caminho para os títulos que chegam anualmente.

Um ponto importante, ainda em 2015, foi a contratação de Dudu, que era disputado por Corinthians e São Paulo. Um "chapéu" duplo, fundamental para que a autoestima da torcida fosse às nuvens.

O Palmeiras, como o Flamengo, encontrou seu caminho de sucesso. Parafraseando Fernando Sabino, fez da queda um o de dança.

E o baile apenas está começando.