-
Start
+
+
{{container.name}}
+
{{container.status}}
+
{{container.architecture}}
+
{{container.stateful}}
+
-
-
-
-
-
diff --git a/modules/terminal/TerminalController.js b/modules/terminal/TerminalController.js
index ada4b0e..a303f3f 100644
--- a/modules/terminal/TerminalController.js
+++ b/modules/terminal/TerminalController.js
@@ -14,9 +14,18 @@ angular.module('myApp.terminal', ['ngRoute'])
.controller('terminalPageCtrl', function ($scope, $routeParams, $filter, $location,
TerminalServices, SettingServices) {
$scope.containerName = $routeParams.containerName;
+ var container = {};
- TerminalServices.getTerminal2($scope.containerName).then(function(term) {
- term.open(document.getElementById('console'));
+ // get JS terminal emulator
+ container.terminal = TerminalServices.getJavascriptTerminal();
+ container.terminal.open(document.getElementById('console'));
+
+ var initialGeometry = container.terminal.proposeGeometry();
+ console.log("Rows: " + initialGeometry.rows + " Cols: " + initialGeometry.cols);
+
+ TerminalServices.getTerminal2($scope.containerName, container.terminal, initialGeometry).then(function(term) {
+ container.terminal.fit();
});
+
})
;
diff --git a/modules/terminal/TerminalService.js b/modules/terminal/TerminalService.js
index 1f0d3b2..bc5f140 100644
--- a/modules/terminal/TerminalService.js
+++ b/modules/terminal/TerminalService.js
@@ -5,7 +5,21 @@ angular.module('myApp.remoteimage')
function ($http, $q, SettingServices) {
var obj = {};
- obj.getTerminal = function(containerName) {
+
+ obj.getJavascriptTerminal = function() {
+ var term = new Terminal({
+ cols: 120,
+ rows: 25,
+ useStyle: true,
+ screenKeys: true,
+ cursorBlink: false
+ });
+
+ return term;
+ }
+
+
+ obj.getTerminal = function(containerName, geometry) {
var data = {
"command": ["bash"],
"environment": {
@@ -14,7 +28,9 @@ angular.module('myApp.remoteimage')
"USER": "root"
},
"wait-for-websocket": true,
- "interactive": true
+ "interactive": true,
+ "width": geometry.cols,
+ "height": geometry.rows
}
return $http.post(SettingServices.getLxdApiUrl() + '/containers/' + containerName + "/exec", data).then(function(data) {
@@ -31,9 +47,8 @@ angular.module('myApp.remoteimage')
}
- obj.getTerminal2 = function(containerName) {
-
- return obj.getTerminal(containerName).then(function(data) {
+ obj.getTerminal2 = function(containerName, term, geometry) {
+ return obj.getTerminal(containerName, geometry).then(function(data) {
var operationId = data.data.metadata.id;
var secret = data.data.metadata.metadata.fds[0];
@@ -44,48 +59,36 @@ angular.module('myApp.remoteimage')
var sock = new WebSocket(wssurl);
- var term = new Terminal({
- cols: 120,
- rows: 25,
- useStyle: true,
- screenKeys: true,
- cursorBlink: false
- });
-
term.on('data', function (data) {
sock.send(new Blob([data]));
});
sock.onopen = function (e) {
- //container.terminal = term;
- //term.open(document.getElementById('console'));
+ sock.onmessage = function (msg) {
+ if (msg.data instanceof Blob) {
+ var reader = new FileReader();
+ reader.addEventListener('loadend', function () {
+ term.write(reader.result);
+ });
+ reader.readAsBinaryString(msg.data);
+ } else {
+ term.write(msg.data);
+ }
- sock.onmessage = function (msg) {
- if (msg.data instanceof Blob) {
- var reader = new FileReader();
- reader.addEventListener('loadend', function () {
- term.write(reader.result);
- });
- reader.readAsBinaryString(msg.data);
- } else {
- term.write(msg.data);
- }
+ };
- };
-
- sock.onclose = function (msg) {
- console.log('WebSocket closed');
- term.destroy();
- };
- sock.onerror = function (err) {
- console.error(err);
- };
- };
-
- return term;
- })
+ sock.onclose = function (msg) {
+ console.log('WebSocket closed');
+ term.destroy();
+ };
+ sock.onerror = function (err) {
+ console.error(err);
+ };
+ };
+ return term;
+ })
}
return obj;