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

Atlético-MG

Mesmo após desistência do Atlético-MG, torcida protesta contra Thiago Neves

Siga o UOL Esporte no

Thiago Fernandes

Do UOL, em Belo Horizonte

15/09/2020 14h00

Organizadas do Atlético-MG foram à porta da sede istrativa do clube, em Belo Horizonte, para protestar contra a quase contratação de Thiago Neves, que já foi descartada pela diretoria. Membros de torcidas se queixaram da possível chegada do atleta de 35 anos à Cidade do Galo.

"Não me leve a mal, Thiago Neves é c*" e "se brotar no Galo, vai morrer" foram alguns cânticos dos torcedores na porta da sede. Mesmo com a desistência de contratar o meia-atacante, alguns torcedores optaram por manter a manifestação nas imediações do clube.

Thiago Neves esteve perto de um acordo com o Galo até o fim do Campeonato Brasileiro 2020, com pagamento por produtividade. A diretoria, no entanto, desistiu das tratativas por causa da pressão feita pela torcida. O jogador se tornou desafeto dos torcedores por causa das provocações em meio a sua agem pelo Cruzeiro. Diante disso, Alexandre Mattos descartou que tenha assinado contrato com o apoiador.

"Não houve absolutamente nada assinado. Houve conversas de uma possibilidade. Quando você tem um treinador, com aquela ânsia de décadas, você tem que corrigir. O Atlético tem que ser campeão brasileiro e ele vai ser. Você começa a entender o ambiente. Tive que falar que isso criou uma repercussão que não vai dar, vai interferir aqui dentro. O entorno e a questão da integridade física fizeram recuar", comentou.

Em entrevista coletiva na tarde de hoje, em São Paulo, o diretor de futebol explicou por que o clube desistiu da contratação do meia-atacante, que estava encaminhada.

"É importante isso, porque a gente entra no capítulo das contratações. A contratação tem um início de demanda técnica. As pessoas imaginam que o diretor executivo define simplesmente assim: quero contratar um goleiro. Mas não é assim. O Sampaoli tem uma característica praticamente única. Por ele ser tão exclusivo, ele tem uma força na demanda técnica como ninguém. Quando ele pede um zagueiro, eu tenho um departamento de análise, um arquivo. A gente manda para o departamento técnico. Várias vezes, a característica é enorme, é boa. Ele detectou isso no Thiago, como detectou em outros meias também. Com a janela e a dificuldade financeira, não conseguimos atender ao Sampaoli. Ele entendeu que a característica do Thiago [Neves] seria interessante", explicou o dirigente, que ainda completou:

"Com a possibilidade iminente de acordo, veio a repercussão que faz parte do ambiente. É uma coisa que seria pesada até para a integridade física dele. Em 2013, contratei o Marcelo Oliveira, e a torcida do Cruzeiro foi para a Toca da Raposa com nariz de palhaço. Esse iria para o nível da integridade física. Fica de aprendizado. Antes observar e encerrar algo que daria problema que insistir em algo por vaidade".

Atlético-MG