Unverified Commit 592d2ec6 authored by liuzheng712's avatar liuzheng712

fix: publish

fix a lot bugs
parents f81299ba bc195ad8
...@@ -33,14 +33,7 @@ ...@@ -33,14 +33,7 @@
"../node_modules/jquery-sparkline/jquery.sparkline.js", "../node_modules/jquery-sparkline/jquery.sparkline.js",
"../node_modules/tether/dist/js/tether.min.js", "../node_modules/tether/dist/js/tether.min.js",
"../node_modules/bootstrap/dist/js/bootstrap.min.js", "../node_modules/bootstrap/dist/js/bootstrap.min.js",
"../node_modules/xterm/dist/xterm.js", "../node_modules/xterm/dist/xterm.js"
"../node_modules/layui-layer/dist/layer.js",
"../node_modules/socket.io-client/dist/socket.io.js",
"./assets/js/mstsc.js",
"./assets/js/keyboard.js",
"./assets/js/rle.js",
"./assets/js/client.js",
"./assets/js/canvas.js"
], ],
"environmentSource": "environments/environment.ts", "environmentSource": "environments/environment.ts",
"environments": { "environments": {
......
...@@ -108,7 +108,7 @@ def asset_groups_assets(): ...@@ -108,7 +108,7 @@ def asset_groups_assets():
"hostname": "192.168.1.6", "hostname": "192.168.1.6",
"ip": "192.168.2.6", "ip": "192.168.2.6",
"port": 22, "port": 22,
"plantform": "Linux", "platform": "Linux",
"system_users_granted": [ "system_users_granted": [
{ {
"id": 1, "id": 1,
...@@ -116,7 +116,8 @@ def asset_groups_assets(): ...@@ -116,7 +116,8 @@ def asset_groups_assets():
"username": "web", "username": "web",
"protocol": "ssh", "protocol": "ssh",
"auth_method": "P", "auth_method": "P",
"auto_push": True "auto_push": True,
"priority": 1
}, },
{ {
"id": 2, "id": 2,
...@@ -124,7 +125,9 @@ def asset_groups_assets(): ...@@ -124,7 +125,9 @@ def asset_groups_assets():
"username": "liuzheng", "username": "liuzheng",
"protocol": "ssh", "protocol": "ssh",
"auth_method": "P", "auth_method": "P",
"auto_push": True "auto_push": True,
"priority": 10
} }
] ]
}, },
...@@ -133,84 +136,16 @@ def asset_groups_assets(): ...@@ -133,84 +136,16 @@ def asset_groups_assets():
"hostname": "windows server", "hostname": "windows server",
"ip": "123.57.183.135", "ip": "123.57.183.135",
"port": 3389, "port": 3389,
"plantform": "Windows", "platform": "Windows",
"assets_granted": [
{
"id": 1,
"name": "web",
"username": "web",
"protocol": "ssh",
"auth_method": "P",
"auto_push": True
}
]
}
]
},
{
"id": 4,
"name": "java",
"comment": "",
"assets_granted": [
{
"id": 2,
"hostname": "192.168.1.6",
"ip": "192.168.2.6",
"port": 22,
"system_users_granted": [
{
"id": 1,
"name": "web",
"username": "web",
"protocol": "ssh",
"auth_method": "P",
"auto_push": True
}
]
}
]
},
{
"id": 3,
"name": "数据库",
"comment": "",
"assets_granted": [
{
"id": 2,
"hostname": "192.168.1.6",
"ip": "192.168.2.6",
"port": 22,
"system_users_granted": [ "system_users_granted": [
{ {
"id": 1, "id": "3",
"name": "web", "name": "web",
"username": "web", "username": "web",
"protocol": "ssh", "protocol": "rdp",
"auth_method": "P",
"auto_push": True
}
]
}
]
},
{
"id": 2,
"name": "运维组",
"comment": "",
"assets_granted": [
{
"id": 2,
"hostname": "192.168.1.6",
"ip": "192.168.2.6",
"port": 22,
"system_users_granted": [
{
"id": 1,
"name": "web",
"username": "web",
"protocol": "ssh",
"auth_method": "P", "auth_method": "P",
"auto_push": True "auto_push": True,
"priority": 10
} }
] ]
} }
......
This diff is collapsed.
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
"layui-layer": "git+https://github.com/jumpserver/layer.git", "layui-layer": "git+https://github.com/jumpserver/layer.git",
"materialize-css": "^0.100.2", "materialize-css": "^0.100.2",
"metismenu": "^2.5.0", "metismenu": "^2.5.0",
"mstsc.js": "^0.2.4",
"ng2-charts": "^1.5.0", "ng2-charts": "^1.5.0",
"ng2-cookies": "^1.0.12", "ng2-cookies": "^1.0.12",
"ngx-bootstrap": "^1.6.6", "ngx-bootstrap": "^1.6.6",
...@@ -54,8 +55,8 @@ ...@@ -54,8 +55,8 @@
"socket.io": "^2.0.3", "socket.io": "^2.0.3",
"socket.io-client": "^2.0.4", "socket.io-client": "^2.0.4",
"ssh-keygen": "^0.4.1", "ssh-keygen": "^0.4.1",
"term.js": "0.0.7",
"tether": "^1.4.0", "tether": "^1.4.0",
"tty.js": "^0.2.15",
"xterm": "^2.9.2", "xterm": "^2.9.2",
"zone.js": "^0.8.14" "zone.js": "^0.8.14"
}, },
......
...@@ -67,11 +67,7 @@ label { ...@@ -67,11 +67,7 @@ label {
background: #2f2a2a; background: #2f2a2a;
font-size: 9pt; font-size: 9pt;
border-top-width: 1px; border-top-width: 1px;
<<<<<<< HEAD
left: 0; left: 0;
=======
left: 0px;
>>>>>>> github_dev
padding: 1px 20px 0 20px; padding: 1px 20px 0 20px;
position: absolute; position: absolute;
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<label for="hostgroup-{{i}}">{{hostGroup.name}}</label> <label for="hostgroup-{{i}}">{{hostGroup.name}}</label>
<ul [ngClass]="{'insearch': q }"> <ul [ngClass]="{'insearch': q }">
<li *ngFor="let host of hostGroup.assets_granted | SearchFilter: q" (click)="Connect(host)"> <li *ngFor="let host of hostGroup.assets_granted | SearchFilter: q" (click)="Connect(host)">
<i class="fa" [ngClass]="'fa-'+(host.plantform||'undefined').toLowerCase()" id="fa-{{i}}"></i> <i class="fa" [ngClass]="'fa-'+(host.platform||'undefined').toLowerCase()" id="fa-{{i}}"></i>
{{host.hostname}} {{host.hostname}}
</li> </li>
</ul> </ul>
......
...@@ -120,6 +120,10 @@ export class CleftbarComponent implements OnInit { ...@@ -120,6 +120,10 @@ export class CleftbarComponent implements OnInit {
const that = this; const that = this;
if (host.system_users_granted.length > 1) { if (host.system_users_granted.length > 1) {
let options = ''; let options = '';
user = this.checkPriority(host.system_users_granted);
if (user) {
this.login(host, user);
} else {
for (let u of host.system_users_granted) { for (let u of host.system_users_granted) {
options += '<option value="' + u.id + '">' + u.username + '</option>'; options += '<option value="' + u.id + '">' + u.username + '</option>';
} }
...@@ -131,7 +135,7 @@ export class CleftbarComponent implements OnInit { ...@@ -131,7 +135,7 @@ export class CleftbarComponent implements OnInit {
btn: ['确定', '取消'], btn: ['确定', '取消'],
content: '<select id="selectuser">' + options + '</select>', content: '<select id="selectuser">' + options + '</select>',
yes: function (index, layero) { yes: function (index, layero) {
let userid = jQuery('#selectuser').val(); const userid = jQuery('#selectuser').val();
for (let i of host.system_users_granted) { for (let i of host.system_users_granted) {
if (i.id.toString() === userid.toString()) { if (i.id.toString() === userid.toString()) {
user = i; user = i;
...@@ -148,6 +152,7 @@ export class CleftbarComponent implements OnInit { ...@@ -148,6 +152,7 @@ export class CleftbarComponent implements OnInit {
// return false 开启该代码可禁止点击该按钮关闭 // return false 开启该代码可禁止点击该按钮关闭
} }
}); });
}
} else if (host.system_users_granted.length === 1) { } else if (host.system_users_granted.length === 1) {
user = host.system_users_granted[0]; user = host.system_users_granted[0];
this.login(host, user); this.login(host, user);
...@@ -166,12 +171,12 @@ export class CleftbarComponent implements OnInit { ...@@ -166,12 +171,12 @@ export class CleftbarComponent implements OnInit {
this._rdp.Connect(host, user.id); this._rdp.Connect(host, user.id);
} }
} }
// if (host.plantform) { // if (host.platform) {
// if (host.plantform.toLowerCase() === 'linux') { // if (host.platform.toLowerCase() === 'linux') {
// jQuery('app-ssh').show(); // jQuery('app-ssh').show();
// jQuery('app-rdp').hide(); // jQuery('app-rdp').hide();
// this._term.TerminalConnect(host, user.id); // this._term.TerminalConnect(host, user.id);
// } else if (host.plantform.toLowerCase() === 'windows') { // } else if (host.platform.toLowerCase() === 'windows') {
// jQuery('app-ssh').hide(); // jQuery('app-ssh').hide();
// jQuery('app-rdp').show(); // jQuery('app-rdp').show();
// this._rdp.Connect(host, user.id); // this._rdp.Connect(host, user.id);
...@@ -183,6 +188,20 @@ export class CleftbarComponent implements OnInit { ...@@ -183,6 +188,20 @@ export class CleftbarComponent implements OnInit {
// } // }
} }
checkPriority(sysUsers) {
let priority: number = -1;
let user: any;
for (let u of sysUsers) {
if (u.priority > priority) {
user = u;
priority = u.priority;
} else if (u.priority === priority) {
return null;
}
}
return user;
}
Search(q) { Search(q) {
this._search.Search(q); this._search.Search(q);
} }
......
...@@ -46,6 +46,17 @@ export let NavList: { ...@@ -46,6 +46,17 @@ export let NavList: {
styleUrls: ['./control.component.css'] styleUrls: ['./control.component.css']
}) })
export class ControlComponent implements OnInit { export class ControlComponent implements OnInit {
static active(id) {
for (let i in NavList.List) {
if (id.toString() === i) {
NavList.List[id].hide = false;
} else {
NavList.List[i].hide = true;
}
}
NavList.Active = id;
}
constructor() { constructor() {
} }
......
...@@ -46,6 +46,7 @@ export class ControlnavComponent implements OnInit { ...@@ -46,6 +46,7 @@ export class ControlnavComponent implements OnInit {
if (NavList.List[index].type === 'ssh') { if (NavList.List[index].type === 'ssh') {
jQuery('app-ssh').show(); jQuery('app-ssh').show();
jQuery('app-rdp').hide(); jQuery('app-rdp').hide();
NavList.List[index].Term.term.focus();
} else if (NavList.List[index].type === 'rdp') { } else if (NavList.List[index].type === 'rdp') {
jQuery('app-ssh').hide(); jQuery('app-ssh').hide();
jQuery('app-rdp').show(); jQuery('app-rdp').show();
...@@ -69,4 +70,5 @@ export class ControlnavComponent implements OnInit { ...@@ -69,4 +70,5 @@ export class ControlnavComponent implements OnInit {
ControlnavComponent.checkActive(index); ControlnavComponent.checkActive(index);
} }
} }
...@@ -6,9 +6,13 @@ ...@@ -6,9 +6,13 @@
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {NavList, View, Rdp} from '../control.component'; import {NavList, View, Rdp, ControlComponent} from '../control.component';
declare let Mstsc: any; import {Mstsc} from 'mstsc.js/client/js/mstsc.js';
import {Client} from 'mstsc.js/client/js/client.js';
import {Canvas} from 'mstsc.js/client/js/canvas.js';
// declare let Mstsc: any;
@Component({ @Component({
selector: 'app-rdp', selector: 'app-rdp',
...@@ -18,12 +22,8 @@ declare let Mstsc: any; ...@@ -18,12 +22,8 @@ declare let Mstsc: any;
export class RdpComponent implements OnInit { export class RdpComponent implements OnInit {
NavList = NavList; NavList = NavList;
static Disconnect(host) { static Disconnect(host) {
host.connected = false; host.connected = false;
// document.getElementById("templatesrc").remove();
} }
static DisconnectAll() { static DisconnectAll() {
...@@ -40,9 +40,9 @@ export class RdpComponent implements OnInit { ...@@ -40,9 +40,9 @@ export class RdpComponent implements OnInit {
const id = NavList.List.length - 1; const id = NavList.List.length - 1;
const canvas = Mstsc.$('canvas-' + id); const canvas = Mstsc.$('canvas-' + id);
canvas.style.display = 'inline'; // canvas.style.display = 'inline';
canvas.width = window.innerWidth; // canvas.width = window.innerWidth;
canvas.height = window.innerHeight; // canvas.height = window.innerHeight;
NavList.List[id].nick = host.name; NavList.List[id].nick = host.name;
NavList.List[id].connected = true; NavList.List[id].connected = true;
...@@ -52,18 +52,11 @@ export class RdpComponent implements OnInit { ...@@ -52,18 +52,11 @@ export class RdpComponent implements OnInit {
NavList.List[id].Rdp = new Rdp; NavList.List[id].Rdp = new Rdp;
NavList.List[id].Rdp.token = host.token; NavList.List[id].Rdp.token = host.token;
NavList.List[id].Rdp.machine = host.uuid; NavList.List[id].Rdp.machine = host.uuid;
NavList.List[id].Rdp.client = Mstsc.client.create(Mstsc.$('canvas-' + id)); NavList.List[id].Rdp.client = new Client.Client(Mstsc.$('canvas-' + id));
NavList.List[id].Rdp.client.connect(host.token, 'rdp/socket.io'); NavList.List[id].Rdp.client.connect(host.token, '/rdp/socket.io');
NavList.List.push(new View()); NavList.List.push(new View());
for (let m in NavList.List) { ControlComponent.active(id);
NavList.List[m].hide = true;
}
NavList.List[id].hide = false;
NavList.Active = id;
} }
} }
...@@ -9,7 +9,7 @@ import {Component, OnInit} from '@angular/core'; ...@@ -9,7 +9,7 @@ import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {Logger} from 'angular2-logger/core';
import {Cookie} from 'ng2-cookies/ng2-cookies'; import {Cookie} from 'ng2-cookies/ng2-cookies';
import {AppService} from '../../../app.service'; import {AppService} from '../../../app.service';
import {NavList, View, Term} from '../control.component'; import {NavList, View, Term, ControlComponent} from '../control.component';
import {Terminal} from '../../../globals'; import {Terminal} from '../../../globals';
import * as io from 'socket.io-client'; import * as io from 'socket.io-client';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.js';
...@@ -74,15 +74,7 @@ export class SshComponent implements OnInit { ...@@ -74,15 +74,7 @@ export class SshComponent implements OnInit {
screenKeys: true, screenKeys: true,
}); });
NavList.List.push(new View()); NavList.List.push(new View());
for (let i = 0; i < NavList.List.length; i++) { ControlComponent.active(id);
if (id === i) {
NavList.List[id].hide = false;
} else {
NavList.List[i].hide = true;
}
}
NavList.Active = id;
// TermStore.term[id]['term'].on('title', function (title) { // TermStore.term[id]['term'].on('title', function (title) {
......
...@@ -12,15 +12,15 @@ import {environment} from '../environments/environment'; ...@@ -12,15 +12,15 @@ import {environment} from '../environments/environment';
import {NotFoundComponent} from './BasicPage/not-found/not-found.component'; import {NotFoundComponent} from './BasicPage/not-found/not-found.component';
import {LoginComponent} from './BasicPage/login/login.component'; import {LoginComponent} from './BasicPage/login/login.component';
import {ControlPageComponent} from './ControlPage/controlpage.component'; import {ControlPageComponent} from './ControlPage/controlpage.component';
import {RdppageComponent} from './rdppage/rdppage.component';
import {TermpageComponent} from './termpage/termpage.component';
import {ReplayPageComponent} from './replay-page/replay-page.component'; import {ReplayPageComponent} from './replay-page/replay-page.component';
import {MonitorPageComponent} from './monitor-page/monitor-page.component'; import {MonitorPageComponent} from './monitor-page/monitor-page.component';
import {RdpPageComponent} from './rdp-page/rdp-page.component';
import {TermPageComponent} from './term-page/term-page.component';
const appRoutes: Routes = [ const appRoutes: Routes = [
{path: 'users/login', component: LoginComponent}, {path: 'users/login', component: LoginComponent},
{path: 'rdp/:token', component: RdppageComponent}, {path: 'rdp/:token', component: RdpPageComponent},
{path: 'term/:token', component: TermpageComponent}, {path: 'term/:token', component: TermPageComponent},
{path: 'replay/:token', component: ReplayPageComponent}, {path: 'replay/:token', component: ReplayPageComponent},
{path: 'monitor/:token', component: MonitorPageComponent}, {path: 'monitor/:token', component: MonitorPageComponent},
{path: '', component: ControlPageComponent}, {path: '', component: ControlPageComponent},
......
...@@ -36,8 +36,8 @@ import {SshComponent} from './ControlPage/control/ssh/ssh.component'; ...@@ -36,8 +36,8 @@ import {SshComponent} from './ControlPage/control/ssh/ssh.component';
import {ControlPageComponent} from './ControlPage/controlpage.component'; import {ControlPageComponent} from './ControlPage/controlpage.component';
import {IndexPageComponent} from './IndexPage/index-page.component'; import {IndexPageComponent} from './IndexPage/index-page.component';
import {NotFoundComponent} from './BasicPage/not-found/not-found.component'; import {NotFoundComponent} from './BasicPage/not-found/not-found.component';
import {RdppageComponent} from './rdppage/rdppage.component'; import {RdpPageComponent} from './rdp-page/rdp-page.component';
import {TermpageComponent} from './termpage/termpage.component'; import {TermPageComponent} from './term-page/term-page.component';
import {ReplayPageComponent} from './replay-page/replay-page.component'; import {ReplayPageComponent} from './replay-page/replay-page.component';
import {Mp4Component} from './replay-page/mp4/mp4.component'; import {Mp4Component} from './replay-page/mp4/mp4.component';
import {JsonComponent} from './replay-page/json/json.component'; import {JsonComponent} from './replay-page/json/json.component';
...@@ -45,7 +45,7 @@ import {UtcDatePipe} from './app.pipe'; ...@@ -45,7 +45,7 @@ import {UtcDatePipe} from './app.pipe';
import {MonitorPageComponent} from './monitor-page/monitor-page.component'; import {MonitorPageComponent} from './monitor-page/monitor-page.component';
import {LinuxComponent} from './monitor-page/linux/linux.component'; import {LinuxComponent} from './monitor-page/linux/linux.component';
import {WindowsComponent} from './monitor-page/windows/windows.component'; import {WindowsComponent} from './monitor-page/windows/windows.component';
import {ElementRdpComponent} from './elements/rdp/rdp.component';
@NgModule({ @NgModule({
imports: [ imports: [
...@@ -61,6 +61,7 @@ import {WindowsComponent} from './monitor-page/windows/windows.component'; ...@@ -61,6 +61,7 @@ import {WindowsComponent} from './monitor-page/windows/windows.component';
ElementPopupComponent, ElementPopupComponent,
ElementTermComponent, ElementTermComponent,
ElementInteractiveComponent, ElementInteractiveComponent,
ElementRdpComponent,
LoginComponent, LoginComponent,
RdpComponent, RdpComponent,
SshComponent, SshComponent,
...@@ -73,8 +74,8 @@ import {WindowsComponent} from './monitor-page/windows/windows.component'; ...@@ -73,8 +74,8 @@ import {WindowsComponent} from './monitor-page/windows/windows.component';
ControlPageComponent, ControlPageComponent,
IndexPageComponent, IndexPageComponent,
NotFoundComponent, NotFoundComponent,
RdppageComponent, RdpPageComponent,
TermpageComponent, TermPageComponent,
ReplayPageComponent, ReplayPageComponent,
Mp4Component, Mp4Component,
JsonComponent, JsonComponent,
......
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ElementRdpComponent } from './rdp.component';
describe('ElementRdpComponent', () => {
let component: ElementRdpComponent;
let fixture: ComponentFixture<ElementRdpComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ElementRdpComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ElementRdpComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
...@@ -4,35 +4,40 @@ ...@@ -4,35 +4,40 @@
* @date 2017-11-24 * @date 2017-11-24
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Params} from '@angular/router'; import {ActivatedRoute, Params} from '@angular/router';
import {DataStore} from '../globals'; import {DataStore} from '../../globals';
declare let Mstsc: any; declare let Mstsc: any;
@Component({ @Component({
selector: 'app-rdppage', selector: 'app-element-rdp',
templateUrl: './rdppage.component.html', templateUrl: './rdp.component.html',
styleUrls: ['./rdppage.component.css'] styleUrls: ['./rdp.component.scss']
}) })
export class RdppageComponent implements OnInit { export class ElementRdpComponent implements OnInit, AfterViewInit {
@ViewChild('rdp') el: ElementRef;
constructor(private activatedRoute: ActivatedRoute) { constructor(private activatedRoute: ActivatedRoute) {
DataStore.NavShow = false; DataStore.NavShow = false;
} }
ngOnInit() { ngOnInit() {
}
ngAfterViewInit() {
let token: string; let token: string;
this.activatedRoute.params.subscribe((params: Params) => { this.activatedRoute.params.subscribe((params: Params) => {
token = params['token']; token = params['token'];
}); });
const canvas = Mstsc.$('canvas'); const canvas = Mstsc.$(this.el.nativeElement);
canvas.style.display = 'inline'; canvas.style.display = 'inline';
canvas.width = window.innerWidth; canvas.width = window.innerWidth;
canvas.height = window.innerHeight; canvas.height = window.innerHeight;
const client = Mstsc.client.create(Mstsc.$('canvas')); const client = Mstsc.client.create(Mstsc.$(this.el.nativeElement));
client.connect(token, 'socket.io'); client.connect(token, 'socket.io');
} }
......
...@@ -22,27 +22,20 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -22,27 +22,20 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
ngAfterViewInit() { ngAfterViewInit() {
term.col = Math.floor(jQuery(this.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3; term.col = Math.floor(jQuery(this.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3;
term.row = Math.floor(jQuery(this.el.nativeElement).height() / jQuery('#liuzheng').height()) - 5; term.row = Math.floor(jQuery(this.el.nativeElement).height() / jQuery('#liuzheng').height()) - 5;
// term.term = Terminal({
// cols: term.col,
// rows: term.row,
// useStyle: true,
// screenKeys: true,
// });
term.term.resize(term.col, term.row);
term.term.open(this.el.nativeElement, true); term.term.open(this.el.nativeElement, true);
// const that = this; const that = this;
// window.onresize = function () { window.onresize = function () {
// term.col = Math.floor(jQuery(that.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3; term.col = Math.floor(jQuery(that.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3;
// term.row = Math.floor(jQuery(that.el.nativeElement).height() / jQuery('#liuzheng').height()) - 5; term.row = Math.floor(jQuery(that.el.nativeElement).height() / jQuery('#liuzheng').height()) - 3;
// if (term.col < 80) {
// if (term.col < 80) { term.col = 80;
// term.col = 80; }
// } if (term.row < 24) {
// if (term.row < 24) { term.row = 24;
// term.row = 24; }
// } term.term.resize(term.col, term.row);
// term.term.resize(term.col, term.row); };
// }; jQuery(window).resize();
} }
} }
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RdppageComponent } from './rdppage.component'; import { RdpPageComponent } from './rdp-page.component';
describe('RdppageComponent', () => { describe('RdpPageComponent', () => {
let component: RdppageComponent; let component: RdpPageComponent;
let fixture: ComponentFixture<RdppageComponent>; let fixture: ComponentFixture<RdpPageComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ RdppageComponent ] declarations: [ RdpPageComponent ]
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(RdppageComponent); fixture = TestBed.createComponent(RdpPageComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-rdp-page',
templateUrl: './rdp-page.component.html',
styleUrls: ['./rdp-page.component.scss']
})
export class RdpPageComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
...@@ -24,4 +24,6 @@ ...@@ -24,4 +24,6 @@
app-element-term { app-element-term {
position: absolute; position: absolute;
width: 100%;
height: 100%;
} }
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Video} from '../../globals'; import {Video, term} from '../../globals';
import {term} from '../../globals';
@Component({ @Component({
selector: 'app-json', selector: 'app-json',
...@@ -22,7 +21,14 @@ export class JsonComponent implements OnInit { ...@@ -22,7 +21,14 @@ export class JsonComponent implements OnInit {
} }
ngOnInit() { ngOnInit() {
this.restart(); const that = this;
let r = true;
window.onresize = function () {
if (r) {
that.pause();
r = false;
}
};
} }
setSpeed() { setSpeed() {
......
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TermpageComponent } from './termpage.component'; import { TermPageComponent } from './term-page.component';
describe('TermpageComponent', () => { describe('TermPageComponent', () => {
let component: TermpageComponent; let component: TermPageComponent;
let fixture: ComponentFixture<TermpageComponent>; let fixture: ComponentFixture<TermPageComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ TermpageComponent ] declarations: [ TermPageComponent ]
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(TermpageComponent); fixture = TestBed.createComponent(TermPageComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-term-page',
templateUrl: './term-page.component.html',
styleUrls: ['./term-page.component.scss']
})
export class TermPageComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
#term {
width: 100%;
height: 100%;
}
#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;
}
import {Component, OnInit} from '@angular/core';
import {ActivatedRoute, Params} from '@angular/router';
import {DataStore} from '../globals';
import * as io from 'socket.io-client';
import * as Terminal from 'term.js/src/term.js';
@Component({
selector: 'app-termpage',
templateUrl: './termpage.component.html',
styleUrls: ['./termpage.component.css']
})
export class TermpageComponent implements OnInit {
constructor(private activatedRoute: ActivatedRoute) {
DataStore.NavShow = false;
}
ngOnInit() {
let token: string;
this.activatedRoute.params.subscribe((params: Params) => {
token = params['token'];
});
const socket = io.connect('/ssh');
const term = new Terminal({
cols: '80',
rows: '24',
useStyle: true,
screenKeys: true,
});
term.open(document.getElementById('term'), true);
socket.on('connect', function () {
socket.emit('token', token);
term.on('data', function (data) {
socket.emit('data', data);
});
socket.on('data', function (data) {
term.write(data);
});
socket.on('disconnect', function () {
term.destroy();
});
socket.on('resize', function (data) {
term.resize(data.col, data.row);
});
// jQuery(window).resize();
});
}
}
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