diff --git a/src/addons/attach/attach.test.ts b/src/addons/attach/attach.test.ts index 9bf0e070..a13885bb 100644 --- a/src/addons/attach/attach.test.ts +++ b/src/addons/attach/attach.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as attach from './attach' +import * as attach from './attach'; class MockTerminal {} diff --git a/src/addons/attach/attach.ts b/src/addons/attach/attach.ts index 4e0d5941..349a03dd 100644 --- a/src/addons/attach/attach.ts +++ b/src/addons/attach/attach.ts @@ -16,16 +16,16 @@ * should happen instantly or at a maximum * frequency of 1 rendering per 10ms. */ -export function attach(term, socket, bidirectional, buffered) { - bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional; +export function attach(term: any, socket: WebSocket, bidirectional: boolean, buffered: boolean): void { + bidirectional = (typeof bidirectional === 'undefined') ? true : bidirectional; term.socket = socket; - term._flushBuffer = function() { + term._flushBuffer = () => { term.write(term._attachSocketBuffer); term._attachSocketBuffer = null; }; - term._pushToBuffer = function(data) { + term._pushToBuffer = (data: string) => { if (term._attachSocketBuffer) { term._attachSocketBuffer += data; } else { @@ -34,20 +34,19 @@ export function attach(term, socket, bidirectional, buffered) { } }; - var myTextDecoder; + let myTextDecoder; - term._getMessage = function(ev) { - var str; - if (typeof ev.data === "object") { + term._getMessage = function(ev: MessageEvent): void { + let str; + if (typeof ev.data === 'object') { if (ev.data instanceof ArrayBuffer) { if (!myTextDecoder) { myTextDecoder = new TextDecoder(); } str = myTextDecoder.decode( ev.data ); - } - else { - throw "TODO: handle Blob?"; + } else { + throw 'TODO: handle Blob?'; } } @@ -58,7 +57,7 @@ export function attach(term, socket, bidirectional, buffered) { } }; - term._sendData = function(data) { + term._sendData = (data: string) => { if (socket.readyState !== 1) { return; } @@ -82,10 +81,10 @@ export function attach(term, socket, bidirectional, buffered) { * @param {WebSocket} socket - The socket from which to detach the current * terminal. */ -export function detach(term, socket) { +export function detach(term: any, socket: WebSocket): void { term.off('data', term._sendData); - socket = (typeof socket == 'undefined') ? term.socket : socket; + socket = (typeof socket === 'undefined') ? term.socket : socket; if (socket) { socket.removeEventListener('message', term._getMessage); @@ -95,7 +94,7 @@ export function detach(term, socket) { }; -export function apply(terminalConstructor) { +export function apply(terminalConstructor: any): void { /** * Attaches the current terminal to the given socket * @@ -106,7 +105,7 @@ export function apply(terminalConstructor) { * should happen instantly or at a maximum * frequency of 1 rendering per 10ms. */ - terminalConstructor.prototype.attach = function(socket, bidirectional, buffered) { + terminalConstructor.prototype.attach = (socket: WebSocket, bidirectional: boolean, buffered: boolean) => { return attach(this, socket, bidirectional, buffered); }; @@ -116,7 +115,7 @@ export function apply(terminalConstructor) { * @param {WebSocket} socket - The socket from which to detach the current * terminal. */ - terminalConstructor.prototype.detach = function(socket) { + terminalConstructor.prototype.detach = (socket: WebSocket) => { return detach(this, socket); }; -} +}; diff --git a/src/addons/fit/fit.test.ts b/src/addons/fit/fit.test.ts index 159cc987..0dc17963 100644 --- a/src/addons/fit/fit.test.ts +++ b/src/addons/fit/fit.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as fit from './fit' +import * as fit from './fit'; class MockTerminal {} diff --git a/src/addons/fit/fit.ts b/src/addons/fit/fit.ts index b87ccc07..f037b540 100644 --- a/src/addons/fit/fit.ts +++ b/src/addons/fit/fit.ts @@ -13,28 +13,33 @@ * row and truncate its width with the current number of columns). */ -export function proposeGeometry(term) { +export interface IGeometry { + rows: number; + cols: number; +} + +export function proposeGeometry(term: any): IGeometry { if (!term.element.parentElement) { return null; } - var parentElementStyle = window.getComputedStyle(term.element.parentElement); - var parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')); - var parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')) - 17); - var elementStyle = window.getComputedStyle(term.element); - var elementPaddingVer = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')); - var elementPaddingHor = parseInt(elementStyle.getPropertyValue('padding-right')) + parseInt(elementStyle.getPropertyValue('padding-left')); - var availableHeight = parentElementHeight - elementPaddingVer; - var availableWidth = parentElementWidth - elementPaddingHor; - var geometry = { + const parentElementStyle = window.getComputedStyle(term.element.parentElement); + const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')); + const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')) - 17); + const elementStyle = window.getComputedStyle(term.element); + const elementPaddingVer = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')); + const elementPaddingHor = parseInt(elementStyle.getPropertyValue('padding-right')) + parseInt(elementStyle.getPropertyValue('padding-left')); + const availableHeight = parentElementHeight - elementPaddingVer; + const availableWidth = parentElementWidth - elementPaddingHor; + const geometry = { cols: Math.floor(availableWidth / term.renderer.dimensions.actualCellWidth), rows: Math.floor(availableHeight / term.renderer.dimensions.actualCellHeight) }; return geometry; -}; +} -export function fit(term) { - var geometry = proposeGeometry(term); +export function fit(term: any): void { + const geometry = proposeGeometry(term); if (geometry) { // Force a full render if (term.rows !== geometry.rows || term.cols !== geometry.cols) { @@ -44,12 +49,12 @@ export function fit(term) { } }; -export function apply(terminalConstructor) { - terminalConstructor.prototype.proposeGeometry = function() { +export function apply(terminalConstructor: any): void { + terminalConstructor.prototype.proposeGeometry = function (): IGeometry { return proposeGeometry(this); - } + }; - terminalConstructor.prototype.fit = function() { - return fit(this); - } + terminalConstructor.prototype.fit = function (): void { + fit(this); + }; } diff --git a/src/addons/fullscreen/fullscreen.test.ts b/src/addons/fullscreen/fullscreen.test.ts index c77ea75c..9326ac4e 100644 --- a/src/addons/fullscreen/fullscreen.test.ts +++ b/src/addons/fullscreen/fullscreen.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as fullscreen from './fullscreen' +import * as fullscreen from './fullscreen'; class MockTerminal {} diff --git a/src/addons/fullscreen/fullscreen.ts b/src/addons/fullscreen/fullscreen.ts index 31ab5189..0eb61ea1 100644 --- a/src/addons/fullscreen/fullscreen.ts +++ b/src/addons/fullscreen/fullscreen.ts @@ -8,10 +8,10 @@ * @param {Terminal} term - The terminal to toggle full screen mode * @param {boolean} fullscreen - Toggle fullscreen on (true) or off (false) */ -export function toggleFullScreen(term, fullscreen) { - var fn; +export function toggleFullScreen(term: any, fullscreen: boolean): void { + let fn; - if (typeof fullscreen == 'undefined') { + if (typeof fullscreen === 'undefined') { fn = (term.element.classList.contains('fullscreen')) ? 'remove' : 'add'; } else if (!fullscreen) { fn = 'remove'; @@ -22,8 +22,8 @@ export function toggleFullScreen(term, fullscreen) { term.element.classList[fn]('fullscreen'); }; -export function apply(terminalConstructor) { - terminalConstructor.prototype.toggleFullScreen = function (fullscreen) { - return toggleFullScreen(this, fullscreen); +export function apply(terminalConstructor: any): void { + terminalConstructor.prototype.toggleFullScreen = function (fullscreen: boolean): void { + toggleFullScreen(this, fullscreen); }; } diff --git a/src/addons/search/search.ts b/src/addons/search/search.ts index 480fea7f..375b86f4 100644 --- a/src/addons/search/search.ts +++ b/src/addons/search/search.ts @@ -32,12 +32,12 @@ export function findPrevious(terminal: any, term: string): boolean { return (terminal.searchHelper).findPrevious(term); }; -export function apply(terminalConstructor) { - terminalConstructor.prototype.findNext = function(term) { +export function apply(terminalConstructor: any): void { + terminalConstructor.prototype.findNext = function(term: any): boolean { return findNext(this, term); - } + }; - terminalConstructor.prototype.findPrevious = function(term) { + terminalConstructor.prototype.findPrevious = function(term: any): boolean { return findPrevious(this, term); - } + }; } diff --git a/src/addons/terminado/terminado.test.ts b/src/addons/terminado/terminado.test.ts index fe059898..e258bd7c 100644 --- a/src/addons/terminado/terminado.test.ts +++ b/src/addons/terminado/terminado.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as terminado from './terminado' +import * as terminado from './terminado'; class MockTerminal {} diff --git a/src/addons/terminado/terminado.ts b/src/addons/terminado/terminado.ts index 9a7c7ad6..afd7277c 100644 --- a/src/addons/terminado/terminado.ts +++ b/src/addons/terminado/terminado.ts @@ -17,16 +17,16 @@ * should happen instantly or at a maximum * frequency of 1 rendering per 10ms. */ -export function terminadoAttach(term, socket, bidirectional, buffered) { - bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional; +export function terminadoAttach(term: any, socket: WebSocket, bidirectional: boolean, buffered: boolean): void { + bidirectional = (typeof bidirectional === 'undefined') ? true : bidirectional; term.socket = socket; - term._flushBuffer = function() { + term._flushBuffer = () => { term.write(term._attachSocketBuffer); term._attachSocketBuffer = null; }; - term._pushToBuffer = function(data) { + term._pushToBuffer = (data) => { if (term._attachSocketBuffer) { term._attachSocketBuffer += data; } else { @@ -35,9 +35,9 @@ export function terminadoAttach(term, socket, bidirectional, buffered) { } }; - term._getMessage = function(ev) { - var data = JSON.parse(ev.data) - if( data[0] == "stdout" ) { + term._getMessage = (ev: MessageEvent) => { + const data = JSON.parse(ev.data); + if (data[0] === 'stdout') { if (buffered) { term._pushToBuffer(data[1]); } else { @@ -46,11 +46,11 @@ export function terminadoAttach(term, socket, bidirectional, buffered) { } }; - term._sendData = function(data) { + term._sendData = (data: string) => { socket.send(JSON.stringify(['stdin', data])); }; - term._setSize = function(size) { + term._setSize = (size: {rows: number, cols: number}) => { socket.send(JSON.stringify(['set_size', size.rows, size.cols])); }; @@ -72,10 +72,10 @@ export function terminadoAttach(term, socket, bidirectional, buffered) { * @param {WebSocket} socket - The socket from which to detach the current * terminal. */ -export function terminadoDetach(term, socket) { +export function terminadoDetach(term: any, socket: WebSocket): void { term.off('data', term._sendData); - socket = (typeof socket == 'undefined') ? term.socket : socket; + socket = (typeof socket === 'undefined') ? term.socket : socket; if (socket) { socket.removeEventListener('message', term._getMessage); @@ -84,7 +84,7 @@ export function terminadoDetach(term, socket) { delete term.socket; }; -export function apply(terminalConstructor) { +export function apply(terminalConstructor: any): void { /** * Attaches the current terminal to the given socket * @@ -95,7 +95,7 @@ export function apply(terminalConstructor) { * should happen instantly or at a maximum * frequency of 1 rendering per 10ms. */ - terminalConstructor.prototype.terminadoAttach = function(socket, bidirectional, buffered) { + terminalConstructor.prototype.terminadoAttach = function(socket: WebSocket, bidirectional: boolean, buffered: boolean): void { return terminadoAttach(this, socket, bidirectional, buffered); }; @@ -105,7 +105,7 @@ export function apply(terminalConstructor) { * @param {WebSocket} socket - The socket from which to detach the current * terminal. */ - terminalConstructor.prototype.terminadoDetach = function(socket) { + terminalConstructor.prototype.terminadoDetach = function(socket: WebSocket): void { return terminadoDetach(this, socket); }; } diff --git a/src/addons/winptyCompat/winptyCompat.test.ts b/src/addons/winptyCompat/winptyCompat.test.ts index 21e54e56..73761fc9 100644 --- a/src/addons/winptyCompat/winptyCompat.test.ts +++ b/src/addons/winptyCompat/winptyCompat.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as winptyCompat from './winptyCompat' +import * as winptyCompat from './winptyCompat'; class MockTerminal {} diff --git a/src/addons/winptyCompat/winptyCompat.ts b/src/addons/winptyCompat/winptyCompat.ts index 723bf011..b594355b 100644 --- a/src/addons/winptyCompat/winptyCompat.ts +++ b/src/addons/winptyCompat/winptyCompat.ts @@ -3,7 +3,7 @@ * @license MIT */ -export function winptyCompatInit(terminal): void { +export function winptyCompatInit(terminal: any): void { // Don't do anything when the platform is not Windows const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].indexOf(navigator.platform) >= 0; if (!isWindows) { @@ -31,7 +31,7 @@ export function winptyCompatInit(terminal): void { }); } -export function apply(terminalConstructor) { +export function apply(terminalConstructor: any): void { terminalConstructor.prototype.winptyCompatInit = function(): void { winptyCompatInit(this); }; diff --git a/src/addons/zmodem/zmodem.test.ts b/src/addons/zmodem/zmodem.test.ts index 3cb28316..7646b7cc 100644 --- a/src/addons/zmodem/zmodem.test.ts +++ b/src/addons/zmodem/zmodem.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; -import * as zmodem from './zmodem' +import * as zmodem from './zmodem'; class MockTerminal {} diff --git a/src/addons/zmodem/zmodem.ts b/src/addons/zmodem/zmodem.ts index 57bdde3c..f1e6050f 100644 --- a/src/addons/zmodem/zmodem.ts +++ b/src/addons/zmodem/zmodem.ts @@ -29,45 +29,38 @@ let Zmodem; -export function zmodemAttach(term, ws, opts) { - if (!opts) opts = {}; +export interface IZModemOptions { + noTerminalWriteOutsideSession?: boolean; +} - var senderFunc = function _ws_sender_func(octets) { - ws.send(new Uint8Array(octets)); - }; +export function zmodemAttach(term: any, ws: WebSocket, opts: IZModemOptions = {}): void { + const senderFunc = (octets: ArrayLike) => ws.send(new Uint8Array(octets)); - var zsentry; + let zsentry; - function _shouldWrite() { + function _shouldWrite(): boolean { return !!zsentry.get_confirmed_session() || !opts.noTerminalWriteOutsideSession; } - zsentry = new Zmodem.Sentry( { - to_terminal: function _to_terminal(octets) { + zsentry = new Zmodem.Sentry({ + to_terminal: (octets: ArrayLike) => { if (_shouldWrite()) { term.write( String.fromCharCode.apply(String, octets) ); } }, - sender: senderFunc, + on_retract: () => term.emit('zmodemRetract'), + on_detect: (detection: any) => term.emit('zmodemDetect', detection) + }); - on_retract: function _on_retract() { - term.emit('zmodemRetract'); - }, + function handleWSMessage(evt: MessageEvent): void { - on_detect: function _on_detect(detection) { - term.emit('zmodemDetect', detection); - }, - } ); - - function handleWSMessage(evt) { - - //In testing with xterm.js’s demo the first message was - //always text even if the rest were binary. While that - //may be specific to xterm.js’s demo, ultimately we - //should reject anything that isn’t binary. + // In testing with xterm.js’s demo the first message was + // always text even if the rest were binary. While that + // may be specific to xterm.js’s demo, ultimately we + // should reject anything that isn’t binary. if (typeof evt.data === 'string') { if (_shouldWrite()) { term.write(evt.data); @@ -82,9 +75,9 @@ export function zmodemAttach(term, ws, opts) { ws.addEventListener('message', handleWSMessage); } -export function apply(terminalConstructor) { - Zmodem = (typeof window == 'object') ? (window).ZModem : {Browser: null}; // Nullify browser for tests +export function apply(terminalConstructor: any): void { + Zmodem = (typeof window === 'object') ? (window).ZModem : {Browser: null}; // Nullify browser for tests terminalConstructor.prototype.zmodemAttach = zmodemAttach.bind(this, this); - terminalConstructor.prototype.zmodemBrowser = Zmodem.Browser + terminalConstructor.prototype.zmodemBrowser = Zmodem.Browser; }