From dc513b427d4be87ae324248e5dfa8acd71ee74f7 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Tue, 11 Apr 2017 22:45:59 +0200 Subject: [PATCH] done --- Makefile | 16 +++- app/assets/bootstrap/bootstrap.less | 58 ------------ app/assets/bootstrap/include.less | 4 - ...oaster-custom.less => toaster-custom.scss} | 0 app/main.js | 2 +- app/package.json | 23 +++-- app/src/app.module.ts | 22 +++-- app/src/entry.preload.ts | 2 +- app/src/entry.ts | 4 +- app/src/root.component.ts | 7 ++ package.json | 19 ++-- terminus-clickable-links/package.json | 6 +- terminus-clickable-links/{ => src}/api.ts | 0 .../{ => src}/decorator.ts | 0 .../{ => src}/handlers.ts | 0 terminus-clickable-links/{ => src}/index.ts | 0 terminus-clickable-links/tsconfig.json | 7 +- terminus-clickable-links/webpack.config.js | 21 +++-- terminus-community-color-schemes/package.json | 3 +- .../{ => src}/colorSchemes.ts | 2 +- .../{ => src}/index.ts | 0 .../tsconfig.json | 5 +- .../webpack.config.js | 17 ++-- terminus-core/components/titleBar.ts | 12 --- terminus-core/package.json | 14 +-- terminus-core/services/modal.ts | 28 ------ terminus-core/{ => src}/api/configProvider.ts | 0 .../{ => src}/api/defaultTabProvider.ts | 0 terminus-core/{ => src}/api/hotkeyProvider.ts | 0 terminus-core/{ => src}/api/index.ts | 2 + terminus-core/{ => src}/api/tabRecovery.ts | 0 .../{ => src}/api/toolbarButtonProvider.ts | 0 terminus-core/{ => src}/app.d.ts | 4 - .../{ => src}/components/appRoot.pug | 2 +- .../{ => src}/components/appRoot.scss | 0 terminus-core/{ => src}/components/appRoot.ts | 20 ++-- terminus-core/{ => src}/components/baseTab.ts | 0 .../{ => src}/components/tabBody.scss | 0 terminus-core/{ => src}/components/tabBody.ts | 2 +- .../{ => src}/components/tabHeader.pug | 0 .../{ => src}/components/tabHeader.scss | 0 .../{ => src}/components/tabHeader.ts | 2 +- .../{ => src}/components/titleBar.pug | 0 .../{ => src}/components/titleBar.scss | 15 ++- terminus-core/src/components/titleBar.ts | 15 +++ .../{ => src}/defaultConfigStructure.yaml | 0 .../{ => src}/defaultConfigValues.yaml | 1 + terminus-core/{ => src}/global.scss | 0 terminus-core/{ => src}/index.ts | 45 +++++---- terminus-core/{ => src}/overrides.scss | 0 terminus-core/{ => src}/services/app.ts | 0 terminus-core/{ => src}/services/config.ts | 0 terminus-core/{ => src}/services/docking.ts | 0 terminus-core/{ => src}/services/electron.ts | 0 terminus-core/{ => src}/services/hostApp.ts | 17 +++- terminus-core/{ => src}/services/hotkeys.ts | 0 .../{ => src}/services/hotkeys.util.ts | 0 terminus-core/{ => src}/services/log.ts | 0 terminus-core/{ => src}/services/notify.ts | 0 terminus-core/{ => src}/services/plugins.ts | 0 terminus-core/{ => src}/services/quitter.ts | 0 .../{ => src}/services/tabRecovery.ts | 0 terminus-core/{ => src}/theme.scss | 0 terminus-core/{ => src}/variables.scss | 0 terminus-core/tsconfig.json | 10 +- terminus-core/webpack.config.js | 34 ++++--- terminus-settings/.gitignore | 1 + terminus-settings/package.json | 36 ++++++++ .../settings => terminus-settings/src}/api.ts | 0 .../src}/buttonProvider.ts | 3 +- .../src}/components/hotkeyDisplay.pug | 0 .../src/components/hotkeyDisplay.scss | 0 .../src}/components/hotkeyDisplay.ts | 2 +- .../src/components/hotkeyInput.scss | 0 .../src}/components/hotkeyInput.ts | 9 +- .../src}/components/hotkeyInputModal.pug | 0 .../src}/components/hotkeyInputModal.scss | 0 .../src}/components/hotkeyInputModal.ts | 2 +- .../src}/components/multiHotkeyInput.pug | 0 .../src}/components/multiHotkeyInput.scss | 0 .../src}/components/multiHotkeyInput.ts | 0 .../src}/components/settingsTab.deep.css | 0 .../src}/components/settingsTab.pug | 0 .../src}/components/settingsTab.scss | 0 .../src}/components/settingsTab.ts | 5 +- .../src}/components/settingsTabBody.ts | 1 + .../src}/index.ts | 8 +- .../src}/recoveryProvider.ts | 3 +- terminus-settings/tsconfig.json | 32 +++++++ terminus-settings/webpack.config.js | 36 ++++++++ terminus-terminal/package.json | 23 +++-- terminus-terminal/{ => src}/api.ts | 0 terminus-terminal/{ => src}/buttonProvider.ts | 10 +- terminus-terminal/{ => src}/colorSchemes.ts | 0 .../{ => src}/components/colorPicker.pug | 0 .../{ => src}/components/colorPicker.scss | 0 .../{ => src}/components/colorPicker.ts | 0 .../{ => src}/components/settings.pug | 8 +- .../{ => src}/components/settings.scss | 0 .../{ => src}/components/settings.ts | 27 ++++-- .../components/terminal.userCSS.scss | 0 .../{ => src}/components/terminalTab.scss | 0 .../{ => src}/components/terminalTab.ts | 0 terminus-terminal/{ => src}/config.ts | 3 +- terminus-terminal/{ => src}/hterm.ts | 0 terminus-terminal/{ => src}/index.ts | 16 +++- .../{ => src}/persistenceProviders.ts | 13 ++- .../{ => src}/recoveryProvider.ts | 0 .../{ => src}/services/sessions.ts | 10 +- terminus-terminal/{ => src}/settings.ts | 0 terminus-terminal/tsconfig.json | 5 +- terminus-terminal/webpack.config.js | 33 +++---- tsconfig.json | 10 +- webpack.config.js | 91 ++++--------------- 114 files changed, 454 insertions(+), 374 deletions(-) delete mode 100644 app/assets/bootstrap/bootstrap.less delete mode 100644 app/assets/bootstrap/include.less rename app/assets/{toaster-custom.less => toaster-custom.scss} (100%) create mode 100644 app/src/root.component.ts rename terminus-clickable-links/{ => src}/api.ts (100%) rename terminus-clickable-links/{ => src}/decorator.ts (100%) rename terminus-clickable-links/{ => src}/handlers.ts (100%) rename terminus-clickable-links/{ => src}/index.ts (100%) rename terminus-community-color-schemes/{ => src}/colorSchemes.ts (96%) rename terminus-community-color-schemes/{ => src}/index.ts (100%) delete mode 100644 terminus-core/components/titleBar.ts delete mode 100644 terminus-core/services/modal.ts rename terminus-core/{ => src}/api/configProvider.ts (100%) rename terminus-core/{ => src}/api/defaultTabProvider.ts (100%) rename terminus-core/{ => src}/api/hotkeyProvider.ts (100%) rename terminus-core/{ => src}/api/index.ts (84%) rename terminus-core/{ => src}/api/tabRecovery.ts (100%) rename terminus-core/{ => src}/api/toolbarButtonProvider.ts (100%) rename terminus-core/{ => src}/app.d.ts (68%) rename terminus-core/{ => src}/components/appRoot.pug (97%) rename terminus-core/{ => src}/components/appRoot.scss (100%) rename terminus-core/{ => src}/components/appRoot.ts (90%) rename terminus-core/{ => src}/components/baseTab.ts (100%) rename terminus-core/{ => src}/components/tabBody.scss (100%) rename terminus-core/{ => src}/components/tabBody.ts (90%) rename terminus-core/{ => src}/components/tabHeader.pug (100%) rename terminus-core/{ => src}/components/tabHeader.scss (100%) rename terminus-core/{ => src}/components/tabHeader.ts (89%) rename terminus-core/{ => src}/components/titleBar.pug (100%) rename terminus-core/{ => src}/components/titleBar.scss (75%) create mode 100644 terminus-core/src/components/titleBar.ts rename terminus-core/{ => src}/defaultConfigStructure.yaml (100%) rename terminus-core/{ => src}/defaultConfigValues.yaml (97%) rename terminus-core/{ => src}/global.scss (100%) rename terminus-core/{ => src}/index.ts (54%) rename terminus-core/{ => src}/overrides.scss (100%) rename terminus-core/{ => src}/services/app.ts (100%) rename terminus-core/{ => src}/services/config.ts (100%) rename terminus-core/{ => src}/services/docking.ts (100%) rename terminus-core/{ => src}/services/electron.ts (100%) rename terminus-core/{ => src}/services/hostApp.ts (88%) rename terminus-core/{ => src}/services/hotkeys.ts (100%) rename terminus-core/{ => src}/services/hotkeys.util.ts (100%) rename terminus-core/{ => src}/services/log.ts (100%) rename terminus-core/{ => src}/services/notify.ts (100%) rename terminus-core/{ => src}/services/plugins.ts (100%) rename terminus-core/{ => src}/services/quitter.ts (100%) rename terminus-core/{ => src}/services/tabRecovery.ts (100%) rename terminus-core/{ => src}/theme.scss (100%) rename terminus-core/{ => src}/variables.scss (100%) create mode 100644 terminus-settings/.gitignore create mode 100644 terminus-settings/package.json rename {app/src/settings => terminus-settings/src}/api.ts (100%) rename {app/src/settings => terminus-settings/src}/buttonProvider.ts (97%) rename {app/src/settings => terminus-settings/src}/components/hotkeyDisplay.pug (100%) rename app/src/settings/components/hotkeyDisplay.less => terminus-settings/src/components/hotkeyDisplay.scss (100%) rename {app/src/settings => terminus-settings/src}/components/hotkeyDisplay.ts (96%) rename app/src/settings/components/hotkeyInput.less => terminus-settings/src/components/hotkeyInput.scss (100%) rename {app/src/settings => terminus-settings/src}/components/hotkeyInput.ts (76%) rename {app/src/settings => terminus-settings/src}/components/hotkeyInputModal.pug (100%) rename {app/src/settings => terminus-settings/src}/components/hotkeyInputModal.scss (100%) rename {app/src/settings => terminus-settings/src}/components/hotkeyInputModal.ts (97%) rename {app/src/settings => terminus-settings/src}/components/multiHotkeyInput.pug (100%) rename {app/src/settings => terminus-settings/src}/components/multiHotkeyInput.scss (100%) rename {app/src/settings => terminus-settings/src}/components/multiHotkeyInput.ts (100%) rename {app/src/settings => terminus-settings/src}/components/settingsTab.deep.css (100%) rename {app/src/settings => terminus-settings/src}/components/settingsTab.pug (100%) rename {app/src/settings => terminus-settings/src}/components/settingsTab.scss (100%) rename {app/src/settings => terminus-settings/src}/components/settingsTab.ts (83%) rename {app/src/settings => terminus-settings/src}/components/settingsTabBody.ts (99%) rename {app/src/settings => terminus-settings/src}/index.ts (90%) rename {app/src/settings => terminus-settings/src}/recoveryProvider.ts (87%) create mode 100644 terminus-settings/tsconfig.json create mode 100644 terminus-settings/webpack.config.js rename terminus-terminal/{ => src}/api.ts (100%) rename terminus-terminal/{ => src}/buttonProvider.ts (80%) rename terminus-terminal/{ => src}/colorSchemes.ts (100%) rename terminus-terminal/{ => src}/components/colorPicker.pug (100%) rename terminus-terminal/{ => src}/components/colorPicker.scss (100%) rename terminus-terminal/{ => src}/components/colorPicker.ts (100%) rename terminus-terminal/{ => src}/components/settings.pug (93%) rename terminus-terminal/{ => src}/components/settings.scss (100%) rename terminus-terminal/{ => src}/components/settings.ts (61%) rename terminus-terminal/{ => src}/components/terminal.userCSS.scss (100%) rename terminus-terminal/{ => src}/components/terminalTab.scss (100%) rename terminus-terminal/{ => src}/components/terminalTab.ts (100%) rename terminus-terminal/{ => src}/config.ts (92%) rename terminus-terminal/{ => src}/hterm.ts (100%) rename terminus-terminal/{ => src}/index.ts (82%) rename terminus-terminal/{ => src}/persistenceProviders.ts (83%) rename terminus-terminal/{ => src}/recoveryProvider.ts (100%) rename terminus-terminal/{ => src}/services/sessions.ts (92%) rename terminus-terminal/{ => src}/settings.ts (100%) diff --git a/Makefile b/Makefile index 925c34d1..063fd939 100644 --- a/Makefile +++ b/Makefile @@ -6,17 +6,29 @@ SHORT_VERSION=$(shell python -c 'import subprocess; v = subprocess.check_output( all: run run: - DEV=1 ./node_modules/.bin/electron ./app --debug + DEV=1 NODE_PATH=./app/node_modules ./node_modules/.bin/electron ./app --debug lint: tslint -c tslint.json app/src/*.ts app/src/**/*.ts build: - DEV=1 ./node_modules/.bin/webpack --progress + DEV=1 ./node_modules/.bin/webpack --progress --display-modules + +build-plugins: + cd terminus-core; npm run build + cd terminus-settings; npm run build + cd terminus-terminal; npm run build + cd terminus-community-color-schemes; npm run build + cd terminus-clickable-links; npm run build watch: DEV=1 ./node_modules/.bin/webpack --progress -w + +build-native: + ./node_modules/.bin/electron-rebuild -f -w terminus-terminal/node_modules/node-pty -m terminus-terminal + ./node_modules/.bin/electron-rebuild -f -w terminus-terminal/node_modules/font-manager -m terminus-terminal + build-native-windows: echo :: Building native extensions rm -r ./native/windows/build || true diff --git a/app/assets/bootstrap/bootstrap.less b/app/assets/bootstrap/bootstrap.less deleted file mode 100644 index 37c59947..00000000 --- a/app/assets/bootstrap/bootstrap.less +++ /dev/null @@ -1,58 +0,0 @@ -// Core variables and mixins -@import "../../../node_modules/bootstrap/less/variables.less"; -@import "variables.less"; -@import "../../../node_modules/bootstrap/less/mixins.less"; -//@import "mixin-overrides.less"; - -// Reset and dependencies -@import "../../../node_modules/bootstrap/less/normalize.less"; -@import "../../../node_modules/bootstrap/less/print.less"; -@import "../../../node_modules/bootstrap/less/glyphicons.less"; - -// Core CSS -@import "../../../node_modules/bootstrap/less/scaffolding.less"; -@import "../../../node_modules/bootstrap/less/type.less"; -@import "../../../node_modules/bootstrap/less/code.less"; -@import "../../../node_modules/bootstrap/less/grid.less"; -@import "../../../node_modules/bootstrap/less/tables.less"; -@import "../../../node_modules/bootstrap/less/forms.less"; -@import "../../../node_modules/bootstrap/less/buttons.less"; - -// Components -@import "../../../node_modules/bootstrap/less/component-animations.less"; -@import "../../../node_modules/bootstrap/less/dropdowns.less"; -@import "../../../node_modules/bootstrap/less/button-groups.less"; -@import "../../../node_modules/bootstrap/less/input-groups.less"; -@import "../../../node_modules/bootstrap/less/navs.less"; -@import "../../../node_modules/bootstrap/less/navbar.less"; -@import "../../../node_modules/bootstrap/less/breadcrumbs.less"; -@import "../../../node_modules/bootstrap/less/pagination.less"; -@import "../../../node_modules/bootstrap/less/pager.less"; -@import "../../../node_modules/bootstrap/less/labels.less"; -@import "../../../node_modules/bootstrap/less/badges.less"; -@import "../../../node_modules/bootstrap/less/jumbotron.less"; -@import "../../../node_modules/bootstrap/less/thumbnails.less"; -@import "../../../node_modules/bootstrap/less/alerts.less"; -@import "../../../node_modules/bootstrap/less/progress-bars.less"; -@import "../../../node_modules/bootstrap/less/media.less"; -@import "../../../node_modules/bootstrap/less/list-group.less"; -@import "../../../node_modules/bootstrap/less/panels.less"; -@import "../../../node_modules/bootstrap/less/responsive-embed.less"; -@import "../../../node_modules/bootstrap/less/wells.less"; -@import "../../../node_modules/bootstrap/less/close.less"; - -// Components w/ JavaScript -@import "../../../node_modules/bootstrap/less/modals.less"; -@import "../../../node_modules/bootstrap/less/tooltip.less"; -@import "../../../node_modules/bootstrap/less/popovers.less"; -@import "../../../node_modules/bootstrap/less/carousel.less"; - -// Utility classes -@import "../../../node_modules/bootstrap/less/utilities.less"; -@import "../../../node_modules/bootstrap/less/responsive-utilities.less"; - -@import "overrides.less"; - -body { - background: transparent; -} diff --git a/app/assets/bootstrap/include.less b/app/assets/bootstrap/include.less deleted file mode 100644 index 8390e132..00000000 --- a/app/assets/bootstrap/include.less +++ /dev/null @@ -1,4 +0,0 @@ -// Core variables and mixins -@import "../../../node_modules/bootstrap/less/variables.less"; -@import "variables.less"; -@import "../../../node_modules/bootstrap/less/mixins.less"; diff --git a/app/assets/toaster-custom.less b/app/assets/toaster-custom.scss similarity index 100% rename from app/assets/toaster-custom.less rename to app/assets/toaster-custom.scss diff --git a/app/main.js b/app/main.js index 189080a6..644f8223 100644 --- a/app/main.js +++ b/app/main.js @@ -143,7 +143,7 @@ start = () => { Object.assign(options, windowConfig.get('windowBoundaries')) if (platform == 'darwin') { - options.titleBarStyle = 'hidden' + options.titleBarStyle = 'hidden-inset' } if ((configData.appearance || {}).useNativeFrame) { diff --git a/app/package.json b/app/package.json index 65c2696f..4239e14d 100644 --- a/app/package.json +++ b/app/package.json @@ -1,18 +1,23 @@ { - "name": "term", - "version": "1.0.0", + "name": "terminus", + "version": "0.0.1", "main": "main.js", "dependencies": { - "child-process-promise": "2.2.0", + "@angular/animations": "4.0.1", + "@angular/common": "4.0.1", + "@angular/compiler": "4.0.1", + "@angular/core": "4.0.1", + "@angular/forms": "4.0.1", + "@angular/platform-browser": "4.0.1", + "@angular/platform-browser-dynamic": "4.0.1", + "@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.22", "devtron": "1.4.0", "electron-config": "0.2.1", "electron-debug": "1.0.1", "electron-is-dev": "0.1.2", - "fs-promise": "^2.0.1", - "node-pty": "0.6.3", - "path": "0.12.7" - }, - "devDependencies": { - "js-yaml": "3.8.2" + "js-yaml": "3.8.2", + "path": "0.12.7", + "rxjs": "5.3.0", + "zone.js": "0.8.4" } } diff --git a/app/src/app.module.ts b/app/src/app.module.ts index 3092f4db..ce91e210 100644 --- a/app/src/app.module.ts +++ b/app/src/app.module.ts @@ -1,21 +1,27 @@ import { NgModule } from '@angular/core' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' +const projectRoot = '/home/eugene/Work/term/' +if (process.env.DEV) { + (global).require('module').globalPaths.push(projectRoot); + (global).require('module').globalPaths.push(projectRoot + 'app/node_modules') +} + let plugins = [ - (global).require('../terminus-settings').default, - (global).require('../terminus-terminal').default, - (global).require('../terminus-clickable-links').default, - (global).require('../terminus-community-color-schemes').default, + (global).require(projectRoot + 'terminus-settings').default, + (global).require(projectRoot + 'terminus-terminal').default, + (global).require(projectRoot + 'terminus-clickable-links').default, + (global).require(projectRoot + 'terminus-community-color-schemes').default, ] -const core = (global).require('../terminus-core').default, +const core = (global).require(projectRoot + 'terminus-core') @NgModule({ imports: [ - core.forRoot(), + core.AppRootModule.forRoot(), ...plugins, NgbModule.forRoot(), - ] - //bootstrap: [AppRootComponent] + ], + bootstrap: [core.AppRootComponent] }) export class RootModule { } diff --git a/app/src/entry.preload.ts b/app/src/entry.preload.ts index 3a8cf095..7ae442f3 100644 --- a/app/src/entry.preload.ts +++ b/app/src/entry.preload.ts @@ -1,3 +1,3 @@ import 'source-sans-pro' import 'font-awesome/css/font-awesome.css' -import '../assets/toaster-custom.less' +import '../assets/toaster-custom.scss' diff --git a/app/src/entry.ts b/app/src/entry.ts index 2995cde8..ba220ad3 100644 --- a/app/src/entry.ts +++ b/app/src/entry.ts @@ -1,4 +1,4 @@ -console.timeStamp('entry point') +(console).timeStamp('entry point') import 'core-js' import 'zone.js/dist/zone.js' @@ -18,7 +18,7 @@ if ((global).require('electron-is-dev')) { enableProdMode() } -console.timeStamp('angular bootstrap started') +(console).timeStamp('angular bootstrap started') platformBrowserDynamic().bootstrapModule(RootModule); diff --git a/app/src/root.component.ts b/app/src/root.component.ts new file mode 100644 index 00000000..0da0dbf6 --- /dev/null +++ b/app/src/root.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core' + + +@Component({ + template: '' +}) +export class RootComponent { } diff --git a/package.json b/package.json index 0997a097..8b6a78e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,12 @@ { "name": "term", "devDependencies": { + "angular2-perfect-scrollbar": "2.0.0", + "jquery": "^3.1.1", + "@types/fs-promise": "^1.0.1", + "@types/core-js": "^0.9.35", + "@types/electron": "1.4.34", + "@types/node": "^7.0.5", "@types/webpack-env": "^1.13.0", "apply-loader": "^0.1.0", "awesome-typescript-loader": "3.1.2", @@ -12,6 +18,7 @@ "file-loader": "^0.9.0", "font-awesome": "4.7.0", "html-loader": "^0.4.4", + "source-sans-pro": "^2.0.10", "less": "^2.7.1", "less-loader": "^2.2.3", "node-gyp": "^3.4.0", @@ -25,7 +32,7 @@ "to-string-loader": "^1.1.5", "tslint": "5.0.0", "tslint-eslint-rules": "4.0.0", - "typescript": "2.2.2", + "typescript": "~2.1.0", "url-loader": "^0.5.7", "val-loader": "^0.5.0", "vrsource-tslint-rules": "^4.0.1", @@ -54,15 +61,5 @@ "pack": "build --dir", "postinstall": "install-app-deps", "dist": "build" - }, - "dependencies": { - "@angular/platform-server": "4.0.1", - "@angular/router": "4.0.1", - "@types/fs-promise": "^1.0.1", - "@types/core-js": "^0.9.35", - "@types/electron": "1.4.34", - "@types/node": "^7.0.5", - "angular2-perfect-scrollbar": "2.0.0", - "jquery": "^3.1.1" } } diff --git a/terminus-clickable-links/package.json b/terminus-clickable-links/package.json index cf640f88..ce4226ee 100644 --- a/terminus-clickable-links/package.json +++ b/terminus-clickable-links/package.json @@ -15,10 +15,12 @@ "typescript": "^2.2.2", "webpack": "^2.3.3" }, - "dependencies": { + "peerDependencies": { "@angular/core": "^4.0.1", "terminus-core": "*", - "terminus-terminal": "*", + "terminus-terminal": "*" + }, + "dependencies": { "untildify": "^3.0.2" } } diff --git a/terminus-clickable-links/api.ts b/terminus-clickable-links/src/api.ts similarity index 100% rename from terminus-clickable-links/api.ts rename to terminus-clickable-links/src/api.ts diff --git a/terminus-clickable-links/decorator.ts b/terminus-clickable-links/src/decorator.ts similarity index 100% rename from terminus-clickable-links/decorator.ts rename to terminus-clickable-links/src/decorator.ts diff --git a/terminus-clickable-links/handlers.ts b/terminus-clickable-links/src/handlers.ts similarity index 100% rename from terminus-clickable-links/handlers.ts rename to terminus-clickable-links/src/handlers.ts diff --git a/terminus-clickable-links/index.ts b/terminus-clickable-links/src/index.ts similarity index 100% rename from terminus-clickable-links/index.ts rename to terminus-clickable-links/src/index.ts diff --git a/terminus-clickable-links/tsconfig.json b/terminus-clickable-links/tsconfig.json index b2240a2c..993ae363 100644 --- a/terminus-clickable-links/tsconfig.json +++ b/terminus-clickable-links/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": ".", + "baseUrl": "src", "module": "commonjs", "target": "es5", "declaration": false, @@ -22,8 +22,9 @@ "es7" ], "paths": { - "terminus-*": ["../terminus-*"] - } + "*": ["../../app/node_modules/*"], + "terminus-*": ["../../terminus-*"] + } }, "compileOnSave": false, "exclude": [ diff --git a/terminus-clickable-links/webpack.config.js b/terminus-clickable-links/webpack.config.js index a1709896..cda83f7f 100644 --- a/terminus-clickable-links/webpack.config.js +++ b/terminus-clickable-links/webpack.config.js @@ -1,15 +1,15 @@ module.exports = { target: 'node', - entry: './index.ts', + entry: 'src/index.ts', devtool: 'source-map', output: { filename: './dist/index.js', pathinfo: true, - library: 'terminusClickableLinks', libraryTarget: 'umd', + devtoolModuleFilenameTemplate: 'webpack-terminus-clickable-links:///[resource-path]', }, resolve: { - modules: ['.', 'node_modules', '..'], + modules: ['.', 'node_modules', '../app/node_modules'], extensions: ['.ts', '.js'], }, module: { @@ -20,11 +20,12 @@ module.exports = { }, ] }, - externals: [{ - 'fs': true, - 'untildify': true, - '@angular/core': true, - 'terminus-core': true, - 'terminus-terminal': true, - }] + externals: [ + 'fs', + 'untildify', + /^rxjs/, + /^@angular/, + /^@ng-bootstrap/, + /^terminus-/, + ] } diff --git a/terminus-community-color-schemes/package.json b/terminus-community-color-schemes/package.json index 22b1b7db..a01924fe 100644 --- a/terminus-community-color-schemes/package.json +++ b/terminus-community-color-schemes/package.json @@ -10,8 +10,9 @@ }, "author": "Eugene Pankov", "license": "MIT", - "dependencies": { + "peerDependencies": { "@angular/core": "4.0.1", + "terminus-core": "*", "terminus-terminal": "*" }, "devDependencies": { diff --git a/terminus-community-color-schemes/colorSchemes.ts b/terminus-community-color-schemes/src/colorSchemes.ts similarity index 96% rename from terminus-community-color-schemes/colorSchemes.ts rename to terminus-community-color-schemes/src/colorSchemes.ts index 102b3a6c..5e775f80 100644 --- a/terminus-community-color-schemes/colorSchemes.ts +++ b/terminus-community-color-schemes/src/colorSchemes.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core' import { TerminalColorSchemeProvider, ITerminalColorScheme } from 'terminus-terminal' -const schemeContents = require.context('./schemes/', true, /.*/) +const schemeContents = require.context('../schemes/', true, /.*/) @Injectable() diff --git a/terminus-community-color-schemes/index.ts b/terminus-community-color-schemes/src/index.ts similarity index 100% rename from terminus-community-color-schemes/index.ts rename to terminus-community-color-schemes/src/index.ts diff --git a/terminus-community-color-schemes/tsconfig.json b/terminus-community-color-schemes/tsconfig.json index d9495179..993ae363 100644 --- a/terminus-community-color-schemes/tsconfig.json +++ b/terminus-community-color-schemes/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": ".", + "baseUrl": "src", "module": "commonjs", "target": "es5", "declaration": false, @@ -22,7 +22,8 @@ "es7" ], "paths": { - "terminus-*": ["../terminus-*"] + "*": ["../../app/node_modules/*"], + "terminus-*": ["../../terminus-*"] } }, "compileOnSave": false, diff --git a/terminus-community-color-schemes/webpack.config.js b/terminus-community-color-schemes/webpack.config.js index 4a56acfe..1c65d2ba 100644 --- a/terminus-community-color-schemes/webpack.config.js +++ b/terminus-community-color-schemes/webpack.config.js @@ -1,15 +1,15 @@ module.exports = { target: 'node', - entry: 'index.ts', + entry: 'src/index.ts', devtool: 'source-map', output: { filename: './dist/index.js', pathinfo: true, - library: 'terminusCommunityColorSchemes', libraryTarget: 'umd', + devtoolModuleFilenameTemplate: 'webpack-terminus-community-color-schemes:///[resource-path]', }, resolve: { - modules: ['.', 'node_modules', '..'], + modules: ['.', 'node_modules', '../app/node_modules'], extensions: ['.ts', '.js'], }, module: { @@ -18,9 +18,10 @@ module.exports = { { test: /\/schemes\//, loader: "raw-loader" }, ] }, - externals: { - 'fs': true, - '@angular/core': true, - 'terminus-terminal': true, - } + externals: [ + /^rxjs/, + /^@angular/, + /^@ng-bootstrap/, + /^terminus-/, + ] } diff --git a/terminus-core/components/titleBar.ts b/terminus-core/components/titleBar.ts deleted file mode 100644 index a8c9347c..00000000 --- a/terminus-core/components/titleBar.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core' -import { HostAppService } from 'services/hostApp' - -@Component({ - selector: 'title-bar', - template: require('./titleBar.pug'), - styles: [require('./titleBar.scss')], -}) -export class TitleBarComponent { - constructor (public hostApp: HostAppService) { - } -} diff --git a/terminus-core/package.json b/terminus-core/package.json index b81291be..85bcaa3a 100644 --- a/terminus-core/package.json +++ b/terminus-core/package.json @@ -5,8 +5,8 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "build": "webpack --progress --color", - "watch": "webpack --progress --color --watch" + "build": "rm -r dist; webpack --progress --color --display-modules", + "watch": "rm -r dist; webpack --progress --color --watch" }, "author": "Eugene Pankov", "license": "MIT", @@ -19,20 +19,22 @@ "webpack": "^2.3.3", "bootstrap": "4.0.0-alpha.6", "core-js": "^2.4.1", + "style-loader": "^0.13.1", + "to-string-loader": "^1.1.5", + "json-loader": "^0.5.4", + "yaml-loader": "^0.4.0" + }, + "peerDependencies": { "@angular/animations": "4.0.1", "@angular/common": "4.0.1", "@angular/core": "4.0.1", - "json-loader": "^0.5.4", "@angular/forms": "4.0.1", "@angular/platform-browser": "4.0.1", "@angular/platform-browser-dynamic": "4.0.1", - "source-sans-pro": "^2.0.10", "rxjs": "5.3.0", - "yaml-loader": "^0.4.0", "zone.js": "0.8.4" }, "dependencies": { - "@angular/core": "^4.0.1", "deepmerge": "^1.3.2", "js-yaml": "^3.8.3" } diff --git a/terminus-core/services/modal.ts b/terminus-core/services/modal.ts deleted file mode 100644 index 94bf26d9..00000000 --- a/terminus-core/services/modal.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Injectable } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap' - - -@Injectable() -export class ModalService { - constructor( - private ngbModal: NgbModal, - ) {} - - open(content: any, config?: any) { - config = config || {} - config.windowClass = 'out' - let modal = this.ngbModal.open(content, config) - - let fx = (modal)._removeModalElements.bind(modal); - - (modal)._removeModalElements = () => { - (modal)._windowCmptRef.instance.windowClass = 'out' - setTimeout(() => fx(), 500) - } - setTimeout(() => { - (modal)._windowCmptRef.instance.windowClass = '' - }, 1) - - return modal - } -} diff --git a/terminus-core/api/configProvider.ts b/terminus-core/src/api/configProvider.ts similarity index 100% rename from terminus-core/api/configProvider.ts rename to terminus-core/src/api/configProvider.ts diff --git a/terminus-core/api/defaultTabProvider.ts b/terminus-core/src/api/defaultTabProvider.ts similarity index 100% rename from terminus-core/api/defaultTabProvider.ts rename to terminus-core/src/api/defaultTabProvider.ts diff --git a/terminus-core/api/hotkeyProvider.ts b/terminus-core/src/api/hotkeyProvider.ts similarity index 100% rename from terminus-core/api/hotkeyProvider.ts rename to terminus-core/src/api/hotkeyProvider.ts diff --git a/terminus-core/api/index.ts b/terminus-core/src/api/index.ts similarity index 84% rename from terminus-core/api/index.ts rename to terminus-core/src/api/index.ts index 65fb9b37..34210705 100644 --- a/terminus-core/api/index.ts +++ b/terminus-core/src/api/index.ts @@ -7,6 +7,8 @@ export { DefaultTabProvider } from './defaultTabProvider' export { AppService } from '../services/app' export { ConfigService } from '../services/config' +export { DockingService } from '../services/docking' export { ElectronService } from '../services/electron' export { Logger, LogService } from '../services/log' export { HotkeysService } from '../services/hotkeys' +export { HostAppService, Platform } from '../services/hostApp' diff --git a/terminus-core/api/tabRecovery.ts b/terminus-core/src/api/tabRecovery.ts similarity index 100% rename from terminus-core/api/tabRecovery.ts rename to terminus-core/src/api/tabRecovery.ts diff --git a/terminus-core/api/toolbarButtonProvider.ts b/terminus-core/src/api/toolbarButtonProvider.ts similarity index 100% rename from terminus-core/api/toolbarButtonProvider.ts rename to terminus-core/src/api/toolbarButtonProvider.ts diff --git a/terminus-core/app.d.ts b/terminus-core/src/app.d.ts similarity index 68% rename from terminus-core/app.d.ts rename to terminus-core/src/app.d.ts index 12ba346b..8035f366 100644 --- a/terminus-core/app.d.ts +++ b/terminus-core/src/app.d.ts @@ -6,7 +6,3 @@ declare interface Window { } declare var window: Window - -declare interface Console { - timeStamp(...args: any[]) -} diff --git a/terminus-core/components/appRoot.pug b/terminus-core/src/components/appRoot.pug similarity index 97% rename from terminus-core/components/appRoot.pug rename to terminus-core/src/components/appRoot.pug index a0858364..f237c30b 100644 --- a/terminus-core/components/appRoot.pug +++ b/terminus-core/src/components/appRoot.pug @@ -1,4 +1,4 @@ -title-bar(*ngIf='!config.full().appearance.useNativeFrame && config.store.appearance.dock == "off"') +title-bar(*ngIf='!config.full().appearance.useNativeFrame && config.full().appearance.dock == "off"') .content( [class.tabs-on-top]='config.full().appearance.tabsOnTop' diff --git a/terminus-core/components/appRoot.scss b/terminus-core/src/components/appRoot.scss similarity index 100% rename from terminus-core/components/appRoot.scss rename to terminus-core/src/components/appRoot.scss diff --git a/terminus-core/components/appRoot.ts b/terminus-core/src/components/appRoot.ts similarity index 90% rename from terminus-core/components/appRoot.ts rename to terminus-core/src/components/appRoot.ts index f07727ec..35cb8ab1 100644 --- a/terminus-core/components/appRoot.ts +++ b/terminus-core/src/components/appRoot.ts @@ -2,16 +2,16 @@ import { Component, Inject } from '@angular/core' import { trigger, style, animate, transition, state } from '@angular/animations' import { ToasterConfig } from 'angular2-toaster' -import { ElectronService } from 'services/electron' -import { HostAppService } from 'services/hostApp' -import { HotkeysService } from 'services/hotkeys' -import { Logger, LogService } from 'services/log' -import { QuitterService } from 'services/quitter' -import { ConfigService } from 'services/config' -import { DockingService } from 'services/docking' -import { TabRecoveryService } from 'services/tabRecovery' +import { ElectronService } from '../services/electron' +import { HostAppService } from '../services/hostApp' +import { HotkeysService } from '../services/hotkeys' +import { Logger, LogService } from '../services/log' +import { QuitterService } from '../services/quitter' +import { ConfigService } from '../services/config' +import { DockingService } from '../services/docking' +import { TabRecoveryService } from '../services/tabRecovery' -import { AppService, IToolbarButton, ToolbarButtonProvider } from 'api' +import { AppService, IToolbarButton, ToolbarButtonProvider } from '../api' import 'angular2-toaster/toaster.css' import 'overrides.scss' @@ -57,7 +57,7 @@ export class AppRootComponent { log: LogService, _quitter: QuitterService, ) { - console.timeStamp('AppComponent ctor') + (console).timeStamp('AppComponent ctor') this.logger = log.create('main') this.logger.info('v', electron.app.getVersion()) diff --git a/terminus-core/components/baseTab.ts b/terminus-core/src/components/baseTab.ts similarity index 100% rename from terminus-core/components/baseTab.ts rename to terminus-core/src/components/baseTab.ts diff --git a/terminus-core/components/tabBody.scss b/terminus-core/src/components/tabBody.scss similarity index 100% rename from terminus-core/components/tabBody.scss rename to terminus-core/src/components/tabBody.scss diff --git a/terminus-core/components/tabBody.ts b/terminus-core/src/components/tabBody.ts similarity index 90% rename from terminus-core/components/tabBody.ts rename to terminus-core/src/components/tabBody.ts index 334e030b..6ca4b833 100644 --- a/terminus-core/components/tabBody.ts +++ b/terminus-core/src/components/tabBody.ts @@ -1,5 +1,5 @@ import { Component, Input, ViewChild, HostBinding, ViewContainerRef } from '@angular/core' -import { BaseTabComponent } from 'components/baseTab' +import { BaseTabComponent } from '../components/baseTab' @Component({ selector: 'tab-body', diff --git a/terminus-core/components/tabHeader.pug b/terminus-core/src/components/tabHeader.pug similarity index 100% rename from terminus-core/components/tabHeader.pug rename to terminus-core/src/components/tabHeader.pug diff --git a/terminus-core/components/tabHeader.scss b/terminus-core/src/components/tabHeader.scss similarity index 100% rename from terminus-core/components/tabHeader.scss rename to terminus-core/src/components/tabHeader.scss diff --git a/terminus-core/components/tabHeader.ts b/terminus-core/src/components/tabHeader.ts similarity index 89% rename from terminus-core/components/tabHeader.ts rename to terminus-core/src/components/tabHeader.ts index c28152a7..53fbe5dc 100644 --- a/terminus-core/components/tabHeader.ts +++ b/terminus-core/src/components/tabHeader.ts @@ -1,5 +1,5 @@ import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core' -import { BaseTabComponent } from 'components/baseTab' +import { BaseTabComponent } from '../components/baseTab' import './tabHeader.scss' diff --git a/terminus-core/components/titleBar.pug b/terminus-core/src/components/titleBar.pug similarity index 100% rename from terminus-core/components/titleBar.pug rename to terminus-core/src/components/titleBar.pug diff --git a/terminus-core/components/titleBar.scss b/terminus-core/src/components/titleBar.scss similarity index 75% rename from terminus-core/components/titleBar.scss rename to terminus-core/src/components/titleBar.scss index 550c9500..b194b51b 100644 --- a/terminus-core/components/titleBar.scss +++ b/terminus-core/src/components/titleBar.scss @@ -32,4 +32,17 @@ $titlebar-height: 30px; .btn-close { font-size: 12px; } -} + + &.inset-titlebar { + flex-basis: 36px; + + .title { + padding-left: 80px; + line-height: 36px; + } + + button { + display: none; + } + } + } diff --git a/terminus-core/src/components/titleBar.ts b/terminus-core/src/components/titleBar.ts new file mode 100644 index 00000000..dfd2fcd4 --- /dev/null +++ b/terminus-core/src/components/titleBar.ts @@ -0,0 +1,15 @@ +import { Component, HostBinding } from '@angular/core' +import { HostAppService, Platform } from '../services/hostApp' + +@Component({ + selector: 'title-bar', + template: require('./titleBar.pug'), + styles: [require('./titleBar.scss')], +}) +export class TitleBarComponent { + @HostBinding('class.inset-titlebar') insetTitlebar = false + + constructor (public hostApp: HostAppService) { + this.insetTitlebar = hostApp.platform == Platform.macOS + } +} diff --git a/terminus-core/defaultConfigStructure.yaml b/terminus-core/src/defaultConfigStructure.yaml similarity index 100% rename from terminus-core/defaultConfigStructure.yaml rename to terminus-core/src/defaultConfigStructure.yaml diff --git a/terminus-core/defaultConfigValues.yaml b/terminus-core/src/defaultConfigValues.yaml similarity index 97% rename from terminus-core/defaultConfigValues.yaml rename to terminus-core/src/defaultConfigValues.yaml index 5300b213..08cdfe93 100644 --- a/terminus-core/defaultConfigValues.yaml +++ b/terminus-core/src/defaultConfigValues.yaml @@ -3,6 +3,7 @@ appearance: dockScreen: 'current' dockFill: 50 tabsOnTop: true + useNativeFrame: false hotkeys: close-tab: - 'Ctrl-Shift-W' diff --git a/terminus-core/global.scss b/terminus-core/src/global.scss similarity index 100% rename from terminus-core/global.scss rename to terminus-core/src/global.scss diff --git a/terminus-core/index.ts b/terminus-core/src/index.ts similarity index 54% rename from terminus-core/index.ts rename to terminus-core/src/index.ts index e2cfe3aa..86d7d631 100644 --- a/terminus-core/index.ts +++ b/terminus-core/src/index.ts @@ -1,29 +1,29 @@ import { NgModule, ModuleWithProviders } from '@angular/core' +console.info((global).require.resolve('@angular/core')) import { BrowserModule } from '@angular/platform-browser' import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { FormsModule } from '@angular/forms' import { ToasterModule } from 'angular2-toaster' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { AppService } from 'services/app' -import { ConfigService } from 'services/config' -import { ElectronService } from 'services/electron' -import { HostAppService } from 'services/hostApp' -import { LogService } from 'services/log' -import { HotkeysService, AppHotkeyProvider } from 'services/hotkeys' -import { ModalService } from 'services/modal' -import { NotifyService } from 'services/notify' -import { PluginsService } from 'services/plugins' -import { QuitterService } from 'services/quitter' -import { DockingService } from 'services/docking' -import { TabRecoveryService } from 'services/tabRecovery' +import { AppService } from './services/app' +import { ConfigService } from './services/config' +import { ElectronService } from './services/electron' +import { HostAppService } from './services/hostApp' +import { LogService } from './services/log' +import { HotkeysService, AppHotkeyProvider } from './services/hotkeys' +import { NotifyService } from './services/notify' +import { PluginsService } from './services/plugins' +import { QuitterService } from './services/quitter' +import { DockingService } from './services/docking' +import { TabRecoveryService } from './services/tabRecovery' -import { AppRootComponent } from 'components/appRoot' -import { TabBodyComponent } from 'components/tabBody' -import { TabHeaderComponent } from 'components/tabHeader' -import { TitleBarComponent } from 'components/titleBar' +import { AppRootComponent } from './components/appRoot' +import { TabBodyComponent } from './components/tabBody' +import { TabHeaderComponent } from './components/tabHeader' +import { TitleBarComponent } from './components/titleBar' -import { HotkeyProvider } from 'api/hotkeyProvider' +import { HotkeyProvider } from './api/hotkeyProvider' const PROVIDERS = [ @@ -34,7 +34,6 @@ const PROVIDERS = [ HostAppService, HotkeysService, LogService, - ModalService, NotifyService, PluginsService, TabRecoveryService, @@ -52,19 +51,17 @@ const PROVIDERS = [ NgbModule, ], providers: PROVIDERS, - entryComponents: [ - ], declarations: [ AppRootComponent, TabBodyComponent, TabHeaderComponent, TitleBarComponent, ], - bootstrap: [ - AppRootComponent, - ] }) export default class AppModule { +} + +export class AppRootModule { static forRoot(): ModuleWithProviders { return { ngModule: AppModule, @@ -73,5 +70,5 @@ export default class AppModule { } } - +export { AppRootComponent } export * from './api' diff --git a/terminus-core/overrides.scss b/terminus-core/src/overrides.scss similarity index 100% rename from terminus-core/overrides.scss rename to terminus-core/src/overrides.scss diff --git a/terminus-core/services/app.ts b/terminus-core/src/services/app.ts similarity index 100% rename from terminus-core/services/app.ts rename to terminus-core/src/services/app.ts diff --git a/terminus-core/services/config.ts b/terminus-core/src/services/config.ts similarity index 100% rename from terminus-core/services/config.ts rename to terminus-core/src/services/config.ts diff --git a/terminus-core/services/docking.ts b/terminus-core/src/services/docking.ts similarity index 100% rename from terminus-core/services/docking.ts rename to terminus-core/src/services/docking.ts diff --git a/terminus-core/services/electron.ts b/terminus-core/src/services/electron.ts similarity index 100% rename from terminus-core/services/electron.ts rename to terminus-core/src/services/electron.ts diff --git a/terminus-core/services/hostApp.ts b/terminus-core/src/services/hostApp.ts similarity index 88% rename from terminus-core/services/hostApp.ts rename to terminus-core/src/services/hostApp.ts index 4f2ca37d..4e39ec30 100644 --- a/terminus-core/services/hostApp.ts +++ b/terminus-core/src/services/hostApp.ts @@ -2,20 +2,28 @@ import { Injectable, NgZone, EventEmitter } from '@angular/core' import { ElectronService } from '../services/electron' import { Logger, LogService } from '../services/log' -export const PLATFORM_WINDOWS = 'win32' -export const PLATFORM_MAC = 'darwin' -export const PLATFORM_LINUX = 'linux' +export enum Platform { + Linux, macOS, Windows, +} @Injectable() export class HostAppService { + platform: Platform + nodePlatform: string + constructor( private zone: NgZone, private electron: ElectronService, log: LogService, ) { - this.platform = require('os').platform() this.logger = log.create('hostApp') + this.nodePlatform = require('os').platform() + this.platform = { + win32: Platform.Windows, + darwin: Platform.macOS, + linux: Platform.Linux + }[this.nodePlatform] electron.ipcRenderer.on('host:quit-request', () => this.zone.run(() => this.quitRequested.emit())) @@ -36,7 +44,6 @@ export class HostAppService { }) } - platform: string; quitRequested = new EventEmitter() ready = new EventEmitter() shown = new EventEmitter() diff --git a/terminus-core/services/hotkeys.ts b/terminus-core/src/services/hotkeys.ts similarity index 100% rename from terminus-core/services/hotkeys.ts rename to terminus-core/src/services/hotkeys.ts diff --git a/terminus-core/services/hotkeys.util.ts b/terminus-core/src/services/hotkeys.util.ts similarity index 100% rename from terminus-core/services/hotkeys.util.ts rename to terminus-core/src/services/hotkeys.util.ts diff --git a/terminus-core/services/log.ts b/terminus-core/src/services/log.ts similarity index 100% rename from terminus-core/services/log.ts rename to terminus-core/src/services/log.ts diff --git a/terminus-core/services/notify.ts b/terminus-core/src/services/notify.ts similarity index 100% rename from terminus-core/services/notify.ts rename to terminus-core/src/services/notify.ts diff --git a/terminus-core/services/plugins.ts b/terminus-core/src/services/plugins.ts similarity index 100% rename from terminus-core/services/plugins.ts rename to terminus-core/src/services/plugins.ts diff --git a/terminus-core/services/quitter.ts b/terminus-core/src/services/quitter.ts similarity index 100% rename from terminus-core/services/quitter.ts rename to terminus-core/src/services/quitter.ts diff --git a/terminus-core/services/tabRecovery.ts b/terminus-core/src/services/tabRecovery.ts similarity index 100% rename from terminus-core/services/tabRecovery.ts rename to terminus-core/src/services/tabRecovery.ts diff --git a/terminus-core/theme.scss b/terminus-core/src/theme.scss similarity index 100% rename from terminus-core/theme.scss rename to terminus-core/src/theme.scss diff --git a/terminus-core/variables.scss b/terminus-core/src/variables.scss similarity index 100% rename from terminus-core/variables.scss rename to terminus-core/src/variables.scss diff --git a/terminus-core/tsconfig.json b/terminus-core/tsconfig.json index d9495179..e5ab73eb 100644 --- a/terminus-core/tsconfig.json +++ b/terminus-core/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": ".", + "baseUrl": "./src", "module": "commonjs", "target": "es5", "declaration": false, @@ -22,11 +22,11 @@ "es7" ], "paths": { - "terminus-*": ["../terminus-*"] + "*": ["../../app/node_modules/*"], + "terminus-*": ["../../terminus-*"] } }, - "compileOnSave": false, - "exclude": [ - "node_modules" + "include": [ + "src" ] } diff --git a/terminus-core/webpack.config.js b/terminus-core/webpack.config.js index ba2e41df..3c2b200d 100644 --- a/terminus-core/webpack.config.js +++ b/terminus-core/webpack.config.js @@ -1,33 +1,37 @@ module.exports = { target: 'node', - entry: './index.ts', + entry: 'src/index.ts', devtool: 'source-map', output: { filename: './dist/index.js', pathinfo: true, - library: 'terminusCore', - libraryTarget: 'commonjs', + libraryTarget: 'umd', + devtoolModuleFilenameTemplate: 'webpack-terminus-core:///[resource-path]', }, resolve: { - modules: ['.', 'node_modules', '..'], + modules: ['.', 'src', 'node_modules', '../app/node_modules'], extensions: ['.ts', '.js'], }, module: { loaders: [ { test: /\.ts$/, use: 'awesome-typescript-loader' }, - { test: /schemes\/.*$/, use: "raw-loader" }, { test: /\.pug$/, use: ['apply-loader', 'pug-loader'] }, - { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, - { test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, + { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'], exclude: /components\// }, + { test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'], include: /components\// }, + { test: /\.css$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, { test: /\.yaml$/, use: ['json-loader', 'yaml-loader'] }, ] }, - externals: [{ - 'fs': true, - 'os': true, - 'path': true, - 'deepmerge': true, - 'untildify': true, - '@angular/core': true, - }] + externals: [ + 'electron', + 'fs', + 'os', + 'path', + 'deepmerge', + 'untildify', + 'js-yaml', + /^rxjs/, + /^@angular/, + /^@ng-bootstrap/, + ] } diff --git a/terminus-settings/.gitignore b/terminus-settings/.gitignore new file mode 100644 index 00000000..1521c8b7 --- /dev/null +++ b/terminus-settings/.gitignore @@ -0,0 +1 @@ +dist diff --git a/terminus-settings/package.json b/terminus-settings/package.json new file mode 100644 index 00000000..1f545e54 --- /dev/null +++ b/terminus-settings/package.json @@ -0,0 +1,36 @@ +{ + "name": "terminus-settings", + "version": "0.0.1", + "description": "Terminus terminal settings page", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "scripts": { + "build": "webpack --progress --color --display-modules", + "watch": "webpack --progress --color --watch" + }, + "author": "Eugene Pankov", + "license": "MIT", + "devDependencies": { + "@types/deep-equal": "1.0.0", + "@types/node": "7.0.12", + "@types/webpack-env": "1.13.0", + "awesome-typescript-loader": "3.1.2", + "css-loader": "^0.28.0", + "node-sass": "^4.5.2", + "pug": "^2.0.0-beta3", + "pug-loader": "^2.3.0", + "raw-loader": "^0.5.1", + "sass-loader": "^6.0.3", + "to-string-loader": "^1.1.5", + "webpack": "2.3.3" + }, + "peerDependencies": { + "@angular/common": "4.0.1", + "@angular/core": "4.0.1", + "@angular/forms": "4.0.1", + "@angular/platform-browser": "4.0.1", + "@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.22", + "terminus-core": "*", + "rxjs": "5.3.0" + } +} diff --git a/app/src/settings/api.ts b/terminus-settings/src/api.ts similarity index 100% rename from app/src/settings/api.ts rename to terminus-settings/src/api.ts diff --git a/app/src/settings/buttonProvider.ts b/terminus-settings/src/buttonProvider.ts similarity index 97% rename from app/src/settings/buttonProvider.ts rename to terminus-settings/src/buttonProvider.ts index 65ab805d..84c4ab17 100644 --- a/app/src/settings/buttonProvider.ts +++ b/terminus-settings/src/buttonProvider.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core' -import { ToolbarButtonProvider, IToolbarButton, AppService } from 'api' +import { ToolbarButtonProvider, IToolbarButton, AppService } from 'terminus-core' + import { SettingsTabComponent } from './components/settingsTab' diff --git a/app/src/settings/components/hotkeyDisplay.pug b/terminus-settings/src/components/hotkeyDisplay.pug similarity index 100% rename from app/src/settings/components/hotkeyDisplay.pug rename to terminus-settings/src/components/hotkeyDisplay.pug diff --git a/app/src/settings/components/hotkeyDisplay.less b/terminus-settings/src/components/hotkeyDisplay.scss similarity index 100% rename from app/src/settings/components/hotkeyDisplay.less rename to terminus-settings/src/components/hotkeyDisplay.scss diff --git a/app/src/settings/components/hotkeyDisplay.ts b/terminus-settings/src/components/hotkeyDisplay.ts similarity index 96% rename from app/src/settings/components/hotkeyDisplay.ts rename to terminus-settings/src/components/hotkeyDisplay.ts index 2b9b48d6..ba6ef908 100644 --- a/app/src/settings/components/hotkeyDisplay.ts +++ b/terminus-settings/src/components/hotkeyDisplay.ts @@ -4,7 +4,7 @@ import { Component, Input, trigger, style, animate, transition } from '@angular/ @Component({ selector: 'hotkey-display', template: require('./hotkeyDisplay.pug'), - styles: [require('./hotkeyDisplay.less')], + styles: [require('./hotkeyDisplay.scss')], //changeDetection: ChangeDetectionStrategy.OnPush, animations: [ trigger('animateKey', [ diff --git a/app/src/settings/components/hotkeyInput.less b/terminus-settings/src/components/hotkeyInput.scss similarity index 100% rename from app/src/settings/components/hotkeyInput.less rename to terminus-settings/src/components/hotkeyInput.scss diff --git a/app/src/settings/components/hotkeyInput.ts b/terminus-settings/src/components/hotkeyInput.ts similarity index 76% rename from app/src/settings/components/hotkeyInput.ts rename to terminus-settings/src/components/hotkeyInput.ts index 6c366b9f..7139a691 100644 --- a/app/src/settings/components/hotkeyInput.ts +++ b/terminus-settings/src/components/hotkeyInput.ts @@ -1,5 +1,6 @@ import { Component, Input, Output, EventEmitter, HostListener, ChangeDetectionStrategy } from '@angular/core' -import { ModalService } from 'services/modal' +import { NgbModal } from '@ng-bootstrap/ng-bootstrap' + import { HotkeyInputModalComponent } from './hotkeyInputModal' @@ -8,16 +9,16 @@ import { HotkeyInputModalComponent } from './hotkeyInputModal' template: ` `, - styles: [require('./hotkeyInput.less')], + styles: [require('./hotkeyInput.scss')], changeDetection: ChangeDetectionStrategy.OnPush, }) export class HotkeyInputComponent { constructor( - private modal: ModalService, + private ngbModal: NgbModal, ) { } @HostListener('click') public click() { - this.modal.open(HotkeyInputModalComponent).result.then((value: string[]) => { + this.ngbModal.open(HotkeyInputModalComponent).result.then((value: string[]) => { this.model = value this.modelChange.emit(this.model) }) diff --git a/app/src/settings/components/hotkeyInputModal.pug b/terminus-settings/src/components/hotkeyInputModal.pug similarity index 100% rename from app/src/settings/components/hotkeyInputModal.pug rename to terminus-settings/src/components/hotkeyInputModal.pug diff --git a/app/src/settings/components/hotkeyInputModal.scss b/terminus-settings/src/components/hotkeyInputModal.scss similarity index 100% rename from app/src/settings/components/hotkeyInputModal.scss rename to terminus-settings/src/components/hotkeyInputModal.scss diff --git a/app/src/settings/components/hotkeyInputModal.ts b/terminus-settings/src/components/hotkeyInputModal.ts similarity index 97% rename from app/src/settings/components/hotkeyInputModal.ts rename to terminus-settings/src/components/hotkeyInputModal.ts index 7a8a3d4e..23a6e67d 100644 --- a/app/src/settings/components/hotkeyInputModal.ts +++ b/terminus-settings/src/components/hotkeyInputModal.ts @@ -1,7 +1,7 @@ import { Component, Input, trigger, transition, style, animate } from '@angular/core' -import { HotkeysService } from 'services/hotkeys' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { Subscription } from 'rxjs' +import { HotkeysService } from 'terminus-core' const INPUT_TIMEOUT = 1000 diff --git a/app/src/settings/components/multiHotkeyInput.pug b/terminus-settings/src/components/multiHotkeyInput.pug similarity index 100% rename from app/src/settings/components/multiHotkeyInput.pug rename to terminus-settings/src/components/multiHotkeyInput.pug diff --git a/app/src/settings/components/multiHotkeyInput.scss b/terminus-settings/src/components/multiHotkeyInput.scss similarity index 100% rename from app/src/settings/components/multiHotkeyInput.scss rename to terminus-settings/src/components/multiHotkeyInput.scss diff --git a/app/src/settings/components/multiHotkeyInput.ts b/terminus-settings/src/components/multiHotkeyInput.ts similarity index 100% rename from app/src/settings/components/multiHotkeyInput.ts rename to terminus-settings/src/components/multiHotkeyInput.ts diff --git a/app/src/settings/components/settingsTab.deep.css b/terminus-settings/src/components/settingsTab.deep.css similarity index 100% rename from app/src/settings/components/settingsTab.deep.css rename to terminus-settings/src/components/settingsTab.deep.css diff --git a/app/src/settings/components/settingsTab.pug b/terminus-settings/src/components/settingsTab.pug similarity index 100% rename from app/src/settings/components/settingsTab.pug rename to terminus-settings/src/components/settingsTab.pug diff --git a/app/src/settings/components/settingsTab.scss b/terminus-settings/src/components/settingsTab.scss similarity index 100% rename from app/src/settings/components/settingsTab.scss rename to terminus-settings/src/components/settingsTab.scss diff --git a/app/src/settings/components/settingsTab.ts b/terminus-settings/src/components/settingsTab.ts similarity index 83% rename from app/src/settings/components/settingsTab.ts rename to terminus-settings/src/components/settingsTab.ts index 412ff763..c078bbf5 100644 --- a/app/src/settings/components/settingsTab.ts +++ b/terminus-settings/src/components/settingsTab.ts @@ -1,8 +1,5 @@ import { Component, Inject } from '@angular/core' -import { ElectronService } from 'services/electron' -import { ConfigService } from 'services/config' -import { DockingService } from 'services/docking' -import { IHotkeyDescription, HotkeyProvider, BaseTabComponent } from 'api' +import { ElectronService, DockingService, ConfigService, IHotkeyDescription, HotkeyProvider, BaseTabComponent } from 'terminus-core' import { SettingsTabProvider } from '../api' diff --git a/app/src/settings/components/settingsTabBody.ts b/terminus-settings/src/components/settingsTabBody.ts similarity index 99% rename from app/src/settings/components/settingsTabBody.ts rename to terminus-settings/src/components/settingsTabBody.ts index 81194d2b..3e299472 100644 --- a/app/src/settings/components/settingsTabBody.ts +++ b/terminus-settings/src/components/settingsTabBody.ts @@ -1,6 +1,7 @@ import { Component, Input, ViewContainerRef, ViewChild, ComponentFactoryResolver, ComponentRef } from '@angular/core' import { SettingsTabProvider } from '../api' + @Component({ selector: 'settings-tab-body', template: '', diff --git a/app/src/settings/index.ts b/terminus-settings/src/index.ts similarity index 90% rename from app/src/settings/index.ts rename to terminus-settings/src/index.ts index 1276a8b8..06e8ad01 100644 --- a/app/src/settings/index.ts +++ b/terminus-settings/src/index.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' +import { ToolbarButtonProvider, TabRecoveryProvider } from 'terminus-core' import { HotkeyInputComponent } from './components/hotkeyInput' import { HotkeyDisplayComponent } from './components/hotkeyDisplay' @@ -10,8 +11,6 @@ import { MultiHotkeyInputComponent } from './components/multiHotkeyInput' import { SettingsTabComponent } from './components/settingsTab' import { SettingsTabBodyComponent } from './components/settingsTabBody' -import { ToolbarButtonProvider, TabRecoveryProvider } from 'api' - import { ButtonProvider } from './buttonProvider' import { RecoveryProvider } from './recoveryProvider' @@ -39,8 +38,7 @@ import { RecoveryProvider } from './recoveryProvider' SettingsTabBodyComponent, ], }) -class SettingsModule { +export default class SettingsModule { } - -export default SettingsModule +export * from './api' diff --git a/app/src/settings/recoveryProvider.ts b/terminus-settings/src/recoveryProvider.ts similarity index 87% rename from app/src/settings/recoveryProvider.ts rename to terminus-settings/src/recoveryProvider.ts index f2763a4d..844d75c9 100644 --- a/app/src/settings/recoveryProvider.ts +++ b/terminus-settings/src/recoveryProvider.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core' -import { TabRecoveryProvider, AppService } from 'api' +import { TabRecoveryProvider, AppService } from 'terminus-core' + import { SettingsTabComponent } from './components/settingsTab' diff --git a/terminus-settings/tsconfig.json b/terminus-settings/tsconfig.json new file mode 100644 index 00000000..e5ab73eb --- /dev/null +++ b/terminus-settings/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "baseUrl": "./src", + "module": "commonjs", + "target": "es5", + "declaration": false, + "noImplicitAny": false, + "removeComments": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedParameters": true, + "noUnusedLocals": true, + "declaration": true, + "declarationDir": "dist", + "lib": [ + "dom", + "es2015", + "es7" + ], + "paths": { + "*": ["../../app/node_modules/*"], + "terminus-*": ["../../terminus-*"] + } + }, + "include": [ + "src" + ] +} diff --git a/terminus-settings/webpack.config.js b/terminus-settings/webpack.config.js new file mode 100644 index 00000000..38588f7e --- /dev/null +++ b/terminus-settings/webpack.config.js @@ -0,0 +1,36 @@ +module.exports = { + target: 'node', + entry: 'src/index.ts', + devtool: 'source-map', + output: { + filename: './dist/index.js', + pathinfo: true, + libraryTarget: 'commonjs', + devtoolModuleFilenameTemplate: 'webpack-terminus-settings:///[resource-path]', + }, + resolve: { + modules: ['.', 'node_modules', '../app/node_modules'], + extensions: ['.ts', '.js'], + }, + module: { + loaders: [ + { test: /\.ts$/, use: 'awesome-typescript-loader', exclude: [/node_modules/] }, + { test: /schemes\/.*$/, use: "raw-loader" }, + { test: /\.pug$/, use: ['apply-loader', 'pug-loader'] }, + { test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, + { test: /\.css$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, + ] + }, + externals: [ + 'fs', + 'fs-promise', + 'path', + 'node-pty', + 'child-process-promise', + 'fs-promise', + /^rxjs/, + /^@angular/, + /^@ng-bootstrap/, + /^terminus-/, + ] +} diff --git a/terminus-terminal/package.json b/terminus-terminal/package.json index 8e401071..e5d26ce9 100644 --- a/terminus-terminal/package.json +++ b/terminus-terminal/package.json @@ -5,7 +5,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "scripts": { - "build": "webpack --progress --color", + "build": "webpack --progress --color --display-modules", "watch": "webpack --progress --color --watch" }, "author": "Eugene Pankov", @@ -16,25 +16,30 @@ "@types/webpack-env": "1.13.0", "awesome-typescript-loader": "3.1.2", "css-loader": "^0.28.0", + "dataurl": "0.1.0", + "deep-equal": "1.0.1", "pug": "^2.0.0-beta11", "pug-loader": "^2.3.0", "raw-loader": "^0.5.1", "sass-loader": "^6.0.3", - "style-loader": "^0.16.1", + "to-string-loader": "^1.1.5", "webpack": "2.3.3" }, - "dependencies": { + "peerDependencies": { "@angular/common": "4.0.1", "@angular/core": "4.0.1", "@angular/forms": "4.0.1", "@angular/platform-browser": "4.0.1", "@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.22", - "child-process-promise": "2.2.1", - "dataurl": "0.1.0", - "deep-equal": "1.0.1", - "fs-promise": "2.0.2", - "hterm-commonjs": "1.0.0", - "node-pty": "0.6.2", + "terminus-core": "*", + "terminus-settings": "*", "rxjs": "5.3.0" + }, + "dependencies": { + "child-process-promise": "2.2.1", + "fs-promise": "2.0.2", + "font-manager": "0.2.2", + "hterm-commonjs": "1.0.0", + "node-pty": "0.6.2" } } diff --git a/terminus-terminal/api.ts b/terminus-terminal/src/api.ts similarity index 100% rename from terminus-terminal/api.ts rename to terminus-terminal/src/api.ts diff --git a/terminus-terminal/buttonProvider.ts b/terminus-terminal/src/buttonProvider.ts similarity index 80% rename from terminus-terminal/buttonProvider.ts rename to terminus-terminal/src/buttonProvider.ts index 826f062b..5f67f44e 100644 --- a/terminus-terminal/buttonProvider.ts +++ b/terminus-terminal/src/buttonProvider.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core' -import { HotkeysService, ToolbarButtonProvider, IToolbarButton, AppService } from 'terminus-core' +import { HotkeysService, ToolbarButtonProvider, IToolbarButton, AppService, HostAppService, Platform } from 'terminus-core' import { SessionsService } from './services/sessions' import { TerminalTabComponent } from './components/terminalTab' @@ -10,6 +10,7 @@ export class ButtonProvider extends ToolbarButtonProvider { constructor ( private app: AppService, private sessions: SessionsService, + private hostApp: HostAppService, hotkeys: HotkeysService, ) { super() @@ -25,9 +26,14 @@ export class ButtonProvider extends ToolbarButtonProvider { if (this.app.activeTab instanceof TerminalTabComponent) { cwd = await this.app.activeTab.session.getWorkingDirectory() } + let command = { + [Platform.macOS]: 'zsh', + [Platform.Linux]: 'zsh', + [Platform.Windows]: 'cmd.exe', + }[this.hostApp.platform] this.app.openNewTab( TerminalTabComponent, - { session: await this.sessions.createNewSession({ command: 'zsh', cwd }) } + { session: await this.sessions.createNewSession({ command, cwd }) } ) } diff --git a/terminus-terminal/colorSchemes.ts b/terminus-terminal/src/colorSchemes.ts similarity index 100% rename from terminus-terminal/colorSchemes.ts rename to terminus-terminal/src/colorSchemes.ts diff --git a/terminus-terminal/components/colorPicker.pug b/terminus-terminal/src/components/colorPicker.pug similarity index 100% rename from terminus-terminal/components/colorPicker.pug rename to terminus-terminal/src/components/colorPicker.pug diff --git a/terminus-terminal/components/colorPicker.scss b/terminus-terminal/src/components/colorPicker.scss similarity index 100% rename from terminus-terminal/components/colorPicker.scss rename to terminus-terminal/src/components/colorPicker.scss diff --git a/terminus-terminal/components/colorPicker.ts b/terminus-terminal/src/components/colorPicker.ts similarity index 100% rename from terminus-terminal/components/colorPicker.ts rename to terminus-terminal/src/components/colorPicker.ts diff --git a/terminus-terminal/components/settings.pug b/terminus-terminal/src/components/settings.pug similarity index 93% rename from terminus-terminal/components/settings.pug rename to terminus-terminal/src/components/settings.pug index ad192ba7..c74bf8aa 100644 --- a/terminus-terminal/components/settings.pug +++ b/terminus-terminal/src/components/settings.pug @@ -43,6 +43,12 @@ span -> span([style.color]='config.full().terminal.colorScheme.colors[1]') link div + span + div + span john@doe-pc + span([style.color]='config.full().terminal.colorScheme.colors[1]') $ + span rm -rf / + span([style.background-color]='config.full().terminal.colorScheme.cursor')   .col-lg-6 @@ -85,7 +91,7 @@ title='BG', ) color-picker( - '[(model)]'='config.store.terminal.cursor.background', + '[(model)]'='config.store.terminal.colorScheme.cursor', (modelChange)='config.save()', title='CU', ) diff --git a/terminus-terminal/components/settings.scss b/terminus-terminal/src/components/settings.scss similarity index 100% rename from terminus-terminal/components/settings.scss rename to terminus-terminal/src/components/settings.scss diff --git a/terminus-terminal/components/settings.ts b/terminus-terminal/src/components/settings.ts similarity index 61% rename from terminus-terminal/components/settings.ts rename to terminus-terminal/src/components/settings.ts index 8c508a9a..13113aa9 100644 --- a/terminus-terminal/components/settings.ts +++ b/terminus-terminal/src/components/settings.ts @@ -3,8 +3,10 @@ import 'rxjs/add/operator/map' import 'rxjs/add/operator/debounceTime' import 'rxjs/add/operator/distinctUntilChanged' const equal = require('deep-equal') +const fontManager = require('font-manager') + import { Component, Inject } from '@angular/core' -import { ConfigService } from 'terminus-core' +import { ConfigService, HostAppService, Platform } from 'terminus-core' const { exec } = require('child-process-promise') import { TerminalColorSchemeProvider, ITerminalColorScheme } from '../api' @@ -21,19 +23,26 @@ export class SettingsComponent { constructor( public config: ConfigService, + private hostApp: HostAppService, @Inject(TerminalColorSchemeProvider) private colorSchemeProviders: TerminalColorSchemeProvider[], ) { } async ngOnInit () { - exec('fc-list :spacing=mono').then((result) => { - this.fonts = result.stdout - .split('\n') - .filter((x) => !!x) - .map((x) => x.split(':')[1].trim()) - .map((x) => x.split(',')[0].trim()) + if (this.hostApp.platform == Platform.Windows) { + let fonts = await new Promise((resolve) => fontManager.findFonts({ monospace: true }, resolve)) + this.fonts = fonts.map(x => x.family) this.fonts.sort() - }) - + } + if (this.hostApp.platform == Platform.Linux) { + exec('fc-list :spacing=mono').then((result) => { + this.fonts = result.stdout + .split('\n') + .filter(x => !!x) + .map(x => x.split(':')[1].trim()) + .map(x => x.split(',')[0].trim()) + this.fonts.sort() + }) + } this.colorSchemes = (await Promise.all(this.colorSchemeProviders.map(x => x.getSchemes()))).reduce((a, b) => a.concat(b)) } diff --git a/terminus-terminal/components/terminal.userCSS.scss b/terminus-terminal/src/components/terminal.userCSS.scss similarity index 100% rename from terminus-terminal/components/terminal.userCSS.scss rename to terminus-terminal/src/components/terminal.userCSS.scss diff --git a/terminus-terminal/components/terminalTab.scss b/terminus-terminal/src/components/terminalTab.scss similarity index 100% rename from terminus-terminal/components/terminalTab.scss rename to terminus-terminal/src/components/terminalTab.scss diff --git a/terminus-terminal/components/terminalTab.ts b/terminus-terminal/src/components/terminalTab.ts similarity index 100% rename from terminus-terminal/components/terminalTab.ts rename to terminus-terminal/src/components/terminalTab.ts diff --git a/terminus-terminal/config.ts b/terminus-terminal/src/config.ts similarity index 92% rename from terminus-terminal/config.ts rename to terminus-terminal/src/config.ts index 9722057e..11691f9f 100644 --- a/terminus-terminal/config.ts +++ b/terminus-terminal/src/config.ts @@ -12,7 +12,8 @@ export class TerminalConfigProvider extends ConfigProvider { colorScheme: { foreground: null, background: null, - colors: null, + cursor: null, + colors: [], }, }, hotkeys: { diff --git a/terminus-terminal/hterm.ts b/terminus-terminal/src/hterm.ts similarity index 100% rename from terminus-terminal/hterm.ts rename to terminus-terminal/src/hterm.ts diff --git a/terminus-terminal/index.ts b/terminus-terminal/src/index.ts similarity index 82% rename from terminus-terminal/index.ts rename to terminus-terminal/src/index.ts index a8faa925..e40f9947 100644 --- a/terminus-terminal/index.ts +++ b/terminus-terminal/src/index.ts @@ -3,7 +3,7 @@ import { BrowserModule } from '@angular/platform-browser' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService } from 'terminus-core' +import { HostAppService, Platform, ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService } from 'terminus-core' import { SettingsTabProvider } from 'terminus-settings' import { TerminalTabComponent } from './components/terminalTab' @@ -28,10 +28,20 @@ import { hterm } from './hterm' ], providers: [ SessionsService, + ScreenPersistenceProvider, { provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true }, { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true }, - { provide: SessionPersistenceProvider, useClass: ScreenPersistenceProvider }, - // { provide: SessionPersistenceProvider, useValue: null }, + { + provide: SessionPersistenceProvider, + useFactory: (hostApp: HostAppService, screen: ScreenPersistenceProvider) => { + if (hostApp.platform == Platform.Windows) { + return null + } else { + return screen + } + }, + deps: [HostAppService, ScreenPersistenceProvider], + }, { provide: SettingsTabProvider, useClass: TerminalSettingsProvider, multi: true }, { provide: ConfigProvider, useClass: TerminalConfigProvider, multi: true }, { provide: TerminalColorSchemeProvider, useClass: HyperColorSchemes, multi: true }, diff --git a/terminus-terminal/persistenceProviders.ts b/terminus-terminal/src/persistenceProviders.ts similarity index 83% rename from terminus-terminal/persistenceProviders.ts rename to terminus-terminal/src/persistenceProviders.ts index 0e6d0524..ab59ecf8 100644 --- a/terminus-terminal/persistenceProviders.ts +++ b/terminus-terminal/src/persistenceProviders.ts @@ -6,7 +6,12 @@ import { SessionOptions, SessionPersistenceProvider } from './api' export class ScreenPersistenceProvider extends SessionPersistenceProvider { async attachSession (recoveryId: any): Promise { - let lines = (await exec('screen -list')).stdout.split('\n') + let lines: string[] + try { + lines = (await exec('screen -list')).stdout.split('\n') + } catch (result) { + lines = result.stdout.split('\n') + } let screenPID = lines .filter(line => line.indexOf('.' + recoveryId) !== -1) .map(line => parseInt(line.trim().split('.')[0]))[0] @@ -15,8 +20,8 @@ export class ScreenPersistenceProvider extends SessionPersistenceProvider { return null } - lines = (await exec(`ps -o pid --ppid ${screenPID}`)).stdout.split('\n') - let recoveredTruePID = parseInt(lines[1].split(/\s/).filter(x => !!x)[0]) + lines = (await exec(`pgrep -P ${screenPID}`)).stdout.split('\n') + let recoveredTruePID = parseInt(lines[0]) return { recoveryId, @@ -30,7 +35,7 @@ export class ScreenPersistenceProvider extends SessionPersistenceProvider { let configPath = '/tmp/.termScreenConfig' await fs.writeFile(configPath, ` escape ^^^ - vbell off + vbell on term xterm-color bindkey "^[OH" beginning-of-line bindkey "^[OF" end-of-line diff --git a/terminus-terminal/recoveryProvider.ts b/terminus-terminal/src/recoveryProvider.ts similarity index 100% rename from terminus-terminal/recoveryProvider.ts rename to terminus-terminal/src/recoveryProvider.ts diff --git a/terminus-terminal/services/sessions.ts b/terminus-terminal/src/services/sessions.ts similarity index 92% rename from terminus-terminal/services/sessions.ts rename to terminus-terminal/src/services/sessions.ts index ba2ee1e4..c57f3b60 100644 --- a/terminus-terminal/services/sessions.ts +++ b/terminus-terminal/src/services/sessions.ts @@ -3,6 +3,7 @@ import * as fs from 'fs-promise' import { Subject } from 'rxjs' import { Injectable } from '@angular/core' import { Logger, LogService } from 'terminus-core' +const { exec } = require('child-process-promise') import { SessionOptions, SessionPersistenceProvider } from '../api' @@ -112,7 +113,14 @@ export class Session { } async getWorkingDirectory (): Promise { - return await fs.readlink(`/proc/${this.truePID}/cwd`) + if (process.platform == 'darwin') { + let lines = (await exec(`lsof -p ${this.truePID} -Fn`)).split('\n') + return lines[2] + } + if (process.platform == 'linux') { + return await fs.readlink(`/proc/${this.truePID}/cwd`) + } + return null } } diff --git a/terminus-terminal/settings.ts b/terminus-terminal/src/settings.ts similarity index 100% rename from terminus-terminal/settings.ts rename to terminus-terminal/src/settings.ts diff --git a/terminus-terminal/tsconfig.json b/terminus-terminal/tsconfig.json index d9495179..993ae363 100644 --- a/terminus-terminal/tsconfig.json +++ b/terminus-terminal/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": ".", + "baseUrl": "src", "module": "commonjs", "target": "es5", "declaration": false, @@ -22,7 +22,8 @@ "es7" ], "paths": { - "terminus-*": ["../terminus-*"] + "*": ["../../app/node_modules/*"], + "terminus-*": ["../../terminus-*"] } }, "compileOnSave": false, diff --git a/terminus-terminal/webpack.config.js b/terminus-terminal/webpack.config.js index 4156c843..9f43f6ac 100644 --- a/terminus-terminal/webpack.config.js +++ b/terminus-terminal/webpack.config.js @@ -1,15 +1,15 @@ module.exports = { target: 'node', - entry: 'index.ts', + entry: 'src/index.ts', devtool: 'source-map', output: { filename: './dist/index.js', pathinfo: true, - library: 'terminusTerminal', libraryTarget: 'umd', + devtoolModuleFilenameTemplate: 'webpack-terminus-terminal:///[resource-path]', }, resolve: { - modules: ['.', 'node_modules', '..'], + modules: ['.', 'node_modules', '../app/node_modules'], extensions: ['.ts', '.js'], }, module: { @@ -17,19 +17,20 @@ module.exports = { { test: /\.ts$/, use: 'awesome-typescript-loader' }, { test: /schemes\/.*$/, use: "raw-loader" }, { test: /\.pug$/, use: ['apply-loader', 'pug-loader'] }, - { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, - { test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, + { test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, + { test: /\.css$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, ] }, - externals: { - 'fs': true, - 'fs-promise': true, - 'path': true, - 'node-pty': true, - 'child-process-promise': true, - 'fs-promise': true, - '@angular/core': true, - 'terminus-core': true, - 'terminus-settings': true, - } + externals: [ + 'fs', + 'fs-promise', + 'font-manager', + 'path', + 'node-pty', + 'child-process-promise', + /^rxjs/, + /^@angular/, + /^@ng-bootstrap/, + /^terminus-/, + ] } diff --git a/tsconfig.json b/tsconfig.json index fdccffc4..a60f3f26 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,17 +19,23 @@ "es2015", "es2015.iterable.ts", "es7" - ] + ], + "paths": { + "terminus-*": ["../../terminus-*"] + } }, "compileOnSave": false, "exclude": [ "node_modules", + "*/node_modules", + "terminus*", "platforms" ], "filesGlob" : [ "app/src/*.ts", "app/src/**/*.ts", "!node_modules/**", - "!app/node_modules/**" + "!app/node_modules/**", + "!*/node_modules/**" ] } diff --git a/webpack.config.js b/webpack.config.js index b8f15c02..59dadfd6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -22,52 +22,17 @@ module.exports = { module: { loaders: [ { - test: /\.ts$/, - loader: 'awesome-typescript-loader', - }, - { - test: /\.pug$/, - exclude: [ - /index.pug/ - ], - loaders: [ - { - loader: 'apply-loader' - }, - { - loader: 'pug-loader' - } - ] - }, - { - test: /\.less$/, - loader: "style-loader!css-loader!less-loader", - exclude: [/app\/.*components\//], - }, - { - test: /\.less$/, - loader: "to-string-loader!css-loader!less-loader", - include: [/app\/.*components\//], + test: /\.ts$/, + use: 'awesome-typescript-loader', + exclude: [/node_modules/] }, { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'], - exclude: [/app\/.*components\//], - }, - { - test: /\.scss$/, - use: ['to-string-loader', 'css-loader', 'sass-loader'], - include: [/app\/.*components\//], }, { test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'], - exclude: [/app\/.*components\//], - }, - { - test: /\.css$/, - use: ['to-string-loader', 'css-loader'], - include: [/app\/.*components\//], }, { test: /\.(png|svg)$/, @@ -77,44 +42,28 @@ module.exports = { } }, { - test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, - loader: "file-loader", - options: { - name: 'fonts/[name].[hash:8].[ext]' - } + test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, + loader: "file-loader", + options: { + name: 'fonts/[name].[hash:8].[ext]' + } } ] }, externals: { - 'fs': 'require("fs")', - 'buffer': 'require("buffer")', - 'system': '{}', - 'file': '{}', - - 'net': 'require("net")', - 'electron': 'require("electron")', - 'remote': 'require("remote")', - 'shell': 'require("shell")', - 'ipc': 'require("ipc")', - 'crypto': 'require("crypto")', - 'node-pty': 'require("node-pty")', - 'child-process-promise': 'require("child-process-promise")', + '@angular/core': 'commonjs @angular/core', + '@angular/compiler': 'commonjs @angular/compiler', + '@angular/platform-browser': 'commonjs @angular/platform-browser', + '@angular/platform-browser-dynamic': 'commonjs @angular/platform-browser-dynamic', + '@angular/forms': 'commonjs @angular/forms', + '@angular/common': 'commonjs @angular/common', + '@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap', + 'rxjs': 'commonjs rxjs', + 'zone.js': 'commonjs zone.js', }, plugins: [ - new webpack.ProvidePlugin({ - "window.jQuery": "jquery", - }), + new webpack.ProvidePlugin({ + "window.jQuery": "jquery", + }), ] } - - -if (!process.env.DEV) { - module.exports.plugins.push(new webpack.LoaderOptionsPlugin({ - minimize: true, - })) - module.exports.plugins.push(new webpack.optimize.UglifyJsPlugin({ - sourceMap: true, - mangle: false, - })) - module.exports.devtool = 'source-map' -}