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

Livro sobre bi da Libertadores é atestado do sul-americanismo do Palmeiras

Jogadores do Palmeiras celebram título da Copa Libertadores, no Maracanã - Silvia Izquierdo/Getty Images
Jogadores do Palmeiras celebram título da Copa Libertadores, no Maracanã Imagem: Silvia Izquierdo/Getty Images

Diego Iwata Lima

Do UOL, em São Paulo

27/08/2021 04h00

Demorou 39 anos para o Palmeiras ganhar sua primeira Copa Libertadores. Depois, mais 22 para conquistar a segunda, se considerarmos que a final da edição 2020 só veio a acontecer em 2021. Mas a ligação do Alviverde com a competição de clubes mais importante da América do Sul — e com o continente e seus habitantes, da Ilha de Aruba à Terra do Fogo, propriamente — é bem mais antiga e intrínseca do que desavisados podem supor.

Em "Verde América: Notas de um Palestra Sul-Americano e bicampeão" (Foot Books, 2021), o jornalista palmeirense Lucas Berti, atualmente no El Pais e especialista em assuntos da América do Sul, traz à luz essa veia sudaca do palmeirismo. Sentimento que, mesmo sem uma intenção direta, uma torcida mestiça, de um clube fundado por italianos, decidiu transformar em obsessão por uma taça. E que tornou-se praticamente uma estrela-guia, ainda que com estádios vazios, para um português navegar rumo à conquista na última temporada.

Sim, é muito tentador poetizar tudo que cerca a relação entre o Palmeiras e a Copa Libertadores, e o autor de Verde América não faz qualquer questão de refrear esse desejo. Cada jogo da campanha iniciada por Vanderlei Luxemburgo e finalizada por Abel Ferreira merece um capítulo próprio, que junto a relatos de como foi a partida, mostra como o Palmeiras, por meio de personagens que vão do lendário técnico argentino naturalizado brasileiro Filpo Nuñez ao venezuelano naturalizado chileno Jorge Valdivia, sabe ser, além de brasileiro, também sul-americano.

Berti mescla momentos de âmbito pessoal com agens históricas. Relembra viagens a estádios pela América do Sul, por exemplo, quando conta a história de Segundo Villadoniga, um meia uruguaio apelidado de "El Arquitecto" que marcou época no Peñarol e no Palestra Italia e, após a mudança de nome, também no Palmeiras.

O autor evoca um encontro casual com um torcedor do Atletico Nacional (COL) depois de um jogo do Palmeiras, pelas ruas da Vila Pompeia, para falar sobre o colombiano Yerry Mina e, eventualmente, em uma sucessão natural de temas, chegar ao capitão do bicampeonato, o paraguaio Gustavo Gómez. Como quem conversa com outros palmeirenses em um bar. Porque no fundo, e aí mora a graça da obra, Verde América é uma charla de palmeirense para palmeirense.

Em pouco mais de 100 páginas, Lucas Berti, sem muita pretensão, mas com muita pesquisa, vai costurando histórias e fatos desde os primórdios alviverdes, ando pela primeira final do torneio jogada pelo Alviverde, em 1961, que culminam no apoteótico gol de Breno Lopes, em um Maracanã com mais público do que deveria, em 30 de janeiro de 2021. E que mostram como o clube brasileiro que mais jogou, mais venceu jogos, mas fez gols, e que está a uma conquista de empatar como os que mais conquistas têm, trazia a Libertadores nas veias desde antes mesmo de a competição existir.