var Term; (function() { 'use strict'; var socket = io.connect(); window.addEventListener('load', function() { var element = document.getElementById('js-terminal'), cell = createCell(element), size = getSize(element, cell); Term = new Terminal({ screenKeys : true, cursorBlink : false, debug : true }); Term.open(element); Term.on('data', function(data) { socket.emit('terminal-data', data); }); Term.on('resize', function(size) { socket.emit('terminal-resize', size); }); socket.on('terminal-data', function (data) { Term.write(data); }); socket.on('terminal-resize', function (size) { Term.resize(size.cols, size.rows); }); socket.emit('terminal-resize', size); window.addEventListener('resize', function() { var size = getSize(element, cell); socket.emit('terminal-resize', size); }); }); function getSize(element, cell) { var wSubs = element.offsetWidth - element.clientWidth, w = element.clientWidth - wSubs, hSubs = element.offsetHeight - element.clientHeight, h = element.clientHeight - hSubs, x = cell.clientWidth, y = cell.clientHeight, cols = Math.max(Math.floor(w / x), 10), rows = Math.max(Math.floor(h / y), 10), size = { cols: cols, rows: rows }; return size; } function createCell(element) { var cell = document.createElement('div'); cell.innerHTML = ' '; cell.style.position = 'absolute'; cell.style.top = '-1000px'; element.appendChild(cell); return cell; } })();