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

Sampaoli é confirmado como técnico do Olympique, que muda presidente

Jorge Sampaoli deixou o Galo após a última rodada do Brasileirão - Alessandra Torres/AGIF
Jorge Sampaoli deixou o Galo após a última rodada do Brasileirão Imagem: Alessandra Torres/AGIF

Guilherme Piu

Do UOL, em Belo Horizonte

26/02/2021 17h21

Acabou o mistério. O técnico Jorge Sampaoli é mesmo o novo treinador do Olympique de Marselha (FRA). O argentino, que se despediu do Atlético-MG ontem com a vitória por 2 a 0 sobre o Palmeiras, na última rodada do Campeonato Brasileiro, foi anunciado oficialmente para o cargo na equipe sa até junho de 2023.

O anúncio foi feito por meio de nota oficial, que confirmou outra importante mudança no clube. Pablo Longoria a a ser o novo presidente o clube. Longoria foi o responsável pela contratação de Sampaoli.

"O Olympique de Marselha abre hoje um novo capítulo da sua grande história. Pablo Longoria foi nomeado presidente do conselho de istração da OM, substituindo Jacques-Henri Eyraud, e Jorge Sampaoli foi nomeado treinador da equipa principal do clube", diz parte do comunicado oficial emitido pelo Olympique em sua página na internet.

"Este é um novo capítulo para o Olympique de Marselha e estou pessoalmente empenhado em torná-lo um verdadeiro sucesso (...) Confiei a presidência do clube ao Pablo [Longoria]. A sua experiência como diretor desportivo e recrutador de talentos igualou o seu amor pelo futebol. A sua principal prioridade será colocar o futebol no coração do Olympique de Marselha", garantiu Frank McCourt, proprietário do Olympique.

O novo presidente do clube também falou sobre o futuro da equipe, que traz Sampaoli para substituir o português André Villas-Boas.

"A história e a cultura deste clube são verdadeiramente únicas. O futebol é inconcebível sem paixão e esta nomeação é uma grande honra para mim, que venho preparando desde que entrei no mundo do futebol. Queremos ajudar a construir um estilo de jogo que corresponda à paixão dos nossos adeptos. Terei cuidado para que todos os jogadores aceitem o nosso projeto. Este será um pré-requisito para as nossas futuras contratações. Coragem e empenho paixão são valores essenciais para o OM e Marselha. O clube vem primeiro, não importa o que", garantiu Pablo Longoria.

Atlético-MG