Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.8 KiB

3 years ago
/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
2 years ago
import rootScope from '../lib/rootScope';
3 years ago
const SetTransition = (
2 years ago
element: HTMLElement,
className: string,
forwards: boolean,
duration: number,
onTransitionEnd?: () => void,
2 years ago
useRafs?: number,
onTransitionStart?: () => void
) => {
3 years ago
const {timeout, raf} = element.dataset;
3 years ago
if(timeout !== undefined) {
clearTimeout(+timeout);
}
2 years ago
// useRafs = undefined;
// duration = 0;
3 years ago
if(raf !== undefined) {
window.cancelAnimationFrame(+raf);
if(!useRafs) {
delete element.dataset.raf;
}
}
// if(forwards && className && element.classList.contains(className) && !element.classList.contains('animating')) {
// return;
// }
if(useRafs && rootScope.settings.animationsEnabled && duration) {
3 years ago
element.dataset.raf = '' + window.requestAnimationFrame(() => {
delete element.dataset.raf;
2 years ago
SetTransition(element, className, forwards, duration, onTransitionEnd, useRafs - 1, onTransitionStart);
3 years ago
});
return;
}
3 years ago
if(forwards && className) {
element.classList.add(className);
}
const afterTimeout = () => {
delete element.dataset.timeout;
if(!forwards && className) {
element.classList.remove('backwards', className);
}
element.classList.remove('animating');
2 years ago
2 years ago
onTransitionEnd?.();
3 years ago
};
2 years ago
onTransitionStart?.();
if(!rootScope.settings.animationsEnabled || !duration) {
3 years ago
element.classList.remove('animating', 'backwards');
afterTimeout();
return;
}
element.classList.add('animating');
element.classList.toggle('backwards', !forwards);
element.dataset.timeout = '' + setTimeout(afterTimeout, duration);
};
export default SetTransition;