86
common/resources/client/player/state/fullscreen/screen-orientation.ts
Executable file
86
common/resources/client/player/state/fullscreen/screen-orientation.ts
Executable file
@@ -0,0 +1,86 @@
|
||||
export class ScreenOrientation {
|
||||
protected currentLock: OrientationLockType | undefined;
|
||||
|
||||
async lock(lockType: OrientationLockType = 'landscape') {
|
||||
if (!this.canOrientScreen() || this.currentLock) return;
|
||||
try {
|
||||
await (screen.orientation as any).lock(lockType);
|
||||
this.currentLock = lockType;
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
async unlock() {
|
||||
if (!this.canOrientScreen() || !this.currentLock) return;
|
||||
await screen.orientation.unlock();
|
||||
}
|
||||
|
||||
canOrientScreen(): boolean {
|
||||
return (
|
||||
screen.orientation != null &&
|
||||
!!(screen.orientation as any).lock &&
|
||||
!!screen.orientation.unlock
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export type OrientationLockType =
|
||||
/**
|
||||
* Any is an orientation that means the screen can be locked to any one of portrait-primary,
|
||||
* portrait-secondary, landscape-primary and landscape-secondary.
|
||||
*/
|
||||
| 'any'
|
||||
|
||||
/**
|
||||
* Landscape is an orientation where the screen width is greater than the screen height and
|
||||
* depending on platform convention locking the screen to landscape can represent
|
||||
* landscape-primary, landscape-secondary or both.
|
||||
*/
|
||||
| 'landscape'
|
||||
|
||||
/**
|
||||
* Landscape-primary is an orientation where the screen width is greater than the screen height.
|
||||
* If the device's natural orientation is landscape, then it is in landscape-primary when held
|
||||
* in that position. If the device's natural orientation is portrait, the user agent sets
|
||||
* landscape-primary from the two options as shown in the screen orientation values table.
|
||||
*/
|
||||
| 'landscape-primary'
|
||||
|
||||
/**
|
||||
* Landscape-secondary is an orientation where the screen width is greater than the screen
|
||||
* height. If the device's natural orientation is landscape, it is in landscape-secondary when
|
||||
* rotated 180º from its natural orientation. If the device's natural orientation is portrait,
|
||||
* the user agent sets landscape-secondary from the two options as shown in the screen
|
||||
* orientation values table.
|
||||
*/
|
||||
| 'landscape-secondary'
|
||||
|
||||
/**
|
||||
* Natural is an orientation that refers to either portrait-primary or landscape-primary
|
||||
* depending on the device's usual orientation. This orientation is usually provided by the
|
||||
* underlying operating system.
|
||||
*/
|
||||
| 'natural'
|
||||
|
||||
/**
|
||||
* Portrait is an orientation where the screen width is less than or equal to the screen height
|
||||
* and depending on platform convention locking the screen to portrait can represent
|
||||
* portrait-primary, portrait-secondary or both.
|
||||
*/
|
||||
| 'portrait'
|
||||
|
||||
/**
|
||||
* Portrait-primary is an orientation where the screen width is less than or equal to the screen
|
||||
* height. If the device's natural orientation is portrait, then it is in portrait-primary when
|
||||
* held in that position. If the device's natural orientation is landscape, the user agent sets
|
||||
* portrait-primary from the two options as shown in the screen orientation values table.
|
||||
*/
|
||||
| 'portrait-primary'
|
||||
|
||||
/**
|
||||
* Portrait-secondary is an orientation where the screen width is less than or equal to the
|
||||
* screen height. If the device's natural orientation is portrait, then it is in
|
||||
* portrait-secondary when rotated 180º from its natural position. If the device's natural
|
||||
* orientation is landscape, the user agent sets portrait-secondary from the two options as
|
||||
* shown in the screen orientation values table.
|
||||
*/
|
||||
| 'portrait-secondary';
|
||||
Reference in New Issue
Block a user