web: added proper platform detection and hotkey handling

This commit is contained in:
Eugene Pankov
2021-07-17 16:39:08 +02:00
parent 4e42dfd46b
commit a725d25e46
8 changed files with 50 additions and 4 deletions

View File

@@ -22,6 +22,7 @@
"devDependencies": {
"@vaadin/vaadin-context-menu": "^5.0.0",
"bootstrap": "^4.1.3",
"bowser": "^2.11.0",
"copy-text-to-clipboard": "^3.0.1"
}
}

10
tabby-web/src/config.ts Normal file
View File

@@ -0,0 +1,10 @@
import { ConfigProvider } from 'tabby-core'
/** @hidden */
export class WebConfigProvider extends ConfigProvider {
defaults = {
web: {
preventAccidentalTabClosure: true,
},
}
}

View File

@@ -1,6 +1,6 @@
import { NgModule } from '@angular/core'
import { CommonModule } from '@angular/common'
import { HostAppService, HostWindowService, LogService, PlatformService, UpdaterService } from 'tabby-core'
import { ConfigProvider, HostAppService, HostWindowService, LogService, PlatformService, UpdaterService } from 'tabby-core'
import { WebPlatformService } from './platform'
import { ConsoleLogService } from './services/log.service'
@@ -8,6 +8,7 @@ import { NullUpdaterService } from './services/updater.service'
import { WebHostWindow } from './services/hostWindow.service'
import { WebHostApp } from './services/hostApp.service'
import { MessageBoxModalComponent } from './components/messageBoxModal.component'
import { WebConfigProvider } from './config'
import './styles.scss'
@@ -21,6 +22,7 @@ import './styles.scss'
{ provide: UpdaterService, useClass: NullUpdaterService },
{ provide: HostWindowService, useClass: WebHostWindow },
{ provide: HostAppService, useClass: WebHostApp },
{ provide: ConfigProvider, useClass: WebConfigProvider, multi: true },
],
declarations: [
MessageBoxModalComponent,

View File

@@ -1,3 +1,4 @@
import Bowser from 'bowser'
import { Injectable, Injector } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
@@ -8,7 +9,8 @@ export class WebHostApp extends HostAppService {
}
get configPlatform (): Platform {
return Platform.Windows // TODO
const os = Bowser.parse(window.navigator.userAgent).os
return Platform[os.name ?? 'Windows'] ?? Platform.Windows
}
// Needed for injector metadata

View File

@@ -1,14 +1,23 @@
import { Injectable } from '@angular/core'
import { HostWindowService } from 'tabby-core'
import { ConfigService, HostWindowService } from 'tabby-core'
@Injectable({ providedIn: 'root' })
export class WebHostWindow extends HostWindowService {
get isFullscreen (): boolean { return !!document.fullscreenElement }
constructor () {
constructor (
config: ConfigService,
) {
super()
this.windowShown.next()
this.windowFocused.next()
window.addEventListener('beforeunload', (event) => {
if (config.store.web.preventAccidentalTabClosure) {
event.preventDefault()
event.returnValue = 'Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.'
}
}
}
reload (): void {

View File

@@ -160,6 +160,11 @@ bootstrap@^4.1.3:
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7"
integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==
bowser@^2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f"
integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==
copy-text-to-clipboard@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c"