Commit 0863e0ba authored by liuzheng712's avatar liuzheng712 Committed by i317280

feat: update

parent 8a3ae051
...@@ -47,9 +47,9 @@ server.run = function (options) { ...@@ -47,9 +47,9 @@ server.run = function (options) {
apis.route('/browser') apis.route('/browser')
.post(function (req, res) { .post(function (req, res) {
console.log(req); // console.log(req);
res.string(''); // res.string('');
// res.json({verified: true, csrf: "liuzheng"}) res.json({verified: true, csrf: "liuzheng"})
}); });
apis.route('/checklogin') apis.route('/checklogin')
.post(function (req, res) { .post(function (req, res) {
......
...@@ -390,12 +390,6 @@ ...@@ -390,12 +390,6 @@
"normalize-path": "2.1.1" "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": { "append-transform": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
...@@ -851,43 +845,49 @@ ...@@ -851,43 +845,49 @@
"dev": true "dev": true
}, },
"body-parser": { "body-parser": {
"version": "1.17.2", "version": "1.18.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
"integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
"dev": true,
"requires": { "requires": {
"bytes": "2.4.0", "bytes": "3.0.0",
"content-type": "1.0.2", "content-type": "1.0.4",
"debug": "2.6.7", "debug": "2.6.9",
"depd": "1.1.1", "depd": "1.1.1",
"http-errors": "1.6.2", "http-errors": "1.6.2",
"iconv-lite": "0.4.15", "iconv-lite": "0.4.19",
"on-finished": "2.3.0", "on-finished": "2.3.0",
"qs": "6.4.0", "qs": "6.5.1",
"raw-body": "2.2.0", "raw-body": "2.3.2",
"type-is": "1.6.15" "type-is": "1.6.15"
}, },
"dependencies": { "dependencies": {
"bytes": { "bytes": {
"version": "2.4.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
"dev": true },
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
}, },
"debug": { "debug": {
"version": "2.6.7", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
} }
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.15", "version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
"dev": true },
"qs": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
} }
} }
}, },
...@@ -1371,20 +1371,6 @@ ...@@ -1371,20 +1371,6 @@
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true "dev": true
}, },
"codelyzer": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.1.2.tgz",
"integrity": "sha1-n/HwQfubXuXb60W6hm368EmDrwQ=",
"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": { "color": {
"version": "0.11.4", "version": "0.11.4",
"resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
...@@ -1763,15 +1749,6 @@ ...@@ -1763,15 +1749,6 @@
"integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
"dev": true "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": { "cssesc": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
...@@ -1958,8 +1935,7 @@ ...@@ -1958,8 +1935,7 @@
"depd": { "depd": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
"dev": true
}, },
"des.js": { "des.js": {
"version": "1.0.0", "version": "1.0.0",
...@@ -2165,8 +2141,7 @@ ...@@ -2165,8 +2141,7 @@
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
"dev": true
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.3.18", "version": "1.3.18",
...@@ -4352,7 +4327,6 @@ ...@@ -4352,7 +4327,6 @@
"version": "1.6.2", "version": "1.6.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
"dev": true,
"requires": { "requires": {
"depd": "1.1.1", "depd": "1.1.1",
"inherits": "2.0.3", "inherits": "2.0.3",
...@@ -4544,8 +4518,7 @@ ...@@ -4544,8 +4518,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
"dev": true
}, },
"ini": { "ini": {
"version": "1.3.4", "version": "1.3.4",
...@@ -5239,7 +5212,7 @@ ...@@ -5239,7 +5212,7 @@
"dev": true, "dev": true,
"requires": { "requires": {
"bluebird": "3.5.0", "bluebird": "3.5.0",
"body-parser": "1.17.2", "body-parser": "1.18.2",
"chokidar": "1.7.0", "chokidar": "1.7.0",
"colors": "1.1.2", "colors": "1.1.2",
"combine-lists": "1.0.1", "combine-lists": "1.0.1",
...@@ -5804,8 +5777,7 @@ ...@@ -5804,8 +5777,7 @@
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
"dev": true
}, },
"mem": { "mem": {
"version": "1.1.0", "version": "1.1.0",
...@@ -6380,7 +6352,6 @@ ...@@ -6380,7 +6352,6 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dev": true,
"requires": { "requires": {
"ee-first": "1.1.1" "ee-first": "1.1.1"
} }
...@@ -7566,27 +7537,25 @@ ...@@ -7566,27 +7537,25 @@
"dev": true "dev": true
}, },
"raw-body": { "raw-body": {
"version": "2.2.0", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
"integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
"dev": true,
"requires": { "requires": {
"bytes": "2.4.0", "bytes": "3.0.0",
"iconv-lite": "0.4.15", "http-errors": "1.6.2",
"iconv-lite": "0.4.19",
"unpipe": "1.0.0" "unpipe": "1.0.0"
}, },
"dependencies": { "dependencies": {
"bytes": { "bytes": {
"version": "2.4.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
"dev": true
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.15", "version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
"dev": true
} }
} }
}, },
...@@ -8095,15 +8064,6 @@ ...@@ -8095,15 +8064,6 @@
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
"dev": true "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": { "send": {
"version": "0.15.4", "version": "0.15.4",
"resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz",
...@@ -8181,8 +8141,7 @@ ...@@ -8181,8 +8141,7 @@
"setprototypeof": { "setprototypeof": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
"dev": true
}, },
"sha.js": { "sha.js": {
"version": "2.4.8", "version": "2.4.8",
...@@ -8547,8 +8506,7 @@ ...@@ -8547,8 +8506,7 @@
"statuses": { "statuses": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
"dev": true
}, },
"stdout-stream": { "stdout-stream": {
"version": "1.4.0", "version": "1.4.0",
...@@ -9119,7 +9077,6 @@ ...@@ -9119,7 +9077,6 @@
"version": "1.6.15", "version": "1.6.15",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
"dev": true,
"requires": { "requires": {
"media-typer": "0.3.0", "media-typer": "0.3.0",
"mime-types": "2.1.16" "mime-types": "2.1.16"
...@@ -9248,8 +9205,7 @@ ...@@ -9248,8 +9205,7 @@
"unpipe": { "unpipe": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
"dev": true
}, },
"upper-case": { "upper-case": {
"version": "1.1.3", "version": "1.1.3",
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
"@angular/platform-browser-dynamic": "^4.2.4", "@angular/platform-browser-dynamic": "^4.2.4",
"@angular/router": "^4.2.4", "@angular/router": "^4.2.4",
"angular2-logger": "^0.6.0", "angular2-logger": "^0.6.0",
"body-parser": "^1.18.2",
"bootstrap": "^4.0.0-alpha.6", "bootstrap": "^4.0.0-alpha.6",
"clipboard": "^1.7.1", "clipboard": "^1.7.1",
"core-js": "^2.4.1", "core-js": "^2.4.1",
...@@ -31,9 +32,9 @@ ...@@ -31,9 +32,9 @@
"pty.js": "^0.3.1", "pty.js": "^0.3.1",
"rxjs": "^5.4.2", "rxjs": "^5.4.2",
"socket.io": "^2.0.3", "socket.io": "^2.0.3",
"ssh-keygen": "^0.4.1",
"tether": "^1.4.0", "tether": "^1.4.0",
"xterm": "^2.9.2", "xterm": "^2.9.2",
"ssh-keygen": "^0.4.1",
"zone.js": "^0.8.14" "zone.js": "^0.8.14"
}, },
"devDependencies": { "devDependencies": {
...@@ -43,7 +44,6 @@ ...@@ -43,7 +44,6 @@
"@types/jasmine": "~2.5.53", "@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2", "@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60", "@types/node": "~6.0.60",
"codelyzer": "~3.1.1",
"jasmine-core": "~2.6.2", "jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0", "jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0", "karma": "~1.7.0",
......
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FooterComponent } from './footer.component';
describe('FooterComponent', () => {
let component: FooterComponent;
let fixture: ComponentFixture<FooterComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ FooterComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FooterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
/** import {Component, OnInit} from '@angular/core';
* Created by liuzheng on 2017/8/30.
*/
import {Component} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {Logger} from 'angular2-logger/core';
import {AppService, DataStore, User} from '../../app.service';
import {AppService, DataStore, User} from '../app.service';
@Component({ @Component({
selector: 'app-footer', selector: 'app-footer',
templateUrl: './footer.html', templateUrl: './footer.component.html',
styleUrls: ['./footer.component.css'],
providers: [AppService] providers: [AppService]
})
})
export class FooterComponent implements OnInit {
export class FooterComponent {
DataStore = DataStore; DataStore = DataStore;
User = User; User = User;
...@@ -25,4 +20,7 @@ export class FooterComponent { ...@@ -25,4 +20,7 @@ export class FooterComponent {
// this._appService.getnav() // this._appService.getnav()
} }
ngOnInit() {
}
} }
/* login form */ /* login form */
form { form {
top: 80px;
position: relative; position: relative;
width: 300px; width: 300px;
margin: auto; margin: auto;
...@@ -77,12 +78,6 @@ form button[type=submit] { ...@@ -77,12 +78,6 @@ form button[type=submit] {
cursor: pointer; cursor: pointer;
} }
canvas {
position: fixed;
top: 0;
z-index: 5;
}
.form { .form {
z-index: 9; z-index: 9;
} }
......
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LoginComponent } from './login.component';
describe('LoginComponent', () => {
let component: LoginComponent;
let fixture: ComponentFixture<LoginComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoginComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(LoginComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
/**
* Created by liuzheng on 2017/9/16.
*/
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {Logger} from 'angular2-logger/core';
import {AppService, DataStore, User} from '../app.service'; import {AppService, DataStore, User} from '../../app.service';
import {NgForm} from '@angular/forms'; import {NgForm} from '@angular/forms';
declare let jQuery: any; declare let jQuery: any;
@Component({ @Component({
selector: 'app-root', selector: 'app-login',
templateUrl: './login.html', templateUrl: './login.component.html',
styleUrls: ['./login.css'], styleUrls: ['./login.component.css'],
providers: [AppService] providers: [AppService]
}) })
// ToDo: ngEnter and redirect to default page
export class LoginComponent implements OnInit { export class LoginComponent implements OnInit {
DataStore = DataStore; DataStore = DataStore;
User = User; User = User;
...@@ -40,49 +34,5 @@ export class LoginComponent implements OnInit { ...@@ -40,49 +34,5 @@ export class LoginComponent implements OnInit {
jQuery('#form').fadeIn('slow'); jQuery('#form').fadeIn('slow');
// this._router.navigate(['login']); // this._router.navigate(['login']);
// jQuery('nav').hide(); // jQuery('nav').hide();
const vm = this;
window.onresize = function () {
if (!User.logined) {
vm.background();
}
};
this.timer();
}
timer() {
if (DataStore.windowsize[0] !== document.documentElement.clientWidth ||
DataStore.windowsize[1] !== document.documentElement.clientHeight &&
!User.logined) {
jQuery(window).trigger('resize');
DataStore.windowsize = [document.documentElement.clientWidth, document.documentElement.clientHeight];
}
setTimeout(() => {
this.timer();
}, 33);
}
background() {
const q = jQuery('#q')[0];
const width = q.width = document.documentElement.clientWidth;
const height = q.height = document.documentElement.clientHeight;
const letters = [];
for (let i = 0; i < 256; i++) {
letters.push(Math.round(Math.random() * i * 33));
}
const draw = function () {
q.getContext('2d').fillStyle = 'rgba(0,0,0,.05)';
q.getContext('2d').fillRect(0, 0, width, height);
q.getContext('2d').fillStyle = '#0F0';
letters.map(function (y_pos, index) {
const text = String.fromCharCode(65 + Math.random() * 26);
const x_pos = index * 10;
q.getContext('2d').fillText(text, x_pos, y_pos);
letters[index] = (y_pos > 758 + Math.random() * 1e4) ? 0 : y_pos + 10;
});
};
setInterval(draw, 33);
} }
} }
/**
* Created by liuzheng on 2017/8/30.
*/
import {Component} from '@angular/core';
import {Logger} from 'angular2-logger/core';
// declare var Clipboard: any;
// declare var layer: any;
import {AppService, DataStore, User} from '../app.service';
//noinspection TypeScriptValidateTypes
@Component({
selector: 'app-nav',
templateUrl: './nav.html',
// directives: [NgClass]
})
export class NavComponent {
DataStore = DataStore;
User = User;
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('nav.ts:NavComponent');
// this._appService.getnav()
}
// ngOnInit() {
//
// }
//
// click(event) {
// this._logger.debug('nav.ts:NavComponent,click', event);
// if (event === 'ReloadLeftbar') {
// this._appService.ReloadLeftbar();
// } else if (event === 'HideLeft') {
// this._appService.HideLeft();
// } else if (event === 'ShowLeft') {
// this._appService.ShowLeft();
// } else if (event === 'Copy') {
// this._appService.copy();
// } else if (event === 'Disconnect') {
// this._appService.TerminalDisconnect(DataStore.termActive);
// } else if (event === 'DisconnectAll') {
// this._appService.TerminalDisconnectAll();
// } else if (event === 'Website') {
// window.open('http://www.jumpserver.org');
// } else if (event === 'BBS') {
// window.open('http://bbs.jumpserver.org');
// } else if (event === 'EnterLicense') {
// this.EnterLicense();
// }
// }
//
// EnterLicense() {
// layer.prompt({
// formType: 2,
// maxlength: 500,
// title: 'Please Input Code',
// scrollbar: false,
// area: ['400px', '300px'],
// moveOut: true,
// moveType: 1
// }, function (value, index) {
// DataStore.socket.emit('key', value);
// // layer.msg(value); //得到value
// layer.close(index);
//
// });
// }
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NavComponent } from './nav.component';
describe('NavComponent', () => {
let component: NavComponent;
let fixture: ComponentFixture<NavComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ NavComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(NavComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
/** import {Component, OnInit} from '@angular/core';
* Created by liuzheng on 2017/8/30.
*/
import {Component} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {Logger} from 'angular2-logger/core';
import {AppService, DataStore} from '../app.service'; import {AppService, DataStore, User} from '../../app.service';
//noinspection TypeScriptValidateTypes
@Component({ @Component({
selector: 'app-leftbar', selector: 'app-nav',
templateUrl: './leftbar.html', templateUrl: './nav.component.html',
// directives: [NgClass] styleUrls: ['./nav.component.css']
}) })
export class NavComponent implements OnInit {
DataStore = DataStore;
export class LeftbarComponent { User = User;
// DataStore = DataStore;
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _logger: Logger) { private _logger: Logger) {
...@@ -25,4 +18,7 @@ export class LeftbarComponent { ...@@ -25,4 +18,7 @@ export class LeftbarComponent {
// this._appService.getnav() // this._appService.getnav()
} }
ngOnInit() {
}
} }
/**
* filetree.css
* */
:root {
font-family: "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
}
.filetree input[type="checkbox"] {
display: none;
}
.filetree ul {
height: 0;
overflow: hidden;
}
.filetree > li input:checked ~ ul {
height: auto;
}
.filetree li {
list-style: none;
}
.filetree label {
padding-left: 33px;
line-height: 33px;
display: inline-block;
}
/**
* Icon
* */
.filetree label {
background-image: url('./icon.png');
background-repeat: no-repeat;
}
.filetree input[type="checkbox"] + label {
background-position: 0 0;
width: 100%;
height: 33px;
}
.filetree input[type="checkbox"]:checked + label {
background-position: 0 -33px;
width: 100%;
height: 30px;
}
@media screen and (-webkit-min-device-pixel-ratio: 1.0), screen and (min--moz-device-pixel-ratio: 1.0), screen and (-o-min-device-pixel-ratio: 100/100), screen and (min-device-pixel-ratio: 1.0), screen and (min-resolution: 1.0dppx) {
filetree label {
background-image: url('./icon.png');
-webkit-background-size: 33px 63px;
-moz-background-size: 33px 63px;
background-size: 33px 63px;
}
}
<div id="sidebar"> <div id="sidebar">
<app-search></app-search>
<ul class="filetree"> <ul class="filetree">
<li *ngFor="let hostGroup of HostGroups"> <li *ngFor="let hostGroup of HostGroups">
<input type="checkbox" id="level1-1"> <input type="checkbox" id="level1-1">
<label for="level1-1">{{hostGroup.name}}</label> <label for="level1-1">{{hostGroup.name}}</label>
<ul> <ul>
<li *ngFor="let host of hostGroup.children" (click)="TerminalConnect()">{{host.name}}</li> <li *ngFor="let host of hostGroup.children" (click)="Connect(host)">{{host.name}}</li>
</ul> </ul>
</li> </li>
</ul> </ul>
......
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CleftbarComponent } from './cleftbar.component';
describe('CleftbarComponent', () => {
let component: CleftbarComponent;
let fixture: ComponentFixture<CleftbarComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CleftbarComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CleftbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {Logger} from 'angular2-logger/core';
import {AppService, DataStore} from '../app.service'; import {AppService, DataStore} from '../../app.service';
import {TerminalComponent} from './terminal'; import {SshComponent} from '../console/ssh/ssh.component';
//noinspection TypeScriptValidateTypes
@Component({ @Component({
selector: 'term-leftbar', selector: 'app-cleftbar',
templateUrl: './leftbar.html', templateUrl: './cleftbar.component.html',
styleUrls: ['../../../node_modules/filetree-css/filetree.css', './leftbar.css'], styleUrls: ['./cleftbar.component.css'],
providers: [TerminalComponent]
})
providers: [SshComponent]
export class TermLeftBar { })
export class CleftbarComponent implements OnInit {
DataStore = DataStore; DataStore = DataStore;
HostGroups = [ HostGroups = [
{ {
...@@ -23,20 +21,33 @@ export class TermLeftBar { ...@@ -23,20 +21,33 @@ export class TermLeftBar {
children: [ children: [
{ {
name: "ops-redis", name: "ops-redis",
id: "xxxx" uuid: "xxxx",
type: "ssh"
}, {
name: "ops-win",
uuid: "win-aasdf",
type: "rdp"
} }
], ],
}]; }];
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _term: TerminalComponent, private _term: SshComponent,
private _logger: Logger) { private _logger: Logger) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
// this._appService.getnav() // this._appService.getnav()
} }
TerminalConnect() { ngOnInit() {
this._term.TerminalConnect("sss"); }
Connect(host) {
if (host.type === 'ssh') {
this._term.TerminalConnect(host.uuid);
} else {
}
} }
} }
<app-consolenav></app-consolenav>
<app-ssh></app-ssh>
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ConsoleComponent } from './console.component';
describe('ConsoleComponent', () => {
let component: ConsoleComponent;
let fixture: ComponentFixture<ConsoleComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ConsoleComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ConsoleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
export class Term {
nick: string;
edit: boolean;
machine: string;
connected: boolean;
closed: boolean;
socket: any;
term: any;
hide: boolean;
}
export let NavList: {
term: Array<Term>;
termlist: Array<string>;
termActive: number;
} = {
term: [new Term()],
termlist: [],
termActive: 0,
};
@Component({
selector: 'app-console',
templateUrl: './console.component.html',
styleUrls: ['./console.component.css']
})
export class ConsoleComponent implements OnInit {
constructor() {
}
ngOnInit() {
}
}
...@@ -83,60 +83,3 @@ ...@@ -83,60 +83,3 @@
height: 18px; height: 18px;
border-bottom: 3px solid #7f3f98 !important; border-bottom: 3px solid #7f3f98 !important;
} }
#term {
width: 100%;
height: 100%;
}
#term > div {
border-left: 10px solid black;
border-top: 10px solid black;
background-color: black;
height:100%;
}
.terminal {
border: #000 solid 5px;
color: #f0f0f0;
box-shadow: rgba(0, 0, 0, 0.8) 2px 2px 20px;
white-space: nowrap;
display: inline-block;
width: 100%;
height: 100%;
background-color: black;
}
#term .terminal div span {
min-width: 12px;
}
.reverse-video {
color: #000;
background: #f0f0f0;
}
.termChangBar {
line-height: 1;
margin: 0 auto;
border: 1px solid #ffffff;
color: #fff;
background-color: #ffffff;
position: fixed;
right: 0;
top: 0;
}
.hidden {
display: none;
}
#liuzheng {
position: fixed;
top: 0;
left: 0;
z-index: -1;
font-size: 11px !important;
padding-bottom: 16px !important;
font-family: 'Monaco', iosevka !important;
}
<div id="tabs"> <div id="tabs">
<ul> <ul>
<li *ngFor="let m of TermStore.term;let i = index" <li *ngFor="let m of NavList.term;let i = index"
[ngClass]="{'active':i==TermStore.termActive,'disconnected':!m.connected, 'hidden': m.closed != false}" [ngClass]="{'active':i==NavList.termActive,'disconnected':!m.connected, 'hidden': m.closed != false}"
id="termnav-{{i}}" (click)="setActive(i)"> id="termnav-{{i}}" (click)="setActive(i)">
<span *ngIf="!m.edit" (dblclick)="m.edit=true;setActive(i)">{{m.nick}}</span> <span *ngIf="!m.edit" (dblclick)="m.edit=true;setActive(i)">{{m.nick}}</span>
<input *ngIf="m.edit" [(ngModel)]="m.nick" autofocus (blur)="m.edit=false" (keyup.enter)="m.edit=false"/> <input *ngIf="m.edit" [(ngModel)]="m.nick" autofocus (blur)="m.edit=false" (keyup.enter)="m.edit=false"/>
...@@ -9,12 +9,3 @@ ...@@ -9,12 +9,3 @@
</li> </li>
</ul> </ul>
</div> </div>
<div id="term">
<!--<div-->
<!--[ngClass]="{'disconnected':!DataStore.term[0].connected, 'hidden': i!=DataStore.termActive || DataStore.term[0].closed}"-->
<!--id="term-0"></div>-->
<div *ngFor="let m of TermStore.term;let i=index"
[ngClass]="{'disconnected':!m.connected,'hidden': m.hide}" id="term-{{i}}">
</div>
</div>
<span id="liuzheng">liuzheng</span>
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ConsolenavComponent } from './consolenav.component';
describe('ConsolenavComponent', () => {
let component: ConsolenavComponent;
let fixture: ComponentFixture<ConsolenavComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ConsolenavComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ConsolenavComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {NavList} from '../console.component'
@Component({
selector: 'app-consolenav',
templateUrl: './consolenav.component.html',
styleUrls: ['./consolenav.component.css']
})
export class ConsolenavComponent implements OnInit {
setActive = ConsolenavComponent.setActive;
NavList = NavList;
constructor() {
}
ngOnInit() {
}
static checkActive(index) {
let len = NavList.term.length;
if (len == 1) {
// 唯一一个
NavList.termActive = 0;
} else if (len - 1 == index) {
// 删了最后一个
NavList.termActive = len - 2;
} else {
NavList.termActive = index;
}
ConsolenavComponent.setActive(NavList.termActive)
}
static setActive(index) {
for (let m in NavList.term) {
NavList.term[m].hide = true;
}
NavList.term[index].hide = false;
NavList.termActive = index;
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RdpComponent } from './rdp.component';
describe('RdpComponent', () => {
let component: RdpComponent;
let fixture: ComponentFixture<RdpComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RdpComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RdpComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-rdp',
templateUrl: './rdp.component.html',
styleUrls: ['./rdp.component.css']
})
export class RdpComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
#term {
width: 100%;
height: 100%;
padding: 15px;
}
#term > div {
height:100%;
}
.terminal {
border: #000 solid 5px;
color: #f0f0f0;
box-shadow: rgba(0, 0, 0, 0.8) 2px 2px 20px;
white-space: nowrap;
display: inline-block;
width: 100%;
height: 100%;
background-color: black;
}
#term .terminal div span {
min-width: 12px;
}
.reverse-video {
color: #000;
background: #f0f0f0;
}
.termChangBar {
line-height: 1;
margin: 0 auto;
border: 1px solid #ffffff;
color: #fff;
background-color: #ffffff;
position: fixed;
right: 0;
top: 0;
}
.hidden {
display: none;
}
#liuzheng {
position: fixed;
top: 0;
left: 0;
z-index: -1;
font-size: 11px !important;
padding-bottom: 16px !important;
font-family: 'Monaco', iosevka !important;
}
<div id="term">
<!--<div-->
<!--[ngClass]="{'disconnected':!DataStore.term[0].connected, 'hidden': i!=DataStore.termActive || DataStore.term[0].closed}"-->
<!--id="term-0"></div>-->
<div *ngFor="let m of NavList.term;let i=index"
[ngClass]="{'disconnected':!m.connected,'hidden': m.hide}" id="term-{{i}}">
</div>
</div>
<span id="liuzheng">liuzheng</span>
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SshComponent } from './ssh.component';
describe('SshComponent', () => {
let component: SshComponent;
let fixture: ComponentFixture<SshComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ SshComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SshComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
...@@ -5,108 +5,24 @@ import {Cookie} from 'ng2-cookies/ng2-cookies'; ...@@ -5,108 +5,24 @@ import {Cookie} from 'ng2-cookies/ng2-cookies';
declare let jQuery: any; declare let jQuery: any;
declare let Terminal: any; declare let Terminal: any;
import {AppService, DataStore} from '../../../app.service';
import {NavList, Term} from '../console.component';
import {AppService, DataStore} from '../app.service';
import {logger} from "codelyzer/util/logger";
export class Term {
nick: string;
edit: boolean;
machine: string;
connected: boolean;
closed: boolean;
socket: any;
term: any;
hide: boolean;
}
export let TermStore: {
term: Array<Term>;
termlist: Array<string>;
termActive: number;
} = {
term: [new Term()],
termlist: [],
termActive: 0,
};
@Component({ @Component({
selector: 'term-body', selector: 'app-ssh',
templateUrl: './terminal.html', templateUrl: './ssh.component.html',
styleUrls: ['./terminal.css'], styleUrls: ['./ssh.component.css']
// directives: [NgClass]
}) })
export class SshComponent implements OnInit {
NavList = NavList;
export class TerminalComponent implements OnInit {
DataStore = DataStore;
TermStore = TermStore;
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _logger: Logger) { private _logger: Logger) {
this._logger.log('TermComponent.ts:TermComponent'); this._logger.log('ConsoleComponent.ts:ConsoleComponent');
} }
ngOnInit() { ngOnInit() {
//TermStore.term[0]["term"].open(document.getElementById("term-0"))
this.timer();
}
ngAfterViewInit() {
// this._appService.TerminalConnect({});
//this._logger.debug("term width ", jQuery("#term").width());
//this._logger.debug("term height", jQuery("#term").height());
}
timer() {
if (TermStore.termlist.length > 0) {
for (let i in TermStore.termlist) {
this.TerminalConnect(TermStore.termlist[i]);
}
TermStore.termlist = []
}
jQuery(window).trigger('resize');
setTimeout(() => {
this.timer()
}, 0)
}
close(i) {
this._logger.debug(i);
TerminalComponent.TerminalDisconnect(i);
TermStore.term[i].hide = true;
TermStore.term[i].closed = true;
TermStore.term[i].term.destroy();
TermStore.term.splice(i, 1);
TerminalComponent.checkActive(i);
}
static checkActive(index) {
let len = TermStore.term.length;
if (len == 1) {
// 唯一一个
TermStore.termActive = 0;
} else if (len - 1 == index) {
// 删了最后一个
TermStore.termActive = len - 2;
} else {
TermStore.termActive = index;
}
TerminalComponent.setActive(TermStore.termActive)
}
setActive = TerminalComponent.setActive;
static setActive(index) {
for (let m in TermStore.term) {
TermStore.term[m].hide = true;
}
TermStore.term[index].hide = false;
TermStore.termActive = index;
}
dblclick() {
console.log(TermStore.term)
} }
TerminalConnect(uuid) { TerminalConnect(uuid) {
...@@ -123,46 +39,46 @@ export class TerminalComponent implements OnInit { ...@@ -123,46 +39,46 @@ export class TerminalComponent implements OnInit {
Cookie.set('rows', rows, 99, '/', document.domain); Cookie.set('rows', rows, 99, '/', document.domain);
let id = TermStore.term.length - 1; let id = NavList.term.length - 1;
TermStore.term[id].machine = 'localhost'; NavList.term[id].machine = 'localhost';
TermStore.term[id].nick = 'localhost'; NavList.term[id].nick = 'localhost';
TermStore.term[id].connected = true; NavList.term[id].connected = true;
TermStore.term[id].socket = socket; NavList.term[id].socket = socket;
TermStore.term[id].edit = false; NavList.term[id].edit = false;
TermStore.term[id].closed = false; NavList.term[id].closed = false;
TermStore.term[id].term = new Terminal({ NavList.term[id].term = new Terminal({
cols: cols, cols: cols,
rows: rows, rows: rows,
useStyle: true, useStyle: true,
screenKeys: true, screenKeys: true,
}); });
TermStore.term.push(new Term()); NavList.term.push(new Term());
for (let m in TermStore.term) { for (let m in NavList.term) {
TermStore.term[m].hide = true; NavList.term[m].hide = true;
} }
TermStore.term[id].hide = false; NavList.term[id].hide = false;
TermStore.termActive = id; NavList.termActive = id;
// TermStore.term[id]['term'].on('title', function (title) { // TermStore.term[id]['term'].on('title', function (title) {
// document.title = title; // document.title = title;
// }); // });
TermStore.term[id].term.open(document.getElementById('term-' + id), true); NavList.term[id].term.open(document.getElementById('term-' + id), true);
TermStore.term[id].term.write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n'); NavList.term[id].term.write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
socket.on('connect', function () { socket.on('connect', function () {
socket.emit('machine', uuid); socket.emit('machine', uuid);
TermStore.term[id].term.on('data', function (data) { NavList.term[id].term.on('data', function (data) {
socket.emit('data', data); socket.emit('data', data);
}); });
socket.on('data', function (data) { socket.on('data', function (data) {
TermStore.term[id].term.write(data); NavList.term[id].term.write(data);
}); });
socket.on('disconnect', function () { socket.on('disconnect', function () {
...@@ -187,10 +103,10 @@ export class TerminalComponent implements OnInit { ...@@ -187,10 +103,10 @@ export class TerminalComponent implements OnInit {
if (row < 24) row = 24; if (row < 24) row = 24;
if (cols == col && row == rows) { if (cols == col && row == rows) {
} else { } else {
for (let tid in TermStore.term) { for (let tid in NavList.term) {
if (TermStore.term[tid].connected) { if (NavList.term[tid].connected) {
TermStore.term[tid].socket.emit('resize', [col, row]); NavList.term[tid].socket.emit('resize', [col, row]);
TermStore.term[tid].term.resize(col, row); NavList.term[tid].term.resize(col, row);
} }
} }
Cookie.set('cols', String(col), 99, '/', document.domain); Cookie.set('cols', String(col), 99, '/', document.domain);
...@@ -202,15 +118,15 @@ export class TerminalComponent implements OnInit { ...@@ -202,15 +118,15 @@ export class TerminalComponent implements OnInit {
} }
static TerminalDisconnect(i) { static TerminalDisconnect(i) {
TermStore.term[i].connected = false; NavList.term[i].connected = false;
TermStore.term[i].socket.destroy(); NavList.term[i].socket.destroy();
TermStore.term[i].term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); NavList.term[i].term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
} }
static TerminalDisconnectAll() { static TerminalDisconnectAll() {
alert("TerminalDisconnectAll"); alert("TerminalDisconnectAll");
for (let i in TermStore.term) { for (let i in NavList.term) {
TerminalComponent.TerminalDisconnect(i); SshComponent.TerminalDisconnect(i);
// TermStore.term[i]["connected"] = false; // TermStore.term[i]["connected"] = false;
// TermStore.term[i]["socket"].destroy(); // TermStore.term[i]["socket"].destroy();
// TermStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); // TermStore.term[i]["term"].write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
......
...@@ -6,4 +6,15 @@ div, term-leftbar, term-body { ...@@ -6,4 +6,15 @@ div, term-leftbar, term-body {
div { div {
top: 55px; top: 55px;
background-color: black;
margin: 0;
}
app-cleftbar {
background-color: white;
padding: 0;
}
app-console {
padding: 0;
} }
<div class="container-fluid row">
<app-cleftbar class="col-md-2" ></app-cleftbar>
<app-console class="col-md-10" ></app-console>
</div>
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ConsolePageComponent } from './consolepage.component';
describe('ConsolePageComponent', () => {
let component: ConsolePageComponent;
let fixture: ComponentFixture<ConsolePageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ConsolePageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ConsolePageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
/**
* Created by liuzheng on 2017/8/31.
*/
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {AppService, DataStore, User} from '../app.service'; import {AppService, DataStore, User} from '../app.service';
@Component({ @Component({
selector: 'app-root', selector: 'app-consolepage',
templateUrl: './main.html', templateUrl: './consolepage.component.html',
styleUrls: ['./main.css'], styleUrls: ['./consolepage.component.css'],
providers: [AppService], providers: [AppService]
})
export class TermPage { })
export class ConsolePageComponent implements OnInit {
DataStore = DataStore; DataStore = DataStore;
User = User; User = User;
// DataStore = DataStore; constructor() {
}
ngOnInit() {
}
} }
.left-search {
padding-left: 14px;
width: 100%;
border: none;
}
<input class="left-search" placeholder=" Search ..." maxlength="2048" name="q" autocomplete="off"
title="Search"
type="text" tabindex="1" spellcheck="false" autofocus [(ngModel)]="q" (keyup.enter)="search()"
(ngModelChange)="modelChange($event)">
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SearchComponent } from './search.component';
describe('SearchComponent', () => {
let component: SearchComponent;
let fixture: ComponentFixture<SearchComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ SearchComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SearchComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnChanges, Input} from '@angular/core';
import {Logger} from 'angular2-logger/core';
import {AppService, DataStore} from '../../app.service';
@Component({
selector: 'app-search',
templateUrl: './search.component.html',
styleUrls: ['./search.component.css']
})
export class SearchComponent implements OnChanges {
@Input() input;
q: string;
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('LeftbarComponent.ts:SearchBar');
}
ngOnChanges(changes) {
this.q = changes.input.currentValue;
}
modelChange($event) {
this._appService.Search(this.q)
}
search() {
this._appService.Search(this.q)
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IleftbarComponent } from './ileftbar.component';
describe('IleftbarComponent', () => {
let component: IleftbarComponent;
let fixture: ComponentFixture<IleftbarComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ IleftbarComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IleftbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core';
import {AppService, DataStore} from '../../app.service';
@Component({
selector: 'app-ileftbar',
templateUrl: './ileftbar.component.html',
styleUrls: ['./ileftbar.component.css']
})
export class IleftbarComponent implements OnInit {
constructor(private _appService: AppService,
private _logger: Logger) {
this._logger.log('nav.ts:NavComponent');
// this._appService.getnav()
}
ngOnInit() {
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IndexPageComponent } from './index-page.component';
describe('IndexPageComponent', () => {
let component: IndexPageComponent;
let fixture: ComponentFixture<IndexPageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ IndexPageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IndexPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {AppService, User} from '../app.service';
@Component({
selector: 'app-index-page',
templateUrl: './index-page.component.html',
styleUrls: ['./index-page.component.css'],
providers: [AppService]
})
export class IndexPageComponent implements OnInit {
User = User;
constructor() {
}
ngOnInit() {
}
}
/**
* Created by liuzheng on 2017/8/31.
*/
import {Component} from '@angular/core';
import {AppService, User} from '../app.service';
@Component({
templateUrl: './welcome.html',
providers: [AppService]
// directives: [LeftbarComponent, TermComponent]
})
export class WelcomeComponent {
// DataStore = DataStore;
User = User;
// DataStore = DataStore;
}
.filetree > li {
width: 200px;
}
.filetree li > input[type="checkbox"] + label {
width: 100px;
}
div {
height: 100%;
}
<div class="container-fluid row">
<term-leftbar class="col-md-2" ></term-leftbar>
<term-body class="col-md-10" ></term-body>
</div>
...@@ -5,16 +5,16 @@ import {NgModule} from '@angular/core'; ...@@ -5,16 +5,16 @@ import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router'; import {RouterModule, Routes} from '@angular/router';
import {environment} from '../environments/environment'; import {environment} from '../environments/environment';
import {WelcomeComponent} from './IndexPage/welcome.component'; import {IndexPageComponent} from './IndexPage/index-page.component';
import {PageNotFoundComponent} from './BasicPage/not-found.component'; import {PageNotFoundComponent} from './BasicPage/not-found.component';
import {LoginComponent} from './BasicPage/login.component'; import {LoginComponent} from './BasicPage/login/login.component';
import {TermPage} from './TerminalPage/main'; import {ConsolePageComponent} from './ConsolePage/consolepage.component';
const appRoutes: Routes = [ const appRoutes: Routes = [
// { path: 'crisis-center', component: CrisisListComponent }, // { path: 'crisis-center', component: CrisisListComponent },
{path: 'welcome', component: WelcomeComponent}, // <-- delete this line {path: 'welcome', component: IndexPageComponent}, // <-- delete this line
{path: 'login', component: LoginComponent}, {path: 'login', component: LoginComponent},
{path: 'term', component: TermPage}, {path: 'term', component: ConsolePageComponent},
{path: '', redirectTo: '/welcome', pathMatch: 'full'}, {path: '', redirectTo: '/welcome', pathMatch: 'full'},
{path: '**', component: PageNotFoundComponent} {path: '**', component: PageNotFoundComponent}
]; ];
......
...@@ -12,17 +12,20 @@ import {AppRoutingModule} from './app-routing.module'; ...@@ -12,17 +12,20 @@ import {AppRoutingModule} from './app-routing.module';
import {AppComponent} from './app.component'; import {AppComponent} from './app.component';
import {WelcomeComponent} from './IndexPage/welcome.component'; import {NavComponent} from './BasicPage/nav/nav.component';
import {LeftbarComponent} from './IndexPage/leftbar.component'; import {LoginComponent} from './BasicPage/login/login.component';
import {FooterComponent} from './BasicPage/footer/footer.component';
import {NavComponent} from './BasicPage/nav.component';
import {FooterComponent} from './BasicPage/footer.component';
import {PageNotFoundComponent} from './BasicPage/not-found.component'; import {PageNotFoundComponent} from './BasicPage/not-found.component';
import {LoginComponent} from './BasicPage/login.component';
import {TermPage} from './TerminalPage/main'; import {SearchComponent} from './ConsolePage/search/search.component';
import {TermLeftBar} from './TerminalPage/leftbar'; import {IleftbarComponent} from './IndexPage/ileftbar/ileftbar.component';
import {TerminalComponent} from './TerminalPage/terminal'; import {CleftbarComponent} from './ConsolePage/cleftbar/cleftbar.component';
import {ConsoleComponent} from './ConsolePage/console/console.component';
import {ConsolenavComponent} from './ConsolePage/console/consolenav/consolenav.component';
import {RdpComponent} from './ConsolePage/console/rdp/rdp.component';
import {SshComponent} from './ConsolePage/console/ssh/ssh.component';
import {ConsolePageComponent} from './ConsolePage/consolepage.component';
import {IndexPageComponent} from './IndexPage/index-page.component';
@NgModule({ @NgModule({
...@@ -34,16 +37,20 @@ import {TerminalComponent} from './TerminalPage/terminal'; ...@@ -34,16 +37,20 @@ import {TerminalComponent} from './TerminalPage/terminal';
], ],
declarations: [ declarations: [
AppComponent, AppComponent,
WelcomeComponent,
NavComponent,
LeftbarComponent,
FooterComponent,
PageNotFoundComponent, PageNotFoundComponent,
NavComponent,
LoginComponent, LoginComponent,
FooterComponent,
TermPage, RdpComponent,
TermLeftBar, SshComponent,
TerminalComponent SearchComponent,
IleftbarComponent,
CleftbarComponent,
ConsoleComponent,
ConsolenavComponent,
ConsolePageComponent,
IndexPageComponent
// HeroListComponent, // HeroListComponent,
// CrisisListComponent, // CrisisListComponent,
], ],
......
...@@ -170,7 +170,7 @@ export class HttpService { ...@@ -170,7 +170,7 @@ export class HttpService {
@Injectable() @Injectable()
export class AppService { export class AppService {
// user:User = user ; // user:User = user ;
// searchrequest: any; searchrequest: any;
constructor(private _http: HttpService, constructor(private _http: HttpService,
private _router: Router, private _router: Router,
...@@ -304,6 +304,25 @@ export class AppService { ...@@ -304,6 +304,25 @@ export class AppService {
this._http.post('/api/browser', JSON.stringify(Browser)).map(res => res.json()).subscribe() this._http.post('/api/browser', JSON.stringify(Browser)).map(res => res.json()).subscribe()
} }
Search(q) {
if (this.searchrequest) {
this.searchrequest.unsubscribe();
}
this.searchrequest = this._http.get('/api/search?q=' + q)
.map(res => res.json())
.subscribe(
data => {
this._logger.log(data);
},
err => {
this._logger.error(err);
},
() => {
}
);
this._logger.log(q)
}
// //
// //
// HideLeft() { // HideLeft() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment