diff --git a/package-lock.json b/package-lock.json index 9f1c7458dd634bdb186bc04d5aa1e9dba8cc8d04..e18dd1db7d2f87abdfaf05da396ea15881d22c07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -517,6 +517,12 @@ "normalize-path": "2.1.1" } }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, "append-transform": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", @@ -1536,6 +1542,20 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codelyzer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.0.1.tgz", + "integrity": "sha512-MsOcaiLqcBK7hjHbfp9HZrflqWg5tD9A5qVSXkW208OJ8pkf63id8IiOjEiK/XU3o70W8tWbFKi1tAOwiJDMrQ==", + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "css-selector-tokenizer": "0.7.0", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.0.3" + } + }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", @@ -2053,6 +2073,15 @@ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", "dev": true }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -12476,6 +12505,15 @@ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "dev": true }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "5.4.1" + } + }, "send": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", @@ -13303,6 +13341,12 @@ "resolved": "https://registry.npmjs.org/tether/-/tether-1.4.0.tgz", "integrity": "sha1-D5+hcfdb9YSF2BSelHmdeudNHBo=" }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", diff --git a/package.json b/package.json index f786bbfbca882202b6a7c5d295c709c8cc37b555..5416acfd248ed89082d8a1004660126aa3d0daaf 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", + "codelyzer": "^4.0.1", "jasmine-core": "~2.6.2", "jasmine-spec-reporter": "~4.1.0", "karma": "~1.7.0", diff --git a/src/app/BasicPage/not-found/not-found.component.html b/src/app/BasicPage/not-found/not-found.component.html index 36df63002db354aab26c014b466a3acb3dccabd9..8c186c77bf5bee08dadbc15e48e8f487c9bda450 100644 --- a/src/app/BasicPage/not-found/not-found.component.html +++ b/src/app/BasicPage/not-found/not-found.component.html @@ -1 +1,9 @@ -<h2>这个真没有</h2> +<div class="middle-box text-center animated fadeInDown"> + <h1>404</h1> + <h3 class="font-bold">Page Not Found</h3> + + <div class="error-desc"> + Sorry, but the page you are looking for has note been found. Try checking the URL for error, then hit the refresh + button on your browser or try found something else in our app. + </div> +</div> diff --git a/src/app/ControlPage/control/ssh/ssh.component.ts b/src/app/ControlPage/control/ssh/ssh.component.ts index cf028f4295b2a7284d93da46524e7a36d114675f..cfdcf77c765f4f1fdfba4310abde9d6f34676f24 100644 --- a/src/app/ControlPage/control/ssh/ssh.component.ts +++ b/src/app/ControlPage/control/ssh/ssh.component.ts @@ -24,6 +24,22 @@ import {NavList, View, Term} from '../control.component'; export class SshComponent implements OnInit { NavList = NavList; + static TerminalDisconnect(host) { + host.connected = false; + host.Term.socket.destroy(); + host.Term.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); + } + + static TerminalDisconnectAll() { + alert('TerminalDisconnectAll'); + for (let _i = 0; _i < NavList.List.length; _i++) { + SshComponent.TerminalDisconnect(_i); + // TermStore.term[i]["connected"] = false; + // TermStore.term[i]["socket"].destroy(); + // TermStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); + } + } + constructor(private _appService: AppService, private _logger: Logger) { this._logger.log('SshComponent.ts:SshComponent'); @@ -32,8 +48,8 @@ export class SshComponent implements OnInit { ngOnInit() { } - TerminalConnect(host,username) { - let socket = io.connect(); + TerminalConnect(host, username) { + const socket = io.connect(); let cols = '80'; let rows = '24'; if (Cookie.get('cols')) { @@ -46,12 +62,12 @@ export class SshComponent implements OnInit { Cookie.set('rows', rows, 99, '/', document.domain); - let id = NavList.List.length - 1; + const id = NavList.List.length - 1; NavList.List[id].nick = host.hostname; NavList.List[id].connected = true; NavList.List[id].edit = false; NavList.List[id].closed = false; - NavList.List[id].type = "ssh"; + NavList.List[id].type = 'ssh'; NavList.List[id].Term = new Term; NavList.List[id].Term.machine = host.uuid; NavList.List[id].Term.socket = socket; @@ -62,10 +78,13 @@ export class SshComponent implements OnInit { screenKeys: true, }); NavList.List.push(new View()); - for (let m in NavList.List) { - NavList.List[m].hide = true; + for (let _i = 0; _i < NavList.List.length; _i++) { + if (id === _i) { + NavList.List[id].hide = false; + } else { + NavList.List[_i].hide = true; + } } - NavList.List[id].hide = false; NavList.Active = id; @@ -79,7 +98,7 @@ export class SshComponent implements OnInit { NavList.List[id].Term.term.write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n'); socket.on('connect', function () { - socket.emit('login', "root"); + socket.emit('login', 'root'); socket.emit('machine', host.uuid); NavList.List[id].Term.term.on('data', function (data) { @@ -109,14 +128,18 @@ export class SshComponent implements OnInit { if (Cookie.get('cols')) { cols = parseInt(Cookie.get('cols')); } - if (col < 80) col = 80; - if (row < 24) row = 24; - if (cols == col && row == rows) { + if (col < 80) { + col = 80; + } + if (row < 24) { + row = 24; + } + if (cols === col && row === rows) { } else { - for (let tid in NavList.List) { - if (NavList.List[tid].connected) { - NavList.List[tid].Term.socket.emit('resize', [col, row]); - NavList.List[tid].Term.term.resize(col, row); + for (let _i = 0; _i < NavList.List.length; _i++) { + if (NavList.List[_i].connected) { + NavList.List[_i].Term.socket.emit('resize', [col, row]); + NavList.List[_i].Term.term.resize(col, row); } } Cookie.set('cols', String(col), 99, '/', document.domain); @@ -128,19 +151,5 @@ export class SshComponent implements OnInit { } - static TerminalDisconnect(host) { - host.connected = false; - host.Term.socket.destroy(); - host.Term.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); - } - static TerminalDisconnectAll() { - alert("TerminalDisconnectAll"); - for (let i in NavList.List) { - SshComponent.TerminalDisconnect(i); - // TermStore.term[i]["connected"] = false; - // TermStore.term[i]["socket"].destroy(); - // TermStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); - } - } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index dae62da94b514785c0232f8f67b7663d29a45f1c..e2682157fa9067e285fd92450874a76f696b7850 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -36,6 +36,7 @@ import {NotFoundComponent} from './BasicPage/not-found/not-found.component'; import {PopupComponent} from './BasicPage/popup/popup.component'; import { RdppageComponent } from './rdppage/rdppage.component'; import { TermpageComponent } from './termpage/termpage.component'; +import { ReplayPageComponent } from './replay-page/replay-page.component'; @NgModule({ @@ -65,6 +66,7 @@ import { TermpageComponent } from './termpage/termpage.component'; PopupComponent, RdppageComponent, TermpageComponent, + ReplayPageComponent, // HeroListComponent, // CrisisListComponent, ], diff --git a/src/app/termpage/termpage.component.html b/src/app/termpage/termpage.component.html index f309a334755dfda60e36e78dcf154839e58cc88e..94367728d72f13a5cdbd9c5f8da07149d7200cf5 100644 --- a/src/app/termpage/termpage.component.html +++ b/src/app/termpage/termpage.component.html @@ -1,2 +1,7 @@ <span id="liuzheng">liuzheng</span> +<i class="fa fa-backward" aria-hidden="true"></i> +<i class="fa fa-play" aria-hidden="true"></i> +<i class="fa fa-stop" aria-hidden="true"></i> +<i class="fa fa-pause" aria-hidden="true"></i> +<i class="fa fa-forward" aria-hidden="true"></i> <div id="term"></div> diff --git a/src/app/termpage/termpage.component.ts b/src/app/termpage/termpage.component.ts index b9d452a5fb8e5e8f193513091561bf3e2cbcaa89..d532710dc847459a1185284ab175e726977d8b35 100644 --- a/src/app/termpage/termpage.component.ts +++ b/src/app/termpage/termpage.component.ts @@ -1,6 +1,6 @@ import {Component, OnInit} from '@angular/core'; import {ActivatedRoute, Params} from '@angular/router'; -import {DataStore} from "../app.service"; +import {DataStore} from '../app.service'; import * as io from 'socket.io-client'; declare let jQuery: any; @@ -21,15 +21,15 @@ export class TermpageComponent implements OnInit { this.activatedRoute.params.subscribe((params: Params) => { token = params['token']; }); - let socket = io.connect('/ssh'); + const socket = io.connect('/ssh'); - let term = new Terminal({ + const term = new Terminal({ cols: '80', rows: '24', useStyle: true, screenKeys: true, }); - term.open(document.getElementById('term' ), true); + term.open(document.getElementById('term'), true); socket.on('connect', function () { socket.emit('token', token); @@ -46,22 +46,9 @@ export class TermpageComponent implements OnInit { socket.on('disconnect', function () { term.destroy(); }); - - window.onresize = function () { - let col = Math.floor(jQuery('#term').width() / jQuery('#liuzheng').width() * 8) - 3; - let row = Math.floor(jQuery('#term').height() / jQuery('#liuzheng').height()) - 5; - let rows = 24; - let cols = 80; - - - if (col < 80) col = 80; - if (row < 24) row = 24; - if (cols == col && row == rows) { - } else { - socket.emit('resize', [col, row]); - term.resize(col, row); - } - }; + socket.on('resize', function (data) { + term.resize(data.col, data.row); + }); // jQuery(window).resize(); });