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

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Atrás de atacante ou grana, Palmeiras não deveria emprestar Borja de novo

Borja foi artilheiro do último Campeonato Colombiano pelo Junior - Divulgação
Borja foi artilheiro do último Campeonato Colombiano pelo Junior Imagem: Divulgação

Colunista do UOL

13/05/2021 11h02

Receba os novos posts desta coluna no seu e-mail

Email inválido

O Palmeiras segue no mercado em busca de um atacante para acabar com a carência no elenco apontada por de Abel Ferreira. Depois de tomar um não do NY City por Taty Castellanos, a equipe mantém a carência apontada pelo treinador e tem dificuldades para encontrar um nome que se encaixa no perfil econômico permitido para contratações. E enquanto isso... Borja bate recordes e mais recordes no Júnior Barranquilla.

Ontem ele fez mais um gol e criou outras boas oportunidades contra o River Plate e aumentou a sua vantagem como maior goleador somando as últimas dez edições de Libertadores. Ele também é o artilheiro da atual edição. No total, são 14 gols em 21 jogos em 2021. Outros 21 gols marcados em 37 jogos em 2020. Não é pouca coisa.

É verdade que no Alviverde ele não correspondeu às expectativas geradas por sua contratação. O maior investimento da história do Palmeiras, aeroporto lotado para a sua recepção, a expectativa de ver um time ganhando tudo e ainda dando show. Mas será mesmo que ele não merece mais uma chance agora? Ainda mais com Abel Ferreira, que recuperou tantos outros atletas que já eram dados como perdidos no Palestra Itália?

O colombiano tem contrato de empréstimo até o fim de junho, quando o time paulista terá que definir o que fazer. Como precisa de dinheiro, se receber uma boa proposta para compra definitiva e que possa recuperar boa parte dos US$ 10 milhões investidos à época, faria sentido a diretoria aceitar para receber uma boa grana, o que é mais do que necessário no Palestra Itália, ainda mais com a cada vez mais provável volta de Dudu.

Mas se nenhuma proposta consideravelmente boa chegar à mesa, não faz sentido o Palmeiras emprestar o jogador mais uma vez apenas para se livrar de seu salário. Borja mostrou que vive de confiança no Junior Barranquilla e, caso retorne ao Brasil, precisa ter a experiência de ser treinado por Abel Ferreira para ver se corresponde, ainda que com atraso, à expectativa gerada pela sua chegada.

Em outras condições, com o elenco recheado de opções ou com garotos promissores na função, faria sentido manter Borja emprestado mais uma vez. Mas esse definitivamente não é o caso do Palmeiras neste momento, e Abel já deixou isso claro mais de uma vez.