;(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();
})();
Abuso, HIV e preconceito: Billy Porter faz história como fada madrinha
De Splash, em São Paulo
03/09/2021 04h00
Billy Porter não se importa com os haters.
Continua depois da publicidade
Aos 51 anos, o ator que interpreta 'Fab G' na nova versão de "Cinderela", disponível no Prime Video, diz que aprendeu a ignorar as inevitáveis reações negativas ao seu trabalho. Após três décadas de carreira, ele torce para que as pessoas aprendam a respeitar as individualidades.
Todos nós somos, antes de tudo, seres humanos. Respeitar a humanidade de todos é o objetivo de sermos humanos. Billy Porter, em entrevista para Splash
Mas por que Billy Porter incomodaria?
Vencedor do Tony Awards de 2013, o "Oscar dos Musicais", por "Kinky Boots", ele ficou conhecido do público brasileiro com a série "Pose". Durante as três temporadas, ele interpretou o extravagante Pray Tell, um MC dos ballrooms em Nova York da década de 1980.
Em 'Pose', Billy Porter é Pray Tell, que agita as pistas dos bailes de vogue
Imagem: Divulgação
Continua depois da publicidade
Agora, de volta às telas como a nova versão da fada madrinha no conto de fadas estrelado por Camila Cabello, Porter continua desafiando as convenções de gênero —o que ele começou a fazer ainda na época em que interpretou Lola no musical da Broadway.
Desde então, as aparições de Porter em tapetes vermelhos têm sido, no mínimo, marcantes. Suas roupas costumam ser uma mistura de artigos vistos como tradicionalmente femininos e masculinos, criando um resultado que transita suavamente entre os dois gêneros.
Billy Porter durante o MET Gala de 2019
Imagem: Getty Images
Por isso, quando foi convidado para "Cinderela", o ator entendeu que a fada madrinha —ou melhor, "Fab G"— não estava presa a um gênero: "A magia é espiritual", explicou para Splash.
O conceito, embora subjetivo, é uma continuação da trajetória de Porter, que teima em não atender às expectativas.
Em maio, Porter rompeu um silêncio de 14 anos e revelou ser HIV positivo. O segredo foi mantido desde 2007 porque o ator temia ser marginalizado —considerando uma indústria que nem sempre olhou para ele com bons olhos: "Sou da geração que devia ter mais consciência e, mesmo assim, aconteceu."
Continua depois da publicidade
Porter contracena com Camila Cabello no filme dirigido por Kay Cannon
Imagem: Divulgação
Foi o pior ano da minha vida. Vivi com vergonha e em silêncio durante 14 anos. De onde eu vim, crescendo em uma família Pentecostal e muito religiosa, HIV é uma punição de Deus. Porter, em declaração ao portal The Hollywood Reporter
Durante o confinamento da pandemia do covid-19, Porter e seu marido se isolaram em uma casa em Long Island, e foi neste período que ele reavaliou os próprios traumas, após anos de terapia:
Saí do útero como uma rainha: abusado sexualmente pelo meu padrasto dos 7 aos 12 anos; me assumindo gay no meio da crise da AIDS; não houve um momento que eu não vivesse em trauma.
Continua depois da publicidade
Agora, Porter enxerga que "Pose" foi o momento em que começou a ser levado a sério como ator, e o que lhe abriu novas portas.
Além de "Cinderela", ele trabalha em um livro de memórias, previsto para outubro, vai estrear na direção do romance "WhatIf?" e é tema de um documentário produzido por Ryan Murphy. No momento, só lhe falta um Oscar para se tornar um EGOT —ou seja, vencedor do Emmy, do Grammy, do Oscar e do Tony.
Billy Porter com o marido, Adam Smith, no Globo de Ouro
Imagem: Santiago Felipe/Getty Images
E, se "Pose" foi sua chance de trabalhar a própria história via Pray Tell —ali, o ator foi capaz de dizer coisas que gostaria de ter tido coragem de dizer anos antes—, com "Cinderela" ele traz uma extensão desse mesmo projeto: o que ele quer é abrir mentes e corações através de sua arte.
"Sempre fui uma pessoa interessada em moda, sempre forcei os limites, de dentro do paradigma tradicionalmente masculino", ele explica. "Não sabia que isso era algo que existia em mim. Sou grato por poder viver para ver o dia em que a minha verdade e a minha autenticidade podem fazer diferença."
Continua depois da publicidade
Billy Porter veste Christian Siriano no Oscar 2019
Imagem: Andrew H. Walker/BEI/REX/Shutterstock
Mesmo após 14 anos se escondendo, Porter raramente perde a compostura de showman, e agora sabe que sua jornada tem um propósito:
É mais fácil ser você mesmo se isso for popular. Eu escolhi a estrada menos caminhada há décadas. Ver a minha vida se transformar no que ela é hoje como resultado disso é mágico. Billy Porter para Splash
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.