summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/fullscreen.ts
blob: 6702393cf1b333db5d332bf7790109ff1e479282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 * SPDX-FileCopyrightText: syuilo and misskey-project
 * SPDX-License-Identifier: AGPL-3.0-only
 */

type PartiallyPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

type VideoEl = PartiallyPartial<HTMLVideoElement, 'requestFullscreen'> & {
	webkitEnterFullscreen?(): void;
	webkitExitFullscreen?(): void;
};

type PlayerEl = PartiallyPartial<HTMLElement, 'requestFullscreen'>;

type RequestFullscreenProps = {
	readonly videoEl: VideoEl;
	readonly playerEl: PlayerEl;
	readonly options?: FullscreenOptions | null;
};

type ExitFullscreenProps = {
	readonly videoEl: VideoEl;
};

export const requestFullscreen = ({ videoEl, playerEl, options }: RequestFullscreenProps) => {
	if (playerEl.requestFullscreen != null) {
		playerEl.requestFullscreen(options ?? undefined);
		return;
	}
	if (videoEl.webkitEnterFullscreen != null) {
		videoEl.webkitEnterFullscreen();
		return;
	}
};

export const exitFullscreen = ({ videoEl }: ExitFullscreenProps) => {
	// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
	if (window.document.exitFullscreen != null) {
		window.document.exitFullscreen();
		return;
	}
	if (videoEl.webkitExitFullscreen != null) {
		videoEl.webkitExitFullscreen();
		return;
	}
};