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

Diretor de 'Pantera Negra' sobre sequência sem Boseman: 'Difícil'

Ryan Coogler fala sobre "Pantera Negra" sem Chadwick Boseman - Imagem: Reprodução/Instagram@ryan_coogler_ @chadwickboseman
Ryan Coogler fala sobre 'Pantera Negra' sem Chadwick Boseman Imagem: Imagem: Reprodução/Instagram@ryan_coogler_ @chadwickboseman

Colaboração pra o Splash, em São Paulo

10/03/2021 21h27

Ryan Coogler, o diretor do filme "Pantera Negra", abriu o coração no podcast "Jemele Hill is Unbothered" e disse como será gravar a sequência da franquia sem o protagonista, Chadwick Boseman.

"Ainda estou ando por isso [luto]. Uma coisa que aprendi em meu curto ou longo tempo na Terra é que é muito difícil ter perspectiva de algo enquanto você está ando por isso. Esta é uma das coisas mais profundas que ei no minha vida, tendo que ser parte para manter este projeto indo sem essa pessoa em particular que é como a cola que o manteve unido", disse Coogler.

"Dito isso, você tem uma vida profissional, você tem uma vida pessoal. Vida pessoal, vou dizer que quando você trabalha em algo que ama, essas coisas se combinam, elas vêm juntas. Eu ' estou tentando encontrar um equilíbrio entre vida pessoal e profissional. Mas ainda não cheguei lá, então esta é sem dúvida a coisa mais difícil que tive de fazer em minha vida profissional", continuou o diretor de 34 anos.

"Dói, mas também é incrivelmente motivador. Estou muito triste por perdê-lo, mas também muito motivado por ter ado um tempo com ele", acrescentou.

"Você a a vida ouvindo sobre pessoas como ele. Para este indivíduo, que agora é um ancestral, eu estava lá para isso. É um privilégio tão incrível que o preenche tanto quanto o derruba. Tão frequentemente quanto os negros, temos que juntar os cacos após a perda".

Ryan escreveu um tributo cinematográfico a Boseman após a morte do ator, descrevendo-o como "uma pessoa especial".

"Era ele mesmo. Era um espetáculo de fogos de artifício épico. Contarei histórias sobre estar lá para algumas das faíscas brilhantes até o fim dos meus dias. Que marca incrível ele deixou para nós".

Boseman faleceu em agosto de 2020, aos 43 anos de idade, após cravar uma batalha privada de quatro anos contra um câncer de cólon.