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

Danilo Lavieri

REPORTAGEM

Texto que relata acontecimentos, baseado em fatos e dados observados ou verificados diretamente pelo jornalista ou obtidos pelo o a fontes jornalísticas reconhecidas e confiáveis.

Palmeiras já fez tour por SP com Abel e tenta facilitar vinda da família

Abel Ferreira comanda treino do Palmeiras - Cesar Greco/ Palmeiras
Abel Ferreira comanda treino do Palmeiras Imagem: Cesar Greco/ Palmeiras

Colunista do UOL

22/03/2022 13h21

Receba os novos posts desta coluna no seu e-mail

Email inválido

Abel Ferreira deixou bem claro ontem (21) em entrevista ao Roda Viva que ter a sua família por perto é condição indispensável para que ele continue no Palmeiras. O clube já sabe disso há um tempo e fez vários esforços neste sentido, antes mesmo da proposta feita por Leila Pereira na última sexta-feira.

O português chegou a rodar por possíveis locais para morar com sua mulher e filhas. Por recomendação da diretoria e também de jogadores, Alphaville, que fica na região metropolitana da capital, foi uma das possibilidades que foi do agrado do comandante. Vários atletas têm residência em condomínios fechados de alto padrão por lá.

Além de moradia, o Palmeiras também se colocou à disposição para facilitar a entrada das filhas de Abel na escola e deu opções para que elas consigam se adaptar mais rapidamente ao Brasil.

Esse "tour" por São Paulo aconteceu ainda na gestão ada, quando o Alviverde já fazia movimentos para que o português se sentisse em casa. Essa é a principal reclamação de Abel quando questionado sobre sua permanência ou não no Palmeiras por mais tempo.

A mulher de Abel Ferreira também já assistiu a jogos diretamente no estádio e já até conversou com dirigentes do clube, entre eles a presidente Leila Pereira.

Inicialmente, o português não tinha certeza que ficaria por muito tempo aqui por conhecer a cultura do futebol brasileiro de demissão rápida de técnicos. Até por isso, preferiu não mobilizar toda a sua família para que tudo tivesse que ser desfeito em questão de semanas. Agora, ele já sabe que tem mais respaldo no Alviverde, embora ainda não feche os olhos para essa possibilidade em caso de crise.

O Palmeiras está disposto a aumentar o salário de Abel e de sua comissão e espera uma resposta para um contrato de três anos. Com essa manobra, o clube também aumenta a multa para uma eventual saída do comandante para o futebol do exterior.

Siga também as opiniões de Danilo Lavieri no Twitter, no Instagram e no TikTok