diff --git a/modules/container/ContainerController.js b/modules/container/ContainerController.js index 332b87b..24f8187 100644 --- a/modules/container/ContainerController.js +++ b/modules/container/ContainerController.js @@ -219,9 +219,15 @@ angular.module('myApp.container', ['ngRoute']) container.isTerminalShown = true; - TerminalServices.getTerminal2(container.name).then(function(term) { - container.terminal = term; - term.open(document.getElementById('console' + container.name)); + // get JS terminal emulator + container.terminal = TerminalServices.getJavascriptTerminal(); + container.terminal.open(document.getElementById('console' + container.name)); + + var initialGeometry = container.terminal.proposeGeometry(); + console.log("Rows: " + initialGeometry.rows + " Cols: " + initialGeometry.cols); + + TerminalServices.getTerminal2(container.name, container.terminal, initialGeometry).then(function(term) { + container.terminal.fit(); }); }; diff --git a/modules/container/containers.html b/modules/container/containers.html index e13e5c4..2bf313a 100644 --- a/modules/container/containers.html +++ b/modules/container/containers.html @@ -10,41 +10,44 @@
-
{{container.name}}
-
{{container.status}}
-
{{container.architecture}}
-
{{container.stateful}}
-
-
- Start +
+
{{container.name}}
+
{{container.status}}
+
{{container.architecture}}
+
{{container.stateful}}
+
+
+ Start +
+
+ Stop +
-
- Stop + +
- - -
-
+
+
+
+
-
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;