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

São Paulo

Áudio com pai de presidente da CBF revela campanha e gera polêmica no SPFC

Marco Aurélio Cunha é coordenador de futebol feminino da CBF e tem o apoio de Carlos Caboclo - Lucas Figueiredo / MoWA Press
Marco Aurélio Cunha é coordenador de futebol feminino da CBF e tem o apoio de Carlos Caboclo Imagem: Lucas Figueiredo / MoWA Press

Diego Salgado

Do UOL, em São Paulo

23/05/2020 15h07

Um arquivo de áudio enviado de maneira equivocada gerou uma celeuma na política interna do São Paulo. O pai do presidente da CBF e conselheiro do Tricolor paulista, Carlos Caboclo, queria enviar uma mensagem parabenizando o jornalista Daniel Lian, da rádio Jovem Pan, mas acabou mandando a um grupo de WhatsApp. Nela, apontava entendimentos para uma chapa formada por Marcos Aurélio Cunha à presidência do executivo, e de José Roberto Ópice Blum ao Conselho Deliberativo.

"Valeu, Daniel. Isso aí que nós alinhávamos outra noite. Eu e o Blum. E falei abertamente com o Roberto Natel [outro possível candidato à presidência do executivo]. E ele disse que, agora aí confidência, falou que quer marcar um almoço só eu o Marco Aurélio e ele, mas pode levar mais pessoas. Mas o Roberto aceitou prontamente. Então, aí vem muita gente boa junto. Parabéns! Parabéns à Pan pelo trabalho à família. Saudade do grande amigo", disse Carlos Caboclo, pai de Rogério, no áudio ao que o UOL Esporte teve o.

Procurado pela reportagem, Carlos Caboclo negou que tenha cometido um equívoco. "Não é que foi errada [a mensagem]. Ela veio através do grupo de conselheiros a notícia de que o Marco Aurélio e o Roberto Natel estariam conversando para compor. Eu conversei com os dois. Não tem nada de errado e nada que dar satisfação a ninguém. Tem de respeitar o São Paulo", explicou.

Tal mensagem gerou uma confusão entre os conselheiros. Alguns reclamaram o fato de Marco Aurélio Cunha ser funcionário da CBF — ele é coordenador de futebol feminino da entidade. Ou seja, para eles haveria um conflito de interesses.

"Eu estava compromissado com o Marco Aurélio Cunha. Isso eu, particularmente. Eu insisto que não tem nada a ver com meu filho na CBF. Acho isso até muito desagradável. Tem de ser eu, eu sou o Carlos Caboclo. Foi até a imprensa que escolheu meu nome. Não tem nada a ver com o pai. Cada um tem seu parentesco", frisou Carlos.

Outros questionaram a consolidação da chapa. No fim de junho está marcada uma convenção entre os conselheiros de oposição para que sejam definidos os candidatos. Além de Marco Aurélio Cunha, aparecem como prováveis postulantes Roberto Natel, Sylvio de Barros, José Carlos Ferreira Alves.

"O Marco Aurélio me telefonou e disse que é candidato. E o Roberto Natel também me disse que é candidato. Não entendo nada da convenção, não estou acompanhando, sinceramente. Não tenho nada a ver com a convenção, tenho a ver com o São Paulo, que ajudei com alma e coração", disse Carlos Caboclo.

Até o momento, oito grupos de conselheiros formaram a chapa chamada de coalização, com Júlio Casares como candidato à presidência do executivo, e Olten Ayres de Abreu Jr.. para o Conselho Deliberativo.

São Paulo