spiegel-keyman/web/source/text/engineDeviceSpec.ts
2020-03-29 21:19:16 +07:00

77 lines
No EOL
2.1 KiB
TypeScript

namespace com.keyman.text {
export enum Browser {
Chrome = 'chrome',
Edge = 'edge',
Firefox = 'firefox',
Native = 'native', // Used by embedded mode
Opera = 'opera',
Safari = 'safari',
Other = 'other'
}
export enum OperatingSystem {
Windows = 'windows',
macOS = 'macosx',
Linux = 'linux',
Android = 'android',
iOS = 'ios',
Other = 'other'
}
export enum FormFactor {
Desktop = 'desktop',
Phone = 'phone',
Tablet = 'tablet'
}
/**
* This class provides an abstract version of com.keyman.Device that is core-friendly,
* containing only the information needed by web-core for text processing use, devoid
* of any direct references to the DOM.
*/
export class EngineDeviceSpec {
readonly browser: Browser;
readonly formFactor: FormFactor;
readonly OS: OperatingSystem;
readonly touchable: boolean;
constructor(browser: string, formFactor: string, OS: string, touchable: boolean) {
switch(browser.toLowerCase() as Browser) {
case Browser.Chrome:
case Browser.Edge:
case Browser.Firefox:
case Browser.Native:
case Browser.Opera:
case Browser.Safari:
this.browser = browser.toLowerCase() as Browser;
break;
default:
this.browser = Browser.Other;
}
switch(formFactor.toLowerCase() as FormFactor) {
case FormFactor.Desktop:
case FormFactor.Phone:
case FormFactor.Tablet:
this.formFactor = formFactor.toLowerCase() as FormFactor;
break;
default:
throw ("Invalid form factor specified for device: " + formFactor);
}
switch(OS.toLowerCase() as OperatingSystem) {
case OperatingSystem.Windows.toLowerCase():
case OperatingSystem.macOS.toLowerCase():
case OperatingSystem.Linux.toLowerCase():
case OperatingSystem.Android.toLowerCase():
case OperatingSystem.iOS.toLowerCase():
this.OS = OS.toLowerCase() as OperatingSystem;
break;
default:
this.OS = OperatingSystem.Other;
}
this.touchable = touchable;
}
}
}