47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/*
 | 
						|
 * 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 (document.exitFullscreen != null) {
 | 
						|
		document.exitFullscreen();
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	if (videoEl.webkitExitFullscreen != null) {
 | 
						|
		videoEl.webkitExitFullscreen();
 | 
						|
		return;
 | 
						|
	}
 | 
						|
};
 |