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.
 
 
 
 
 

84 lines
2.1 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import MovableElement, { MovableElementOptions, MovableState } from "../components/movableElement";
import { IS_TOUCH_SUPPORTED } from "../environment/touchSupport";
import ListenerSetter from "./listenerSetter";
import mediaSizes, { ScreenSize } from "./mediaSizes";
import safeAssign from "./object/safeAssign";
export default class MovablePanel {
#movable: MovableElement;
private listenerSetter: ListenerSetter;
private previousState: MovableState;
private onResize: () => void;
private movableOptions: MovableElementOptions;
constructor(options: {
listenerSetter: ListenerSetter,
previousState: MovableState,
onResize?: () => void,
movableOptions: MovableElementOptions
}) {
safeAssign(this, options);
this.toggleMovable(!IS_TOUCH_SUPPORTED);
this.listenerSetter.add(mediaSizes)('changeScreen', (from, to) => {
if(to === ScreenSize.mobile || from === ScreenSize.mobile) {
this.toggleMovable(!IS_TOUCH_SUPPORTED);
}
});
}
public destroy() {
const movable = this.movable;
if(movable) {
movable.destroy();
}
}
public get movable() {
return this.#movable;
}
public get state() {
return this.movable ? this.movable.state : this.previousState;
}
public set state(state: MovableState) {
this.previousState = state;
}
private toggleMovable(enabled: boolean) {
let {movable} = this;
if(enabled) {
if(movable) {
return;
}
movable = this.#movable = new MovableElement(this.movableOptions);
movable.state = this.previousState;
if(this.previousState.top === undefined) {
movable.setPositionToCenter();
}
if(this.onResize) {
this.listenerSetter.add(movable)('resize', this.onResize);
}
} else {
if(!movable) {
return;
}
this.previousState = movable.state;
movable.destroyElements();
movable.destroy();
this.#movable = undefined;
}
}
}