From 03481e017d65be5afa4bd1f3eccfc8551ea31bd0 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 26 Mar 2020 12:04:39 +0700 Subject: [PATCH] refactor(web/engine): intro of text.EngineDeviceSpec fix(web): missed change --- web/source/kmwdevice.ts | 5 ++ web/source/text/engineDeviceSpec.ts | 76 +++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 web/source/text/engineDeviceSpec.ts diff --git a/web/source/kmwdevice.ts b/web/source/kmwdevice.ts index 5588601aa4..b2d1de871f 100644 --- a/web/source/kmwdevice.ts +++ b/web/source/kmwdevice.ts @@ -1,6 +1,7 @@ // Includes version-related functionality /// /// +/// // The Device object definition ------------------------------------------------- @@ -249,5 +250,9 @@ namespace com.keyman { return this._styles; } + + public get headlessSpec(): text.EngineDeviceSpec { + return new text.EngineDeviceSpec(this.browser, this.formFactor, this.OS, this.touchable); + } } } \ No newline at end of file diff --git a/web/source/text/engineDeviceSpec.ts b/web/source/text/engineDeviceSpec.ts new file mode 100644 index 0000000000..15f96be720 --- /dev/null +++ b/web/source/text/engineDeviceSpec.ts @@ -0,0 +1,76 @@ +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 headless-friendly, + * containing only the information needed by web-core for text processing use. + */ + 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 as Browser) { + case Browser.Chrome: + case Browser.Edge: + case Browser.Firefox: + case Browser.Native: + case Browser.Opera: + case Browser.Safari: + this.browser = browser as Browser; + break; + default: + this.browser = Browser.Other; + } + + switch(formFactor.toLowerCase()) { + case FormFactor.Desktop: + case FormFactor.Phone: + case FormFactor.Tablet: + this.formFactor = formFactor as FormFactor; + break; + default: + throw ("Invalid form factor specified for device!"); + } + + switch(OS.toLowerCase()) { + case OperatingSystem.Windows.toLowerCase(): + case OperatingSystem.macOS.toLowerCase(): + case OperatingSystem.Linux.toLowerCase(): + case OperatingSystem.Android.toLowerCase(): + case OperatingSystem.iOS.toLowerCase(): + this.OS = OS as OperatingSystem; + break; + default: + this.OS = OperatingSystem.Other; + } + + this.touchable = touchable; + } + } +} \ No newline at end of file