diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 894a44cc..00000000 --- a/.gitignore +++ /dev/null @@ -1,104 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ diff --git a/BTPanel/static/build/addons/attach/attach.js b/BTPanel/static/build/addons/attach/attach.js new file mode 100644 index 00000000..712d911d --- /dev/null +++ b/BTPanel/static/build/addons/attach/attach.js @@ -0,0 +1,141 @@ +/** + * Copyright (c) 2014 The xterm.js authors. All rights reserved. + * @license MIT + * + * Implements the attach method, that attaches the terminal to a WebSocket stream. + */ + +(function (attach) { + if (typeof exports === 'object' && typeof module === 'object') { + /* + * CommonJS environment + */ + module.exports = attach(require('../../Terminal').Terminal); + } else if (typeof define == 'function') { + /* + * Require.js is available + */ + define(['../../xterm'], attach); + } else { + /* + * Plain browser environment + */ + attach(window.Terminal); + } +})(function (Terminal) { + 'use strict'; + + var exports = {}; + + /** + * Attaches the given terminal to the given socket. + * + * @param {Terminal} term - The terminal to be attached to the given socket. + * @param {WebSocket} socket - The socket to attach the current terminal. + * @param {boolean} bidirectional - Whether the terminal should send data + * to the socket as well. + * @param {boolean} buffered - Whether the rendering of incoming data + * should happen instantly or at a maximum + * frequency of 1 rendering per 10ms. + */ + exports.attach = function (term, socket, bidirectional, buffered) { + bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional; + term.socket = socket; + + term._flushBuffer = function () { + term.write(term._attachSocketBuffer); + term._attachSocketBuffer = null; + }; + + term._pushToBuffer = function (data) { + if (term._attachSocketBuffer) { + term._attachSocketBuffer += data; + } else { + term._attachSocketBuffer = data; + setTimeout(term._flushBuffer, 10); + } + }; + + var myTextDecoder; + + term._getMessage = function (ev) { + var 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?"; + } + } + + if (buffered) { + term._pushToBuffer(str || ev.data); + } else { + term.write(str || ev.data); + } + }; + + term._sendData = function (data) { + socket.send(data); + }; + + socket.addEventListener('message', term._getMessage); + + if (bidirectional) { + term.on('data', term._sendData); + } + + socket.addEventListener('close', term.detach.bind(term, socket)); + socket.addEventListener('error', term.detach.bind(term, socket)); + }; + + /** + * Detaches the given terminal from the given socket + * + * @param {Terminal} term - The terminal to be detached from the given socket. + * @param {WebSocket} socket - The socket from which to detach the current + * terminal. + */ + exports.detach = function (term, socket) { + term.off('data', term._sendData); + + socket = (typeof socket == 'undefined') ? term.socket : socket; + + if (socket) { + socket.removeEventListener('message', term._getMessage); + } + + delete term.socket; + }; + + /** + * Attaches the current terminal to the given socket + * + * @param {WebSocket} socket - The socket to attach the current terminal. + * @param {boolean} bidirectional - Whether the terminal should send data + * to the socket as well. + * @param {boolean} buffered - Whether the rendering of incoming data + * should happen instantly or at a maximum + * frequency of 1 rendering per 10ms. + */ + Terminal.prototype.attach = function (socket, bidirectional, buffered) { + return exports.attach(this, socket, bidirectional, buffered); + }; + + /** + * Detaches the current terminal from the given socket. + * + * @param {WebSocket} socket - The socket from which to detach the current + * terminal. + */ + Terminal.prototype.detach = function (socket) { + return exports.detach(this, socket); + }; + + return exports; +}); diff --git a/BTPanel/static/build/addons/attach/attach.min.js b/BTPanel/static/build/addons/attach/attach.min.js new file mode 100644 index 00000000..e437be16 --- /dev/null +++ b/BTPanel/static/build/addons/attach/attach.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).attach=e()}}(function(){return function f(a,i,u){function s(t,e){if(!i[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=i[t]={exports:{}};a[t][0].call(o.exports,function(e){return s(a[t][1][e]||e)},o,o.exports,f,a,i,u)}return i[t].exports}for(var c="function"==typeof require&&require,e=0;e + + + + + + + + + +
+ +

+ xterm.js: socket attach +

+

+ Attach the terminal to a WebSocket terminal stream with ease. Perfect for attaching to your + Docker containers. +

+

+ Socket information +

+
+ + +
+
+ +
+ + + \ No newline at end of file diff --git a/BTPanel/static/build/addons/attach/package.json b/BTPanel/static/build/addons/attach/package.json new file mode 100644 index 00000000..9e45068b --- /dev/null +++ b/BTPanel/static/build/addons/attach/package.json @@ -0,0 +1,5 @@ +{ + "name": "xterm.attach", + "main": "attach.js", + "private": true +} diff --git a/BTPanel/static/build/addons/fit/fit.js b/BTPanel/static/build/addons/fit/fit.js new file mode 100644 index 00000000..c82039ab --- /dev/null +++ b/BTPanel/static/build/addons/fit/fit.js @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2014 The xterm.js authors. All rights reserved. + * @license MIT + * + * Fit terminal columns and rows to the dimensions of its DOM element. + * + * ## Approach + * + * Rows: Truncate the division of the terminal parent element height by the + * terminal row height. + * Columns: Truncate the division of the terminal parent element width by the + * terminal character width (apply display: inline at the terminal + * row and truncate its width with the current number of columns). + */ + +(function (fit) { + if (typeof exports === 'object' && typeof module === 'object') { + /* + * CommonJS environment + */ + module.exports = fit(require('../../Terminal').Terminal); + } else if (typeof define == 'function') { + /* + * Require.js is available + */ + define(['../../xterm'], fit); + } else { + /* + * Plain browser environment + */ + fit(window.Terminal); + } +})(function (Terminal) { + var exports = {}; + + exports.proposeGeometry = function (term) { + 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 = { + cols: Math.floor(availableWidth / term.charMeasure.width), + rows: Math.floor(availableHeight / Math.floor(term.charMeasure.height * term.getOption('lineHeight'))) + }; + + return geometry; + }; + + exports.fit = function (term) { + // Wrap fit in a setTimeout as charMeasure needs time to get initialized + // after calling Terminal.open + setTimeout(function () { + var geometry = exports.proposeGeometry(term); + + if (geometry) { + // Force a full render + if (term.rows !== geometry.rows || term.cols !== geometry.cols) { + term.renderer.clear(); + term.resize(geometry.cols, geometry.rows); + } + } + }, 0); + }; + + Terminal.prototype.proposeGeometry = function () { + return exports.proposeGeometry(this); + }; + + Terminal.prototype.fit = function () { + return exports.fit(this); + }; + + return exports; +}); diff --git a/BTPanel/static/build/addons/fit/fit.min.js b/BTPanel/static/build/addons/fit/fit.min.js new file mode 100644 index 00000000..2f4bbd5a --- /dev/null +++ b/BTPanel/static/build/addons/fit/fit.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).fit=e()}}(function(){return function i(l,u,f){function p(t,e){if(!u[t]){if(!l[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(a)return a(t,!0);var o=new Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}var n=u[t]={exports:{}};l[t][0].call(n.exports,function(e){return p(l[t][1][e]||e)},n,n.exports,i,l,u,f)}return u[t].exports}for(var a="function"==typeof require&&require,e=0;e= 0; y--) { + result = this._findInLine(term, y); + if (result) { + break; + } + } + if (!result) { + for (var y = this._terminal.buffer.ybase + this._terminal.rows - 1; y > startRow; y--) { + result = this._findInLine(term, y); + if (result) { + break; + } + } + } + return this._selectResult(result); + }; + SearchHelper.prototype._findInLine = function (term, y) { + var lowerStringLine = this._terminal.buffer.translateBufferLineToString(y, true).toLowerCase(); + var lowerTerm = term.toLowerCase(); + var searchIndex = lowerStringLine.indexOf(lowerTerm); + if (searchIndex >= 0) { + return { + term: term, + col: searchIndex, + row: y + }; + } + }; + SearchHelper.prototype._selectResult = function (result) { + if (!result) { + return false; + } + this._terminal.selectionManager.setSelection(result.col, result.row, result.term.length); + this._terminal.scrollLines(result.row - this._terminal.buffer.ydisp, false); + return true; + }; + return SearchHelper; +}()); +exports.SearchHelper = SearchHelper; + + + +},{}],2:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var SearchHelper_1 = require("./SearchHelper"); +(function (addon) { + if (typeof window !== 'undefined' && 'Terminal' in window) { + addon(window.Terminal); + } + else if (typeof exports === 'object' && typeof module === 'object') { + module.exports = addon(require('../../Terminal').Terminal); + } + else if (typeof define === 'function') { + define(['../../xterm'], addon); + } +})(function (Terminal) { + Terminal.prototype.findNext = function (term) { + if (!this._searchHelper) { + this.searchHelper = new SearchHelper_1.SearchHelper(this); + } + return this.searchHelper.findNext(term); + }; + Terminal.prototype.findPrevious = function (term) { + if (!this._searchHelper) { + this.searchHelper = new SearchHelper_1.SearchHelper(this); + } + return this.searchHelper.findPrevious(term); + }; +}); + + + +},{"../../Terminal":undefined,"./SearchHelper":1}]},{},[2]) +//# sourceMappingURL=search.js.map diff --git a/BTPanel/static/build/addons/search/search.js.map b/BTPanel/static/build/addons/search/search.js.map new file mode 100644 index 00000000..baa06e88 --- /dev/null +++ b/BTPanel/static/build/addons/search/search.js.map @@ -0,0 +1 @@ +{"version":3,"file":"search.js","sources":["../../../src/addons/search/search.ts","../../../src/addons/search/SearchHelper.ts","../../../node_modules/browser-pack/_prelude.js"],"sourcesContent":["/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SearchHelper } from './SearchHelper';\n\ndeclare var exports: any;\ndeclare var module: any;\ndeclare var define: any;\ndeclare var require: any;\ndeclare var window: any;\n\n(function (addon) {\n if (typeof window !== 'undefined' && 'Terminal' in window) {\n /**\n * Plain browser environment\n */\n addon(window.Terminal);\n } else if (typeof exports === 'object' && typeof module === 'object') {\n /**\n * CommonJS environment\n */\n module.exports = addon(require('../../Terminal').Terminal);\n } else if (typeof define === 'function') {\n /**\n * Require.js is available\n */\n define(['../../xterm'], addon);\n }\n})((Terminal: any) => {\n /**\n * Find the next instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n Terminal.prototype.findNext = function(term: string): boolean {\n if (!this._searchHelper) {\n this.searchHelper = new SearchHelper(this);\n }\n return (this.searchHelper).findNext(term);\n };\n\n /**\n * Find the previous instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n Terminal.prototype.findPrevious = function(term: string): boolean {\n if (!this._searchHelper) {\n this.searchHelper = new SearchHelper(this);\n }\n return (this.searchHelper).findPrevious(term);\n };\n});\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// import { ITerminal } from '../../Interfaces';\n// import { translateBufferLineToString } from '../../utils/BufferLine';\n\ninterface ISearchResult {\n term: string;\n col: number;\n row: number;\n}\n\n/**\n * A class that knows how to search the terminal and how to display the results.\n */\nexport class SearchHelper {\n constructor(private _terminal: any) {\n // TODO: Search for multiple instances on 1 line\n // TODO: Don't use the actual selection, instead use a \"find selection\" so multiple instances can be highlighted\n // TODO: Highlight other instances in the viewport\n // TODO: Support regex, case sensitivity, etc.\n }\n\n /**\n * Find the next instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n public findNext(term: string): boolean {\n if (!term || term.length === 0) {\n return false;\n }\n\n let result: ISearchResult;\n\n let startRow = this._terminal.buffer.ydisp;\n if (this._terminal.selectionManager.selectionEnd) {\n // Start from the selection end if there is a selection\n startRow = this._terminal.selectionManager.selectionEnd[1];\n }\n\n // Search from ydisp + 1 to end\n for (let y = startRow + 1; y < this._terminal.buffer.ybase + this._terminal.rows; y++) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n\n // Search from the top to the current ydisp\n if (!result) {\n for (let y = 0; y < startRow; y++) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n }\n\n // Set selection and scroll if a result was found\n return this._selectResult(result);\n }\n\n /**\n * Find the previous instance of the term, then scroll to and select it. If it\n * doesn't exist, do nothing.\n * @param term Tne search term.\n * @return Whether a result was found.\n */\n public findPrevious(term: string): boolean {\n if (!term || term.length === 0) {\n return false;\n }\n\n let result: ISearchResult;\n\n let startRow = this._terminal.buffer.ydisp;\n if (this._terminal.selectionManager.selectionStart) {\n // Start from the selection end if there is a selection\n startRow = this._terminal.selectionManager.selectionStart[1];\n }\n\n // Search from ydisp + 1 to end\n for (let y = startRow - 1; y >= 0; y--) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n\n // Search from the top to the current ydisp\n if (!result) {\n for (let y = this._terminal.buffer.ybase + this._terminal.rows - 1; y > startRow; y--) {\n result = this._findInLine(term, y);\n if (result) {\n break;\n }\n }\n }\n\n // Set selection and scroll if a result was found\n return this._selectResult(result);\n }\n\n /**\n * Searches a line for a search term.\n * @param term Tne search term.\n * @param y The line to search.\n * @return The search result if it was found.\n */\n private _findInLine(term: string, y: number): ISearchResult {\n const lowerStringLine = this._terminal.buffer.translateBufferLineToString(y, true).toLowerCase();\n const lowerTerm = term.toLowerCase();\n const searchIndex = lowerStringLine.indexOf(lowerTerm);\n if (searchIndex >= 0) {\n return {\n term,\n col: searchIndex,\n row: y\n };\n }\n }\n\n /**\n * Selects and scrolls to a result.\n * @param result The result to select.\n * @return Whethera result was selected.\n */\n private _selectResult(result: ISearchResult): boolean {\n if (!result) {\n return false;\n }\n this._terminal.selectionManager.setSelection(result.col, result.row, result.term.length);\n this._terminal.scrollLines(result.row - this._terminal.buffer.ydisp, false);\n return true;\n }\n}\n",null],"names":[],"mappings":"AEAA;;;ADiBA;AACA;AAAA;AAKA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA1Ha;;;;;;;ADZb;AAQA;AACA;AAIA;AACA;AAAA;AAIA;AACA;AAAA;AAIA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;;;"} \ No newline at end of file diff --git a/BTPanel/static/build/addons/search/search.min.js b/BTPanel/static/build/addons/search/search.min.js new file mode 100644 index 00000000..501da7ce --- /dev/null +++ b/BTPanel/static/build/addons/search/search.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).search=e()}}(function(){return function s(o,l,a){function h(i,e){if(!l[i]){if(!o[i]){var t="function"==typeof require&&require;if(!e&&t)return t(i,!0);if(f)return f(i,!0);var r=new Error("Cannot find module '"+i+"'");throw r.code="MODULE_NOT_FOUND",r}var n=l[i]={exports:{}};o[i][0].call(n.exports,function(e){return h(o[i][1][e]||e)},n,n.exports,s,o,l,a)}return l[i].exports}for(var f="function"==typeof require&&require,e=0;e?",n=(s.prototype.findNext=function(e,i){var t,r=i.incremental;if(!e||0===e.length)return this._terminal.clearSelection(),!1;var n=0,s=this._terminal.buffer.viewportY;if(this._terminal.hasSelection()){var o=this._terminal.getSelectionPosition();s=r?o.startRow:o.endRow,n=r?o.startColumn:o.endColumn}this._initLinesCache();for(var l=s,a=n;this._terminal.buffer.getLine(l).isWrapped;)l--,a+=this._terminal.cols;if(!(t=this._findInLine(e,l,a,i)))for(var h=s+1;h=this._terminal.cols&&(i+=Math.floor(a/this._terminal.cols),a%=this._terminal.cols),r.wholeWord&&!this._isWholeWord(a,l,e))return;for(var c=this._terminal.buffer.getLine(i),u=0;u= 0; + if (!isWindows) { + return; + } + this.on('lineFeed', function () { + var line = _this.buffer.lines.get(_this.buffer.ybase + _this.buffer.y - 1); + var lastChar = line[_this.cols - 1]; + if (lastChar[3] !== 32) { + var nextLine = _this.buffer.lines.get(_this.buffer.ybase + _this.buffer.y); + nextLine.isWrapped = true; + } + }); + }; +}); + +//# sourceMappingURL=winptyCompat.js.map diff --git a/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map b/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map new file mode 100644 index 00000000..826e6971 --- /dev/null +++ b/BTPanel/static/build/addons/winptyCompat/winptyCompat.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../src/addons/winptyCompat/winptyCompat.ts"],"names":[],"mappings":"AAQA,CAAC,UAAU,KAAK;IACd,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC;QAI1D,KAAK,CAAO,MAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC;QAIrE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC;QAIxC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC,CAAC,UAAC,QAAa;IACf,QAAQ,CAAC,SAAS,CAAC,gBAAgB,GAAG;QAAA,iBAyBrC;QAvBC,IAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1F,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,CAAC;QACT,CAAC;QAYD,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;YAClB,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACrC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAY,CAAC,CAAC,CAAC;gBACjC,IAAM,QAAQ,GAAG,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpE,QAAS,CAAC,SAAS,GAAG,IAAI,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","file":"winptyCompat.js","sourceRoot":"."} \ No newline at end of file diff --git a/BTPanel/static/build/addons/zmodem/demo/app.js b/BTPanel/static/build/addons/zmodem/demo/app.js new file mode 100644 index 00000000..31ecd7d2 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/app.js @@ -0,0 +1,87 @@ +var express = require('express'); +var app = express(); +var expressWs = require('express-ws')(app); +var os = require('os'); +var pty = require('node-pty'); + +var terminals = {}, + logs = {}; + +app.use('/build', express.static(__dirname + '/../../../../build')); +app.use('/demo', express.static(__dirname + '/../../../../demo')); +app.use('/zmodemjs', express.static(__dirname + '/../../../../node_modules/zmodem.js/dist')); + +app.get('/', function(req, res){ + res.sendFile(__dirname + '/index.html'); +}); + +app.get('/style.css', function(req, res){ + res.sendFile(__dirname + '/style.css'); +}); + +app.get('/main.js', function(req, res){ + res.sendFile(__dirname + '/main.js'); +}); + +app.post('/terminals', function (req, res) { + var cols = parseInt(req.query.cols), + rows = parseInt(req.query.rows), + term = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], { + encoding: null, + name: 'xterm-color', + cols: cols || 80, + rows: rows || 24, + cwd: process.env.PWD, + env: process.env + }); + + console.log('Created terminal with PID: ' + term.pid); + terminals[term.pid] = term; + logs[term.pid] = ''; + term.on('data', function(data) { + logs[term.pid] += data; + }); + res.send(term.pid.toString()); + res.end(); +}); + +app.post('/terminals/:pid/size', function (req, res) { + var pid = parseInt(req.params.pid), + cols = parseInt(req.query.cols), + rows = parseInt(req.query.rows), + term = terminals[pid]; + + term.resize(cols, rows); + console.log('Resized terminal ' + pid + ' to ' + cols + ' cols and ' + rows + ' rows.'); + res.end(); +}); + +app.ws('/terminals/:pid', function (ws, req) { + var term = terminals[parseInt(req.params.pid)]; + console.log('Connected to terminal ' + term.pid); + ws.send(logs[term.pid]); + + term.on('data', function(data) { + try { + ws.send(data); + } catch (ex) { + // The WebSocket is not open, ignore + } + }); + ws.on('message', function(msg) { + term.write(msg); + }); + ws.on('close', function () { + term.kill(); + console.log('Closed terminal ' + term.pid); + // Clean things up + delete terminals[term.pid]; + delete logs[term.pid]; + }); +}); + +var port = process.env.PORT || 3000, + host = os.platform() === 'win32' ? '127.0.0.1' : '0.0.0.0'; + +console.log('App listening to http://' + host + ':' + port); +app.listen(port, host); diff --git a/BTPanel/static/build/addons/zmodem/demo/index.html b/BTPanel/static/build/addons/zmodem/demo/index.html new file mode 100644 index 00000000..aee7742a --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/index.html @@ -0,0 +1,128 @@ + + + + xterm.js demo + + + + + + + + + + + + + + + + +

xterm.js: xterm, in the browser

+ +
+ +
+ + + + + + + + + +
+ +
+

Actions

+

+ + +

+
+
+

Options

+

+ +

+

+ +

+

+ +

+

+ +

+

+ +

+

+ +

+
+

Size

+
+
+ + +
+
+ + +
+
+
+
+

Attention: The demo is a barebones implementation and is designed for xterm.js evaluation purposes only. Exposing the demo to the public as is would introduce security risks for the host.

+

* ZMODEM file transfers are supported via an addon. To try it out, install lrzsz onto the remote peer, then run rz to send from your browser or sz <file> to send from the remote peer.

+ + + diff --git a/BTPanel/static/build/addons/zmodem/demo/main.js b/BTPanel/static/build/addons/zmodem/demo/main.js new file mode 100644 index 00000000..2a153fb5 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/demo/main.js @@ -0,0 +1,383 @@ +"use strict"; + +var term, + protocol, + socketURL, + socket, + pid; + +var terminalContainer = document.getElementById('terminal-container'), + actionElements = { + findNext: document.querySelector('#find-next'), + findPrevious: document.querySelector('#find-previous') + }, + optionElements = { + cursorBlink: document.querySelector('#option-cursor-blink'), + cursorStyle: document.querySelector('#option-cursor-style'), + scrollback: document.querySelector('#option-scrollback'), + tabstopwidth: document.querySelector('#option-tabstopwidth'), + bellStyle: document.querySelector('#option-bell-style') + }, + colsElement = document.getElementById('cols'), + rowsElement = document.getElementById('rows'); + +function setTerminalSize() { + var cols = parseInt(colsElement.value, 10); + var rows = parseInt(rowsElement.value, 10); + var viewportElement = document.querySelector('.xterm-viewport'); + var scrollBarWidth = viewportElement.offsetWidth - viewportElement.clientWidth; + var width = (cols * term.charMeasure.width + 20 /*room for scrollbar*/).toString() + 'px'; + var height = (rows * term.charMeasure.height).toString() + 'px'; + + terminalContainer.style.width = width; + terminalContainer.style.height = height; + term.resize(cols, rows); +} + +colsElement.addEventListener('change', setTerminalSize); +rowsElement.addEventListener('change', setTerminalSize); + +actionElements.findNext.addEventListener('keypress', function (e) { + if (e.key === "Enter") { + e.preventDefault(); + term.findNext(actionElements.findNext.value); + } +}); +actionElements.findPrevious.addEventListener('keypress', function (e) { + if (e.key === "Enter") { + e.preventDefault(); + term.findPrevious(actionElements.findPrevious.value); + } +}); + +optionElements.cursorBlink.addEventListener('change', function () { + term.setOption('cursorBlink', optionElements.cursorBlink.checked); +}); +optionElements.cursorStyle.addEventListener('change', function () { + term.setOption('cursorStyle', optionElements.cursorStyle.value); +}); +optionElements.bellStyle.addEventListener('change', function () { + term.setOption('bellStyle', optionElements.bellStyle.value); +}); +optionElements.scrollback.addEventListener('change', function () { + term.setOption('scrollback', parseInt(optionElements.scrollback.value, 10)); +}); +optionElements.tabstopwidth.addEventListener('change', function () { + term.setOption('tabStopWidth', parseInt(optionElements.tabstopwidth.value, 10)); +}); + +createTerminal(); + +function createTerminal() { + // Clean terminal + while (terminalContainer.children.length) { + terminalContainer.removeChild(terminalContainer.children[0]); + } + term = new Terminal({ + cursorBlink: optionElements.cursorBlink.checked, + scrollback: parseInt(optionElements.scrollback.value, 10), + tabStopWidth: parseInt(optionElements.tabstopwidth.value, 10) + }); + term.on('resize', function (size) { + if (!pid) { + return; + } + var cols = size.cols, + rows = size.rows, + url = '/terminals/' + pid + '/size?cols=' + cols + '&rows=' + rows; + + fetch(url, {method: 'POST'}); + }); + protocol = (location.protocol === 'https:') ? 'wss://' : 'ws://'; + socketURL = protocol + location.hostname + ((location.port) ? (':' + location.port) : '') + '/terminals/'; + + term.open(terminalContainer); + term.fit(); + + // fit is called within a setTimeout, cols and rows need this. + setTimeout(function () { + colsElement.value = term.cols; + rowsElement.value = term.rows; + + // Set terminal size again to set the specific dimensions on the demo + setTerminalSize(); + + fetch('/terminals?cols=' + term.cols + '&rows=' + term.rows, {method: 'POST'}).then(function (res) { + + res.text().then(function (pid) { + window.pid = pid; + socketURL += pid; + socket = new WebSocket(socketURL); + socket.onopen = runRealTerminal; + socket.onclose = runFakeTerminal; + socket.onerror = runFakeTerminal; + + term.zmodemAttach(socket, { + noTerminalWriteOutsideSession: true, + } ); + + term.on("zmodemRetract", () => { + start_form.style.display = "none"; + start_form.onsubmit = null; + }); + + term.on("zmodemDetect", (detection) => { + function do_zmodem() { + term.detach(); + let zsession = detection.confirm(); + + var promise; + + if (zsession.type === "receive") { + promise = _handle_receive_session(zsession); + } + else { + promise = _handle_send_session(zsession); + } + + promise.catch( console.error.bind(console) ).then( () => { + term.attach(socket); + } ); + } + + if (_auto_zmodem()) { + do_zmodem(); + } + else { + start_form.style.display = ""; + start_form.onsubmit = function(e) { + start_form.style.display = "none"; + + if (document.getElementById("zmstart_yes").checked) { + do_zmodem(); + } + else { + detection.deny(); + } + }; + } + }); + }); + }); + }, 0); +} + +//---------------------------------------------------------------------- +// UI STUFF + +function _show_file_info(xfer) { + var file_info = xfer.get_details(); + + document.getElementById("name").textContent = file_info.name; + document.getElementById("size").textContent = file_info.size; + document.getElementById("mtime").textContent = file_info.mtime; + document.getElementById("files_remaining").textContent = file_info.files_remaining; + document.getElementById("bytes_remaining").textContent = file_info.bytes_remaining; + + document.getElementById("mode").textContent = "0" + file_info.mode.toString(8); + + var xfer_opts = xfer.get_options(); + ["conversion", "management", "transport", "sparse"].forEach( (lbl) => { + document.getElementById(`zfile_${lbl}`).textContent = xfer_opts[lbl]; + } ); + + document.getElementById("zm_file").style.display = ""; +} +function _hide_file_info() { + document.getElementById("zm_file").style.display = "none"; +} + +function _save_to_disk(xfer, buffer) { + return Zmodem.Browser.save_to_disk(buffer, xfer.get_details().name); +} + +var skipper_button = document.getElementById("zm_progress_skipper"); +var skipper_button_orig_text = skipper_button.textContent; + +function _show_progress() { + skipper_button.disabled = false; + skipper_button.textContent = skipper_button_orig_text; + + document.getElementById("bytes_received").textContent = 0; + document.getElementById("percent_received").textContent = 0; + + document.getElementById("zm_progress").style.display = ""; +} + +function _update_progress(xfer) { + var total_in = xfer.get_offset(); + + document.getElementById("bytes_received").textContent = total_in; + + var percent_received = 100 * total_in / xfer.get_details().size; + document.getElementById("percent_received").textContent = percent_received.toFixed(2); +} + +function _hide_progress() { + document.getElementById("zm_progress").style.display = "none"; +} + +var start_form = document.getElementById("zm_start"); + +function _auto_zmodem() { + return document.getElementById("zmodem-auto").checked; +} + +// END UI STUFF +//---------------------------------------------------------------------- + +function _handle_receive_session(zsession) { + zsession.on("offer", function(xfer) { + current_receive_xfer = xfer; + + _show_file_info(xfer); + + var offer_form = document.getElementById("zm_offer"); + + function on_form_submit() { + offer_form.style.display = "none"; + + //START + //if (offer_form.zmaccept.value) { + if (_auto_zmodem() || document.getElementById("zmaccept_yes").checked) { + _show_progress(); + + var FILE_BUFFER = []; + xfer.on("input", (payload) => { + _update_progress(xfer); + FILE_BUFFER.push( new Uint8Array(payload) ); + }); + xfer.accept().then( + () => { + _save_to_disk(xfer, FILE_BUFFER); + }, + console.error.bind(console) + ); + } + else { + xfer.skip(); + } + //END + } + + if (_auto_zmodem()) { + on_form_submit(); + } + else { + offer_form.onsubmit = on_form_submit; + offer_form.style.display = ""; + } + } ); + + var promise = new Promise( (res) => { + zsession.on("session_end", () => { + _hide_file_info(); + _hide_progress(); + res(); + } ); + } ); + + zsession.start(); + + return promise; +} + +function _handle_send_session(zsession) { + var choose_form = document.getElementById("zm_choose"); + choose_form.style.display = ""; + + var file_el = document.getElementById("zm_files"); + + var promise = new Promise( (res) => { + file_el.onchange = function(e) { + choose_form.style.display = "none"; + + var files_obj = file_el.files; + + Zmodem.Browser.send_files( + zsession, + files_obj, + { + on_offer_response(obj, xfer) { + if (xfer) _show_progress(); + //console.log("offer", xfer ? "accepted" : "skipped"); + }, + on_progress(obj, xfer) { + _update_progress(xfer); + }, + on_file_complete(obj) { + //console.log("COMPLETE", obj); + _hide_progress(); + }, + } + ).then(_hide_progress).then( + zsession.close.bind(zsession), + console.error.bind(console) + ).then( () => { + _hide_file_info(); + _hide_progress(); + res(); + } ); + }; + } ); + + return promise; +} + +//This is here to allow canceling of an in-progress ZMODEM transfer. +var current_receive_xfer; + +//Called from HTML directly. +function skip_current_file() { + current_receive_xfer.skip(); + + skipper_button.disabled = true; + skipper_button.textContent = "Waiting for server to acknowledge skip …"; +} + +function runRealTerminal() { + term.attach(socket); + + term._initialized = true; +} + +function runFakeTerminal() { + if (term._initialized) { + return; + } + + term._initialized = true; + + var shellprompt = '$ '; + + term.prompt = function () { + term.write('\r\n' + shellprompt); + }; + + term.writeln('Welcome to xterm.js'); + term.writeln('This is a local terminal emulation, without a real terminal in the back-end.'); + term.writeln('Type some keys and commands to play around.'); + term.writeln(''); + term.prompt(); + + term.on('key', function (key, ev) { + var printable = ( + !ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey + ); + + if (ev.keyCode == 13) { + term.prompt(); + } else if (ev.keyCode == 8) { + // Do not delete the prompt + if (term.x > 2) { + term.write('\b \b'); + } + } else if (printable) { + term.write(key); + } + }); + + term.on('paste', function (data, ev) { + term.write(data); + }); +} diff --git a/BTPanel/static/build/addons/zmodem/zmodem.js b/BTPanel/static/build/addons/zmodem/zmodem.js new file mode 100644 index 00000000..1bab2976 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/zmodem.js @@ -0,0 +1,108 @@ +/** + * + * Allow xterm.js to handle ZMODEM uploads and downloads. + * + * This addon is a wrapper around zmodem.js. It adds the following to the + * Terminal class: + * + * - function `zmodemAttach(, )` - creates a Zmodem.Sentry + * on the passed WebSocket object. The Object passed is optional and + * can contain: + * - noTerminalWriteOutsideSession: Suppress writes from the Sentry + * object to the Terminal while there is no active Session. This + * is necessary for compatibility with, for example, the + * `attach.js` addon. + * + * - event `zmodemDetect` - fired on Zmodem.Sentry’s `on_detect` callback. + * Passes the zmodem.js Detection object. + * + * - event `zmodemRetract` - fired on Zmodem.Sentry’s `on_retract` callback. + * + * You’ll need to provide logic to handle uploads and downloads. + * See zmodem.js’s documentation for more details. + * + * **IMPORTANT:** After you confirm() a zmodem.js Detection, if you have + * used the `attach` or `terminado` addons, you’ll need to suspend their + * operation for the duration of the ZMODEM session. (The demo does this + * via `detach()` and a re-`attach()`.) + */ +(function (addon) { + if (typeof exports === 'object' && typeof module === 'object') { + /* + * CommonJS environment + */ + module.exports = addon(require('../../Terminal').Terminal); + } else if (typeof define == 'function') { + /* + * Require.js is available + */ + define(['../../xterm'], addon); + } else { + /* + * Plain browser environment + */ + addon(window.Terminal); + } +})(function _zmodemAddon(Terminal) { + Object.assign( + Terminal.prototype, + { + zmodemAttach: function zmodemAttach(ws, opts) { + var term = this; + + if (!opts) opts = {}; + + var senderFunc = function _ws_sender_func(octets) { + ws.send( new Uint8Array(octets) ); + }; + + var zsentry; + + function _shouldWrite() { + return !!zsentry.get_confirmed_session() || !opts.noTerminalWriteOutsideSession; + } + + zsentry = new Zmodem.Sentry( { + to_terminal: function _to_terminal(octets) { + if (_shouldWrite()) { + term.write( + String.fromCharCode.apply(String, octets) + ); + } + }, + + sender: senderFunc, + + on_retract: function _on_retract() { + term.emit("zmodemRetract"); + }, + + 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. + if (typeof evt.data === "string") { + if (_shouldWrite()) { + term.write(evt.data); + } + } + else { + zsentry.consume(evt.data); + } + } + + ws.binaryType = "arraybuffer"; + ws.addEventListener("message", handleWSMessage); + }, + + zmodemBrowser: Zmodem.Browser, + } + ); +}); diff --git a/BTPanel/static/build/addons/zmodem/zmodem.min.js b/BTPanel/static/build/addons/zmodem/zmodem.min.js new file mode 100644 index 00000000..298496e0 --- /dev/null +++ b/BTPanel/static/build/addons/zmodem/zmodem.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).zmodem=e()}}(function(){return function i(f,u,d){function a(n,e){if(!u[n]){if(!f[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(s)return s(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[n]={exports:{}};f[n][0].call(o.exports,function(e){return a(f[n][1][e]||e)},o,o.exports,i,f,u,d)}return u[n].exports}for(var s="function"==typeof require&&require,e=0;e this._terminal.rows; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Buffer.prototype, "isCursorInViewport", { + get: function () { + var absoluteY = this.ybase + this.y; + var relativeY = absoluteY - this.ydisp; + return (relativeY >= 0 && relativeY < this._terminal.rows); + }, + enumerable: true, + configurable: true + }); + Buffer.prototype._getCorrectBufferLength = function (rows) { + if (!this._hasScrollback) { + return rows; + } + var correctBufferLength = rows + this._terminal.options.scrollback; + return correctBufferLength > exports.MAX_BUFFER_SIZE ? exports.MAX_BUFFER_SIZE : correctBufferLength; + }; + Buffer.prototype.fillViewportRows = function () { + if (this._lines.length === 0) { + var i = this._terminal.rows; + while (i--) { + this.lines.push(this._terminal.blankLine()); + } + } + }; + Buffer.prototype.clear = function () { + this.ydisp = 0; + this.ybase = 0; + this.y = 0; + this.x = 0; + this._lines = new CircularList_1.CircularList(this._getCorrectBufferLength(this._terminal.rows)); + this.scrollTop = 0; + this.scrollBottom = this._terminal.rows - 1; + this.setupTabStops(); + }; + Buffer.prototype.resize = function (newCols, newRows) { + var newMaxLength = this._getCorrectBufferLength(newRows); + if (newMaxLength > this._lines.maxLength) { + this._lines.maxLength = newMaxLength; + } + if (this._lines.length > 0) { + if (this._terminal.cols < newCols) { + var ch = [this._terminal.defAttr, ' ', 1, 32]; + for (var i = 0; i < this._lines.length; i++) { + if (this._lines.get(i) === undefined) { + this._lines.set(i, this._terminal.blankLine(undefined, undefined, newCols)); + } + while (this._lines.get(i).length < newCols) { + this._lines.get(i).push(ch); + } + } + } + var addToY = 0; + if (this._terminal.rows < newRows) { + for (var y = this._terminal.rows; y < newRows; y++) { + if (this._lines.length < newRows + this.ybase) { + if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) { + this.ybase--; + addToY++; + if (this.ydisp > 0) { + this.ydisp--; + } + } + else { + this._lines.push(this._terminal.blankLine(undefined, undefined, newCols)); + } + } + } + } + else { + for (var y = this._terminal.rows; y > newRows; y--) { + if (this._lines.length > newRows + this.ybase) { + if (this._lines.length > this.ybase + this.y + 1) { + this._lines.pop(); + } + else { + this.ybase++; + this.ydisp++; + } + } + } + } + if (newMaxLength < this._lines.maxLength) { + var amountToTrim = this._lines.length - newMaxLength; + if (amountToTrim > 0) { + this._lines.trimStart(amountToTrim); + this.ybase = Math.max(this.ybase - amountToTrim, 0); + this.ydisp = Math.max(this.ydisp - amountToTrim, 0); + } + this._lines.maxLength = newMaxLength; + } + if (this.y >= newRows) { + this.y = newRows - 1; + } + if (addToY) { + this.y += addToY; + } + if (this.x >= newCols) { + this.x = newCols - 1; + } + this.scrollTop = 0; + } + this.scrollBottom = newRows - 1; + }; + Buffer.prototype.translateBufferLineToString = function (lineIndex, trimRight, startCol, endCol) { + if (startCol === void 0) { startCol = 0; } + if (endCol === void 0) { endCol = null; } + var lineString = ''; + var line = this.lines.get(lineIndex); + if (!line) { + return ''; + } + var startIndex = startCol; + endCol = endCol || line.length; + var endIndex = endCol; + for (var i = 0; i < line.length; i++) { + var char = line[i]; + lineString += char[exports.CHAR_DATA_CHAR_INDEX]; + if (char[exports.CHAR_DATA_WIDTH_INDEX] === 0) { + if (startCol >= i) { + startIndex--; + } + if (endCol >= i) { + endIndex--; + } + } + else { + if (char[exports.CHAR_DATA_CHAR_INDEX].length > 1) { + if (startCol > i) { + startIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1; + } + if (endCol > i) { + endIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1; + } + } + } + } + if (trimRight) { + var rightWhitespaceIndex = lineString.search(/\s+$/); + if (rightWhitespaceIndex !== -1) { + endIndex = Math.min(endIndex, rightWhitespaceIndex); + } + if (endIndex <= startIndex) { + return ''; + } + } + return lineString.substring(startIndex, endIndex); + }; + Buffer.prototype.setupTabStops = function (i) { + if (i != null) { + if (!this.tabs[i]) { + i = this.prevStop(i); + } + } + else { + this.tabs = {}; + i = 0; + } + for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) { + this.tabs[i] = true; + } + }; + Buffer.prototype.prevStop = function (x) { + if (x == null) { + x = this.x; + } + while (!this.tabs[--x] && x > 0) + ; + return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x; + }; + Buffer.prototype.nextStop = function (x) { + if (x == null) { + x = this.x; + } + while (!this.tabs[++x] && x < this._terminal.cols) + ; + return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x; + }; + return Buffer; +}()); +exports.Buffer = Buffer; + + + +},{"./utils/CircularList":30}],2:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("./Buffer"); +var EventEmitter_1 = require("./EventEmitter"); +var BufferSet = (function (_super) { + __extends(BufferSet, _super); + function BufferSet(_terminal) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._normal = new Buffer_1.Buffer(_this._terminal, true); + _this._normal.fillViewportRows(); + _this._alt = new Buffer_1.Buffer(_this._terminal, false); + _this._activeBuffer = _this._normal; + _this.setupTabStops(); + return _this; + } + Object.defineProperty(BufferSet.prototype, "alt", { + get: function () { + return this._alt; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BufferSet.prototype, "active", { + get: function () { + return this._activeBuffer; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(BufferSet.prototype, "normal", { + get: function () { + return this._normal; + }, + enumerable: true, + configurable: true + }); + BufferSet.prototype.activateNormalBuffer = function () { + this._alt.clear(); + this._activeBuffer = this._normal; + this.emit('activate', this._normal); + }; + BufferSet.prototype.activateAltBuffer = function () { + this._alt.fillViewportRows(); + this._activeBuffer = this._alt; + this.emit('activate', this._alt); + }; + BufferSet.prototype.resize = function (newCols, newRows) { + this._normal.resize(newCols, newRows); + this._alt.resize(newCols, newRows); + }; + BufferSet.prototype.setupTabStops = function (i) { + this._normal.setupTabStops(i); + this._alt.setupTabStops(i); + }; + return BufferSet; +}(EventEmitter_1.EventEmitter)); +exports.BufferSet = BufferSet; + + + +},{"./Buffer":1,"./EventEmitter":7}],3:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.wcwidth = (function (opts) { + var COMBINING_BMP = [ + [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489], + [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], + [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603], + [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], + [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], + [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A], + [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], + [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], + [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], + [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], + [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], + [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], + [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], + [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], + [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], + [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], + [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], + [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], + [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], + [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], + [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], + [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], + [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], + [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], + [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], + [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], + [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], + [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], + [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], + [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F], + [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], + [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD], + [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], + [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], + [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], + [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], + [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], + [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], + [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], + [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F], + [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], + [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], + [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB], + ]; + var COMBINING_HIGH = [ + [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F], + [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169], + [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD], + [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F], + [0xE0100, 0xE01EF] + ]; + function bisearch(ucs, data) { + var min = 0; + var max = data.length - 1; + var mid; + if (ucs < data[0][0] || ucs > data[max][1]) + return false; + while (max >= min) { + mid = (min + max) >> 1; + if (ucs > data[mid][1]) + min = mid + 1; + else if (ucs < data[mid][0]) + max = mid - 1; + else + return true; + } + return false; + } + function wcwidthBMP(ucs) { + if (ucs === 0) + return opts.nul; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return opts.control; + if (bisearch(ucs, COMBINING_BMP)) + return 0; + if (isWideBMP(ucs)) { + return 2; + } + return 1; + } + function isWideBMP(ucs) { + return (ucs >= 0x1100 && (ucs <= 0x115f || + ucs === 0x2329 || + ucs === 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) || + (ucs >= 0xac00 && ucs <= 0xd7a3) || + (ucs >= 0xf900 && ucs <= 0xfaff) || + (ucs >= 0xfe10 && ucs <= 0xfe19) || + (ucs >= 0xfe30 && ucs <= 0xfe6f) || + (ucs >= 0xff00 && ucs <= 0xff60) || + (ucs >= 0xffe0 && ucs <= 0xffe6))); + } + function wcwidthHigh(ucs) { + if (bisearch(ucs, COMBINING_HIGH)) + return 0; + if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) { + return 2; + } + return 1; + } + var control = opts.control | 0; + var table = null; + function init_table() { + var CODEPOINTS = 65536; + var BITWIDTH = 2; + var ITEMSIZE = 32; + var CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE; + var CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH; + table = (typeof Uint32Array === 'undefined') + ? new Array(CONTAINERSIZE) + : new Uint32Array(CONTAINERSIZE); + for (var i = 0; i < CONTAINERSIZE; ++i) { + var num = 0; + var pos = CODEPOINTS_PER_ITEM; + while (pos--) + num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos); + table[i] = num; + } + return table; + } + return function (num) { + num = num | 0; + if (num < 32) + return control | 0; + if (num < 127) + return 1; + var t = table || init_table(); + if (num < 65536) + return t[num >> 4] >> ((num & 15) << 1) & 3; + return wcwidthHigh(num); + }; +})({ nul: 0, control: 0 }); + + + +},{}],4:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CHARSETS = {}; +exports.DEFAULT_CHARSET = exports.CHARSETS['B']; +exports.CHARSETS['0'] = { + '`': '\u25c6', + 'a': '\u2592', + 'b': '\u0009', + 'c': '\u000c', + 'd': '\u000d', + 'e': '\u000a', + 'f': '\u00b0', + 'g': '\u00b1', + 'h': '\u2424', + 'i': '\u000b', + 'j': '\u2518', + 'k': '\u2510', + 'l': '\u250c', + 'm': '\u2514', + 'n': '\u253c', + 'o': '\u23ba', + 'p': '\u23bb', + 'q': '\u2500', + 'r': '\u23bc', + 's': '\u23bd', + 't': '\u251c', + 'u': '\u2524', + 'v': '\u2534', + 'w': '\u252c', + 'x': '\u2502', + 'y': '\u2264', + 'z': '\u2265', + '{': '\u03c0', + '|': '\u2260', + '}': '\u00a3', + '~': '\u00b7' +}; +exports.CHARSETS['A'] = { + '#': '£' +}; +exports.CHARSETS['B'] = null; +exports.CHARSETS['4'] = { + '#': '£', + '@': '¾', + '[': 'ij', + '\\': '½', + ']': '|', + '{': '¨', + '|': 'f', + '}': '¼', + '~': '´' +}; +exports.CHARSETS['C'] = + exports.CHARSETS['5'] = { + '[': 'Ä', + '\\': 'Ö', + ']': 'Å', + '^': 'Ü', + '`': 'é', + '{': 'ä', + '|': 'ö', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['R'] = { + '#': '£', + '@': 'à', + '[': '°', + '\\': 'ç', + ']': '§', + '{': 'é', + '|': 'ù', + '}': 'è', + '~': '¨' +}; +exports.CHARSETS['Q'] = { + '@': 'à', + '[': 'â', + '\\': 'ç', + ']': 'ê', + '^': 'î', + '`': 'ô', + '{': 'é', + '|': 'ù', + '}': 'è', + '~': 'û' +}; +exports.CHARSETS['K'] = { + '@': '§', + '[': 'Ä', + '\\': 'Ö', + ']': 'Ü', + '{': 'ä', + '|': 'ö', + '}': 'ü', + '~': 'ß' +}; +exports.CHARSETS['Y'] = { + '#': '£', + '@': '§', + '[': '°', + '\\': 'ç', + ']': 'é', + '`': 'ù', + '{': 'à', + '|': 'ò', + '}': 'è', + '~': 'ì' +}; +exports.CHARSETS['E'] = + exports.CHARSETS['6'] = { + '@': 'Ä', + '[': 'Æ', + '\\': 'Ø', + ']': 'Å', + '^': 'Ü', + '`': 'ä', + '{': 'æ', + '|': 'ø', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['Z'] = { + '#': '£', + '@': '§', + '[': '¡', + '\\': 'Ñ', + ']': '¿', + '{': '°', + '|': 'ñ', + '}': 'ç' +}; +exports.CHARSETS['H'] = + exports.CHARSETS['7'] = { + '@': 'É', + '[': 'Ä', + '\\': 'Ö', + ']': 'Å', + '^': 'Ü', + '`': 'é', + '{': 'ä', + '|': 'ö', + '}': 'å', + '~': 'ü' + }; +exports.CHARSETS['='] = { + '#': 'ù', + '@': 'à', + '[': 'é', + '\\': 'ç', + ']': 'ê', + '^': 'î', + '_': 'è', + '`': 'ô', + '{': 'ä', + '|': 'ö', + '}': 'ü', + '~': 'û' +}; + + + +},{}],5:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var CompositionHelper = (function () { + function CompositionHelper(textarea, compositionView, terminal) { + this.textarea = textarea; + this.compositionView = compositionView; + this.terminal = terminal; + this.isComposing = false; + this.isSendingComposition = false; + this.compositionPosition = { start: null, end: null }; + } + CompositionHelper.prototype.compositionstart = function () { + this.isComposing = true; + this.compositionPosition.start = this.textarea.value.length; + this.compositionView.textContent = ''; + this.compositionView.classList.add('active'); + }; + CompositionHelper.prototype.compositionupdate = function (ev) { + var _this = this; + this.compositionView.textContent = ev.data; + this.updateCompositionElements(); + setTimeout(function () { + _this.compositionPosition.end = _this.textarea.value.length; + }, 0); + }; + CompositionHelper.prototype.compositionend = function () { + this.finalizeComposition(true); + }; + CompositionHelper.prototype.keydown = function (ev) { + if (this.isComposing || this.isSendingComposition) { + if (ev.keyCode === 229) { + return false; + } + else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) { + return false; + } + else { + this.finalizeComposition(false); + } + } + if (ev.keyCode === 229) { + this.handleAnyTextareaChanges(); + return false; + } + return true; + }; + CompositionHelper.prototype.finalizeComposition = function (waitForPropogation) { + var _this = this; + this.compositionView.classList.remove('active'); + this.isComposing = false; + this.clearTextareaPosition(); + if (!waitForPropogation) { + this.isSendingComposition = false; + var input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end); + this.terminal.handler(input); + } + else { + var currentCompositionPosition_1 = { + start: this.compositionPosition.start, + end: this.compositionPosition.end, + }; + this.isSendingComposition = true; + setTimeout(function () { + if (_this.isSendingComposition) { + _this.isSendingComposition = false; + var input = void 0; + if (_this.isComposing) { + input = _this.textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end); + } + else { + input = _this.textarea.value.substring(currentCompositionPosition_1.start); + } + _this.terminal.handler(input); + } + }, 0); + } + }; + CompositionHelper.prototype.handleAnyTextareaChanges = function () { + var _this = this; + var oldValue = this.textarea.value; + setTimeout(function () { + if (!_this.isComposing) { + var newValue = _this.textarea.value; + var diff = newValue.replace(oldValue, ''); + if (diff.length > 0) { + _this.terminal.handler(diff); + } + } + }, 0); + }; + CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) { + var _this = this; + if (!this.isComposing) { + return; + } + if (this.terminal.buffer.isCursorInViewport) { + var cellHeight = Math.ceil(this.terminal.charMeasure.height * this.terminal.options.lineHeight); + var cursorTop = this.terminal.buffer.y * cellHeight; + var cursorLeft = this.terminal.buffer.x * this.terminal.charMeasure.width; + this.compositionView.style.left = cursorLeft + 'px'; + this.compositionView.style.top = cursorTop + 'px'; + this.compositionView.style.height = cellHeight + 'px'; + this.compositionView.style.lineHeight = cellHeight + 'px'; + var compositionViewBounds = this.compositionView.getBoundingClientRect(); + this.textarea.style.left = cursorLeft + 'px'; + this.textarea.style.top = cursorTop + 'px'; + this.textarea.style.width = compositionViewBounds.width + 'px'; + this.textarea.style.height = compositionViewBounds.height + 'px'; + this.textarea.style.lineHeight = compositionViewBounds.height + 'px'; + } + if (!dontRecurse) { + setTimeout(function () { return _this.updateCompositionElements(true); }, 0); + } + }; + ; + CompositionHelper.prototype.clearTextareaPosition = function () { + this.textarea.style.left = ''; + this.textarea.style.top = ''; + }; + ; + return CompositionHelper; +}()); +exports.CompositionHelper = CompositionHelper; + + + +},{}],6:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var C0; +(function (C0) { + C0.NUL = '\x00'; + C0.SOH = '\x01'; + C0.STX = '\x02'; + C0.ETX = '\x03'; + C0.EOT = '\x04'; + C0.ENQ = '\x05'; + C0.ACK = '\x06'; + C0.BEL = '\x07'; + C0.BS = '\x08'; + C0.HT = '\x09'; + C0.LF = '\x0a'; + C0.VT = '\x0b'; + C0.FF = '\x0c'; + C0.CR = '\x0d'; + C0.SO = '\x0e'; + C0.SI = '\x0f'; + C0.DLE = '\x10'; + C0.DC1 = '\x11'; + C0.DC2 = '\x12'; + C0.DC3 = '\x13'; + C0.DC4 = '\x14'; + C0.NAK = '\x15'; + C0.SYN = '\x16'; + C0.ETB = '\x17'; + C0.CAN = '\x18'; + C0.EM = '\x19'; + C0.SUB = '\x1a'; + C0.ESC = '\x1b'; + C0.FS = '\x1c'; + C0.GS = '\x1d'; + C0.RS = '\x1e'; + C0.US = '\x1f'; + C0.SP = '\x20'; + C0.DEL = '\x7f'; +})(C0 = exports.C0 || (exports.C0 = {})); +; + + + +},{}],7:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter = (function () { + function EventEmitter() { + this._events = this._events || {}; + } + EventEmitter.prototype.on = function (type, listener) { + this._events[type] = this._events[type] || []; + this._events[type].push(listener); + }; + EventEmitter.prototype.off = function (type, listener) { + if (!this._events[type]) { + return; + } + var obj = this._events[type]; + var i = obj.length; + while (i--) { + if (obj[i] === listener || obj[i].listener === listener) { + obj.splice(i, 1); + return; + } + } + }; + EventEmitter.prototype.removeAllListeners = function (type) { + if (this._events[type]) { + delete this._events[type]; + } + }; + EventEmitter.prototype.once = function (type, listener) { + function on() { + var args = Array.prototype.slice.call(arguments); + this.off(type, on); + listener.apply(this, args); + } + on.listener = listener; + this.on(type, on); + }; + EventEmitter.prototype.emit = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (!this._events[type]) { + return; + } + var obj = this._events[type]; + for (var i = 0; i < obj.length; i++) { + obj[i].apply(this, args); + } + }; + EventEmitter.prototype.listeners = function (type) { + return this._events[type] || []; + }; + EventEmitter.prototype.destroy = function () { + this._events = {}; + }; + return EventEmitter; +}()); +exports.EventEmitter = EventEmitter; + + + +},{}],8:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EscapeSequences_1 = require("./EscapeSequences"); +var Charsets_1 = require("./Charsets"); +var Buffer_1 = require("./Buffer"); +var Types_1 = require("./renderer/Types"); +var CharWidth_1 = require("./CharWidth"); +var InputHandler = (function () { + function InputHandler(_terminal) { + this._terminal = _terminal; + } + InputHandler.prototype.addChar = function (char, code) { + if (char >= ' ') { + var ch_width = CharWidth_1.wcwidth(code); + if (this._terminal.charset && this._terminal.charset[char]) { + char = this._terminal.charset[char]; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + if (!ch_width && this._terminal.buffer.x) { + if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) { + if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_WIDTH_INDEX]) { + if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][Buffer_1.CHAR_DATA_CHAR_INDEX] += char; + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0); + } + } + else { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_CHAR_INDEX] += char; + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0); + } + this._terminal.updateRange(this._terminal.buffer.y); + } + return; + } + if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) { + if (this._terminal.wraparoundMode) { + this._terminal.buffer.x = 0; + this._terminal.buffer.y++; + if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) { + this._terminal.buffer.y--; + this._terminal.scroll(true); + } + else { + this._terminal.buffer.lines.get(this._terminal.buffer.y).isWrapped = true; + } + } + else { + if (ch_width === 2) + return; + } + } + row = this._terminal.buffer.y + this._terminal.buffer.ybase; + if (this._terminal.insertMode) { + for (var moves = 0; moves < ch_width; ++moves) { + var removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop(); + if (removed[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0 + && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] + && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]; + } + this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]); + } + } + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)]; + this._terminal.buffer.x++; + this._terminal.updateRange(this._terminal.buffer.y); + if (ch_width === 2) { + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined]; + this._terminal.buffer.x++; + } + } + }; + InputHandler.prototype.bell = function () { + this._terminal.bell(); + }; + InputHandler.prototype.lineFeed = function () { + if (this._terminal.convertEol) { + this._terminal.buffer.x = 0; + } + this._terminal.buffer.y++; + if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) { + this._terminal.buffer.y--; + this._terminal.scroll(); + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + this._terminal.emit('lineFeed'); + }; + InputHandler.prototype.carriageReturn = function () { + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.backspace = function () { + if (this._terminal.buffer.x > 0) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.tab = function () { + this._terminal.buffer.x = this._terminal.buffer.nextStop(); + }; + InputHandler.prototype.shiftOut = function () { + this._terminal.setgLevel(1); + }; + InputHandler.prototype.shiftIn = function () { + this._terminal.setgLevel(0); + }; + InputHandler.prototype.insertChars = function (params) { + var param = params[0]; + if (param < 1) + param = 1; + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j = this._terminal.buffer.x; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param-- && j < this._terminal.cols) { + this._terminal.buffer.lines.get(row).splice(j++, 0, ch); + this._terminal.buffer.lines.get(row).pop(); + } + }; + InputHandler.prototype.cursorUp = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y -= param; + if (this._terminal.buffer.y < 0) { + this._terminal.buffer.y = 0; + } + }; + InputHandler.prototype.cursorDown = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.cursorForward = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x += param; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.cursorBackward = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + this._terminal.buffer.x -= param; + if (this._terminal.buffer.x < 0) { + this._terminal.buffer.x = 0; + } + }; + InputHandler.prototype.cursorNextLine = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.cursorPrecedingLine = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y -= param; + if (this._terminal.buffer.y < 0) { + this._terminal.buffer.y = 0; + } + this._terminal.buffer.x = 0; + }; + InputHandler.prototype.cursorCharAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x = param - 1; + }; + InputHandler.prototype.cursorPosition = function (params) { + var col; + var row = params[0] - 1; + if (params.length >= 2) { + col = params[1] - 1; + } + else { + col = 0; + } + if (row < 0) { + row = 0; + } + else if (row >= this._terminal.rows) { + row = this._terminal.rows - 1; + } + if (col < 0) { + col = 0; + } + else if (col >= this._terminal.cols) { + col = this._terminal.cols - 1; + } + this._terminal.buffer.x = col; + this._terminal.buffer.y = row; + }; + InputHandler.prototype.cursorForwardTab = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.x = this._terminal.buffer.nextStop(); + } + }; + InputHandler.prototype.eraseInDisplay = function (params) { + var j; + switch (params[0]) { + case 0: + this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y); + j = this._terminal.buffer.y + 1; + for (; j < this._terminal.rows; j++) { + this._terminal.eraseLine(j); + } + break; + case 1: + this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y); + j = this._terminal.buffer.y; + while (j--) { + this._terminal.eraseLine(j); + } + break; + case 2: + j = this._terminal.rows; + while (j--) + this._terminal.eraseLine(j); + break; + case 3: + var scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows; + if (scrollBackSize > 0) { + this._terminal.buffer.lines.trimStart(scrollBackSize); + this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0); + this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0); + this._terminal.emit('scroll', 0); + } + break; + } + }; + InputHandler.prototype.eraseInLine = function (params) { + switch (params[0]) { + case 0: + this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y); + break; + case 1: + this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y); + break; + case 2: + this._terminal.eraseLine(this._terminal.buffer.y); + break; + } + }; + InputHandler.prototype.insertLines = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var scrollBottomRowsOffset = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom; + var scrollBottomAbsolute = this._terminal.rows - 1 + this._terminal.buffer.ybase - scrollBottomRowsOffset + 1; + while (param--) { + this._terminal.buffer.lines.splice(scrollBottomAbsolute - 1, 1); + this._terminal.buffer.lines.splice(row, 0, this._terminal.blankLine(true)); + } + this._terminal.updateRange(this._terminal.buffer.y); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.deleteLines = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j; + j = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom; + j = this._terminal.rows - 1 + this._terminal.buffer.ybase - j; + while (param--) { + this._terminal.buffer.lines.splice(row, 1); + this._terminal.buffer.lines.splice(j, 0, this._terminal.blankLine(true)); + } + this._terminal.updateRange(this._terminal.buffer.y); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.deleteChars = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param--) { + this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 1); + this._terminal.buffer.lines.get(row).push(ch); + } + this._terminal.updateRange(this._terminal.buffer.y); + }; + InputHandler.prototype.scrollUp = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 1); + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 0, this._terminal.blankLine()); + } + this._terminal.updateRange(this._terminal.buffer.scrollTop); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.scrollDown = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 1); + this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 0, this._terminal.blankLine()); + } + this._terminal.updateRange(this._terminal.buffer.scrollTop); + this._terminal.updateRange(this._terminal.buffer.scrollBottom); + }; + InputHandler.prototype.eraseChars = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + var row = this._terminal.buffer.y + this._terminal.buffer.ybase; + var j = this._terminal.buffer.x; + var ch = [this._terminal.eraseAttr(), ' ', 1, 32]; + while (param-- && j < this._terminal.cols) { + this._terminal.buffer.lines.get(row)[j++] = ch; + } + }; + InputHandler.prototype.cursorBackwardTab = function (params) { + var param = params[0] || 1; + while (param--) { + this._terminal.buffer.x = this._terminal.buffer.prevStop(); + } + }; + InputHandler.prototype.charPosAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x = param - 1; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.HPositionRelative = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.x += param; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.repeatPrecedingCharacter = function (params) { + var param = params[0] || 1; + var line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + this._terminal.buffer.y); + var ch = line[this._terminal.buffer.x - 1] || [this._terminal.defAttr, ' ', 1, 32]; + while (param--) { + line[this._terminal.buffer.x++] = ch; + } + }; + InputHandler.prototype.sendDeviceAttributes = function (params) { + if (params[0] > 0) { + return; + } + if (!this._terminal.prefix) { + if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[?1;2c'); + } + else if (this._terminal.is('linux')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[?6c'); + } + } + else if (this._terminal.prefix === '>') { + if (this._terminal.is('xterm')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>0;276;0c'); + } + else if (this._terminal.is('rxvt-unicode')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>85;95;0c'); + } + else if (this._terminal.is('linux')) { + this._terminal.send(params[0] + 'c'); + } + else if (this._terminal.is('screen')) { + this._terminal.send(EscapeSequences_1.C0.ESC + '[>83;40003;0c'); + } + } + }; + InputHandler.prototype.linePosAbsolute = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y = param - 1; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + }; + InputHandler.prototype.VPositionRelative = function (params) { + var param = params[0]; + if (param < 1) { + param = 1; + } + this._terminal.buffer.y += param; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x--; + } + }; + InputHandler.prototype.HVPosition = function (params) { + if (params[0] < 1) + params[0] = 1; + if (params[1] < 1) + params[1] = 1; + this._terminal.buffer.y = params[0] - 1; + if (this._terminal.buffer.y >= this._terminal.rows) { + this._terminal.buffer.y = this._terminal.rows - 1; + } + this._terminal.buffer.x = params[1] - 1; + if (this._terminal.buffer.x >= this._terminal.cols) { + this._terminal.buffer.x = this._terminal.cols - 1; + } + }; + InputHandler.prototype.tabClear = function (params) { + var param = params[0]; + if (param <= 0) { + delete this._terminal.buffer.tabs[this._terminal.buffer.x]; + } + else if (param === 3) { + this._terminal.buffer.tabs = {}; + } + }; + InputHandler.prototype.setMode = function (params) { + if (params.length > 1) { + for (var i = 0; i < params.length; i++) { + this.setMode([params[i]]); + } + return; + } + if (!this._terminal.prefix) { + switch (params[0]) { + case 4: + this._terminal.insertMode = true; + break; + case 20: + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 1: + this._terminal.applicationCursor = true; + break; + case 2: + this._terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(1, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(2, Charsets_1.DEFAULT_CHARSET); + this._terminal.setgCharset(3, Charsets_1.DEFAULT_CHARSET); + break; + case 3: + this._terminal.savedCols = this._terminal.cols; + this._terminal.resize(132, this._terminal.rows); + break; + case 6: + this._terminal.originMode = true; + break; + case 7: + this._terminal.wraparoundMode = true; + break; + case 12: + break; + case 66: + this._terminal.log('Serial port requested application keypad.'); + this._terminal.applicationKeypad = true; + this._terminal.viewport.syncScrollArea(); + break; + case 9: + case 1000: + case 1002: + case 1003: + this._terminal.x10Mouse = params[0] === 9; + this._terminal.vt200Mouse = params[0] === 1000; + this._terminal.normalMouse = params[0] > 1000; + this._terminal.mouseEvents = true; + this._terminal.element.classList.add('enable-mouse-events'); + this._terminal.selectionManager.disable(); + this._terminal.log('Binding to mouse events.'); + break; + case 1004: + this._terminal.sendFocus = true; + break; + case 1005: + this._terminal.utfMouse = true; + break; + case 1006: + this._terminal.sgrMouse = true; + break; + case 1015: + this._terminal.urxvtMouse = true; + break; + case 25: + this._terminal.cursorHidden = false; + break; + case 1049: + case 47: + case 1047: + this._terminal.buffers.activateAltBuffer(); + this._terminal.selectionManager.setBuffer(this._terminal.buffer); + this._terminal.viewport.syncScrollArea(); + this._terminal.showCursor(); + break; + case 2004: + this._terminal.bracketedPasteMode = true; + break; + } + } + }; + InputHandler.prototype.resetMode = function (params) { + if (params.length > 1) { + for (var i = 0; i < params.length; i++) { + this.resetMode([params[i]]); + } + return; + } + if (!this._terminal.prefix) { + switch (params[0]) { + case 4: + this._terminal.insertMode = false; + break; + case 20: + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 1: + this._terminal.applicationCursor = false; + break; + case 3: + if (this._terminal.cols === 132 && this._terminal.savedCols) { + this._terminal.resize(this._terminal.savedCols, this._terminal.rows); + } + delete this._terminal.savedCols; + break; + case 6: + this._terminal.originMode = false; + break; + case 7: + this._terminal.wraparoundMode = false; + break; + case 12: + break; + case 66: + this._terminal.log('Switching back to normal keypad.'); + this._terminal.applicationKeypad = false; + this._terminal.viewport.syncScrollArea(); + break; + case 9: + case 1000: + case 1002: + case 1003: + this._terminal.x10Mouse = false; + this._terminal.vt200Mouse = false; + this._terminal.normalMouse = false; + this._terminal.mouseEvents = false; + this._terminal.element.classList.remove('enable-mouse-events'); + this._terminal.selectionManager.enable(); + break; + case 1004: + this._terminal.sendFocus = false; + break; + case 1005: + this._terminal.utfMouse = false; + break; + case 1006: + this._terminal.sgrMouse = false; + break; + case 1015: + this._terminal.urxvtMouse = false; + break; + case 25: + this._terminal.cursorHidden = true; + break; + case 1049: + case 47: + case 1047: + this._terminal.buffers.activateNormalBuffer(); + this._terminal.selectionManager.setBuffer(this._terminal.buffer); + this._terminal.refresh(0, this._terminal.rows - 1); + this._terminal.viewport.syncScrollArea(); + this._terminal.showCursor(); + break; + case 2004: + this._terminal.bracketedPasteMode = false; + break; + } + } + }; + InputHandler.prototype.charAttributes = function (params) { + if (params.length === 1 && params[0] === 0) { + this._terminal.curAttr = this._terminal.defAttr; + return; + } + var l = params.length; + var flags = this._terminal.curAttr >> 18; + var fg = (this._terminal.curAttr >> 9) & 0x1ff; + var bg = this._terminal.curAttr & 0x1ff; + var p; + for (var i = 0; i < l; i++) { + p = params[i]; + if (p >= 30 && p <= 37) { + fg = p - 30; + } + else if (p >= 40 && p <= 47) { + bg = p - 40; + } + else if (p >= 90 && p <= 97) { + p += 8; + fg = p - 90; + } + else if (p >= 100 && p <= 107) { + p += 8; + bg = p - 100; + } + else if (p === 0) { + flags = this._terminal.defAttr >> 18; + fg = (this._terminal.defAttr >> 9) & 0x1ff; + bg = this._terminal.defAttr & 0x1ff; + } + else if (p === 1) { + flags |= Types_1.FLAGS.BOLD; + } + else if (p === 4) { + flags |= Types_1.FLAGS.UNDERLINE; + } + else if (p === 5) { + flags |= Types_1.FLAGS.BLINK; + } + else if (p === 7) { + flags |= Types_1.FLAGS.INVERSE; + } + else if (p === 8) { + flags |= Types_1.FLAGS.INVISIBLE; + } + else if (p === 2) { + flags |= Types_1.FLAGS.DIM; + } + else if (p === 22) { + flags &= ~Types_1.FLAGS.BOLD; + flags &= ~Types_1.FLAGS.DIM; + } + else if (p === 24) { + flags &= ~Types_1.FLAGS.UNDERLINE; + } + else if (p === 25) { + flags &= ~Types_1.FLAGS.BLINK; + } + else if (p === 27) { + flags &= ~Types_1.FLAGS.INVERSE; + } + else if (p === 28) { + flags &= ~Types_1.FLAGS.INVISIBLE; + } + else if (p === 39) { + fg = (this._terminal.defAttr >> 9) & 0x1ff; + } + else if (p === 49) { + bg = this._terminal.defAttr & 0x1ff; + } + else if (p === 38) { + if (params[i + 1] === 2) { + i += 2; + fg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff); + if (fg === -1) + fg = 0x1ff; + i += 2; + } + else if (params[i + 1] === 5) { + i += 2; + p = params[i] & 0xff; + fg = p; + } + } + else if (p === 48) { + if (params[i + 1] === 2) { + i += 2; + bg = this._terminal.matchColor(params[i] & 0xff, params[i + 1] & 0xff, params[i + 2] & 0xff); + if (bg === -1) + bg = 0x1ff; + i += 2; + } + else if (params[i + 1] === 5) { + i += 2; + p = params[i] & 0xff; + bg = p; + } + } + else if (p === 100) { + fg = (this._terminal.defAttr >> 9) & 0x1ff; + bg = this._terminal.defAttr & 0x1ff; + } + else { + this._terminal.error('Unknown SGR attribute: %d.', p); + } + } + this._terminal.curAttr = (flags << 18) | (fg << 9) | bg; + }; + InputHandler.prototype.deviceStatus = function (params) { + if (!this._terminal.prefix) { + switch (params[0]) { + case 5: + this._terminal.send(EscapeSequences_1.C0.ESC + '[0n'); + break; + case 6: + this._terminal.send(EscapeSequences_1.C0.ESC + '[' + + (this._terminal.buffer.y + 1) + + ';' + + (this._terminal.buffer.x + 1) + + 'R'); + break; + } + } + else if (this._terminal.prefix === '?') { + switch (params[0]) { + case 6: + this._terminal.send(EscapeSequences_1.C0.ESC + '[?' + + (this._terminal.buffer.y + 1) + + ';' + + (this._terminal.buffer.x + 1) + + 'R'); + break; + case 15: + break; + case 25: + break; + case 26: + break; + case 53: + break; + } + } + }; + InputHandler.prototype.softReset = function (params) { + this._terminal.cursorHidden = false; + this._terminal.insertMode = false; + this._terminal.originMode = false; + this._terminal.wraparoundMode = true; + this._terminal.applicationKeypad = false; + this._terminal.viewport.syncScrollArea(); + this._terminal.applicationCursor = false; + this._terminal.buffer.scrollTop = 0; + this._terminal.buffer.scrollBottom = this._terminal.rows - 1; + this._terminal.curAttr = this._terminal.defAttr; + this._terminal.buffer.x = this._terminal.buffer.y = 0; + this._terminal.charset = null; + this._terminal.glevel = 0; + this._terminal.charsets = [null]; + }; + InputHandler.prototype.setCursorStyle = function (params) { + var param = params[0] < 1 ? 1 : params[0]; + switch (param) { + case 1: + case 2: + this._terminal.setOption('cursorStyle', 'block'); + break; + case 3: + case 4: + this._terminal.setOption('cursorStyle', 'underline'); + break; + case 5: + case 6: + this._terminal.setOption('cursorStyle', 'bar'); + break; + } + var isBlinking = param % 2 === 1; + this._terminal.setOption('cursorBlink', isBlinking); + }; + InputHandler.prototype.setScrollRegion = function (params) { + if (this._terminal.prefix) + return; + this._terminal.buffer.scrollTop = (params[0] || 1) - 1; + this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1; + this._terminal.buffer.x = 0; + this._terminal.buffer.y = 0; + }; + InputHandler.prototype.saveCursor = function (params) { + this._terminal.buffer.savedX = this._terminal.buffer.x; + this._terminal.buffer.savedY = this._terminal.buffer.y; + }; + InputHandler.prototype.restoreCursor = function (params) { + this._terminal.buffer.x = this._terminal.buffer.savedX || 0; + this._terminal.buffer.y = this._terminal.buffer.savedY || 0; + }; + return InputHandler; +}()); +exports.InputHandler = InputHandler; + + + +},{"./Buffer":1,"./CharWidth":3,"./Charsets":4,"./EscapeSequences":6,"./renderer/Types":27}],9:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Types_1 = require("./Types"); +var MouseZoneManager_1 = require("./input/MouseZoneManager"); +var EventEmitter_1 = require("./EventEmitter"); +var protocolClause = '(https?:\\/\\/)'; +var domainCharacterSet = '[\\da-z\\.-]+'; +var negatedDomainCharacterSet = '[^\\da-z\\.-]+'; +var domainBodyClause = '(' + domainCharacterSet + ')'; +var tldClause = '([a-z\\.]{2,6})'; +var ipClause = '((\\d{1,3}\\.){3}\\d{1,3})'; +var localHostClause = '(localhost)'; +var portClause = '(:\\d{1,5})'; +var hostClause = '((' + domainBodyClause + '\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?'; +var pathClause = '(\\/[\\/\\w\\.\\-%~]*)*'; +var queryStringHashFragmentCharacterSet = '[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&\'*+,:;~\\=\\.\\-]*'; +var queryStringClause = '(\\?' + queryStringHashFragmentCharacterSet + ')?'; +var hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?'; +var negatedPathCharacterSet = '[^\\/\\w\\.\\-%]+'; +var bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause; +var start = '(?:^|' + negatedDomainCharacterSet + ')('; +var end = ')($|' + negatedPathCharacterSet + ')'; +var strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end); +var HYPERTEXT_LINK_MATCHER_ID = 0; +var Linkifier = (function (_super) { + __extends(Linkifier, _super); + function Linkifier(_terminal) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._linkMatchers = []; + _this._nextLinkMatcherId = HYPERTEXT_LINK_MATCHER_ID; + _this._rowsToLinkify = { + start: null, + end: null + }; + _this.registerLinkMatcher(strictUrlRegex, null, { matchIndex: 1 }); + return _this; + } + Linkifier.prototype.attachToDom = function (mouseZoneManager) { + this._mouseZoneManager = mouseZoneManager; + }; + Linkifier.prototype.linkifyRows = function (start, end) { + var _this = this; + if (!this._mouseZoneManager) { + return; + } + if (!this._rowsToLinkify.start) { + this._rowsToLinkify.start = start; + this._rowsToLinkify.end = end; + } + else { + this._rowsToLinkify.start = this._rowsToLinkify.start < start ? this._rowsToLinkify.start : start; + this._rowsToLinkify.end = this._rowsToLinkify.end > end ? this._rowsToLinkify.end : end; + } + this._mouseZoneManager.clearAll(start, end); + if (this._rowsTimeoutId) { + clearTimeout(this._rowsTimeoutId); + } + this._rowsTimeoutId = setTimeout(function () { return _this._linkifyRows(); }, Linkifier.TIME_BEFORE_LINKIFY); + }; + Linkifier.prototype._linkifyRows = function () { + this._rowsTimeoutId = null; + for (var i = this._rowsToLinkify.start; i <= this._rowsToLinkify.end; i++) { + this._linkifyRow(i); + } + this._rowsToLinkify.start = null; + this._rowsToLinkify.end = null; + }; + Linkifier.prototype.setHypertextLinkHandler = function (handler) { + this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].handler = handler; + }; + Linkifier.prototype.setHypertextValidationCallback = function (callback) { + this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].validationCallback = callback; + }; + Linkifier.prototype.registerLinkMatcher = function (regex, handler, options) { + if (options === void 0) { options = {}; } + if (this._nextLinkMatcherId !== HYPERTEXT_LINK_MATCHER_ID && !handler) { + throw new Error('handler must be defined'); + } + var matcher = { + id: this._nextLinkMatcherId++, + regex: regex, + handler: handler, + matchIndex: options.matchIndex, + validationCallback: options.validationCallback, + hoverTooltipCallback: options.tooltipCallback, + hoverLeaveCallback: options.leaveCallback, + priority: options.priority || 0 + }; + this._addLinkMatcherToList(matcher); + return matcher.id; + }; + Linkifier.prototype._addLinkMatcherToList = function (matcher) { + if (this._linkMatchers.length === 0) { + this._linkMatchers.push(matcher); + return; + } + for (var i = this._linkMatchers.length - 1; i >= 0; i--) { + if (matcher.priority <= this._linkMatchers[i].priority) { + this._linkMatchers.splice(i + 1, 0, matcher); + return; + } + } + this._linkMatchers.splice(0, 0, matcher); + }; + Linkifier.prototype.deregisterLinkMatcher = function (matcherId) { + for (var i = 1; i < this._linkMatchers.length; i++) { + if (this._linkMatchers[i].id === matcherId) { + this._linkMatchers.splice(i, 1); + return true; + } + } + return false; + }; + Linkifier.prototype._linkifyRow = function (rowIndex) { + var absoluteRowIndex = this._terminal.buffer.ydisp + rowIndex; + if (absoluteRowIndex >= this._terminal.buffer.lines.length) { + return; + } + var text = this._terminal.buffer.translateBufferLineToString(absoluteRowIndex, false); + for (var i = 0; i < this._linkMatchers.length; i++) { + this._doLinkifyRow(rowIndex, text, this._linkMatchers[i]); + } + }; + Linkifier.prototype._doLinkifyRow = function (rowIndex, text, matcher, offset) { + var _this = this; + if (offset === void 0) { offset = 0; } + var result = []; + var isHttpLinkMatcher = matcher.id === HYPERTEXT_LINK_MATCHER_ID; + var match = text.match(matcher.regex); + if (!match || match.length === 0) { + return; + } + var uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex]; + var index = text.indexOf(uri); + if (matcher.validationCallback) { + matcher.validationCallback(uri, function (isValid) { + if (_this._rowsTimeoutId) { + return; + } + if (isValid) { + _this._addLink(offset + index, rowIndex, uri, matcher); + } + }); + } + else { + this._addLink(offset + index, rowIndex, uri, matcher); + } + var remainingStartIndex = index + uri.length; + var remainingText = text.substr(remainingStartIndex); + if (remainingText.length > 0) { + this._doLinkifyRow(rowIndex, remainingText, matcher, offset + remainingStartIndex); + } + }; + Linkifier.prototype._addLink = function (x, y, uri, matcher) { + var _this = this; + this._mouseZoneManager.add(new MouseZoneManager_1.MouseZone(x + 1, x + 1 + uri.length, y + 1, function (e) { + if (matcher.handler) { + return matcher.handler(e, uri); + } + window.open(uri, '_blank'); + }, function (e) { + _this.emit(Types_1.LinkHoverEventTypes.HOVER, { x: x, y: y, length: uri.length }); + _this._terminal.element.style.cursor = 'pointer'; + }, function (e) { + _this.emit(Types_1.LinkHoverEventTypes.TOOLTIP, { x: x, y: y, length: uri.length }); + if (matcher.hoverTooltipCallback) { + matcher.hoverTooltipCallback(e, uri); + } + }, function () { + _this.emit(Types_1.LinkHoverEventTypes.LEAVE, { x: x, y: y, length: uri.length }); + _this._terminal.element.style.cursor = ''; + if (matcher.hoverLeaveCallback) { + matcher.hoverLeaveCallback(); + } + })); + }; + Linkifier.TIME_BEFORE_LINKIFY = 200; + return Linkifier; +}(EventEmitter_1.EventEmitter)); +exports.Linkifier = Linkifier; + + + +},{"./EventEmitter":7,"./Types":14,"./input/MouseZoneManager":17}],10:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var EscapeSequences_1 = require("./EscapeSequences"); +var Charsets_1 = require("./Charsets"); +var normalStateHandler = {}; +normalStateHandler[EscapeSequences_1.C0.BEL] = function (parser, handler) { return handler.bell(); }; +normalStateHandler[EscapeSequences_1.C0.LF] = function (parser, handler) { return handler.lineFeed(); }; +normalStateHandler[EscapeSequences_1.C0.VT] = normalStateHandler[EscapeSequences_1.C0.LF]; +normalStateHandler[EscapeSequences_1.C0.FF] = normalStateHandler[EscapeSequences_1.C0.LF]; +normalStateHandler[EscapeSequences_1.C0.CR] = function (parser, handler) { return handler.carriageReturn(); }; +normalStateHandler[EscapeSequences_1.C0.BS] = function (parser, handler) { return handler.backspace(); }; +normalStateHandler[EscapeSequences_1.C0.HT] = function (parser, handler) { return handler.tab(); }; +normalStateHandler[EscapeSequences_1.C0.SO] = function (parser, handler) { return handler.shiftOut(); }; +normalStateHandler[EscapeSequences_1.C0.SI] = function (parser, handler) { return handler.shiftIn(); }; +normalStateHandler[EscapeSequences_1.C0.ESC] = function (parser, handler) { return parser.setState(ParserState.ESCAPED); }; +var escapedStateHandler = {}; +escapedStateHandler['['] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.CSI_PARAM); +}; +escapedStateHandler[']'] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.OSC); +}; +escapedStateHandler['P'] = function (parser, terminal) { + terminal.params = []; + terminal.currentParam = 0; + parser.setState(ParserState.DCS); +}; +escapedStateHandler['_'] = function (parser, terminal) { + parser.setState(ParserState.IGNORE); +}; +escapedStateHandler['^'] = function (parser, terminal) { + parser.setState(ParserState.IGNORE); +}; +escapedStateHandler['c'] = function (parser, terminal) { + terminal.reset(); +}; +escapedStateHandler['E'] = function (parser, terminal) { + terminal.buffer.x = 0; + terminal.index(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['D'] = function (parser, terminal) { + terminal.index(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['M'] = function (parser, terminal) { + terminal.reverseIndex(); + parser.setState(ParserState.NORMAL); +}; +escapedStateHandler['%'] = function (parser, terminal) { + terminal.setgLevel(0); + terminal.setgCharset(0, Charsets_1.DEFAULT_CHARSET); + parser.setState(ParserState.NORMAL); + parser.skipNextChar(); +}; +escapedStateHandler[EscapeSequences_1.C0.CAN] = function (parser) { return parser.setState(ParserState.NORMAL); }; +var csiParamStateHandler = {}; +csiParamStateHandler['?'] = function (parser) { return parser.setPrefix('?'); }; +csiParamStateHandler['>'] = function (parser) { return parser.setPrefix('>'); }; +csiParamStateHandler['!'] = function (parser) { return parser.setPrefix('!'); }; +csiParamStateHandler['0'] = function (parser) { return parser.setParam(parser.getParam() * 10); }; +csiParamStateHandler['1'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 1); }; +csiParamStateHandler['2'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 2); }; +csiParamStateHandler['3'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 3); }; +csiParamStateHandler['4'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 4); }; +csiParamStateHandler['5'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 5); }; +csiParamStateHandler['6'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 6); }; +csiParamStateHandler['7'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 7); }; +csiParamStateHandler['8'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 8); }; +csiParamStateHandler['9'] = function (parser) { return parser.setParam(parser.getParam() * 10 + 9); }; +csiParamStateHandler['$'] = function (parser) { return parser.setPostfix('$'); }; +csiParamStateHandler['"'] = function (parser) { return parser.setPostfix('"'); }; +csiParamStateHandler[' '] = function (parser) { return parser.setPostfix(' '); }; +csiParamStateHandler['\''] = function (parser) { return parser.setPostfix('\''); }; +csiParamStateHandler[';'] = function (parser) { return parser.finalizeParam(); }; +csiParamStateHandler[EscapeSequences_1.C0.CAN] = function (parser) { return parser.setState(ParserState.NORMAL); }; +var csiStateHandler = {}; +csiStateHandler['@'] = function (handler, params, prefix) { return handler.insertChars(params); }; +csiStateHandler['A'] = function (handler, params, prefix) { return handler.cursorUp(params); }; +csiStateHandler['B'] = function (handler, params, prefix) { return handler.cursorDown(params); }; +csiStateHandler['C'] = function (handler, params, prefix) { return handler.cursorForward(params); }; +csiStateHandler['D'] = function (handler, params, prefix) { return handler.cursorBackward(params); }; +csiStateHandler['E'] = function (handler, params, prefix) { return handler.cursorNextLine(params); }; +csiStateHandler['F'] = function (handler, params, prefix) { return handler.cursorPrecedingLine(params); }; +csiStateHandler['G'] = function (handler, params, prefix) { return handler.cursorCharAbsolute(params); }; +csiStateHandler['H'] = function (handler, params, prefix) { return handler.cursorPosition(params); }; +csiStateHandler['I'] = function (handler, params, prefix) { return handler.cursorForwardTab(params); }; +csiStateHandler['J'] = function (handler, params, prefix) { return handler.eraseInDisplay(params); }; +csiStateHandler['K'] = function (handler, params, prefix) { return handler.eraseInLine(params); }; +csiStateHandler['L'] = function (handler, params, prefix) { return handler.insertLines(params); }; +csiStateHandler['M'] = function (handler, params, prefix) { return handler.deleteLines(params); }; +csiStateHandler['P'] = function (handler, params, prefix) { return handler.deleteChars(params); }; +csiStateHandler['S'] = function (handler, params, prefix) { return handler.scrollUp(params); }; +csiStateHandler['T'] = function (handler, params, prefix) { + if (params.length < 2 && !prefix) { + handler.scrollDown(params); + } +}; +csiStateHandler['X'] = function (handler, params, prefix) { return handler.eraseChars(params); }; +csiStateHandler['Z'] = function (handler, params, prefix) { return handler.cursorBackwardTab(params); }; +csiStateHandler['`'] = function (handler, params, prefix) { return handler.charPosAbsolute(params); }; +csiStateHandler['a'] = function (handler, params, prefix) { return handler.HPositionRelative(params); }; +csiStateHandler['b'] = function (handler, params, prefix) { return handler.repeatPrecedingCharacter(params); }; +csiStateHandler['c'] = function (handler, params, prefix) { return handler.sendDeviceAttributes(params); }; +csiStateHandler['d'] = function (handler, params, prefix) { return handler.linePosAbsolute(params); }; +csiStateHandler['e'] = function (handler, params, prefix) { return handler.VPositionRelative(params); }; +csiStateHandler['f'] = function (handler, params, prefix) { return handler.HVPosition(params); }; +csiStateHandler['g'] = function (handler, params, prefix) { return handler.tabClear(params); }; +csiStateHandler['h'] = function (handler, params, prefix) { return handler.setMode(params); }; +csiStateHandler['l'] = function (handler, params, prefix) { return handler.resetMode(params); }; +csiStateHandler['m'] = function (handler, params, prefix) { return handler.charAttributes(params); }; +csiStateHandler['n'] = function (handler, params, prefix) { return handler.deviceStatus(params); }; +csiStateHandler['p'] = function (handler, params, prefix) { + switch (prefix) { + case '!': + handler.softReset(params); + break; + } +}; +csiStateHandler['q'] = function (handler, params, prefix, postfix) { + if (postfix === ' ') { + handler.setCursorStyle(params); + } +}; +csiStateHandler['r'] = function (handler, params) { return handler.setScrollRegion(params); }; +csiStateHandler['s'] = function (handler, params) { return handler.saveCursor(params); }; +csiStateHandler['u'] = function (handler, params) { return handler.restoreCursor(params); }; +csiStateHandler[EscapeSequences_1.C0.CAN] = function (handler, params, prefix, postfix, parser) { return parser.setState(ParserState.NORMAL); }; +var ParserState; +(function (ParserState) { + ParserState[ParserState["NORMAL"] = 0] = "NORMAL"; + ParserState[ParserState["ESCAPED"] = 1] = "ESCAPED"; + ParserState[ParserState["CSI_PARAM"] = 2] = "CSI_PARAM"; + ParserState[ParserState["CSI"] = 3] = "CSI"; + ParserState[ParserState["OSC"] = 4] = "OSC"; + ParserState[ParserState["CHARSET"] = 5] = "CHARSET"; + ParserState[ParserState["DCS"] = 6] = "DCS"; + ParserState[ParserState["IGNORE"] = 7] = "IGNORE"; +})(ParserState = exports.ParserState || (exports.ParserState = {})); +var Parser = (function () { + function Parser(_inputHandler, _terminal) { + this._inputHandler = _inputHandler; + this._terminal = _terminal; + this._state = ParserState.NORMAL; + } + Parser.prototype.parse = function (data) { + var l = data.length; + var j; + var cs; + var ch; + var code; + var low; + var cursorStartX = this._terminal.buffer.x; + var cursorStartY = this._terminal.buffer.y; + if (this._terminal.debug) { + this._terminal.log('data: ' + data); + } + this._position = 0; + if (this._terminal.surrogate_high) { + data = this._terminal.surrogate_high + data; + this._terminal.surrogate_high = ''; + } + for (; this._position < l; this._position++) { + ch = data[this._position]; + code = data.charCodeAt(this._position); + if (0xD800 <= code && code <= 0xDBFF) { + low = data.charCodeAt(this._position + 1); + if (isNaN(low)) { + this._terminal.surrogate_high = ch; + continue; + } + code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + ch += data.charAt(this._position + 1); + } + if (0xDC00 <= code && code <= 0xDFFF) + continue; + switch (this._state) { + case ParserState.NORMAL: + if (ch in normalStateHandler) { + normalStateHandler[ch](this, this._inputHandler); + } + else { + this._inputHandler.addChar(ch, code); + } + break; + case ParserState.ESCAPED: + if (ch in escapedStateHandler) { + escapedStateHandler[ch](this, this._terminal); + break; + } + switch (ch) { + case '(': + case ')': + case '*': + case '+': + case '-': + case '.': + switch (ch) { + case '(': + this._terminal.gcharset = 0; + break; + case ')': + this._terminal.gcharset = 1; + break; + case '*': + this._terminal.gcharset = 2; + break; + case '+': + this._terminal.gcharset = 3; + break; + case '-': + this._terminal.gcharset = 1; + break; + case '.': + this._terminal.gcharset = 2; + break; + } + this._state = ParserState.CHARSET; + break; + case '/': + this._terminal.gcharset = 3; + this._state = ParserState.CHARSET; + this._position--; + break; + case 'N': + break; + case 'O': + break; + case 'n': + this._terminal.setgLevel(2); + break; + case 'o': + this._terminal.setgLevel(3); + break; + case '|': + this._terminal.setgLevel(3); + break; + case '}': + this._terminal.setgLevel(2); + break; + case '~': + this._terminal.setgLevel(1); + break; + case '7': + this._inputHandler.saveCursor(); + this._state = ParserState.NORMAL; + break; + case '8': + this._inputHandler.restoreCursor(); + this._state = ParserState.NORMAL; + break; + case '#': + this._state = ParserState.NORMAL; + this._position++; + break; + case 'H': + this._terminal.tabSet(); + this._state = ParserState.NORMAL; + break; + case '=': + this._terminal.log('Serial port requested application keypad.'); + this._terminal.applicationKeypad = true; + if (this._terminal.viewport) { + this._terminal.viewport.syncScrollArea(); + } + this._state = ParserState.NORMAL; + break; + case '>': + this._terminal.log('Switching back to normal keypad.'); + this._terminal.applicationKeypad = false; + if (this._terminal.viewport) { + this._terminal.viewport.syncScrollArea(); + } + this._state = ParserState.NORMAL; + break; + default: + this._state = ParserState.NORMAL; + this._terminal.error('Unknown ESC control: %s.', ch); + break; + } + break; + case ParserState.CHARSET: + if (ch in Charsets_1.CHARSETS) { + cs = Charsets_1.CHARSETS[ch]; + if (ch === '/') { + this.skipNextChar(); + } + } + else { + cs = Charsets_1.DEFAULT_CHARSET; + } + this._terminal.setgCharset(this._terminal.gcharset, cs); + this._terminal.gcharset = null; + this._state = ParserState.NORMAL; + break; + case ParserState.OSC: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + this._terminal.params.push(this._terminal.currentParam); + switch (this._terminal.params[0]) { + case 0: + case 1: + case 2: + if (this._terminal.params[1]) { + this._terminal.title = this._terminal.params[1]; + this._terminal.handleTitle(this._terminal.title); + } + break; + case 3: + break; + case 4: + case 5: + break; + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + break; + case 46: + break; + case 50: + break; + case 51: + break; + case 52: + break; + case 104: + case 105: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + break; + } + this._terminal.params = []; + this._terminal.currentParam = 0; + this._state = ParserState.NORMAL; + } + else { + if (!this._terminal.params.length) { + if (ch >= '0' && ch <= '9') { + this._terminal.currentParam = + this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48; + } + else if (ch === ';') { + this._terminal.params.push(this._terminal.currentParam); + this._terminal.currentParam = ''; + } + } + else { + this._terminal.currentParam += ch; + } + } + break; + case ParserState.CSI_PARAM: + if (ch in csiParamStateHandler) { + csiParamStateHandler[ch](this); + break; + } + this.finalizeParam(); + this._state = ParserState.CSI; + case ParserState.CSI: + if (ch in csiStateHandler) { + if (this._terminal.debug) { + this._terminal.log("CSI " + (this._terminal.prefix ? this._terminal.prefix : '') + " " + (this._terminal.params ? this._terminal.params.join(';') : '') + " " + (this._terminal.postfix ? this._terminal.postfix : '') + " " + ch); + } + csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this); + } + else { + this._terminal.error('Unknown CSI code: %s.', ch); + } + this._state = ParserState.NORMAL; + this._terminal.prefix = ''; + this._terminal.postfix = ''; + break; + case ParserState.DCS: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + var pt = void 0; + var valid = void 0; + switch (this._terminal.prefix) { + case '': + break; + case '$q': + pt = this._terminal.currentParam; + valid = false; + switch (pt) { + case '"q': + pt = '0"q'; + break; + case '"p': + pt = '61"p'; + break; + case 'r': + pt = '' + + (this._terminal.buffer.scrollTop + 1) + + ';' + + (this._terminal.buffer.scrollBottom + 1) + + 'r'; + break; + case 'm': + pt = '0m'; + break; + default: + this._terminal.error('Unknown DCS Pt: %s.', pt); + pt = ''; + break; + } + this._terminal.send(EscapeSequences_1.C0.ESC + 'P' + +valid + '$r' + pt + EscapeSequences_1.C0.ESC + '\\'); + break; + case '+p': + break; + case '+q': + pt = this._terminal.currentParam; + valid = false; + this._terminal.send(EscapeSequences_1.C0.ESC + 'P' + +valid + '+r' + pt + EscapeSequences_1.C0.ESC + '\\'); + break; + default: + this._terminal.error('Unknown DCS prefix: %s.', this._terminal.prefix); + break; + } + this._terminal.currentParam = 0; + this._terminal.prefix = ''; + this._state = ParserState.NORMAL; + } + else if (!this._terminal.currentParam) { + if (!this._terminal.prefix && ch !== '$' && ch !== '+') { + this._terminal.currentParam = ch; + } + else if (this._terminal.prefix.length === 2) { + this._terminal.currentParam = ch; + } + else { + this._terminal.prefix += ch; + } + } + else { + this._terminal.currentParam += ch; + } + break; + case ParserState.IGNORE: + if (ch === EscapeSequences_1.C0.ESC || ch === EscapeSequences_1.C0.BEL) { + if (ch === EscapeSequences_1.C0.ESC) + this._position++; + this._state = ParserState.NORMAL; + } + break; + } + } + if (this._terminal.buffer.x !== cursorStartX || this._terminal.buffer.y !== cursorStartY) { + this._terminal.emit('cursormove'); + } + return this._state; + }; + Parser.prototype.setState = function (state) { + this._state = state; + }; + Parser.prototype.setPrefix = function (prefix) { + this._terminal.prefix = prefix; + }; + Parser.prototype.setPostfix = function (postfix) { + this._terminal.postfix = postfix; + }; + Parser.prototype.setParam = function (param) { + this._terminal.currentParam = param; + }; + Parser.prototype.getParam = function () { + return this._terminal.currentParam; + }; + Parser.prototype.finalizeParam = function () { + this._terminal.params.push(this._terminal.currentParam); + this._terminal.currentParam = 0; + }; + Parser.prototype.skipNextChar = function () { + this._position++; + }; + return Parser; +}()); +exports.Parser = Parser; + + + +},{"./Charsets":4,"./EscapeSequences":6}],11:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var MouseHelper_1 = require("./utils/MouseHelper"); +var Browser = require("./utils/Browser"); +var EventEmitter_1 = require("./EventEmitter"); +var SelectionModel_1 = require("./SelectionModel"); +var Buffer_1 = require("./Buffer"); +var DRAG_SCROLL_MAX_THRESHOLD = 50; +var DRAG_SCROLL_MAX_SPEED = 15; +var DRAG_SCROLL_INTERVAL = 50; +var WORD_SEPARATORS = ' ()[]{}\'"'; +var NON_BREAKING_SPACE_CHAR = String.fromCharCode(160); +var ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g'); +var SelectionMode; +(function (SelectionMode) { + SelectionMode[SelectionMode["NORMAL"] = 0] = "NORMAL"; + SelectionMode[SelectionMode["WORD"] = 1] = "WORD"; + SelectionMode[SelectionMode["LINE"] = 2] = "LINE"; +})(SelectionMode || (SelectionMode = {})); +var SelectionManager = (function (_super) { + __extends(SelectionManager, _super); + function SelectionManager(_terminal, _buffer, _charMeasure) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._buffer = _buffer; + _this._charMeasure = _charMeasure; + _this._enabled = true; + _this._initListeners(); + _this.enable(); + _this._model = new SelectionModel_1.SelectionModel(_terminal); + _this._activeSelectionMode = SelectionMode.NORMAL; + return _this; + } + SelectionManager.prototype._initListeners = function () { + var _this = this; + this._mouseMoveListener = function (event) { return _this._onMouseMove(event); }; + this._mouseUpListener = function (event) { return _this._onMouseUp(event); }; + this._buffer.lines.on('trim', function (amount) { return _this._onTrim(amount); }); + }; + SelectionManager.prototype.disable = function () { + this.clearSelection(); + this._enabled = false; + }; + SelectionManager.prototype.enable = function () { + this._enabled = true; + }; + SelectionManager.prototype.setBuffer = function (buffer) { + this._buffer = buffer; + this.clearSelection(); + }; + Object.defineProperty(SelectionManager.prototype, "selectionStart", { + get: function () { return this._model.finalSelectionStart; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "selectionEnd", { + get: function () { return this._model.finalSelectionEnd; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "hasSelection", { + get: function () { + var start = this._model.finalSelectionStart; + var end = this._model.finalSelectionEnd; + if (!start || !end) { + return false; + } + return start[0] !== end[0] || start[1] !== end[1]; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionManager.prototype, "selectionText", { + get: function () { + var start = this._model.finalSelectionStart; + var end = this._model.finalSelectionEnd; + if (!start || !end) { + return ''; + } + var startRowEndCol = start[1] === end[1] ? end[0] : null; + var result = []; + result.push(this._buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol)); + for (var i = start[1] + 1; i <= end[1] - 1; i++) { + var bufferLine = this._buffer.lines.get(i); + var lineText = this._buffer.translateBufferLineToString(i, true); + if (bufferLine.isWrapped) { + result[result.length - 1] += lineText; + } + else { + result.push(lineText); + } + } + if (start[1] !== end[1]) { + var bufferLine = this._buffer.lines.get(end[1]); + var lineText = this._buffer.translateBufferLineToString(end[1], true, 0, end[0]); + if (bufferLine.isWrapped) { + result[result.length - 1] += lineText; + } + else { + result.push(lineText); + } + } + var formattedResult = result.map(function (line) { + return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' '); + }).join(Browser.isMSWindows ? '\r\n' : '\n'); + return formattedResult; + }, + enumerable: true, + configurable: true + }); + SelectionManager.prototype.clearSelection = function () { + this._model.clearSelection(); + this._removeMouseDownListeners(); + this.refresh(); + }; + SelectionManager.prototype.refresh = function (isNewSelection) { + var _this = this; + if (!this._refreshAnimationFrame) { + this._refreshAnimationFrame = window.requestAnimationFrame(function () { return _this._refresh(); }); + } + if (Browser.isLinux && isNewSelection) { + var selectionText = this.selectionText; + if (selectionText.length) { + this.emit('newselection', this.selectionText); + } + } + }; + SelectionManager.prototype._refresh = function () { + this._refreshAnimationFrame = null; + this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd }); + }; + SelectionManager.prototype.selectAll = function () { + this._model.isSelectAllActive = true; + this.refresh(); + this.emit('selection'); + }; + SelectionManager.prototype._onTrim = function (amount) { + var needsRefresh = this._model.onTrim(amount); + if (needsRefresh) { + this.refresh(); + } + }; + SelectionManager.prototype._getMouseBufferCoords = function (event) { + var coords = this._terminal.mouseHelper.getCoords(event, this._terminal.element, this._charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows, true); + if (!coords) { + return null; + } + coords[0]--; + coords[1]--; + coords[1] += this._terminal.buffer.ydisp; + return coords; + }; + SelectionManager.prototype._getMouseEventScrollAmount = function (event) { + var offset = MouseHelper_1.MouseHelper.getCoordsRelativeToElement(event, this._terminal.element)[1]; + var terminalHeight = this._terminal.rows * Math.ceil(this._charMeasure.height * this._terminal.options.lineHeight); + if (offset >= 0 && offset <= terminalHeight) { + return 0; + } + if (offset > terminalHeight) { + offset -= terminalHeight; + } + offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD); + offset /= DRAG_SCROLL_MAX_THRESHOLD; + return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1)); + }; + SelectionManager.prototype.shouldForceSelection = function (event) { + return Browser.isMac ? event.altKey : event.shiftKey; + }; + SelectionManager.prototype.onMouseDown = function (event) { + if (event.button === 2 && this.hasSelection) { + return; + } + if (event.button !== 0) { + return; + } + if (!this._enabled) { + if (!this.shouldForceSelection(event)) { + return; + } + event.stopPropagation(); + } + event.preventDefault(); + this._dragScrollAmount = 0; + if (this._enabled && event.shiftKey) { + this._onIncrementalClick(event); + } + else { + if (event.detail === 1) { + this._onSingleClick(event); + } + else if (event.detail === 2) { + this._onDoubleClick(event); + } + else if (event.detail === 3) { + this._onTripleClick(event); + } + } + this._addMouseDownListeners(); + this.refresh(true); + }; + SelectionManager.prototype._addMouseDownListeners = function () { + var _this = this; + this._terminal.element.ownerDocument.addEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.ownerDocument.addEventListener('mouseup', this._mouseUpListener); + this._dragScrollIntervalTimer = setInterval(function () { return _this._dragScroll(); }, DRAG_SCROLL_INTERVAL); + }; + SelectionManager.prototype._removeMouseDownListeners = function () { + this._terminal.element.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.ownerDocument.removeEventListener('mouseup', this._mouseUpListener); + clearInterval(this._dragScrollIntervalTimer); + this._dragScrollIntervalTimer = null; + }; + SelectionManager.prototype._onIncrementalClick = function (event) { + if (this._model.selectionStart) { + this._model.selectionEnd = this._getMouseBufferCoords(event); + } + }; + SelectionManager.prototype._onSingleClick = function (event) { + this._model.selectionStartLength = 0; + this._model.isSelectAllActive = false; + this._activeSelectionMode = SelectionMode.NORMAL; + this._model.selectionStart = this._getMouseBufferCoords(event); + if (!this._model.selectionStart) { + return; + } + this._model.selectionEnd = null; + var line = this._buffer.lines.get(this._model.selectionStart[1]); + if (!line) { + return; + } + if (line.length >= this._model.selectionStart[0]) { + return; + } + var char = line[this._model.selectionStart[0]]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + this._model.selectionStart[0]++; + } + }; + SelectionManager.prototype._onDoubleClick = function (event) { + var coords = this._getMouseBufferCoords(event); + if (coords) { + this._activeSelectionMode = SelectionMode.WORD; + this._selectWordAt(coords); + } + }; + SelectionManager.prototype._onTripleClick = function (event) { + var coords = this._getMouseBufferCoords(event); + if (coords) { + this._activeSelectionMode = SelectionMode.LINE; + this._selectLineAt(coords[1]); + } + }; + SelectionManager.prototype._onMouseMove = function (event) { + event.stopImmediatePropagation(); + var previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null; + this._model.selectionEnd = this._getMouseBufferCoords(event); + if (!this._model.selectionEnd) { + this.refresh(true); + return; + } + if (this._activeSelectionMode === SelectionMode.LINE) { + if (this._model.selectionEnd[1] < this._model.selectionStart[1]) { + this._model.selectionEnd[0] = 0; + } + else { + this._model.selectionEnd[0] = this._terminal.cols; + } + } + else if (this._activeSelectionMode === SelectionMode.WORD) { + this._selectToWordAt(this._model.selectionEnd); + } + this._dragScrollAmount = this._getMouseEventScrollAmount(event); + if (this._dragScrollAmount > 0) { + this._model.selectionEnd[0] = this._terminal.cols; + } + else if (this._dragScrollAmount < 0) { + this._model.selectionEnd[0] = 0; + } + if (this._model.selectionEnd[1] < this._buffer.lines.length) { + var char = this._buffer.lines.get(this._model.selectionEnd[1])[this._model.selectionEnd[0]]; + if (char && char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + this._model.selectionEnd[0]++; + } + } + if (!previousSelectionEnd || + previousSelectionEnd[0] !== this._model.selectionEnd[0] || + previousSelectionEnd[1] !== this._model.selectionEnd[1]) { + this.refresh(true); + } + }; + SelectionManager.prototype._dragScroll = function () { + if (this._dragScrollAmount) { + this._terminal.scrollLines(this._dragScrollAmount, false); + if (this._dragScrollAmount > 0) { + this._model.selectionEnd = [this._terminal.cols - 1, this._terminal.buffer.ydisp + this._terminal.rows]; + } + else { + this._model.selectionEnd = [0, this._terminal.buffer.ydisp]; + } + this.refresh(); + } + }; + SelectionManager.prototype._onMouseUp = function (event) { + this._removeMouseDownListeners(); + if (this.hasSelection) + this.emit('selection'); + }; + SelectionManager.prototype._convertViewportColToCharacterIndex = function (bufferLine, coords) { + var charIndex = coords[0]; + for (var i = 0; coords[0] >= i; i++) { + var char = bufferLine[i]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + charIndex--; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1 && coords[0] !== i) { + charIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + } + return charIndex; + }; + SelectionManager.prototype.setSelection = function (col, row, length) { + this._model.clearSelection(); + this._removeMouseDownListeners(); + this._model.selectionStart = [col, row]; + this._model.selectionStartLength = length; + this.refresh(); + }; + SelectionManager.prototype._getWordAt = function (coords) { + var bufferLine = this._buffer.lines.get(coords[1]); + if (!bufferLine) { + return null; + } + var line = this._buffer.translateBufferLineToString(coords[1], false); + var startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords); + var endIndex = startIndex; + var charOffset = coords[0] - startIndex; + var leftWideCharCount = 0; + var rightWideCharCount = 0; + var leftLongCharOffset = 0; + var rightLongCharOffset = 0; + if (line.charAt(startIndex) === ' ') { + while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') { + startIndex--; + } + while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') { + endIndex++; + } + } + else { + var startCol = coords[0]; + var endCol = coords[0]; + if (bufferLine[startCol][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + leftWideCharCount++; + startCol--; + } + if (bufferLine[endCol][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + rightWideCharCount++; + endCol++; + } + if (bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + rightLongCharOffset += bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + endIndex += bufferLine[endCol][Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine[startCol - 1])) { + var char = bufferLine[startCol - 1]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + leftWideCharCount++; + startCol--; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + leftLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + startIndex -= char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + startIndex--; + startCol--; + } + while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine[endCol + 1])) { + var char = bufferLine[endCol + 1]; + if (char[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + rightWideCharCount++; + endCol++; + } + else if (char[Buffer_1.CHAR_DATA_CHAR_INDEX].length > 1) { + rightLongCharOffset += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + endIndex += char[Buffer_1.CHAR_DATA_CHAR_INDEX].length - 1; + } + endIndex++; + endCol++; + } + } + endIndex++; + var start = startIndex + + charOffset + - leftWideCharCount + + leftLongCharOffset; + var length = Math.min(this._terminal.cols, endIndex + - startIndex + + leftWideCharCount + + rightWideCharCount + - leftLongCharOffset + - rightLongCharOffset); + return { start: start, length: length }; + }; + SelectionManager.prototype._selectWordAt = function (coords) { + var wordPosition = this._getWordAt(coords); + if (wordPosition) { + this._model.selectionStart = [wordPosition.start, coords[1]]; + this._model.selectionStartLength = wordPosition.length; + } + }; + SelectionManager.prototype._selectToWordAt = function (coords) { + var wordPosition = this._getWordAt(coords); + if (wordPosition) { + this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]]; + } + }; + SelectionManager.prototype._isCharWordSeparator = function (charData) { + if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0) { + return false; + } + return WORD_SEPARATORS.indexOf(charData[Buffer_1.CHAR_DATA_CHAR_INDEX]) >= 0; + }; + SelectionManager.prototype._selectLineAt = function (line) { + this._model.selectionStart = [0, line]; + this._model.selectionStartLength = this._terminal.cols; + }; + return SelectionManager; +}(EventEmitter_1.EventEmitter)); +exports.SelectionManager = SelectionManager; + + + +},{"./Buffer":1,"./EventEmitter":7,"./SelectionModel":12,"./utils/Browser":28,"./utils/MouseHelper":32}],12:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var SelectionModel = (function () { + function SelectionModel(_terminal) { + this._terminal = _terminal; + this.clearSelection(); + } + SelectionModel.prototype.clearSelection = function () { + this.selectionStart = null; + this.selectionEnd = null; + this.isSelectAllActive = false; + this.selectionStartLength = 0; + }; + Object.defineProperty(SelectionModel.prototype, "finalSelectionStart", { + get: function () { + if (this.isSelectAllActive) { + return [0, 0]; + } + if (!this.selectionEnd || !this.selectionStart) { + return this.selectionStart; + } + return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SelectionModel.prototype, "finalSelectionEnd", { + get: function () { + if (this.isSelectAllActive) { + return [this._terminal.cols, this._terminal.buffer.ybase + this._terminal.rows - 1]; + } + if (!this.selectionStart) { + return null; + } + if (!this.selectionEnd || this.areSelectionValuesReversed()) { + return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]]; + } + if (this.selectionStartLength) { + if (this.selectionEnd[1] === this.selectionStart[1]) { + return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]]; + } + } + return this.selectionEnd; + }, + enumerable: true, + configurable: true + }); + SelectionModel.prototype.areSelectionValuesReversed = function () { + var start = this.selectionStart; + var end = this.selectionEnd; + if (!start || !end) { + return false; + } + return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]); + }; + SelectionModel.prototype.onTrim = function (amount) { + if (this.selectionStart) { + this.selectionStart[1] -= amount; + } + if (this.selectionEnd) { + this.selectionEnd[1] -= amount; + } + if (this.selectionEnd && this.selectionEnd[1] < 0) { + this.clearSelection(); + return true; + } + if (this.selectionStart && this.selectionStart[1] < 0) { + this.selectionStart[1] = 0; + } + return false; + }; + return SelectionModel; +}()); +exports.SelectionModel = SelectionModel; + + + +},{}],13:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BufferSet_1 = require("./BufferSet"); +var Buffer_1 = require("./Buffer"); +var CompositionHelper_1 = require("./CompositionHelper"); +var EventEmitter_1 = require("./EventEmitter"); +var Viewport_1 = require("./Viewport"); +var Clipboard_1 = require("./handlers/Clipboard"); +var EscapeSequences_1 = require("./EscapeSequences"); +var InputHandler_1 = require("./InputHandler"); +var Parser_1 = require("./Parser"); +var Renderer_1 = require("./renderer/Renderer"); +var Linkifier_1 = require("./Linkifier"); +var SelectionManager_1 = require("./SelectionManager"); +var CharMeasure_1 = require("./utils/CharMeasure"); +var Browser = require("./utils/Browser"); +var MouseHelper_1 = require("./utils/MouseHelper"); +var Sounds_1 = require("./utils/Sounds"); +var ColorManager_1 = require("./renderer/ColorManager"); +var MouseZoneManager_1 = require("./input/MouseZoneManager"); +var CharAtlas_1 = require("./renderer/CharAtlas"); +var document = (typeof window !== 'undefined') ? window.document : null; +var WRITE_BUFFER_PAUSE_THRESHOLD = 5; +var WRITE_BATCH_SIZE = 300; +var DEFAULT_OPTIONS = { + convertEol: false, + termName: 'xterm', + geometry: [80, 24], + cursorBlink: false, + cursorStyle: 'block', + bellSound: Sounds_1.BellSound, + bellStyle: 'none', + enableBold: true, + fontFamily: 'courier-new, courier, monospace', + fontSize: 15, + lineHeight: 1.0, + letterSpacing: 0, + scrollback: 1000, + screenKeys: false, + debug: false, + cancelEvents: false, + disableStdin: false, + useFlowControl: false, + tabStopWidth: 8, + theme: null +}; +var Terminal = (function (_super) { + __extends(Terminal, _super); + function Terminal(options) { + if (options === void 0) { options = {}; } + var _this = _super.call(this) || this; + _this.browser = Browser; + _this.options = options; + _this.setup(); + return _this; + } + Terminal.prototype.setup = function () { + var _this = this; + Object.keys(DEFAULT_OPTIONS).forEach(function (key) { + if (_this.options[key] == null) { + _this.options[key] = DEFAULT_OPTIONS[key]; + } + _this[key] = _this.options[key]; + }); + this.parent = document ? document.body : null; + this.cols = this.options.cols || this.options.geometry[0]; + this.rows = this.options.rows || this.options.geometry[1]; + this.geometry = [this.cols, this.rows]; + if (this.options.handler) { + this.on('data', this.options.handler); + } + this.cursorState = 0; + this.cursorHidden = false; + this.sendDataQueue = ''; + this.customKeyEventHandler = null; + this.applicationKeypad = false; + this.applicationCursor = false; + this.originMode = false; + this.insertMode = false; + this.wraparoundMode = true; + this.bracketedPasteMode = false; + this.charset = null; + this.gcharset = null; + this.glevel = 0; + this.charsets = [null]; + this.readable = true; + this.writable = true; + this.defAttr = (0 << 18) | (257 << 9) | (256 << 0); + this.curAttr = (0 << 18) | (257 << 9) | (256 << 0); + this.params = []; + this.currentParam = 0; + this.prefix = ''; + this.postfix = ''; + this.writeBuffer = []; + this.writeInProgress = false; + this.xoffSentToCatchUp = false; + this.writeStopped = false; + this.surrogate_high = ''; + this.userScrolling = false; + this.inputHandler = new InputHandler_1.InputHandler(this); + this.parser = new Parser_1.Parser(this.inputHandler, this); + this.renderer = this.renderer || null; + this.selectionManager = this.selectionManager || null; + this.linkifier = this.linkifier || new Linkifier_1.Linkifier(this); + this._mouseZoneManager = this._mouseZoneManager || null; + this.buffers = new BufferSet_1.BufferSet(this); + this.buffer = this.buffers.active; + this.buffers.on('activate', function (buffer) { + _this.buffer = buffer; + }); + if (this.selectionManager) { + this.selectionManager.setBuffer(this.buffer); + } + }; + Terminal.prototype.eraseAttr = function () { + return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff); + }; + Terminal.prototype.focus = function () { + this.textarea.focus(); + }; + Object.defineProperty(Terminal.prototype, "isFocused", { + get: function () { + return document.activeElement === this.textarea; + }, + enumerable: true, + configurable: true + }); + Terminal.prototype.getOption = function (key) { + if (!(key in DEFAULT_OPTIONS)) { + throw new Error('No option with key "' + key + '"'); + } + if (typeof this.options[key] !== 'undefined') { + return this.options[key]; + } + return this[key]; + }; + Terminal.prototype.setOption = function (key, value) { + if (!(key in DEFAULT_OPTIONS)) { + throw new Error('No option with key "' + key + '"'); + } + switch (key) { + case 'bellStyle': + if (!value) { + value = 'none'; + } + break; + case 'cursorStyle': + if (!value) { + value = 'block'; + } + break; + case 'lineHeight': + if (value < 1) { + console.warn(key + " cannot be less than 1, value: " + value); + return; + } + case 'tabStopWidth': + if (value < 1) { + console.warn(key + " cannot be less than 1, value: " + value); + return; + } + break; + case 'theme': + if (this.renderer) { + this._setTheme(value); + return; + } + break; + case 'scrollback': + value = Math.min(value, Buffer_1.MAX_BUFFER_SIZE); + if (value < 0) { + console.warn(key + " cannot be less than 0, value: " + value); + return; + } + if (this.options[key] !== value) { + var newBufferLength = this.rows + value; + if (this.buffer.lines.length > newBufferLength) { + var amountToTrim = this.buffer.lines.length - newBufferLength; + var needsRefresh = (this.buffer.ydisp - amountToTrim < 0); + this.buffer.lines.trimStart(amountToTrim); + this.buffer.ybase = Math.max(this.buffer.ybase - amountToTrim, 0); + this.buffer.ydisp = Math.max(this.buffer.ydisp - amountToTrim, 0); + if (needsRefresh) { + this.refresh(0, this.rows - 1); + } + } + } + break; + } + this[key] = value; + this.options[key] = value; + switch (key) { + case 'fontFamily': + case 'fontSize': + this.renderer.clear(); + this.charMeasure.measure(this.options); + break; + case 'enableBold': + case 'letterSpacing': + case 'lineHeight': + this.renderer.clear(); + this.renderer.onResize(this.cols, this.rows, false); + this.refresh(0, this.rows - 1); + case 'scrollback': + this.buffers.resize(this.cols, this.rows); + this.viewport.syncScrollArea(); + break; + case 'tabStopWidth': + this.buffers.setupTabStops(); + break; + case 'bellSound': + case 'bellStyle': + this.syncBellSound(); + break; + } + if (this.renderer) { + this.renderer.onOptionsChanged(); + } + }; + Terminal.prototype._onTextAreaFocus = function () { + if (this.sendFocus) { + this.send(EscapeSequences_1.C0.ESC + '[I'); + } + this.element.classList.add('focus'); + this.showCursor(); + this.emit('focus'); + }; + ; + Terminal.prototype.blur = function () { + return this.textarea.blur(); + }; + Terminal.prototype._onTextAreaBlur = function () { + this.refresh(this.buffer.y, this.buffer.y); + if (this.sendFocus) { + this.send(EscapeSequences_1.C0.ESC + '[O'); + } + this.element.classList.remove('focus'); + this.emit('blur'); + }; + Terminal.prototype.initGlobal = function () { + var _this = this; + this.bindKeys(); + on(this.element, 'copy', function (event) { + if (!_this.hasSelection()) { + return; + } + Clipboard_1.copyHandler(event, _this, _this.selectionManager); + }); + var pasteHandlerWrapper = function (event) { return Clipboard_1.pasteHandler(event, _this); }; + on(this.textarea, 'paste', pasteHandlerWrapper); + on(this.element, 'paste', pasteHandlerWrapper); + if (Browser.isFirefox) { + on(this.element, 'mousedown', function (event) { + if (event.button === 2) { + Clipboard_1.rightClickHandler(event, _this.textarea, _this.selectionManager); + } + }); + } + else { + on(this.element, 'contextmenu', function (event) { + Clipboard_1.rightClickHandler(event, _this.textarea, _this.selectionManager); + }); + } + if (Browser.isLinux) { + on(this.element, 'auxclick', function (event) { + if (event.button === 1) { + Clipboard_1.moveTextAreaUnderMouseCursor(event, _this.textarea); + } + }); + } + }; + Terminal.prototype.bindKeys = function () { + var _this = this; + var self = this; + on(this.element, 'keydown', function (ev) { + if (document.activeElement !== this) { + return; + } + self._keyDown(ev); + }, true); + on(this.element, 'keypress', function (ev) { + if (document.activeElement !== this) { + return; + } + self._keyPress(ev); + }, true); + on(this.element, 'keyup', function (ev) { + if (!wasMondifierKeyOnlyEvent(ev)) { + _this.focus(); + } + }, true); + on(this.textarea, 'keydown', function (ev) { + _this._keyDown(ev); + }, true); + on(this.textarea, 'keypress', function (ev) { + _this._keyPress(ev); + _this.textarea.value = ''; + }, true); + on(this.textarea, 'compositionstart', function () { return _this.compositionHelper.compositionstart(); }); + on(this.textarea, 'compositionupdate', function (e) { return _this.compositionHelper.compositionupdate(e); }); + on(this.textarea, 'compositionend', function () { return _this.compositionHelper.compositionend(); }); + this.on('refresh', function () { return _this.compositionHelper.updateCompositionElements(); }); + this.on('refresh', function (data) { return _this.queueLinkification(data.start, data.end); }); + }; + Terminal.prototype.open = function (parent) { + var _this = this; + var i = 0; + var div; + this.parent = parent || this.parent; + if (!this.parent) { + throw new Error('Terminal requires a parent element.'); + } + this.context = this.parent.ownerDocument.defaultView; + this.document = this.parent.ownerDocument; + this.body = this.document.body; + CharAtlas_1.initialize(this.document); + this.element = this.document.createElement('div'); + this.element.classList.add('terminal'); + this.element.classList.add('xterm'); + this.element.setAttribute('tabindex', '0'); + this.viewportElement = document.createElement('div'); + this.viewportElement.classList.add('xterm-viewport'); + this.element.appendChild(this.viewportElement); + this.viewportScrollArea = document.createElement('div'); + this.viewportScrollArea.classList.add('xterm-scroll-area'); + this.viewportElement.appendChild(this.viewportScrollArea); + this.syncBellSound(); + this._mouseZoneManager = new MouseZoneManager_1.MouseZoneManager(this); + this.on('scroll', function () { return _this._mouseZoneManager.clearAll(); }); + this.linkifier.attachToDom(this._mouseZoneManager); + this.helperContainer = document.createElement('div'); + this.helperContainer.classList.add('xterm-helpers'); + this.element.appendChild(this.helperContainer); + this.textarea = document.createElement('textarea'); + this.textarea.classList.add('xterm-helper-textarea'); + this.textarea.setAttribute('autocorrect', 'off'); + this.textarea.setAttribute('autocapitalize', 'off'); + this.textarea.setAttribute('spellcheck', 'false'); + this.textarea.tabIndex = 0; + this.textarea.addEventListener('focus', function () { return _this._onTextAreaFocus(); }); + this.textarea.addEventListener('blur', function () { return _this._onTextAreaBlur(); }); + this.helperContainer.appendChild(this.textarea); + this.compositionView = document.createElement('div'); + this.compositionView.classList.add('composition-view'); + this.compositionHelper = new CompositionHelper_1.CompositionHelper(this.textarea, this.compositionView, this); + this.helperContainer.appendChild(this.compositionView); + this.charSizeStyleElement = document.createElement('style'); + this.helperContainer.appendChild(this.charSizeStyleElement); + this.parent.appendChild(this.element); + this.charMeasure = new CharMeasure_1.CharMeasure(document, this.helperContainer); + this.renderer = new Renderer_1.Renderer(this, this.options.theme); + this.options.theme = null; + this.viewport = new Viewport_1.Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure); + this.viewport.onThemeChanged(this.renderer.colorManager.colors); + this.on('cursormove', function () { return _this.renderer.onCursorMove(); }); + this.on('resize', function () { return _this.renderer.onResize(_this.cols, _this.rows, false); }); + this.on('blur', function () { return _this.renderer.onBlur(); }); + this.on('focus', function () { return _this.renderer.onFocus(); }); + window.addEventListener('resize', function () { return _this.renderer.onWindowResize(window.devicePixelRatio); }); + this.charMeasure.on('charsizechanged', function () { return _this.renderer.onResize(_this.cols, _this.rows, true); }); + this.renderer.on('resize', function (dimensions) { return _this.viewport.syncScrollArea(); }); + this.selectionManager = new SelectionManager_1.SelectionManager(this, this.buffer, this.charMeasure); + this.element.addEventListener('mousedown', function (e) { return _this.selectionManager.onMouseDown(e); }); + this.selectionManager.on('refresh', function (data) { return _this.renderer.onSelectionChanged(data.start, data.end); }); + this.selectionManager.on('newselection', function (text) { + _this.textarea.value = text; + _this.textarea.focus(); + _this.textarea.select(); + }); + this.on('scroll', function () { + _this.viewport.syncScrollArea(); + _this.selectionManager.refresh(); + }); + this.viewportElement.addEventListener('scroll', function () { return _this.selectionManager.refresh(); }); + this.mouseHelper = new MouseHelper_1.MouseHelper(this.renderer); + this.charMeasure.measure(this.options); + this.refresh(0, this.rows - 1); + this.initGlobal(); + this.bindMouse(); + }; + Terminal.prototype._setTheme = function (theme) { + var colors = this.renderer.setTheme(theme); + if (this.viewport) { + this.viewport.onThemeChanged(colors); + } + }; + Terminal.loadAddon = function (addon, callback) { + if (typeof exports === 'object' && typeof module === 'object') { + return require('./addons/' + addon + '/' + addon); + } + else if (typeof define === 'function') { + return require(['./addons/' + addon + '/' + addon], callback); + } + else { + console.error('Cannot load a module without a CommonJS or RequireJS environment.'); + return false; + } + }; + Terminal.prototype.bindMouse = function () { + var _this = this; + var el = this.element; + var self = this; + var pressed = 32; + function sendButton(ev) { + var button; + var pos; + button = getButton(ev); + pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows); + if (!pos) + return; + sendEvent(button, pos); + switch (ev.overrideType || ev.type) { + case 'mousedown': + pressed = button; + break; + case 'mouseup': + pressed = 32; + break; + case 'wheel': + break; + } + } + function sendMove(ev) { + var button = pressed; + var pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows); + if (!pos) + return; + button += 32; + sendEvent(button, pos); + } + function encode(data, ch) { + if (!self.utfMouse) { + if (ch === 255) { + data.push(0); + return; + } + if (ch > 127) + ch = 127; + data.push(ch); + } + else { + if (ch === 2047) { + data.push(0); + return; + } + if (ch < 127) { + data.push(ch); + } + else { + if (ch > 2047) + ch = 2047; + data.push(0xC0 | (ch >> 6)); + data.push(0x80 | (ch & 0x3F)); + } + } + } + function sendEvent(button, pos) { + if (self.vt300Mouse) { + button &= 3; + pos.x -= 32; + pos.y -= 32; + var data_1 = EscapeSequences_1.C0.ESC + '[24'; + if (button === 0) + data_1 += '1'; + else if (button === 1) + data_1 += '3'; + else if (button === 2) + data_1 += '5'; + else if (button === 3) + return; + else + data_1 += '0'; + data_1 += '~[' + pos.x + ',' + pos.y + ']\r'; + self.send(data_1); + return; + } + if (self.decLocator) { + button &= 3; + pos.x -= 32; + pos.y -= 32; + if (button === 0) + button = 2; + else if (button === 1) + button = 4; + else if (button === 2) + button = 6; + else if (button === 3) + button = 3; + self.send(EscapeSequences_1.C0.ESC + '[' + + button + + ';' + + (button === 3 ? 4 : 0) + + ';' + + pos.y + + ';' + + pos.x + + ';' + + pos.page || 0 + + '&w'); + return; + } + if (self.urxvtMouse) { + pos.x -= 32; + pos.y -= 32; + pos.x++; + pos.y++; + self.send(EscapeSequences_1.C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M'); + return; + } + if (self.sgrMouse) { + pos.x -= 32; + pos.y -= 32; + self.send(EscapeSequences_1.C0.ESC + '[<' + + (((button & 3) === 3 ? button & ~3 : button) - 32) + + ';' + + pos.x + + ';' + + pos.y + + ((button & 3) === 3 ? 'm' : 'M')); + return; + } + var data = []; + encode(data, button); + encode(data, pos.x); + encode(data, pos.y); + self.send(EscapeSequences_1.C0.ESC + '[M' + String.fromCharCode.apply(String, data)); + } + function getButton(ev) { + var button; + var shift; + var meta; + var ctrl; + var mod; + switch (ev.overrideType || ev.type) { + case 'mousedown': + button = ev.button != null + ? +ev.button + : ev.which != null + ? ev.which - 1 + : null; + if (Browser.isMSIE) { + button = button === 1 ? 0 : button === 4 ? 1 : button; + } + break; + case 'mouseup': + button = 3; + break; + case 'DOMMouseScroll': + button = ev.detail < 0 + ? 64 + : 65; + break; + case 'wheel': + button = ev.wheelDeltaY > 0 + ? 64 + : 65; + break; + } + shift = ev.shiftKey ? 4 : 0; + meta = ev.metaKey ? 8 : 0; + ctrl = ev.ctrlKey ? 16 : 0; + mod = shift | meta | ctrl; + if (self.vt200Mouse) { + mod &= ctrl; + } + else if (!self.normalMouse) { + mod = 0; + } + button = (32 + (mod << 2)) + button; + return button; + } + on(el, 'mousedown', function (ev) { + ev.preventDefault(); + _this.focus(); + if (!_this.mouseEvents || _this.selectionManager.shouldForceSelection(ev)) { + return; + } + sendButton(ev); + if (_this.vt200Mouse) { + ev.overrideType = 'mouseup'; + sendButton(ev); + return _this.cancel(ev); + } + if (_this.normalMouse) + on(_this.document, 'mousemove', sendMove); + if (!_this.x10Mouse) { + var handler_1 = function (ev) { + sendButton(ev); + if (_this.normalMouse) + off(_this.document, 'mousemove', sendMove); + off(_this.document, 'mouseup', handler_1); + return _this.cancel(ev); + }; + on(_this.document, 'mouseup', handler_1); + } + return _this.cancel(ev); + }); + on(el, 'wheel', function (ev) { + if (!_this.mouseEvents) + return; + if (_this.x10Mouse || _this.vt300Mouse || _this.decLocator) + return; + sendButton(ev); + ev.preventDefault(); + }); + on(el, 'wheel', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onWheel(ev); + return _this.cancel(ev); + }); + on(el, 'touchstart', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onTouchStart(ev); + return _this.cancel(ev); + }); + on(el, 'touchmove', function (ev) { + if (_this.mouseEvents) + return; + _this.viewport.onTouchMove(ev); + return _this.cancel(ev); + }); + }; + Terminal.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.readable = false; + this.writable = false; + this.handler = function () { }; + this.write = function () { }; + if (this.element && this.element.parentNode) { + this.element.parentNode.removeChild(this.element); + } + }; + Terminal.prototype.refresh = function (start, end) { + if (this.renderer) { + this.renderer.queueRefresh(start, end); + } + }; + Terminal.prototype.queueLinkification = function (start, end) { + if (this.linkifier) { + this.linkifier.linkifyRows(start, end); + } + }; + Terminal.prototype.showCursor = function () { + if (!this.cursorState) { + this.cursorState = 1; + this.refresh(this.buffer.y, this.buffer.y); + } + }; + Terminal.prototype.scroll = function (isWrapped) { + var newLine = this.blankLine(undefined, isWrapped); + var topRow = this.buffer.ybase + this.buffer.scrollTop; + var bottomRow = this.buffer.ybase + this.buffer.scrollBottom; + if (this.buffer.scrollTop === 0) { + var willBufferBeTrimmed = this.buffer.lines.length === this.buffer.lines.maxLength; + if (bottomRow === this.buffer.lines.length - 1) { + this.buffer.lines.push(newLine); + } + else { + this.buffer.lines.splice(bottomRow + 1, 0, newLine); + } + if (!willBufferBeTrimmed) { + this.buffer.ybase++; + if (!this.userScrolling) { + this.buffer.ydisp++; + } + } + else { + if (this.userScrolling) { + this.buffer.ydisp = Math.max(this.buffer.ydisp - 1, 0); + } + } + } + else { + var scrollRegionHeight = bottomRow - topRow + 1; + this.buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1); + this.buffer.lines.set(bottomRow, newLine); + } + if (!this.userScrolling) { + this.buffer.ydisp = this.buffer.ybase; + } + this.updateRange(this.buffer.scrollTop); + this.updateRange(this.buffer.scrollBottom); + this.emit('scroll', this.buffer.ydisp); + }; + Terminal.prototype.scrollLines = function (disp, suppressScrollEvent) { + if (disp < 0) { + if (this.buffer.ydisp === 0) { + return; + } + this.userScrolling = true; + } + else if (disp + this.buffer.ydisp >= this.buffer.ybase) { + this.userScrolling = false; + } + var oldYdisp = this.buffer.ydisp; + this.buffer.ydisp = Math.max(Math.min(this.buffer.ydisp + disp, this.buffer.ybase), 0); + if (oldYdisp === this.buffer.ydisp) { + return; + } + if (!suppressScrollEvent) { + this.emit('scroll', this.buffer.ydisp); + } + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.scrollPages = function (pageCount) { + this.scrollLines(pageCount * (this.rows - 1)); + }; + Terminal.prototype.scrollToTop = function () { + this.scrollLines(-this.buffer.ydisp); + }; + Terminal.prototype.scrollToBottom = function () { + this.scrollLines(this.buffer.ybase - this.buffer.ydisp); + }; + Terminal.prototype.write = function (data) { + var _this = this; + this.writeBuffer.push(data); + if (this.options.useFlowControl && !this.xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) { + this.send(EscapeSequences_1.C0.DC3); + this.xoffSentToCatchUp = true; + } + if (!this.writeInProgress && this.writeBuffer.length > 0) { + this.writeInProgress = true; + setTimeout(function () { + _this.innerWrite(); + }); + } + }; + Terminal.prototype.innerWrite = function () { + var _this = this; + var writeBatch = this.writeBuffer.splice(0, WRITE_BATCH_SIZE); + while (writeBatch.length > 0) { + var data = writeBatch.shift(); + if (this.xoffSentToCatchUp && writeBatch.length === 0 && this.writeBuffer.length === 0) { + this.send(EscapeSequences_1.C0.DC1); + this.xoffSentToCatchUp = false; + } + this.refreshStart = this.buffer.y; + this.refreshEnd = this.buffer.y; + var state = this.parser.parse(data); + this.parser.setState(state); + this.updateRange(this.buffer.y); + this.refresh(this.refreshStart, this.refreshEnd); + } + if (this.writeBuffer.length > 0) { + setTimeout(function () { return _this.innerWrite(); }, 0); + } + else { + this.writeInProgress = false; + } + }; + Terminal.prototype.writeln = function (data) { + this.write(data + '\r\n'); + }; + Terminal.prototype.attachCustomKeyEventHandler = function (customKeyEventHandler) { + this.customKeyEventHandler = customKeyEventHandler; + }; + Terminal.prototype.setHypertextLinkHandler = function (handler) { + if (!this.linkifier) { + throw new Error('Cannot attach a hypertext link handler before Terminal.open is called'); + } + this.linkifier.setHypertextLinkHandler(handler); + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.setHypertextValidationCallback = function (callback) { + if (!this.linkifier) { + throw new Error('Cannot attach a hypertext validation callback before Terminal.open is called'); + } + this.linkifier.setHypertextValidationCallback(callback); + this.refresh(0, this.rows - 1); + }; + Terminal.prototype.registerLinkMatcher = function (regex, handler, options) { + if (this.linkifier) { + var matcherId = this.linkifier.registerLinkMatcher(regex, handler, options); + this.refresh(0, this.rows - 1); + return matcherId; + } + return 0; + }; + Terminal.prototype.deregisterLinkMatcher = function (matcherId) { + if (this.linkifier) { + if (this.linkifier.deregisterLinkMatcher(matcherId)) { + this.refresh(0, this.rows - 1); + } + } + }; + Terminal.prototype.hasSelection = function () { + return this.selectionManager ? this.selectionManager.hasSelection : false; + }; + Terminal.prototype.getSelection = function () { + return this.selectionManager ? this.selectionManager.selectionText : ''; + }; + Terminal.prototype.clearSelection = function () { + if (this.selectionManager) { + this.selectionManager.clearSelection(); + } + }; + Terminal.prototype.selectAll = function () { + if (this.selectionManager) { + this.selectionManager.selectAll(); + } + }; + Terminal.prototype._keyDown = function (ev) { + if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) { + return false; + } + if (!this.compositionHelper.keydown(ev)) { + if (this.buffer.ybase !== this.buffer.ydisp) { + this.scrollToBottom(); + } + return false; + } + var result = this._evaluateKeyEscapeSequence(ev); + if (result.key === EscapeSequences_1.C0.DC3) { + this.writeStopped = true; + } + else if (result.key === EscapeSequences_1.C0.DC1) { + this.writeStopped = false; + } + if (result.scrollLines) { + this.scrollLines(result.scrollLines); + return this.cancel(ev, true); + } + if (isThirdLevelShift(this.browser, ev)) { + return true; + } + if (result.cancel) { + this.cancel(ev, true); + } + if (!result.key) { + return true; + } + this.emit('keydown', ev); + this.emit('key', result.key, ev); + this.showCursor(); + this.handler(result.key); + return this.cancel(ev, true); + }; + Terminal.prototype._evaluateKeyEscapeSequence = function (ev) { + var result = { + cancel: false, + key: undefined, + scrollLines: undefined + }; + var modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0); + switch (ev.keyCode) { + case 0: + if (ev.key === 'UIKeyInputUpArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OA'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[A'; + } + } + else if (ev.key === 'UIKeyInputLeftArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OD'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[D'; + } + } + else if (ev.key === 'UIKeyInputRightArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OC'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[C'; + } + } + else if (ev.key === 'UIKeyInputDownArrow') { + if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OB'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[B'; + } + } + break; + case 8: + if (ev.shiftKey) { + result.key = EscapeSequences_1.C0.BS; + break; + } + result.key = EscapeSequences_1.C0.DEL; + break; + case 9: + if (ev.shiftKey) { + result.key = EscapeSequences_1.C0.ESC + '[Z'; + break; + } + result.key = EscapeSequences_1.C0.HT; + result.cancel = true; + break; + case 13: + result.key = EscapeSequences_1.C0.CR; + result.cancel = true; + break; + case 27: + result.key = EscapeSequences_1.C0.ESC; + result.cancel = true; + break; + case 37: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'D'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3D') { + result.key = (this.browser.isMac) ? EscapeSequences_1.C0.ESC + 'b' : EscapeSequences_1.C0.ESC + '[1;5D'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OD'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[D'; + } + break; + case 39: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'C'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3C') { + result.key = (this.browser.isMac) ? EscapeSequences_1.C0.ESC + 'f' : EscapeSequences_1.C0.ESC + '[1;5C'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OC'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[C'; + } + break; + case 38: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'A'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3A') { + result.key = EscapeSequences_1.C0.ESC + '[1;5A'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OA'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[A'; + } + break; + case 40: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'B'; + if (result.key === EscapeSequences_1.C0.ESC + '[1;3B') { + result.key = EscapeSequences_1.C0.ESC + '[1;5B'; + } + } + else if (this.applicationCursor) { + result.key = EscapeSequences_1.C0.ESC + 'OB'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[B'; + } + break; + case 45: + if (!ev.shiftKey && !ev.ctrlKey) { + result.key = EscapeSequences_1.C0.ESC + '[2~'; + } + break; + case 46: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[3;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[3~'; + } + break; + case 36: + if (modifiers) + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'H'; + else if (this.applicationCursor) + result.key = EscapeSequences_1.C0.ESC + 'OH'; + else + result.key = EscapeSequences_1.C0.ESC + '[H'; + break; + case 35: + if (modifiers) + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'F'; + else if (this.applicationCursor) + result.key = EscapeSequences_1.C0.ESC + 'OF'; + else + result.key = EscapeSequences_1.C0.ESC + '[F'; + break; + case 33: + if (ev.shiftKey) { + result.scrollLines = -(this.rows - 1); + } + else { + result.key = EscapeSequences_1.C0.ESC + '[5~'; + } + break; + case 34: + if (ev.shiftKey) { + result.scrollLines = this.rows - 1; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[6~'; + } + break; + case 112: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'P'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OP'; + } + break; + case 113: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'Q'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OQ'; + } + break; + case 114: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'R'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OR'; + } + break; + case 115: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[1;' + (modifiers + 1) + 'S'; + } + else { + result.key = EscapeSequences_1.C0.ESC + 'OS'; + } + break; + case 116: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[15;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[15~'; + } + break; + case 117: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[17;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[17~'; + } + break; + case 118: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[18;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[18~'; + } + break; + case 119: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[19;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[19~'; + } + break; + case 120: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[20;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[20~'; + } + break; + case 121: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[21;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[21~'; + } + break; + case 122: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[23;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[23~'; + } + break; + case 123: + if (modifiers) { + result.key = EscapeSequences_1.C0.ESC + '[24;' + (modifiers + 1) + '~'; + } + else { + result.key = EscapeSequences_1.C0.ESC + '[24~'; + } + break; + default: + if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { + if (ev.keyCode >= 65 && ev.keyCode <= 90) { + result.key = String.fromCharCode(ev.keyCode - 64); + } + else if (ev.keyCode === 32) { + result.key = String.fromCharCode(0); + } + else if (ev.keyCode >= 51 && ev.keyCode <= 55) { + result.key = String.fromCharCode(ev.keyCode - 51 + 27); + } + else if (ev.keyCode === 56) { + result.key = String.fromCharCode(127); + } + else if (ev.keyCode === 219) { + result.key = String.fromCharCode(27); + } + else if (ev.keyCode === 220) { + result.key = String.fromCharCode(28); + } + else if (ev.keyCode === 221) { + result.key = String.fromCharCode(29); + } + } + else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) { + if (ev.keyCode >= 65 && ev.keyCode <= 90) { + result.key = EscapeSequences_1.C0.ESC + String.fromCharCode(ev.keyCode + 32); + } + else if (ev.keyCode === 192) { + result.key = EscapeSequences_1.C0.ESC + '`'; + } + else if (ev.keyCode >= 48 && ev.keyCode <= 57) { + result.key = EscapeSequences_1.C0.ESC + (ev.keyCode - 48); + } + } + else if (this.browser.isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) { + if (ev.keyCode === 65) { + this.selectAll(); + } + } + break; + } + return result; + }; + Terminal.prototype.setgLevel = function (g) { + this.glevel = g; + this.charset = this.charsets[g]; + }; + Terminal.prototype.setgCharset = function (g, charset) { + this.charsets[g] = charset; + if (this.glevel === g) { + this.charset = charset; + } + }; + Terminal.prototype._keyPress = function (ev) { + var key; + if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) { + return false; + } + this.cancel(ev); + if (ev.charCode) { + key = ev.charCode; + } + else if (ev.which == null) { + key = ev.keyCode; + } + else if (ev.which !== 0 && ev.charCode !== 0) { + key = ev.which; + } + else { + return false; + } + if (!key || ((ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this.browser, ev))) { + return false; + } + key = String.fromCharCode(key); + this.emit('keypress', key, ev); + this.emit('key', key, ev); + this.showCursor(); + this.handler(key); + return true; + }; + Terminal.prototype.send = function (data) { + var _this = this; + if (!this.sendDataQueue) { + setTimeout(function () { + _this.handler(_this.sendDataQueue); + _this.sendDataQueue = ''; + }, 1); + } + this.sendDataQueue += data; + }; + Terminal.prototype.bell = function () { + var _this = this; + this.emit('bell'); + if (this.soundBell()) + this.bellAudioElement.play(); + if (this.visualBell()) { + this.element.classList.add('visual-bell-active'); + clearTimeout(this.visualBellTimer); + this.visualBellTimer = window.setTimeout(function () { + _this.element.classList.remove('visual-bell-active'); + }, 200); + } + }; + Terminal.prototype.log = function (text, data) { + if (!this.options.debug) + return; + if (!this.context.console || !this.context.console.log) + return; + this.context.console.log(text, data); + }; + Terminal.prototype.error = function (text, data) { + if (!this.options.debug) + return; + if (!this.context.console || !this.context.console.error) + return; + this.context.console.error(text, data); + }; + Terminal.prototype.resize = function (x, y) { + if (isNaN(x) || isNaN(y)) { + return; + } + if (x === this.cols && y === this.rows) { + if (!this.charMeasure.width || !this.charMeasure.height) { + this.charMeasure.measure(this.options); + } + return; + } + if (x < 1) + x = 1; + if (y < 1) + y = 1; + this.buffers.resize(x, y); + this.cols = x; + this.rows = y; + this.buffers.setupTabStops(this.cols); + this.charMeasure.measure(this.options); + this.refresh(0, this.rows - 1); + this.geometry = [this.cols, this.rows]; + this.emit('resize', { cols: x, rows: y }); + }; + Terminal.prototype.updateRange = function (y) { + if (y < this.refreshStart) + this.refreshStart = y; + if (y > this.refreshEnd) + this.refreshEnd = y; + }; + Terminal.prototype.maxRange = function () { + this.refreshStart = 0; + this.refreshEnd = this.rows - 1; + }; + Terminal.prototype.eraseRight = function (x, y) { + var line = this.buffer.lines.get(this.buffer.ybase + y); + if (!line) { + return; + } + var ch = [this.eraseAttr(), ' ', 1, 32]; + for (; x < this.cols; x++) { + line[x] = ch; + } + this.updateRange(y); + }; + Terminal.prototype.eraseLeft = function (x, y) { + var line = this.buffer.lines.get(this.buffer.ybase + y); + if (!line) { + return; + } + var ch = [this.eraseAttr(), ' ', 1, 32]; + x++; + while (x--) { + line[x] = ch; + } + this.updateRange(y); + }; + Terminal.prototype.clear = function () { + if (this.buffer.ybase === 0 && this.buffer.y === 0) { + return; + } + this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)); + this.buffer.lines.length = 1; + this.buffer.ydisp = 0; + this.buffer.ybase = 0; + this.buffer.y = 0; + for (var i = 1; i < this.rows; i++) { + this.buffer.lines.push(this.blankLine()); + } + this.refresh(0, this.rows - 1); + this.emit('scroll', this.buffer.ydisp); + }; + Terminal.prototype.eraseLine = function (y) { + this.eraseRight(0, y); + }; + Terminal.prototype.blankLine = function (cur, isWrapped, cols) { + var attr = cur ? this.eraseAttr() : this.defAttr; + var ch = [attr, ' ', 1, 32]; + var line = []; + if (isWrapped) { + line.isWrapped = isWrapped; + } + cols = cols || this.cols; + for (var i = 0; i < cols; i++) { + line[i] = ch; + } + return line; + }; + Terminal.prototype.ch = function (cur) { + if (cur) { + return [this.eraseAttr(), ' ', 1, 32]; + } + return [this.defAttr, ' ', 1, 32]; + }; + Terminal.prototype.is = function (term) { + return (this.options.termName + '').indexOf(term) === 0; + }; + Terminal.prototype.handler = function (data) { + if (this.options.disableStdin) { + return; + } + if (this.selectionManager && this.selectionManager.hasSelection) { + this.selectionManager.clearSelection(); + } + if (this.buffer.ybase !== this.buffer.ydisp) { + this.scrollToBottom(); + } + this.emit('data', data); + }; + Terminal.prototype.handleTitle = function (title) { + this.emit('title', title); + }; + Terminal.prototype.index = function () { + this.buffer.y++; + if (this.buffer.y > this.buffer.scrollBottom) { + this.buffer.y--; + this.scroll(); + } + if (this.buffer.x >= this.cols) { + this.buffer.x--; + } + }; + Terminal.prototype.reverseIndex = function () { + if (this.buffer.y === this.buffer.scrollTop) { + var scrollRegionHeight = this.buffer.scrollBottom - this.buffer.scrollTop; + this.buffer.lines.shiftElements(this.buffer.y + this.buffer.ybase, scrollRegionHeight, 1); + this.buffer.lines.set(this.buffer.y + this.buffer.ybase, this.blankLine(true)); + this.updateRange(this.buffer.scrollTop); + this.updateRange(this.buffer.scrollBottom); + } + else { + this.buffer.y--; + } + }; + Terminal.prototype.reset = function () { + this.options.rows = this.rows; + this.options.cols = this.cols; + var customKeyEventHandler = this.customKeyEventHandler; + var inputHandler = this.inputHandler; + var buffers = this.buffers; + this.setup(); + this.customKeyEventHandler = customKeyEventHandler; + this.inputHandler = inputHandler; + this.buffers = buffers; + this.refresh(0, this.rows - 1); + this.viewport.syncScrollArea(); + }; + Terminal.prototype.tabSet = function () { + this.buffer.tabs[this.buffer.x] = true; + }; + Terminal.prototype.cancel = function (ev, force) { + if (!this.options.cancelEvents && !force) { + return; + } + ev.preventDefault(); + ev.stopPropagation(); + return false; + }; + Terminal.prototype.matchColor = function (r1, g1, b1) { + return matchColor_(r1, g1, b1); + }; + Terminal.prototype.visualBell = function () { + return this.options.bellStyle === 'visual' || + this.options.bellStyle === 'both'; + }; + Terminal.prototype.soundBell = function () { + return this.options.bellStyle === 'sound' || + this.options.bellStyle === 'both'; + }; + Terminal.prototype.syncBellSound = function () { + if (this.soundBell() && this.bellAudioElement) { + this.bellAudioElement.setAttribute('src', this.options.bellSound); + } + else if (this.soundBell()) { + this.bellAudioElement = document.createElement('audio'); + this.bellAudioElement.setAttribute('preload', 'auto'); + this.bellAudioElement.setAttribute('src', this.options.bellSound); + this.helperContainer.appendChild(this.bellAudioElement); + } + else if (this.bellAudioElement) { + this.helperContainer.removeChild(this.bellAudioElement); + } + }; + return Terminal; +}(EventEmitter_1.EventEmitter)); +exports.Terminal = Terminal; +function globalOn(el, type, handler, capture) { + if (!Array.isArray(el)) { + el = [el]; + } + el.forEach(function (element) { + element.addEventListener(type, handler, capture || false); + }); +} +var on = globalOn; +function off(el, type, handler, capture) { + if (capture === void 0) { capture = false; } + el.removeEventListener(type, handler, capture); +} +function isThirdLevelShift(browser, ev) { + var thirdLevelKey = (browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) || + (browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey); + if (ev.type === 'keypress') { + return thirdLevelKey; + } + return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47); +} +function wasMondifierKeyOnlyEvent(ev) { + return ev.keyCode === 16 || + ev.keyCode === 17 || + ev.keyCode === 18; +} +var vcolors = (function () { + var result = ColorManager_1.DEFAULT_ANSI_COLORS.map(function (c) { + c = c.substring(1); + return [ + parseInt(c.substring(0, 2), 16), + parseInt(c.substring(2, 4), 16), + parseInt(c.substring(4, 6), 16) + ]; + }); + var r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]; + for (var i = 0; i < 216; i++) { + result.push([ + r[(i / 36) % 6 | 0], + r[(i / 6) % 6 | 0], + r[i % 6] + ]); + } + var c; + for (var i = 0; i < 24; i++) { + c = 8 + i * 10; + result.push([c, c, c]); + } + return result; +})(); +var matchColorCache = {}; +function matchColorDistance(r1, g1, b1, r2, g2, b2) { + return Math.pow(30 * (r1 - r2), 2) + + Math.pow(59 * (g1 - g2), 2) + + Math.pow(11 * (b1 - b2), 2); +} +; +function matchColor_(r1, g1, b1) { + var hash = (r1 << 16) | (g1 << 8) | b1; + if (matchColorCache[hash] != null) { + return matchColorCache[hash]; + } + var ldiff = Infinity; + var li = -1; + var i = 0; + var c; + var r2; + var g2; + var b2; + var diff; + for (; i < vcolors.length; i++) { + c = vcolors[i]; + r2 = c[0]; + g2 = c[1]; + b2 = c[2]; + diff = matchColorDistance(r1, g1, b1, r2, g2, b2); + if (diff === 0) { + li = i; + break; + } + if (diff < ldiff) { + ldiff = diff; + li = i; + } + } + return matchColorCache[hash] = li; +} + + + +},{"./Buffer":1,"./BufferSet":2,"./CompositionHelper":5,"./EscapeSequences":6,"./EventEmitter":7,"./InputHandler":8,"./Linkifier":9,"./Parser":10,"./SelectionManager":11,"./Viewport":15,"./handlers/Clipboard":16,"./input/MouseZoneManager":17,"./renderer/CharAtlas":19,"./renderer/ColorManager":20,"./renderer/Renderer":24,"./utils/Browser":28,"./utils/CharMeasure":29,"./utils/MouseHelper":32,"./utils/Sounds":33}],14:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var LinkHoverEventTypes; +(function (LinkHoverEventTypes) { + LinkHoverEventTypes["HOVER"] = "linkhover"; + LinkHoverEventTypes["TOOLTIP"] = "linktooltip"; + LinkHoverEventTypes["LEAVE"] = "linkleave"; +})(LinkHoverEventTypes = exports.LinkHoverEventTypes || (exports.LinkHoverEventTypes = {})); +; + + + +},{}],15:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Viewport = (function () { + function Viewport(terminal, viewportElement, scrollArea, charMeasure) { + var _this = this; + this.terminal = terminal; + this.viewportElement = viewportElement; + this.scrollArea = scrollArea; + this.charMeasure = charMeasure; + this.currentRowHeight = 0; + this.lastRecordedBufferLength = 0; + this.lastRecordedViewportHeight = 0; + this.lastRecordedBufferHeight = 0; + this.viewportElement.addEventListener('scroll', this.onScroll.bind(this)); + setTimeout(function () { return _this.syncScrollArea(); }, 0); + } + Viewport.prototype.onThemeChanged = function (colors) { + this.viewportElement.style.backgroundColor = colors.background; + }; + Viewport.prototype.refresh = function () { + if (this.charMeasure.height > 0) { + this.currentRowHeight = this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio; + if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) { + this.lastRecordedViewportHeight = this.terminal.renderer.dimensions.canvasHeight; + this.viewportElement.style.height = this.lastRecordedViewportHeight + 'px'; + } + var newBufferHeight = Math.round(this.currentRowHeight * this.lastRecordedBufferLength); + if (this.lastRecordedBufferHeight !== newBufferHeight) { + this.lastRecordedBufferHeight = newBufferHeight; + this.scrollArea.style.height = this.lastRecordedBufferHeight + 'px'; + } + } + }; + Viewport.prototype.syncScrollArea = function () { + if (this.lastRecordedBufferLength !== this.terminal.buffer.lines.length) { + this.lastRecordedBufferLength = this.terminal.buffer.lines.length; + this.refresh(); + } + else if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) { + this.refresh(); + } + else { + if (this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio !== this.currentRowHeight) { + this.refresh(); + } + } + var scrollTop = this.terminal.buffer.ydisp * this.currentRowHeight; + if (this.viewportElement.scrollTop !== scrollTop) { + this.viewportElement.scrollTop = scrollTop; + } + }; + Viewport.prototype.onScroll = function (ev) { + var newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight); + var diff = newRow - this.terminal.buffer.ydisp; + this.terminal.scrollLines(diff, true); + }; + Viewport.prototype.onWheel = function (ev) { + if (ev.deltaY === 0) { + return; + } + var multiplier = 1; + if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) { + multiplier = this.currentRowHeight; + } + else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) { + multiplier = this.currentRowHeight * this.terminal.rows; + } + this.viewportElement.scrollTop += ev.deltaY * multiplier; + ev.preventDefault(); + }; + ; + Viewport.prototype.onTouchStart = function (ev) { + this.lastTouchY = ev.touches[0].pageY; + }; + ; + Viewport.prototype.onTouchMove = function (ev) { + var deltaY = this.lastTouchY - ev.touches[0].pageY; + this.lastTouchY = ev.touches[0].pageY; + if (deltaY === 0) { + return; + } + this.viewportElement.scrollTop += deltaY; + ev.preventDefault(); + }; + ; + return Viewport; +}()); +exports.Viewport = Viewport; + + + +},{}],16:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function prepareTextForTerminal(text, isMSWindows) { + if (isMSWindows) { + return text.replace(/\r?\n/g, '\r'); + } + return text; +} +exports.prepareTextForTerminal = prepareTextForTerminal; +function bracketTextForPaste(text, bracketedPasteMode) { + if (bracketedPasteMode) { + return '\x1b[200~' + text + '\x1b[201~'; + } + return text; +} +exports.bracketTextForPaste = bracketTextForPaste; +function copyHandler(ev, term, selectionManager) { + if (term.browser.isMSIE) { + window.clipboardData.setData('Text', selectionManager.selectionText); + } + else { + ev.clipboardData.setData('text/plain', selectionManager.selectionText); + } + ev.preventDefault(); +} +exports.copyHandler = copyHandler; +function pasteHandler(ev, term) { + ev.stopPropagation(); + var text; + var dispatchPaste = function (text) { + text = prepareTextForTerminal(text, term.browser.isMSWindows); + text = bracketTextForPaste(text, term.bracketedPasteMode); + term.handler(text); + term.textarea.value = ''; + term.emit('paste', text); + term.cancel(ev); + }; + if (term.browser.isMSIE) { + if (window.clipboardData) { + text = window.clipboardData.getData('Text'); + dispatchPaste(text); + } + } + else { + if (ev.clipboardData) { + text = ev.clipboardData.getData('text/plain'); + dispatchPaste(text); + } + } +} +exports.pasteHandler = pasteHandler; +function moveTextAreaUnderMouseCursor(ev, textarea) { + textarea.style.position = 'fixed'; + textarea.style.width = '20px'; + textarea.style.height = '20px'; + textarea.style.left = (ev.clientX - 10) + 'px'; + textarea.style.top = (ev.clientY - 10) + 'px'; + textarea.style.zIndex = '1000'; + textarea.focus(); + setTimeout(function () { + textarea.style.position = null; + textarea.style.width = null; + textarea.style.height = null; + textarea.style.left = null; + textarea.style.top = null; + textarea.style.zIndex = null; + }, 4); +} +exports.moveTextAreaUnderMouseCursor = moveTextAreaUnderMouseCursor; +function rightClickHandler(ev, textarea, selectionManager) { + moveTextAreaUnderMouseCursor(ev, textarea); + textarea.value = selectionManager.selectionText; + textarea.select(); +} +exports.rightClickHandler = rightClickHandler; + + + +},{}],17:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var HOVER_DURATION = 500; +var MouseZoneManager = (function () { + function MouseZoneManager(_terminal) { + var _this = this; + this._terminal = _terminal; + this._zones = []; + this._areZonesActive = false; + this._tooltipTimeout = null; + this._currentZone = null; + this._lastHoverCoords = [null, null]; + this._terminal.element.addEventListener('mousedown', function (e) { return _this._onMouseDown(e); }); + this._mouseMoveListener = function (e) { return _this._onMouseMove(e); }; + this._clickListener = function (e) { return _this._onClick(e); }; + } + MouseZoneManager.prototype.add = function (zone) { + this._zones.push(zone); + if (this._zones.length === 1) { + this._activate(); + } + }; + MouseZoneManager.prototype.clearAll = function (start, end) { + if (this._zones.length === 0) { + return; + } + if (!end) { + start = 0; + end = this._terminal.rows - 1; + } + for (var i = 0; i < this._zones.length; i++) { + var zone = this._zones[i]; + if (zone.y > start && zone.y <= end + 1) { + if (this._currentZone && this._currentZone === zone) { + this._currentZone.leaveCallback(); + this._currentZone = null; + } + this._zones.splice(i--, 1); + } + } + if (this._zones.length === 0) { + this._deactivate(); + } + }; + MouseZoneManager.prototype._activate = function () { + if (!this._areZonesActive) { + this._areZonesActive = true; + this._terminal.element.addEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.addEventListener('click', this._clickListener); + } + }; + MouseZoneManager.prototype._deactivate = function () { + if (this._areZonesActive) { + this._areZonesActive = false; + this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener); + this._terminal.element.removeEventListener('click', this._clickListener); + } + }; + MouseZoneManager.prototype._onMouseMove = function (e) { + if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) { + this._onHover(e); + this._lastHoverCoords = [e.pageX, e.pageY]; + } + }; + MouseZoneManager.prototype._onHover = function (e) { + var _this = this; + var zone = this._findZoneEventAt(e); + if (zone === this._currentZone) { + return; + } + if (this._currentZone) { + this._currentZone.leaveCallback(); + this._currentZone = null; + if (this._tooltipTimeout) { + clearTimeout(this._tooltipTimeout); + } + } + if (!zone) { + return; + } + this._currentZone = zone; + if (zone.hoverCallback) { + zone.hoverCallback(e); + } + this._tooltipTimeout = setTimeout(function () { return _this._onTooltip(e); }, HOVER_DURATION); + }; + MouseZoneManager.prototype._onTooltip = function (e) { + this._tooltipTimeout = null; + var zone = this._findZoneEventAt(e); + if (zone && zone.tooltipCallback) { + zone.tooltipCallback(e); + } + }; + MouseZoneManager.prototype._onMouseDown = function (e) { + if (!this._areZonesActive) { + return; + } + var zone = this._findZoneEventAt(e); + if (zone) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + }; + MouseZoneManager.prototype._onClick = function (e) { + var zone = this._findZoneEventAt(e); + if (zone) { + zone.clickCallback(e); + e.preventDefault(); + e.stopImmediatePropagation(); + } + }; + MouseZoneManager.prototype._findZoneEventAt = function (e) { + var coords = this._terminal.mouseHelper.getCoords(e, this._terminal.element, this._terminal.charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows); + if (!coords) { + return null; + } + for (var i = 0; i < this._zones.length; i++) { + var zone = this._zones[i]; + if (zone.y === coords[1] && zone.x1 <= coords[0] && zone.x2 > coords[0]) { + return zone; + } + } + ; + return null; + }; + return MouseZoneManager; +}()); +exports.MouseZoneManager = MouseZoneManager; +var MouseZone = (function () { + function MouseZone(x1, x2, y, clickCallback, hoverCallback, tooltipCallback, leaveCallback) { + this.x1 = x1; + this.x2 = x2; + this.y = y; + this.clickCallback = clickCallback; + this.hoverCallback = hoverCallback; + this.tooltipCallback = tooltipCallback; + this.leaveCallback = leaveCallback; + } + return MouseZone; +}()); +exports.MouseZone = MouseZone; + + + +},{}],18:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var CharAtlas_1 = require("./CharAtlas"); +var Buffer_1 = require("../Buffer"); +exports.INVERTED_DEFAULT_COLOR = -1; +var DIM_OPACITY = 0.5; +var BaseRenderLayer = (function () { + function BaseRenderLayer(container, id, zIndex, _alpha, _colors) { + this._alpha = _alpha; + this._colors = _colors; + this._scaledCharWidth = 0; + this._scaledCharHeight = 0; + this._scaledCellWidth = 0; + this._scaledCellHeight = 0; + this._scaledCharLeft = 0; + this._scaledCharTop = 0; + this._canvas = document.createElement('canvas'); + this._canvas.id = "xterm-" + id + "-layer"; + this._canvas.style.zIndex = zIndex.toString(); + this._ctx = this._canvas.getContext('2d', { alpha: _alpha }); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + if (!_alpha) { + this.clearAll(); + } + container.appendChild(this._canvas); + } + BaseRenderLayer.prototype.onOptionsChanged = function (terminal) { }; + BaseRenderLayer.prototype.onBlur = function (terminal) { }; + BaseRenderLayer.prototype.onFocus = function (terminal) { }; + BaseRenderLayer.prototype.onCursorMove = function (terminal) { }; + BaseRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { }; + BaseRenderLayer.prototype.onSelectionChanged = function (terminal, start, end) { }; + BaseRenderLayer.prototype.onThemeChanged = function (terminal, colorSet) { + this._refreshCharAtlas(terminal, colorSet); + }; + BaseRenderLayer.prototype._refreshCharAtlas = function (terminal, colorSet) { + var _this = this; + if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) { + return; + } + this._charAtlas = null; + var result = CharAtlas_1.acquireCharAtlas(terminal, this._colors, this._scaledCharWidth, this._scaledCharHeight); + if (result instanceof HTMLCanvasElement) { + this._charAtlas = result; + } + else { + result.then(function (bitmap) { return _this._charAtlas = bitmap; }); + } + }; + BaseRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + this._scaledCellWidth = dim.scaledCellWidth; + this._scaledCellHeight = dim.scaledCellHeight; + this._scaledCharWidth = dim.scaledCharWidth; + this._scaledCharHeight = dim.scaledCharHeight; + this._scaledCharLeft = dim.scaledCharLeft; + this._scaledCharTop = dim.scaledCharTop; + this._canvas.width = dim.scaledCanvasWidth; + this._canvas.height = dim.scaledCanvasHeight; + this._canvas.style.width = dim.canvasWidth + "px"; + this._canvas.style.height = dim.canvasHeight + "px"; + if (!this._alpha) { + this.clearAll(); + } + if (charSizeChanged) { + this._refreshCharAtlas(terminal, this._colors); + } + }; + BaseRenderLayer.prototype.fillCells = function (x, y, width, height) { + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + }; + BaseRenderLayer.prototype.fillBottomLineAtCells = function (x, y, width) { + if (width === void 0) { width = 1; } + this._ctx.fillRect(x * this._scaledCellWidth, (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1, width * this._scaledCellWidth, window.devicePixelRatio); + }; + BaseRenderLayer.prototype.fillLeftLineAtCell = function (x, y) { + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, window.devicePixelRatio, this._scaledCellHeight); + }; + BaseRenderLayer.prototype.strokeRectAtCell = function (x, y, width, height) { + this._ctx.lineWidth = window.devicePixelRatio; + this._ctx.strokeRect(x * this._scaledCellWidth + window.devicePixelRatio / 2, y * this._scaledCellHeight + (window.devicePixelRatio / 2), width * this._scaledCellWidth - window.devicePixelRatio, (height * this._scaledCellHeight) - window.devicePixelRatio); + }; + BaseRenderLayer.prototype.clearAll = function () { + if (this._alpha) { + this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); + } + else { + this._ctx.fillStyle = this._colors.background; + this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height); + } + }; + BaseRenderLayer.prototype.clearCells = function (x, y, width, height) { + if (this._alpha) { + this._ctx.clearRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + } + else { + this._ctx.fillStyle = this._colors.background; + this._ctx.fillRect(x * this._scaledCellWidth, y * this._scaledCellHeight, width * this._scaledCellWidth, height * this._scaledCellHeight); + } + }; + BaseRenderLayer.prototype.fillCharTrueColor = function (terminal, charData, x, y) { + this._ctx.font = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + this._ctx.textBaseline = 'top'; + this._clipRow(terminal, y); + this._ctx.fillText(charData[Buffer_1.CHAR_DATA_CHAR_INDEX], x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop); + }; + BaseRenderLayer.prototype.drawChar = function (terminal, char, code, width, x, y, fg, bg, bold, dim) { + var colorIndex = 0; + if (fg < 256) { + colorIndex = fg + 2; + } + else { + if (bold && terminal.options.enableBold) { + colorIndex = 1; + } + } + var isAscii = code < 256; + var isBasicColor = (colorIndex > 1 && fg < 16) && (fg < 8 || bold); + var isDefaultColor = fg >= 256; + var isDefaultBackground = bg >= 256; + if (this._charAtlas && isAscii && (isBasicColor || isDefaultColor) && isDefaultBackground) { + var charAtlasCellWidth = this._scaledCharWidth + CharAtlas_1.CHAR_ATLAS_CELL_SPACING; + var charAtlasCellHeight = this._scaledCharHeight + CharAtlas_1.CHAR_ATLAS_CELL_SPACING; + if (dim) { + this._ctx.globalAlpha = DIM_OPACITY; + } + if (bold && !terminal.options.enableBold) { + if (colorIndex > 1) { + colorIndex -= 8; + } + } + this._ctx.drawImage(this._charAtlas, code * charAtlasCellWidth, colorIndex * charAtlasCellHeight, charAtlasCellWidth, this._scaledCharHeight, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop, charAtlasCellWidth, this._scaledCharHeight); + } + else { + this._drawUncachedChar(terminal, char, width, fg, x, y, bold, dim); + } + }; + BaseRenderLayer.prototype._drawUncachedChar = function (terminal, char, width, fg, x, y, bold, dim) { + this._ctx.save(); + this._ctx.font = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + if (bold && terminal.options.enableBold) { + this._ctx.font = "bold " + this._ctx.font; + } + this._ctx.textBaseline = 'top'; + if (fg === exports.INVERTED_DEFAULT_COLOR) { + this._ctx.fillStyle = this._colors.background; + } + else if (fg < 256) { + this._ctx.fillStyle = this._colors.ansi[fg]; + } + else { + this._ctx.fillStyle = this._colors.foreground; + } + this._clipRow(terminal, y); + if (dim) { + this._ctx.globalAlpha = DIM_OPACITY; + } + this._ctx.fillText(char, x * this._scaledCellWidth + this._scaledCharLeft, y * this._scaledCellHeight + this._scaledCharTop); + this._ctx.restore(); + }; + BaseRenderLayer.prototype._clipRow = function (terminal, y) { + this._ctx.beginPath(); + this._ctx.rect(0, y * this._scaledCellHeight, terminal.cols * this._scaledCellWidth, this._scaledCellHeight); + this._ctx.clip(); + }; + return BaseRenderLayer; +}()); +exports.BaseRenderLayer = BaseRenderLayer; + + + +},{"../Buffer":1,"./CharAtlas":19}],19:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Browser_1 = require("../utils/Browser"); +exports.CHAR_ATLAS_CELL_SPACING = 1; +var charAtlasCache = []; +function acquireCharAtlas(terminal, colors, scaledCharWidth, scaledCharHeight) { + var newConfig = generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors); + for (var i = 0; i < charAtlasCache.length; i++) { + var entry = charAtlasCache[i]; + var ownedByIndex = entry.ownedBy.indexOf(terminal); + if (ownedByIndex >= 0) { + if (configEquals(entry.config, newConfig)) { + return entry.bitmap; + } + else { + if (entry.ownedBy.length === 1) { + charAtlasCache.splice(i, 1); + } + else { + entry.ownedBy.splice(ownedByIndex, 1); + } + break; + } + } + } + for (var i = 0; i < charAtlasCache.length; i++) { + var entry = charAtlasCache[i]; + if (configEquals(entry.config, newConfig)) { + entry.ownedBy.push(terminal); + return entry.bitmap; + } + } + var newEntry = { + bitmap: generator.generate(scaledCharWidth, scaledCharHeight, terminal.options.fontSize, terminal.options.fontFamily, colors.background, colors.foreground, colors.ansi), + config: newConfig, + ownedBy: [terminal] + }; + charAtlasCache.push(newEntry); + return newEntry.bitmap; +} +exports.acquireCharAtlas = acquireCharAtlas; +function generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors) { + var clonedColors = { + foreground: colors.foreground, + background: colors.background, + cursor: null, + cursorAccent: null, + selection: null, + ansi: colors.ansi.slice(0, 16) + }; + return { + scaledCharWidth: scaledCharWidth, + scaledCharHeight: scaledCharHeight, + fontFamily: terminal.options.fontFamily, + fontSize: terminal.options.fontSize, + colors: clonedColors + }; +} +function configEquals(a, b) { + for (var i = 0; i < a.colors.ansi.length; i++) { + if (a.colors.ansi[i] !== b.colors.ansi[i]) { + return false; + } + } + return a.fontFamily === b.fontFamily && + a.fontSize === b.fontSize && + a.scaledCharWidth === b.scaledCharWidth && + a.scaledCharHeight === b.scaledCharHeight && + a.colors.foreground === b.colors.foreground && + a.colors.background === b.colors.background; +} +var generator; +function initialize(document) { + if (!generator) { + generator = new CharAtlasGenerator(document); + } +} +exports.initialize = initialize; +var CharAtlasGenerator = (function () { + function CharAtlasGenerator(_document) { + this._document = _document; + this._canvas = this._document.createElement('canvas'); + this._ctx = this._canvas.getContext('2d', { alpha: false }); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + } + CharAtlasGenerator.prototype.generate = function (scaledCharWidth, scaledCharHeight, fontSize, fontFamily, background, foreground, ansiColors) { + var cellWidth = scaledCharWidth + exports.CHAR_ATLAS_CELL_SPACING; + var cellHeight = scaledCharHeight + exports.CHAR_ATLAS_CELL_SPACING; + this._canvas.width = 255 * cellWidth; + this._canvas.height = (2 + 16) * cellHeight; + this._ctx.fillStyle = background; + this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height); + this._ctx.save(); + this._ctx.fillStyle = foreground; + this._ctx.font = fontSize * window.devicePixelRatio + "px " + fontFamily; + this._ctx.textBaseline = 'top'; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, 0, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, 0); + this._ctx.restore(); + } + this._ctx.save(); + this._ctx.font = "bold " + this._ctx.font; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, cellHeight, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight); + this._ctx.restore(); + } + this._ctx.restore(); + this._ctx.font = fontSize * window.devicePixelRatio + "px " + fontFamily; + for (var colorIndex = 0; colorIndex < 16; colorIndex++) { + if (colorIndex === 8) { + this._ctx.font = "bold " + this._ctx.font; + } + var y = (colorIndex + 2) * cellHeight; + for (var i = 0; i < 256; i++) { + this._ctx.save(); + this._ctx.beginPath(); + this._ctx.rect(i * cellWidth, y, cellWidth, cellHeight); + this._ctx.clip(); + this._ctx.fillStyle = ansiColors[colorIndex]; + this._ctx.fillText(String.fromCharCode(i), i * cellWidth, y); + this._ctx.restore(); + } + } + this._ctx.restore(); + if (!('createImageBitmap' in window) || Browser_1.isFirefox) { + var result = this._canvas; + this._canvas = this._document.createElement('canvas'); + this._ctx = this._canvas.getContext('2d'); + this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + return result; + } + var charAtlasImageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height); + var r = parseInt(background.substr(1, 2), 16); + var g = parseInt(background.substr(3, 2), 16); + var b = parseInt(background.substr(5, 2), 16); + this._clearColor(charAtlasImageData, r, g, b); + var promise = window.createImageBitmap(charAtlasImageData); + this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); + return promise; + }; + CharAtlasGenerator.prototype._clearColor = function (imageData, r, g, b) { + for (var offset = 0; offset < imageData.data.length; offset += 4) { + if (imageData.data[offset] === r && + imageData.data[offset + 1] === g && + imageData.data[offset + 2] === b) { + imageData.data[offset + 3] = 0; + } + } + }; + return CharAtlasGenerator; +}()); + + + +},{"../utils/Browser":28}],20:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var DEFAULT_FOREGROUND = '#ffffff'; +var DEFAULT_BACKGROUND = '#333333'; +var DEFAULT_CURSOR = '#ffffff'; +var DEFAULT_CURSOR_ACCENT = '#333333'; +var DEFAULT_SELECTION = 'rgba(255, 255, 255, 0.3)'; +exports.DEFAULT_ANSI_COLORS = [ + '#2e3436', + '#cc0000', + '#4e9a06', + '#c4a000', + '#3465a4', + '#75507b', + '#06989a', + '#d3d7cf', + '#555753', + '#ef2929', + '#8ae234', + '#fce94f', + '#729fcf', + '#ad7fa8', + '#34e2e2', + '#eeeeec' +]; +function generate256Colors(first16Colors) { + var colors = first16Colors.slice(); + var v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]; + for (var i = 0; i < 216; i++) { + var r = toPaddedHex(v[(i / 36) % 6 | 0]); + var g = toPaddedHex(v[(i / 6) % 6 | 0]); + var b = toPaddedHex(v[i % 6]); + colors.push("#" + r + g + b); + } + for (var i = 0; i < 24; i++) { + var c = toPaddedHex(8 + i * 10); + colors.push("#" + c + c + c); + } + return colors; +} +function toPaddedHex(c) { + var s = c.toString(16); + return s.length < 2 ? '0' + s : s; +} +var ColorManager = (function () { + function ColorManager() { + this.colors = { + foreground: DEFAULT_FOREGROUND, + background: DEFAULT_BACKGROUND, + cursor: DEFAULT_CURSOR, + cursorAccent: DEFAULT_CURSOR_ACCENT, + selection: DEFAULT_SELECTION, + ansi: generate256Colors(exports.DEFAULT_ANSI_COLORS) + }; + } + ColorManager.prototype.setTheme = function (theme) { + this.colors.foreground = theme.foreground || DEFAULT_FOREGROUND; + this.colors.background = this._validateColor(theme.background, DEFAULT_BACKGROUND); + this.colors.cursor = theme.cursor || DEFAULT_CURSOR; + this.colors.cursorAccent = theme.cursorAccent || DEFAULT_CURSOR_ACCENT; + this.colors.selection = theme.selection || DEFAULT_SELECTION; + this.colors.ansi[0] = theme.black || exports.DEFAULT_ANSI_COLORS[0]; + this.colors.ansi[1] = theme.red || exports.DEFAULT_ANSI_COLORS[1]; + this.colors.ansi[2] = theme.green || exports.DEFAULT_ANSI_COLORS[2]; + this.colors.ansi[3] = theme.yellow || exports.DEFAULT_ANSI_COLORS[3]; + this.colors.ansi[4] = theme.blue || exports.DEFAULT_ANSI_COLORS[4]; + this.colors.ansi[5] = theme.magenta || exports.DEFAULT_ANSI_COLORS[5]; + this.colors.ansi[6] = theme.cyan || exports.DEFAULT_ANSI_COLORS[6]; + this.colors.ansi[7] = theme.white || exports.DEFAULT_ANSI_COLORS[7]; + this.colors.ansi[8] = theme.brightBlack || exports.DEFAULT_ANSI_COLORS[8]; + this.colors.ansi[9] = theme.brightRed || exports.DEFAULT_ANSI_COLORS[9]; + this.colors.ansi[10] = theme.brightGreen || exports.DEFAULT_ANSI_COLORS[10]; + this.colors.ansi[11] = theme.brightYellow || exports.DEFAULT_ANSI_COLORS[11]; + this.colors.ansi[12] = theme.brightBlue || exports.DEFAULT_ANSI_COLORS[12]; + this.colors.ansi[13] = theme.brightMagenta || exports.DEFAULT_ANSI_COLORS[13]; + this.colors.ansi[14] = theme.brightCyan || exports.DEFAULT_ANSI_COLORS[14]; + this.colors.ansi[15] = theme.brightWhite || exports.DEFAULT_ANSI_COLORS[15]; + }; + ColorManager.prototype._validateColor = function (color, fallback) { + if (!color) { + return fallback; + } + if (color.length === 7 && color.charAt(0) === '#') { + return color; + } + if (color.length === 4 && color.charAt(0) === '#') { + var r = color.charAt(1); + var g = color.charAt(2); + var b = color.charAt(3); + return "#" + r + r + g + g + b + b; + } + return fallback; + }; + return ColorManager; +}()); +exports.ColorManager = ColorManager; + + + +},{}],21:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("../Buffer"); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var BLINK_INTERVAL = 600; +var CursorRenderLayer = (function (_super) { + __extends(CursorRenderLayer, _super); + function CursorRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'cursor', zIndex, true, colors) || this; + _this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + _this._cursorRenderers = { + 'bar': _this._renderBarCursor.bind(_this), + 'block': _this._renderBlockCursor.bind(_this), + 'underline': _this._renderUnderlineCursor.bind(_this) + }; + return _this; + } + CursorRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + }; + CursorRenderLayer.prototype.reset = function (terminal) { + this._clearCursor(); + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.dispose(); + this._cursorBlinkStateManager = null; + this.onOptionsChanged(terminal); + } + }; + CursorRenderLayer.prototype.onBlur = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.pause(); + } + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + }; + CursorRenderLayer.prototype.onFocus = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.resume(terminal); + } + else { + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + } + }; + CursorRenderLayer.prototype.onOptionsChanged = function (terminal) { + var _this = this; + if (terminal.options.cursorBlink) { + if (!this._cursorBlinkStateManager) { + this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, function () { + _this._render(terminal, true); + }); + } + } + else { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.dispose(); + this._cursorBlinkStateManager = null; + } + terminal.refresh(terminal.buffer.y, terminal.buffer.y); + } + }; + CursorRenderLayer.prototype.onCursorMove = function (terminal) { + if (this._cursorBlinkStateManager) { + this._cursorBlinkStateManager.restartBlinkAnimation(terminal); + } + }; + CursorRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { + if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) { + this._render(terminal, false); + } + }; + CursorRenderLayer.prototype._render = function (terminal, triggeredByAnimationFrame) { + if (!terminal.cursorState || terminal.cursorHidden) { + this._clearCursor(); + return; + } + var cursorY = terminal.buffer.ybase + terminal.buffer.y; + var viewportRelativeCursorY = cursorY - terminal.buffer.ydisp; + if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) { + this._clearCursor(); + return; + } + var charData = terminal.buffer.lines.get(cursorY)[terminal.buffer.x]; + if (!charData) { + return; + } + if (!terminal.isFocused) { + this._clearCursor(); + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData); + this._ctx.restore(); + this._state.x = terminal.buffer.x; + this._state.y = viewportRelativeCursorY; + this._state.isFocused = false; + this._state.style = terminal.options.cursorStyle; + this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + return; + } + if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) { + this._clearCursor(); + return; + } + if (this._state) { + if (this._state.x === terminal.buffer.x && + this._state.y === viewportRelativeCursorY && + this._state.isFocused === terminal.isFocused && + this._state.style === terminal.options.cursorStyle && + this._state.width === charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]) { + return; + } + this._clearCursor(); + } + this._ctx.save(); + this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData); + this._ctx.restore(); + this._state.x = terminal.buffer.x; + this._state.y = viewportRelativeCursorY; + this._state.isFocused = false; + this._state.style = terminal.options.cursorStyle; + this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + }; + CursorRenderLayer.prototype._clearCursor = function () { + if (this._state) { + this.clearCells(this._state.x, this._state.y, this._state.width, 1); + this._state = { + x: null, + y: null, + isFocused: null, + style: null, + width: null, + }; + } + }; + CursorRenderLayer.prototype._renderBarCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillLeftLineAtCell(x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderBlockCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillCells(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); + this._ctx.fillStyle = this._colors.cursorAccent; + this.fillCharTrueColor(terminal, charData, x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderUnderlineCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.fillStyle = this._colors.cursor; + this.fillBottomLineAtCells(x, y); + this._ctx.restore(); + }; + CursorRenderLayer.prototype._renderBlurCursor = function (terminal, x, y, charData) { + this._ctx.save(); + this._ctx.strokeStyle = this._colors.cursor; + this.strokeRectAtCell(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); + this._ctx.restore(); + }; + return CursorRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.CursorRenderLayer = CursorRenderLayer; +var CursorBlinkStateManager = (function () { + function CursorBlinkStateManager(terminal, renderCallback) { + this.renderCallback = renderCallback; + this.isCursorVisible = true; + if (terminal.isFocused) { + this._restartInterval(); + } + } + Object.defineProperty(CursorBlinkStateManager.prototype, "isPaused", { + get: function () { return !(this._blinkStartTimeout || this._blinkInterval); }, + enumerable: true, + configurable: true + }); + CursorBlinkStateManager.prototype.dispose = function () { + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + this._blinkInterval = null; + } + if (this._blinkStartTimeout) { + window.clearTimeout(this._blinkStartTimeout); + this._blinkStartTimeout = null; + } + if (this._animationFrame) { + window.cancelAnimationFrame(this._animationFrame); + this._animationFrame = null; + } + }; + CursorBlinkStateManager.prototype.restartBlinkAnimation = function (terminal) { + var _this = this; + if (this.isPaused) { + return; + } + this._animationTimeRestarted = Date.now(); + this.isCursorVisible = true; + if (!this._animationFrame) { + this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + } + }; + CursorBlinkStateManager.prototype._restartInterval = function (timeToStart) { + var _this = this; + if (timeToStart === void 0) { timeToStart = BLINK_INTERVAL; } + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + } + this._blinkStartTimeout = setTimeout(function () { + if (_this._animationTimeRestarted) { + var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); + _this._animationTimeRestarted = null; + if (time > 0) { + _this._restartInterval(time); + return; + } + } + _this.isCursorVisible = false; + _this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + _this._blinkInterval = setInterval(function () { + if (_this._animationTimeRestarted) { + var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); + _this._animationTimeRestarted = null; + _this._restartInterval(time); + return; + } + _this.isCursorVisible = !_this.isCursorVisible; + _this._animationFrame = window.requestAnimationFrame(function () { + _this.renderCallback(); + _this._animationFrame = null; + }); + }, BLINK_INTERVAL); + }, timeToStart); + }; + CursorBlinkStateManager.prototype.pause = function () { + this.isCursorVisible = true; + if (this._blinkInterval) { + window.clearInterval(this._blinkInterval); + this._blinkInterval = null; + } + if (this._blinkStartTimeout) { + window.clearTimeout(this._blinkStartTimeout); + this._blinkStartTimeout = null; + } + if (this._animationFrame) { + window.cancelAnimationFrame(this._animationFrame); + this._animationFrame = null; + } + }; + CursorBlinkStateManager.prototype.resume = function (terminal) { + this._animationTimeRestarted = null; + this._restartInterval(); + this.restartBlinkAnimation(terminal); + }; + return CursorBlinkStateManager; +}()); + + + +},{"../Buffer":1,"./BaseRenderLayer":18}],22:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var GridCache = (function () { + function GridCache() { + this.cache = []; + } + GridCache.prototype.resize = function (width, height) { + for (var x = 0; x < width; x++) { + if (this.cache.length <= x) { + this.cache.push([]); + } + for (var y = this.cache[x].length; y < height; y++) { + this.cache[x].push(null); + } + this.cache[x].length = height; + } + this.cache.length = width; + }; + GridCache.prototype.clear = function () { + for (var x = 0; x < this.cache.length; x++) { + for (var y = 0; y < this.cache[x].length; y++) { + this.cache[x][y] = null; + } + } + }; + return GridCache; +}()); +exports.GridCache = GridCache; + + + +},{}],23:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var Types_1 = require("../Types"); +var LinkRenderLayer = (function (_super) { + __extends(LinkRenderLayer, _super); + function LinkRenderLayer(container, zIndex, colors, terminal) { + var _this = _super.call(this, container, 'link', zIndex, true, colors) || this; + _this._state = null; + terminal.linkifier.on(Types_1.LinkHoverEventTypes.HOVER, function (e) { return _this._onLinkHover(e); }); + terminal.linkifier.on(Types_1.LinkHoverEventTypes.LEAVE, function (e) { return _this._onLinkLeave(e); }); + return _this; + } + LinkRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = null; + }; + LinkRenderLayer.prototype.reset = function (terminal) { + this._clearCurrentLink(); + }; + LinkRenderLayer.prototype._clearCurrentLink = function () { + if (this._state) { + this.clearCells(this._state.x, this._state.y, this._state.length, 1); + this._state = null; + } + }; + LinkRenderLayer.prototype._onLinkHover = function (e) { + this._ctx.fillStyle = this._colors.foreground; + this.fillBottomLineAtCells(e.x, e.y, e.length); + this._state = e; + }; + LinkRenderLayer.prototype._onLinkLeave = function (e) { + this._clearCurrentLink(); + }; + return LinkRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.LinkRenderLayer = LinkRenderLayer; + + + +},{"../Types":14,"./BaseRenderLayer":18}],24:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var TextRenderLayer_1 = require("./TextRenderLayer"); +var SelectionRenderLayer_1 = require("./SelectionRenderLayer"); +var CursorRenderLayer_1 = require("./CursorRenderLayer"); +var ColorManager_1 = require("./ColorManager"); +var LinkRenderLayer_1 = require("./LinkRenderLayer"); +var EventEmitter_1 = require("../EventEmitter"); +var Renderer = (function (_super) { + __extends(Renderer, _super); + function Renderer(_terminal, theme) { + var _this = _super.call(this) || this; + _this._terminal = _terminal; + _this._refreshRowsQueue = []; + _this._refreshAnimationFrame = null; + _this.colorManager = new ColorManager_1.ColorManager(); + if (theme) { + _this.colorManager.setTheme(theme); + } + _this._renderLayers = [ + new TextRenderLayer_1.TextRenderLayer(_this._terminal.element, 0, _this.colorManager.colors), + new SelectionRenderLayer_1.SelectionRenderLayer(_this._terminal.element, 1, _this.colorManager.colors), + new LinkRenderLayer_1.LinkRenderLayer(_this._terminal.element, 2, _this.colorManager.colors, _this._terminal), + new CursorRenderLayer_1.CursorRenderLayer(_this._terminal.element, 3, _this.colorManager.colors) + ]; + _this.dimensions = { + scaledCharWidth: null, + scaledCharHeight: null, + scaledCellWidth: null, + scaledCellHeight: null, + scaledCharLeft: null, + scaledCharTop: null, + scaledCanvasWidth: null, + scaledCanvasHeight: null, + canvasWidth: null, + canvasHeight: null, + actualCellWidth: null, + actualCellHeight: null + }; + _this._devicePixelRatio = window.devicePixelRatio; + return _this; + } + Renderer.prototype.onWindowResize = function (devicePixelRatio) { + if (this._devicePixelRatio !== devicePixelRatio) { + this._devicePixelRatio = devicePixelRatio; + this.onResize(this._terminal.cols, this._terminal.rows, true); + } + }; + Renderer.prototype.setTheme = function (theme) { + var _this = this; + this.colorManager.setTheme(theme); + this._renderLayers.forEach(function (l) { + l.onThemeChanged(_this._terminal, _this.colorManager.colors); + l.reset(_this._terminal); + }); + this._terminal.refresh(0, this._terminal.rows - 1); + return this.colorManager.colors; + }; + Renderer.prototype.onResize = function (cols, rows, didCharSizeChange) { + var _this = this; + if (!this._terminal.charMeasure.width || !this._terminal.charMeasure.height) { + return; + } + this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio); + this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio); + this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight); + this.dimensions.scaledCharTop = this._terminal.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2); + this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing); + this.dimensions.scaledCharLeft = Math.floor(this._terminal.options.letterSpacing / 2); + this.dimensions.scaledCanvasHeight = this._terminal.rows * this.dimensions.scaledCellHeight; + this.dimensions.scaledCanvasWidth = this._terminal.cols * this.dimensions.scaledCellWidth; + this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio); + this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio); + this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows; + this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols; + this._renderLayers.forEach(function (l) { return l.resize(_this._terminal, _this.dimensions, didCharSizeChange); }); + this._terminal.refresh(0, this._terminal.rows - 1); + this.emit('resize', { + width: this.dimensions.canvasWidth, + height: this.dimensions.canvasHeight + }); + }; + Renderer.prototype.onCharSizeChanged = function () { + this.onResize(this._terminal.cols, this._terminal.rows, true); + }; + Renderer.prototype.onBlur = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onBlur(_this._terminal); }); + }; + Renderer.prototype.onFocus = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onFocus(_this._terminal); }); + }; + Renderer.prototype.onSelectionChanged = function (start, end) { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onSelectionChanged(_this._terminal, start, end); }); + }; + Renderer.prototype.onCursorMove = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onCursorMove(_this._terminal); }); + }; + Renderer.prototype.onOptionsChanged = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.onOptionsChanged(_this._terminal); }); + }; + Renderer.prototype.clear = function () { + var _this = this; + this._renderLayers.forEach(function (l) { return l.reset(_this._terminal); }); + }; + Renderer.prototype.queueRefresh = function (start, end) { + this._refreshRowsQueue.push({ start: start, end: end }); + if (!this._refreshAnimationFrame) { + this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this)); + } + }; + Renderer.prototype._refreshLoop = function () { + var _this = this; + var start; + var end; + if (this._refreshRowsQueue.length > 4) { + start = 0; + end = this._terminal.rows - 1; + } + else { + start = this._refreshRowsQueue[0].start; + end = this._refreshRowsQueue[0].end; + for (var i = 1; i < this._refreshRowsQueue.length; i++) { + if (this._refreshRowsQueue[i].start < start) { + start = this._refreshRowsQueue[i].start; + } + if (this._refreshRowsQueue[i].end > end) { + end = this._refreshRowsQueue[i].end; + } + } + } + this._refreshRowsQueue = []; + this._refreshAnimationFrame = null; + start = Math.max(start, 0); + end = Math.min(end, this._terminal.rows - 1); + this._renderLayers.forEach(function (l) { return l.onGridChanged(_this._terminal, start, end); }); + this._terminal.emit('refresh', { start: start, end: end }); + }; + return Renderer; +}(EventEmitter_1.EventEmitter)); +exports.Renderer = Renderer; + + + +},{"../EventEmitter":7,"./ColorManager":20,"./CursorRenderLayer":21,"./LinkRenderLayer":23,"./SelectionRenderLayer":25,"./TextRenderLayer":26}],25:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var SelectionRenderLayer = (function (_super) { + __extends(SelectionRenderLayer, _super); + function SelectionRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'selection', zIndex, true, colors) || this; + _this._state = { + start: null, + end: null + }; + return _this; + } + SelectionRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + this._state = { + start: null, + end: null + }; + }; + SelectionRenderLayer.prototype.reset = function (terminal) { + if (this._state.start && this._state.end) { + this._state = { + start: null, + end: null + }; + this.clearAll(); + } + }; + SelectionRenderLayer.prototype.onSelectionChanged = function (terminal, start, end) { + if (this._state.start === start || this._state.end === end) { + return; + } + this.clearAll(); + if (!start || !end) { + return; + } + var viewportStartRow = start[1] - terminal.buffer.ydisp; + var viewportEndRow = end[1] - terminal.buffer.ydisp; + var viewportCappedStartRow = Math.max(viewportStartRow, 0); + var viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1); + if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) { + return; + } + var startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0; + var startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : terminal.cols; + this._ctx.fillStyle = this._colors.selection; + this.fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1); + var middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0); + this.fillCells(0, viewportCappedStartRow + 1, terminal.cols, middleRowsCount); + if (viewportCappedStartRow !== viewportCappedEndRow) { + var endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols; + this.fillCells(0, viewportCappedEndRow, endCol, 1); + } + this._state.start = [start[0], start[1]]; + this._state.end = [end[0], end[1]]; + }; + return SelectionRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.SelectionRenderLayer = SelectionRenderLayer; + + + +},{"./BaseRenderLayer":18}],26:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var Buffer_1 = require("../Buffer"); +var Types_1 = require("./Types"); +var GridCache_1 = require("./GridCache"); +var BaseRenderLayer_1 = require("./BaseRenderLayer"); +var OVERLAP_OWNED_CHAR_DATA = [null, '', 0, -1]; +var TextRenderLayer = (function (_super) { + __extends(TextRenderLayer, _super); + function TextRenderLayer(container, zIndex, colors) { + var _this = _super.call(this, container, 'text', zIndex, false, colors) || this; + _this._characterOverlapCache = {}; + _this._state = new GridCache_1.GridCache(); + return _this; + } + TextRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { + _super.prototype.resize.call(this, terminal, dim, charSizeChanged); + var terminalFont = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily; + if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) { + this._characterWidth = dim.scaledCharWidth; + this._characterFont = terminalFont; + this._characterOverlapCache = {}; + } + this._state.clear(); + this._state.resize(terminal.cols, terminal.rows); + }; + TextRenderLayer.prototype.reset = function (terminal) { + this._state.clear(); + this.clearAll(); + }; + TextRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { + if (this._state.cache.length === 0) { + return; + } + for (var y = startRow; y <= endRow; y++) { + var row = y + terminal.buffer.ydisp; + var line = terminal.buffer.lines.get(row); + this.clearCells(0, y, terminal.cols, 1); + for (var x = 0; x < terminal.cols; x++) { + var charData = line[x]; + var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX]; + var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX]; + var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX]; + var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; + if (width === 0) { + continue; + } + if (code === 32) { + if (x > 0) { + var previousChar = line[x - 1]; + if (this._isOverlapping(previousChar)) { + continue; + } + } + } + var flags = attr >> 18; + var bg = attr & 0x1ff; + var isDefaultBackground = bg >= 256; + var isInvisible = flags & Types_1.FLAGS.INVISIBLE; + var isInverted = flags & Types_1.FLAGS.INVERSE; + if (!code || (code === 32 && isDefaultBackground && !isInverted) || isInvisible) { + continue; + } + if (width !== 0 && this._isOverlapping(charData)) { + if (x < line.length - 1 && line[x + 1][Buffer_1.CHAR_DATA_CODE_INDEX] === 32) { + width = 2; + } + } + var fg = (attr >> 9) & 0x1ff; + if (isInverted) { + var temp = bg; + bg = fg; + fg = temp; + if (fg === 256) { + fg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR; + } + if (bg === 257) { + bg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR; + } + } + if (width === 2) { + } + if (bg < 256) { + this._ctx.save(); + this._ctx.fillStyle = (bg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR ? this._colors.foreground : this._colors.ansi[bg]); + this.fillCells(x, y, width, 1); + this._ctx.restore(); + } + this._ctx.save(); + if (flags & Types_1.FLAGS.BOLD) { + this._ctx.font = "bold " + this._ctx.font; + if (fg < 8) { + fg += 8; + } + } + if (flags & Types_1.FLAGS.UNDERLINE) { + if (fg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR) { + this._ctx.fillStyle = this._colors.background; + } + else if (fg < 256) { + this._ctx.fillStyle = this._colors.ansi[fg]; + } + else { + this._ctx.fillStyle = this._colors.foreground; + } + this.fillBottomLineAtCells(x, y); + } + this.drawChar(terminal, char, code, width, x, y, fg, bg, !!(flags & Types_1.FLAGS.BOLD), !!(flags & Types_1.FLAGS.DIM)); + this._ctx.restore(); + } + } + }; + TextRenderLayer.prototype._isOverlapping = function (charData) { + if (charData[Buffer_1.CHAR_DATA_WIDTH_INDEX] !== 1) { + return false; + } + var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX]; + if (code < 256) { + return false; + } + var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX]; + if (this._characterOverlapCache.hasOwnProperty(char)) { + return this._characterOverlapCache[char]; + } + this._ctx.save(); + this._ctx.font = this._characterFont; + var overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth; + this._ctx.restore(); + this._characterOverlapCache[char] = overlaps; + return overlaps; + }; + TextRenderLayer.prototype._clearChar = function (x, y) { + var colsToClear = 1; + var state = this._state.cache[x][y]; + if (state && state[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) { + colsToClear = 2; + } + this.clearCells(x, y, colsToClear, 1); + }; + return TextRenderLayer; +}(BaseRenderLayer_1.BaseRenderLayer)); +exports.TextRenderLayer = TextRenderLayer; + + + +},{"../Buffer":1,"./BaseRenderLayer":18,"./GridCache":22,"./Types":27}],27:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var FLAGS; +(function (FLAGS) { + FLAGS[FLAGS["BOLD"] = 1] = "BOLD"; + FLAGS[FLAGS["UNDERLINE"] = 2] = "UNDERLINE"; + FLAGS[FLAGS["BLINK"] = 4] = "BLINK"; + FLAGS[FLAGS["INVERSE"] = 8] = "INVERSE"; + FLAGS[FLAGS["INVISIBLE"] = 16] = "INVISIBLE"; + FLAGS[FLAGS["DIM"] = 32] = "DIM"; +})(FLAGS = exports.FLAGS || (exports.FLAGS = {})); +; + + + +},{}],28:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Generic_1 = require("./Generic"); +var isNode = (typeof navigator === 'undefined') ? true : false; +var userAgent = (isNode) ? 'node' : navigator.userAgent; +var platform = (isNode) ? 'node' : navigator.platform; +exports.isFirefox = !!~userAgent.indexOf('Firefox'); +exports.isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident'); +exports.isMac = Generic_1.contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform); +exports.isIpad = platform === 'iPad'; +exports.isIphone = platform === 'iPhone'; +exports.isMSWindows = Generic_1.contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform); +exports.isLinux = platform.indexOf('Linux') >= 0; + + + +},{"./Generic":31}],29:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter_1 = require("../EventEmitter"); +var CharMeasure = (function (_super) { + __extends(CharMeasure, _super); + function CharMeasure(document, parentElement) { + var _this = _super.call(this) || this; + _this._document = document; + _this._parentElement = parentElement; + return _this; + } + Object.defineProperty(CharMeasure.prototype, "width", { + get: function () { + return this._width; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CharMeasure.prototype, "height", { + get: function () { + return this._height; + }, + enumerable: true, + configurable: true + }); + CharMeasure.prototype.measure = function (options) { + var _this = this; + if (!this._measureElement) { + this._measureElement = this._document.createElement('span'); + this._measureElement.style.position = 'absolute'; + this._measureElement.style.top = '0'; + this._measureElement.style.left = '-9999em'; + this._measureElement.style.lineHeight = 'normal'; + this._measureElement.textContent = 'W'; + this._measureElement.setAttribute('aria-hidden', 'true'); + this._parentElement.appendChild(this._measureElement); + setTimeout(function () { return _this._doMeasure(options); }, 0); + } + else { + this._doMeasure(options); + } + }; + CharMeasure.prototype._doMeasure = function (options) { + this._measureElement.style.fontFamily = options.fontFamily; + this._measureElement.style.fontSize = options.fontSize + "px"; + var geometry = this._measureElement.getBoundingClientRect(); + if (geometry.width === 0 || geometry.height === 0) { + return; + } + if (this._width !== geometry.width || this._height !== geometry.height) { + this._width = geometry.width; + this._height = Math.ceil(geometry.height); + this.emit('charsizechanged'); + } + }; + return CharMeasure; +}(EventEmitter_1.EventEmitter)); +exports.CharMeasure = CharMeasure; + + + +},{"../EventEmitter":7}],30:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var EventEmitter_1 = require("../EventEmitter"); +var CircularList = (function (_super) { + __extends(CircularList, _super); + function CircularList(_maxLength) { + var _this = _super.call(this) || this; + _this._maxLength = _maxLength; + _this._array = new Array(_this._maxLength); + _this._startIndex = 0; + _this._length = 0; + return _this; + } + Object.defineProperty(CircularList.prototype, "maxLength", { + get: function () { + return this._maxLength; + }, + set: function (newMaxLength) { + if (this._maxLength === newMaxLength) { + return; + } + var newArray = new Array(newMaxLength); + for (var i = 0; i < Math.min(newMaxLength, this.length); i++) { + newArray[i] = this._array[this._getCyclicIndex(i)]; + } + this._array = newArray; + this._maxLength = newMaxLength; + this._startIndex = 0; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CircularList.prototype, "length", { + get: function () { + return this._length; + }, + set: function (newLength) { + if (newLength > this._length) { + for (var i = this._length; i < newLength; i++) { + this._array[i] = undefined; + } + } + this._length = newLength; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CircularList.prototype, "forEach", { + get: function () { + var _this = this; + return function (callbackfn) { + var i = 0; + var length = _this.length; + for (var i_1 = 0; i_1 < length; i_1++) { + callbackfn(_this.get(i_1), i_1); + } + }; + }, + enumerable: true, + configurable: true + }); + CircularList.prototype.get = function (index) { + return this._array[this._getCyclicIndex(index)]; + }; + CircularList.prototype.set = function (index, value) { + this._array[this._getCyclicIndex(index)] = value; + }; + CircularList.prototype.push = function (value) { + this._array[this._getCyclicIndex(this._length)] = value; + if (this._length === this._maxLength) { + this._startIndex++; + if (this._startIndex === this._maxLength) { + this._startIndex = 0; + } + this.emit('trim', 1); + } + else { + this._length++; + } + }; + CircularList.prototype.pop = function () { + return this._array[this._getCyclicIndex(this._length-- - 1)]; + }; + CircularList.prototype.splice = function (start, deleteCount) { + var items = []; + for (var _i = 2; _i < arguments.length; _i++) { + items[_i - 2] = arguments[_i]; + } + if (deleteCount) { + for (var i = start; i < this._length - deleteCount; i++) { + this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)]; + } + this._length -= deleteCount; + } + if (items && items.length) { + for (var i = this._length - 1; i >= start; i--) { + this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)]; + } + for (var i = 0; i < items.length; i++) { + this._array[this._getCyclicIndex(start + i)] = items[i]; + } + if (this._length + items.length > this.maxLength) { + var countToTrim = (this._length + items.length) - this.maxLength; + this._startIndex += countToTrim; + this._length = this.maxLength; + this.emit('trim', countToTrim); + } + else { + this._length += items.length; + } + } + }; + CircularList.prototype.trimStart = function (count) { + if (count > this._length) { + count = this._length; + } + this._startIndex += count; + this._length -= count; + this.emit('trim', count); + }; + CircularList.prototype.shiftElements = function (start, count, offset) { + if (count <= 0) { + return; + } + if (start < 0 || start >= this._length) { + throw new Error('start argument out of range'); + } + if (start + offset < 0) { + throw new Error('Cannot shift elements in list beyond index 0'); + } + if (offset > 0) { + for (var i = count - 1; i >= 0; i--) { + this.set(start + i + offset, this.get(start + i)); + } + var expandListBy = (start + count + offset) - this._length; + if (expandListBy > 0) { + this._length += expandListBy; + while (this._length > this.maxLength) { + this._length--; + this._startIndex++; + this.emit('trim', 1); + } + } + } + else { + for (var i = 0; i < count; i++) { + this.set(start + i + offset, this.get(start + i)); + } + } + }; + CircularList.prototype._getCyclicIndex = function (index) { + return (this._startIndex + index) % this.maxLength; + }; + return CircularList; +}(EventEmitter_1.EventEmitter)); +exports.CircularList = CircularList; + + + +},{"../EventEmitter":7}],31:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function contains(arr, el) { + return arr.indexOf(el) >= 0; +} +exports.contains = contains; +; + + + +},{}],32:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var MouseHelper = (function () { + function MouseHelper(_renderer) { + this._renderer = _renderer; + } + MouseHelper.getCoordsRelativeToElement = function (event, element) { + if (event.pageX == null) { + return null; + } + var originalElement = element; + var x = event.pageX; + var y = event.pageY; + while (element) { + x -= element.offsetLeft; + y -= element.offsetTop; + element = 'offsetParent' in element ? element.offsetParent : element.parentElement; + } + element = originalElement; + while (element && element !== element.ownerDocument.body) { + x += element.scrollLeft; + y += element.scrollTop; + element = element.parentElement; + } + return [x, y]; + }; + MouseHelper.prototype.getCoords = function (event, element, charMeasure, lineHeight, colCount, rowCount, isSelection) { + if (!charMeasure.width || !charMeasure.height) { + return null; + } + var coords = MouseHelper.getCoordsRelativeToElement(event, element); + if (!coords) { + return null; + } + coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth); + coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight); + coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0)); + coords[1] = Math.min(Math.max(coords[1], 1), rowCount); + return coords; + }; + MouseHelper.prototype.getRawByteCoords = function (event, element, charMeasure, lineHeight, colCount, rowCount) { + var coords = this.getCoords(event, element, charMeasure, lineHeight, colCount, rowCount); + var x = coords[0]; + var y = coords[1]; + x += 32; + y += 32; + return { x: x, y: y }; + }; + return MouseHelper; +}()); +exports.MouseHelper = MouseHelper; + + + +},{}],33:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BellSound = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg=='; + + + +},{}],34:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Terminal_1 = require("./Terminal"); +module.exports = Terminal_1.Terminal; + + + +},{"./Terminal":13}]},{},[34])(34) +}); +//# sourceMappingURL=xterm.js.map diff --git a/BTPanel/static/build/xterm.js.map b/BTPanel/static/build/xterm.js.map new file mode 100644 index 00000000..9716c5e2 --- /dev/null +++ b/BTPanel/static/build/xterm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xterm.js","sources":["../src/xterm.ts","../src/utils/Sounds.ts","../src/utils/MouseHelper.ts","../src/utils/Generic.ts","../src/utils/CircularList.ts","../src/utils/CharMeasure.ts","../src/utils/Browser.ts","../src/renderer/Types.ts","../src/renderer/TextRenderLayer.ts","../src/renderer/SelectionRenderLayer.ts","../src/renderer/Renderer.ts","../src/renderer/LinkRenderLayer.ts","../src/renderer/GridCache.ts","../src/renderer/CursorRenderLayer.ts","../src/renderer/ColorManager.ts","../src/renderer/CharAtlas.ts","../src/renderer/BaseRenderLayer.ts","../src/input/MouseZoneManager.ts","../src/handlers/Clipboard.ts","../src/Viewport.ts","../src/Types.ts","../src/Terminal.ts","../src/SelectionModel.ts","../src/SelectionManager.ts","../src/Parser.ts","../src/Linkifier.ts","../src/InputHandler.ts","../src/EventEmitter.ts","../src/EscapeSequences.ts","../src/CompositionHelper.ts","../src/Charsets.ts","../src/CharWidth.ts","../src/BufferSet.ts","../src/Buffer.ts","../node_modules/browser-pack/_prelude.js"],"sourcesContent":["/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This file is the entry point for browserify.\n */\n\nimport { Terminal } from './Terminal';\n\nmodule.exports = Terminal;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// Source: https://freesound.org/people/altemark/sounds/45759/\n// This sound is released under the Creative Commons Attribution 3.0 Unported\n// (CC BY 3.0) license. It was created by 'altemark'. No modifications have been\n// made, apart from the conversion to base64.\nexport const BellSound = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg==';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharMeasure } from '../Interfaces';\nimport { IRenderer } from '../renderer/Interfaces';\n\nexport class MouseHelper {\n constructor(private _renderer: IRenderer) {}\n\n public static getCoordsRelativeToElement(event: {pageX: number, pageY: number}, element: HTMLElement): [number, number] {\n // Ignore browsers that don't support MouseEvent.pageX\n if (event.pageX == null) {\n return null;\n }\n\n const originalElement = element;\n let x = event.pageX;\n let y = event.pageY;\n\n // Converts the coordinates from being relative to the document to being\n // relative to the terminal.\n while (element) {\n x -= element.offsetLeft;\n y -= element.offsetTop;\n element = 'offsetParent' in element ? element.offsetParent : element.parentElement;\n }\n element = originalElement;\n while (element && element !== element.ownerDocument.body) {\n x += element.scrollLeft;\n y += element.scrollTop;\n element = element.parentElement;\n }\n return [x, y];\n }\n\n /**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows n the terminal.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\n public getCoords(event: {pageX: number, pageY: number}, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number, isSelection?: boolean): [number, number] {\n // Coordinates cannot be measured if charMeasure has not been initialized\n if (!charMeasure.width || !charMeasure.height) {\n return null;\n }\n\n const coords = MouseHelper.getCoordsRelativeToElement(event, element);\n if (!coords) {\n return null;\n }\n\n coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth);\n coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an addition point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n }\n\n /**\n * Gets coordinates within the terminal for a particular mouse event, wrapping\n * them to the bounds of the terminal and adding 32 to both the x and y values\n * as expected by xterm.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param charMeasure The char measure object used to determine character sizes.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n */\n public getRawByteCoords(event: MouseEvent, element: HTMLElement, charMeasure: ICharMeasure, lineHeight: number, colCount: number, rowCount: number): { x: number, y: number } {\n const coords = this.getCoords(event, element, charMeasure, lineHeight, colCount, rowCount);\n let x = coords[0];\n let y = coords[1];\n\n // xterm sends raw bytes and starts at 32 (SP) for each.\n x += 32;\n y += 32;\n\n return { x, y };\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Return if the given array contains the given element\n * @param {Array} array The array to search for the given element.\n * @param {Object} el The element to look for into the array\n */\nexport function contains(arr: any[], el: any): boolean {\n return arr.indexOf(el) >= 0;\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter } from '../EventEmitter';\nimport { ICircularList } from '../Interfaces';\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends EventEmitter implements ICircularList {\n protected _array: T[];\n private _startIndex: number;\n private _length: number;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n let newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n public get forEach(): (callbackfn: (value: T, index: number) => void) => void {\n return (callbackfn: (value: T, index: number) => void) => {\n let i = 0;\n let length = this.length;\n for (let i = 0; i < length; i++) {\n callbackfn(this.get(i), i);\n }\n };\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @return The value corresponding to the index.\n */\n public get(index: number): T {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex++;\n if (this._startIndex === this._maxLength) {\n this._startIndex = 0;\n }\n this.emit('trim', 1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Removes and returns the last value on the list.\n * @return The popped value.\n */\n public pop(): T {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n }\n\n if (items && items.length) {\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n\n // Adjust length as needed\n if (this._length + items.length > this.maxLength) {\n const countToTrim = (this._length + items.length) - this.maxLength;\n this._startIndex += countToTrim;\n this._length = this.maxLength;\n this.emit('trim', countToTrim);\n } else {\n this._length += items.length;\n }\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.emit('trim', count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this.maxLength) {\n this._length--;\n this._startIndex++;\n this.emit('trim', 1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this.maxLength;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { EventEmitter } from '../EventEmitter';\nimport { ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';\n\n/**\n * Utility class that measures the size of a character. Measurements are done in\n * the DOM rather than with a canvas context because support for extracting the\n * height of characters is patchy across browsers.\n */\nexport class CharMeasure extends EventEmitter implements ICharMeasure {\n private _document: Document;\n private _parentElement: HTMLElement;\n private _measureElement: HTMLElement;\n private _width: number;\n private _height: number;\n\n constructor(document: Document, parentElement: HTMLElement) {\n super();\n this._document = document;\n this._parentElement = parentElement;\n }\n\n public get width(): number {\n return this._width;\n }\n\n public get height(): number {\n return this._height;\n }\n\n public measure(options: ITerminalOptions): void {\n if (!this._measureElement) {\n this._measureElement = this._document.createElement('span');\n this._measureElement.style.position = 'absolute';\n this._measureElement.style.top = '0';\n this._measureElement.style.left = '-9999em';\n this._measureElement.style.lineHeight = 'normal';\n this._measureElement.textContent = 'W';\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._parentElement.appendChild(this._measureElement);\n // Perform _doMeasure async if the element was just attached as sometimes\n // getBoundingClientRect does not return accurate values without this.\n setTimeout(() => this._doMeasure(options), 0);\n } else {\n this._doMeasure(options);\n }\n }\n\n private _doMeasure(options: ITerminalOptions): void {\n this._measureElement.style.fontFamily = options.fontFamily;\n this._measureElement.style.fontSize = `${options.fontSize}px`;\n const geometry = this._measureElement.getBoundingClientRect();\n // The element is likely currently display:none, we should retain the\n // previous value.\n if (geometry.width === 0 || geometry.height === 0) {\n return;\n }\n if (this._width !== geometry.width || this._height !== geometry.height) {\n this._width = geometry.width;\n this._height = Math.ceil(geometry.height);\n this.emit('charsizechanged');\n }\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { contains } from './Generic';\n\nconst isNode = (typeof navigator === 'undefined') ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = !!~userAgent.indexOf('Firefox');\nexport const isMSIE = !!~userAgent.indexOf('MSIE') || !!~userAgent.indexOf('Trident');\n\n// Find the users platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = contains(['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], platform);\nexport const isIpad = platform === 'iPad';\nexport const isIphone = platform === 'iPhone';\nexport const isMSWindows = contains(['Windows', 'Win16', 'Win32', 'WinCE'], platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n /**\n * Flags used to render terminal text properly.\n */\nexport enum FLAGS {\n BOLD = 1,\n UNDERLINE = 2,\n BLINK = 4,\n INVERSE = 8,\n INVISIBLE = 16,\n DIM = 32\n};\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from '../Buffer';\nimport { FLAGS } from './Types';\nimport { GridCache } from './GridCache';\nimport { CharData } from '../Types';\nimport { BaseRenderLayer, INVERTED_DEFAULT_COLOR } from './BaseRenderLayer';\n\n/**\n * This CharData looks like a null character, which will forc a clear and render\n * when the character changes (a regular space ' ' character may not as it's\n * drawn state is a cleared cell).\n */\nconst OVERLAP_OWNED_CHAR_DATA: CharData = [null, '', 0, -1];\n\nexport class TextRenderLayer extends BaseRenderLayer {\n private _state: GridCache;\n private _characterWidth: number;\n private _characterFont: string;\n private _characterOverlapCache: { [key: string]: boolean } = {};\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'text', zIndex, false, colors);\n this._state = new GridCache();\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n\n // Clear the character width cache if the font or width has changed\n const terminalFont = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {\n this._characterWidth = dim.scaledCharWidth;\n this._characterFont = terminalFont;\n this._characterOverlapCache = {};\n }\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state.clear();\n this._state.resize(terminal.cols, terminal.rows);\n }\n\n public reset(terminal: ITerminal): void {\n this._state.clear();\n this.clearAll();\n }\n\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {\n // Resize has not been called yet\n if (this._state.cache.length === 0) {\n return;\n }\n\n for (let y = startRow; y <= endRow; y++) {\n const row = y + terminal.buffer.ydisp;\n const line = terminal.buffer.lines.get(row);\n\n this.clearCells(0, y, terminal.cols, 1);\n // for (let x = 0; x < terminal.cols; x++) {\n // this._state.cache[x][y] = null;\n // }\n\n for (let x = 0; x < terminal.cols; x++) {\n const charData = line[x];\n const code: number = charData[CHAR_DATA_CODE_INDEX];\n const char: string = charData[CHAR_DATA_CHAR_INDEX];\n const attr: number = charData[CHAR_DATA_ATTR_INDEX];\n let width: number = charData[CHAR_DATA_WIDTH_INDEX];\n\n // The character to the left is a wide character, drawing is owned by\n // the char at x-1\n if (width === 0) {\n // this._state.cache[x][y] = null;\n continue;\n }\n\n // If the character is a space and the character to the left is an\n // overlapping character, skip the character and allow the overlapping\n // char to take full control over this character's cell.\n if (code === 32 /*' '*/) {\n if (x > 0) {\n const previousChar: CharData = line[x - 1];\n if (this._isOverlapping(previousChar)) {\n continue;\n }\n }\n }\n\n // Skip rendering if the character is identical\n // const state = this._state.cache[x][y];\n // if (state && state[CHAR_DATA_CHAR_INDEX] === char && state[CHAR_DATA_ATTR_INDEX] === attr) {\n // // Skip render, contents are identical\n // this._state.cache[x][y] = charData;\n // continue;\n // }\n\n // Clear the old character was not a space with the default background\n // const wasInverted = !!(state && state[CHAR_DATA_ATTR_INDEX] && state[CHAR_DATA_ATTR_INDEX] >> 18 & FLAGS.INVERSE);\n // if (state && !(state[CHAR_DATA_CODE_INDEX] === 32 /*' '*/ && (state[CHAR_DATA_ATTR_INDEX] & 0x1ff) >= 256 && !wasInverted)) {\n // this._clearChar(x, y);\n // }\n // this._state.cache[x][y] = charData;\n\n const flags = attr >> 18;\n let bg = attr & 0x1ff;\n\n // Skip rendering if the character is invisible\n const isDefaultBackground = bg >= 256;\n const isInvisible = flags & FLAGS.INVISIBLE;\n const isInverted = flags & FLAGS.INVERSE;\n if (!code || (code === 32 /*' '*/ && isDefaultBackground && !isInverted) || isInvisible) {\n continue;\n }\n\n // If the character is an overlapping char and the character to the right is a\n // space, take ownership of the cell to the right.\n if (width !== 0 && this._isOverlapping(charData)) {\n // If the character is overlapping, we want to force a re-render on every\n // frame. This is specifically to work around the case where two\n // overlaping chars `a` and `b` are adjacent, the cursor is moved to b and a\n // space is added. Without this, the first half of `b` would never\n // get removed, and `a` would not re-render because it thinks it's\n // already in the correct state.\n // this._state.cache[x][y] = OVERLAP_OWNED_CHAR_DATA;\n if (x < line.length - 1 && line[x + 1][CHAR_DATA_CODE_INDEX] === 32 /*' '*/) {\n width = 2;\n // this._clearChar(x + 1, y);\n // The overlapping char's char data will force a clear and render when the\n // overlapping char is no longer to the left of the character and also when\n // the space changes to another character.\n // this._state.cache[x + 1][y] = OVERLAP_OWNED_CHAR_DATA;\n }\n }\n\n let fg = (attr >> 9) & 0x1ff;\n\n // If inverse flag is on, the foreground should become the background.\n if (isInverted) {\n const temp = bg;\n bg = fg;\n fg = temp;\n if (fg === 256) {\n fg = INVERTED_DEFAULT_COLOR;\n }\n if (bg === 257) {\n bg = INVERTED_DEFAULT_COLOR;\n }\n }\n\n // Clear the cell next to this character if it's wide\n if (width === 2) {\n // this.clearCells(x + 1, y, 1, 1);\n }\n\n // Draw background\n if (bg < 256) {\n this._ctx.save();\n this._ctx.fillStyle = (bg === INVERTED_DEFAULT_COLOR ? this._colors.foreground : this._colors.ansi[bg]);\n this.fillCells(x, y, width, 1);\n this._ctx.restore();\n }\n\n this._ctx.save();\n if (flags & FLAGS.BOLD) {\n this._ctx.font = `bold ${this._ctx.font}`;\n // Convert the FG color to the bold variant\n if (fg < 8) {\n fg += 8;\n }\n }\n\n if (flags & FLAGS.UNDERLINE) {\n if (fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._colors.background;\n } else if (fg < 256) {\n // 256 color support\n this._ctx.fillStyle = this._colors.ansi[fg];\n } else {\n this._ctx.fillStyle = this._colors.foreground;\n }\n this.fillBottomLineAtCells(x, y);\n }\n\n this.drawChar(terminal, char, code, width, x, y, fg, bg, !!(flags & FLAGS.BOLD), !!(flags & FLAGS.DIM));\n\n this._ctx.restore();\n }\n }\n }\n\n\t/**\n\t * Whether a character is overlapping to the next cell.\n\t */\n private _isOverlapping(charData: CharData): boolean {\n // Only single cell characters can be overlapping, rendering issues can\n // occur without this check\n if (charData[CHAR_DATA_WIDTH_INDEX] !== 1) {\n return false;\n }\n\n // We assume that any ascii character will not overlap\n const code = charData[CHAR_DATA_CODE_INDEX];\n if (code < 256) {\n return false;\n }\n\n // Deliver from cache if available\n const char = charData[CHAR_DATA_CHAR_INDEX];\n if (this._characterOverlapCache.hasOwnProperty(char)) {\n return this._characterOverlapCache[char];\n }\n\n // Setup the font\n this._ctx.save();\n this._ctx.font = this._characterFont;\n\n // Measure the width of the character, but Math.floor it\n // because that is what the renderer does when it calculates\n // the character dimensions we are comparing against\n const overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth;\n\n // Restore the original context\n this._ctx.restore();\n\n // Cache and return\n this._characterOverlapCache[char] = overlaps;\n return overlaps;\n }\n\n /**\n * Clear the charcater at the cell specified.\n * @param x The column of the char.\n * @param y The row of the char.\n */\n private _clearChar(x: number, y: number): void {\n let colsToClear = 1;\n // Clear the adjacent character if it was wide\n const state = this._state.cache[x][y];\n if (state && state[CHAR_DATA_WIDTH_INDEX] === 2) {\n colsToClear = 2;\n }\n this.clearCells(x, y, colsToClear, 1);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class SelectionRenderLayer extends BaseRenderLayer {\n private _state: {start: [number, number], end: [number, number]};\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'selection', zIndex, true, colors);\n this._state = {\n start: null,\n end: null\n };\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = {\n start: null,\n end: null\n };\n }\n\n public reset(terminal: ITerminal): void {\n if (this._state.start && this._state.end) {\n this._state = {\n start: null,\n end: null\n };\n this.clearAll();\n }\n }\n\n public onSelectionChanged(terminal: ITerminal, start: [number, number], end: [number, number]): void {\n // Selection has not changed\n if (this._state.start === start || this._state.end === end) {\n return;\n }\n\n // Remove all selections\n this.clearAll();\n\n // Selection does not exist\n if (!start || !end) {\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportStartRow = start[1] - terminal.buffer.ydisp;\n const viewportEndRow = end[1] - terminal.buffer.ydisp;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n return;\n }\n\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : terminal.cols;\n this._ctx.fillStyle = this._colors.selection;\n this.fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);\n\n // Draw middle rows\n const middleRowsCount = Math.max(viewportCappedEndRow - viewportCappedStartRow - 1, 0);\n this.fillCells(0, viewportCappedStartRow + 1, terminal.cols, middleRowsCount);\n\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewportStartRow\n const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols;\n this.fillCells(0, viewportCappedEndRow, endCol, 1);\n }\n\n // Save state for next render\n this._state.start = [start[0], start[1]];\n this._state.end = [end[0], end[1]];\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ITheme } from '../Interfaces';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\nimport { TextRenderLayer } from './TextRenderLayer';\nimport { SelectionRenderLayer } from './SelectionRenderLayer';\nimport { CursorRenderLayer } from './CursorRenderLayer';\nimport { ColorManager } from './ColorManager';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { IRenderLayer, IColorSet, IRenderer, IRenderDimensions } from './Interfaces';\nimport { LinkRenderLayer } from './LinkRenderLayer';\nimport { EventEmitter } from '../EventEmitter';\n\nexport class Renderer extends EventEmitter implements IRenderer {\n /** A queue of the rows to be refreshed */\n private _refreshRowsQueue: {start: number, end: number}[] = [];\n private _refreshAnimationFrame = null;\n\n private _renderLayers: IRenderLayer[];\n private _devicePixelRatio: number;\n\n public colorManager: ColorManager;\n public dimensions: IRenderDimensions;\n\n constructor(private _terminal: ITerminal, theme: ITheme) {\n super();\n this.colorManager = new ColorManager();\n if (theme) {\n this.colorManager.setTheme(theme);\n }\n this._renderLayers = [\n new TextRenderLayer(this._terminal.element, 0, this.colorManager.colors),\n new SelectionRenderLayer(this._terminal.element, 1, this.colorManager.colors),\n new LinkRenderLayer(this._terminal.element, 2, this.colorManager.colors, this._terminal),\n new CursorRenderLayer(this._terminal.element, 3, this.colorManager.colors)\n ];\n this.dimensions = {\n scaledCharWidth: null,\n scaledCharHeight: null,\n scaledCellWidth: null,\n scaledCellHeight: null,\n scaledCharLeft: null,\n scaledCharTop: null,\n scaledCanvasWidth: null,\n scaledCanvasHeight: null,\n canvasWidth: null,\n canvasHeight: null,\n actualCellWidth: null,\n actualCellHeight: null\n };\n this._devicePixelRatio = window.devicePixelRatio;\n }\n\n public onWindowResize(devicePixelRatio: number): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== devicePixelRatio) {\n this._devicePixelRatio = devicePixelRatio;\n this.onResize(this._terminal.cols, this._terminal.rows, true);\n }\n }\n\n public setTheme(theme: ITheme): IColorSet {\n this.colorManager.setTheme(theme);\n\n // Clear layers and force a full render\n this._renderLayers.forEach(l => {\n l.onThemeChanged(this._terminal, this.colorManager.colors);\n l.reset(this._terminal);\n });\n\n this._terminal.refresh(0, this._terminal.rows - 1);\n\n return this.colorManager.colors;\n }\n\n public onResize(cols: number, rows: number, didCharSizeChange: boolean): void {\n if (!this._terminal.charMeasure.width || !this._terminal.charMeasure.height) {\n return;\n }\n\n // Calculate the scaled character width. Width is floored as it must be\n // drawn to an integer grid in order for the CharAtlas \"stamps\" to not be\n // blurry. When text is drawn to the grid not using the CharAtlas, it is\n // clipped to ensure there is no overlap with the next cell.\n this.dimensions.scaledCharWidth = Math.floor(this._terminal.charMeasure.width * window.devicePixelRatio);\n\n // Calculate the scaled character height. Height is ceiled in case\n // devicePixelRatio is a floating point number in order to ensure there is\n // enough space to draw the character to the cell.\n this.dimensions.scaledCharHeight = Math.ceil(this._terminal.charMeasure.height * window.devicePixelRatio);\n\n // Calculate the scaled cell height, if lineHeight is not 1 then the value\n // will be floored because since lineHeight can never be lower then 1, there\n // is a guarentee that the scaled line height will always be larger than\n // scaled char height.\n this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._terminal.options.lineHeight);\n\n // Calculate the y coordinate within a cell that text should draw from in\n // order to draw in the center of a cell.\n this.dimensions.scaledCharTop = this._terminal.options.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2);\n\n // Calculate the scaled cell width, taking the letterSpacing into account.\n this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._terminal.options.letterSpacing);\n\n // Calculate the x coordinate with a cell that text should draw from in\n // order to draw in the center of a cell.\n this.dimensions.scaledCharLeft = Math.floor(this._terminal.options.letterSpacing / 2);\n\n // Recalculate the canvas dimensions; scaled* define the actual number of\n // pixel in the canvas\n this.dimensions.scaledCanvasHeight = this._terminal.rows * this.dimensions.scaledCellHeight;\n this.dimensions.scaledCanvasWidth = this._terminal.cols * this.dimensions.scaledCellWidth;\n\n // The the size of the canvas on the page. It's very important that this\n // rounds to nearest integer and not ceils as browsers often set\n // window.devicePixelRatio as something like 1.100000023841858, when it's\n // actually 1.1. Ceiling causes blurriness as the backing canvas image is 1\n // pixel too large for the canvas element size.\n this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / window.devicePixelRatio);\n this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / window.devicePixelRatio);\n\n // Get the _actual_ dimensions of an individual cell. This needs to be\n // derived from the canvasWidth/Height calculated above which takes into\n // account window.devicePixelRatio. CharMeasure.width/height by itself is\n // insufficient when the page is not at 100% zoom level as CharMeasure is\n // measured in CSS pixels, but the actual char size on the canvas can\n // differ.\n this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._terminal.rows;\n this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._terminal.cols;\n\n // Resize all render layers\n this._renderLayers.forEach(l => l.resize(this._terminal, this.dimensions, didCharSizeChange));\n\n // Force a refresh\n this._terminal.refresh(0, this._terminal.rows - 1);\n\n this.emit('resize', {\n width: this.dimensions.canvasWidth,\n height: this.dimensions.canvasHeight\n });\n }\n\n public onCharSizeChanged(): void {\n this.onResize(this._terminal.cols, this._terminal.rows, true);\n }\n\n public onBlur(): void {\n this._renderLayers.forEach(l => l.onBlur(this._terminal));\n }\n\n public onFocus(): void {\n this._renderLayers.forEach(l => l.onFocus(this._terminal));\n }\n\n public onSelectionChanged(start: [number, number], end: [number, number]): void {\n this._renderLayers.forEach(l => l.onSelectionChanged(this._terminal, start, end));\n }\n\n public onCursorMove(): void {\n this._renderLayers.forEach(l => l.onCursorMove(this._terminal));\n }\n\n public onOptionsChanged(): void {\n this._renderLayers.forEach(l => l.onOptionsChanged(this._terminal));\n }\n\n public clear(): void {\n this._renderLayers.forEach(l => l.reset(this._terminal));\n }\n\n /**\n * Queues a refresh between two rows (inclusive), to be done on next animation\n * frame.\n * @param {number} start The start row.\n * @param {number} end The end row.\n */\n public queueRefresh(start: number, end: number): void {\n this._refreshRowsQueue.push({ start: start, end: end });\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(this._refreshLoop.bind(this));\n }\n }\n\n /**\n * Performs the refresh loop callback, calling refresh only if a refresh is\n * necessary before queueing up the next one.\n */\n private _refreshLoop(): void {\n let start;\n let end;\n if (this._refreshRowsQueue.length > 4) {\n // Just do a full refresh when 5+ refreshes are queued\n start = 0;\n end = this._terminal.rows - 1;\n } else {\n // Get start and end rows that need refreshing\n start = this._refreshRowsQueue[0].start;\n end = this._refreshRowsQueue[0].end;\n for (let i = 1; i < this._refreshRowsQueue.length; i++) {\n if (this._refreshRowsQueue[i].start < start) {\n start = this._refreshRowsQueue[i].start;\n }\n if (this._refreshRowsQueue[i].end > end) {\n end = this._refreshRowsQueue[i].end;\n }\n }\n }\n this._refreshRowsQueue = [];\n this._refreshAnimationFrame = null;\n\n // Render\n start = Math.max(start, 0);\n end = Math.min(end, this._terminal.rows - 1);\n this._renderLayers.forEach(l => l.onGridChanged(this._terminal, start, end));\n this._terminal.emit('refresh', {start, end});\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal, ILinkifierAccessor } from '../Interfaces';\nimport { CHAR_DATA_ATTR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer, INVERTED_DEFAULT_COLOR } from './BaseRenderLayer';\nimport { LinkHoverEvent, LinkHoverEventTypes } from '../Types';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: LinkHoverEvent = null;\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet, terminal: ILinkifierAccessor) {\n super(container, 'link', zIndex, true, colors);\n terminal.linkifier.on(LinkHoverEventTypes.HOVER, (e: LinkHoverEvent) => this._onLinkHover(e));\n terminal.linkifier.on(LinkHoverEventTypes.LEAVE, (e: LinkHoverEvent) => this._onLinkLeave(e));\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = null;\n }\n\n public reset(terminal: ITerminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this.clearCells(this._state.x, this._state.y, this._state.length, 1);\n this._state = null;\n }\n }\n\n private _onLinkHover(e: LinkHoverEvent): void {\n this._ctx.fillStyle = this._colors.foreground;\n this.fillBottomLineAtCells(e.x, e.y, e.length);\n this._state = e;\n }\n\n private _onLinkLeave(e: LinkHoverEvent): void {\n this._clearCurrentLink();\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class GridCache {\n public cache: T[][];\n\n public constructor() {\n this.cache = [];\n }\n\n public resize(width: number, height: number): void {\n for (let x = 0; x < width; x++) {\n if (this.cache.length <= x) {\n this.cache.push([]);\n }\n for (let y = this.cache[x].length; y < height; y++) {\n this.cache[x].push(null);\n }\n this.cache[x].length = height;\n }\n this.cache.length = width;\n }\n\n public clear(): void {\n for (let x = 0; x < this.cache.length; x++) {\n for (let y = 0; y < this.cache[x].length; y++) {\n this.cache[x][y] = null;\n }\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IRenderDimensions } from './Interfaces';\nimport { IBuffer, ICharMeasure, ITerminal, ITerminalOptions } from '../Interfaces';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CODE_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\nimport { GridCache } from './GridCache';\nimport { FLAGS } from './Types';\nimport { BaseRenderLayer } from './BaseRenderLayer';\nimport { CharData } from '../Types';\n\ninterface CursorState {\n x: number;\n y: number;\n isFocused: boolean;\n style: string;\n width: number;\n}\n\n/**\n * The time between cursor blinks.\n */\nconst BLINK_INTERVAL = 600;\n\nexport class CursorRenderLayer extends BaseRenderLayer {\n private _state: CursorState;\n private _cursorRenderers: {[key: string]: (terminal: ITerminal, x: number, y: number, charData: CharData) => void};\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _isFocused: boolean;\n\n constructor(container: HTMLElement, zIndex: number, colors: IColorSet) {\n super(container, 'cursor', zIndex, true, colors);\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n this._cursorRenderers = {\n 'bar': this._renderBarCursor.bind(this),\n 'block': this._renderBlockCursor.bind(this),\n 'underline': this._renderUnderlineCursor.bind(this)\n };\n // TODO: Consider initial options? Maybe onOptionsChanged should be called at the end of open?\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n super.resize(terminal, dim, charSizeChanged);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n }\n\n public reset(terminal: ITerminal): void {\n this._clearCursor();\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.dispose();\n this._cursorBlinkStateManager = null;\n this.onOptionsChanged(terminal);\n }\n }\n\n public onBlur(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.pause();\n }\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n\n public onFocus(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.resume(terminal);\n } else {\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n }\n\n public onOptionsChanged(terminal: ITerminal): void {\n if (terminal.options.cursorBlink) {\n if (!this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, () => {\n this._render(terminal, true);\n });\n }\n } else {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.dispose();\n this._cursorBlinkStateManager = null;\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n terminal.refresh(terminal.buffer.y, terminal.buffer.y);\n }\n }\n\n public onCursorMove(terminal: ITerminal): void {\n if (this._cursorBlinkStateManager) {\n this._cursorBlinkStateManager.restartBlinkAnimation(terminal);\n }\n }\n\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {\n // Only render if the animation frame is not active\n if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) {\n this._render(terminal, false);\n }\n }\n\n private _render(terminal: ITerminal, triggeredByAnimationFrame: boolean): void {\n // Don't draw the cursor if it's hidden\n if (!terminal.cursorState || terminal.cursorHidden) {\n this._clearCursor();\n return;\n }\n\n const cursorY = terminal.buffer.ybase + terminal.buffer.y;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n\n // Don't draw the cursor if it's off-screen\n if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) {\n this._clearCursor();\n return;\n }\n\n const charData = terminal.buffer.lines.get(cursorY)[terminal.buffer.x];\n if (!charData) {\n return;\n }\n\n if (!terminal.isFocused) {\n this._clearCursor();\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData);\n this._ctx.restore();\n this._state.x = terminal.buffer.x;\n this._state.y = viewportRelativeCursorY;\n this._state.isFocused = false;\n this._state.style = terminal.options.cursorStyle;\n this._state.width = charData[CHAR_DATA_WIDTH_INDEX];\n return;\n }\n\n // Don't draw the cursor if it's blinking\n if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) {\n this._clearCursor();\n return;\n }\n\n if (this._state) {\n // The cursor is already in the correct spot, don't redraw\n if (this._state.x === terminal.buffer.x &&\n this._state.y === viewportRelativeCursorY &&\n this._state.isFocused === terminal.isFocused &&\n this._state.style === terminal.options.cursorStyle &&\n this._state.width === charData[CHAR_DATA_WIDTH_INDEX]) {\n return;\n }\n this._clearCursor();\n }\n\n this._ctx.save();\n this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData);\n this._ctx.restore();\n\n this._state.x = terminal.buffer.x;\n this._state.y = viewportRelativeCursorY;\n this._state.isFocused = false;\n this._state.style = terminal.options.cursorStyle;\n this._state.width = charData[CHAR_DATA_WIDTH_INDEX];\n }\n\n private _clearCursor(): void {\n if (this._state) {\n this.clearCells(this._state.x, this._state.y, this._state.width, 1);\n this._state = {\n x: null,\n y: null,\n isFocused: null,\n style: null,\n width: null,\n };\n }\n }\n\n private _renderBarCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillLeftLineAtCell(x, y);\n this._ctx.restore();\n }\n\n private _renderBlockCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillCells(x, y, charData[CHAR_DATA_WIDTH_INDEX], 1);\n this._ctx.fillStyle = this._colors.cursorAccent;\n this.fillCharTrueColor(terminal, charData, x, y);\n this._ctx.restore();\n }\n\n private _renderUnderlineCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.fillStyle = this._colors.cursor;\n this.fillBottomLineAtCells(x, y);\n this._ctx.restore();\n }\n\n private _renderBlurCursor(terminal: ITerminal, x: number, y: number, charData: CharData): void {\n this._ctx.save();\n this._ctx.strokeStyle = this._colors.cursor;\n this.strokeRectAtCell(x, y, charData[CHAR_DATA_WIDTH_INDEX], 1);\n this._ctx.restore();\n }\n}\n\nclass CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number;\n private _blinkStartTimeout: number;\n private _blinkInterval: number;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number;\n\n constructor(\n terminal: ITerminal,\n private renderCallback: () => void\n ) {\n this.isCursorVisible = true;\n if (terminal.isFocused) {\n this._restartInterval();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n this._blinkInterval = null;\n }\n if (this._blinkStartTimeout) {\n window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = null;\n }\n if (this._animationFrame) {\n window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n }\n\n public restartBlinkAnimation(terminal: ITerminal): void {\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = null;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n\n // Setup the blink interval\n this._blinkInterval = setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = null;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = window.requestAnimationFrame(() => {\n this.renderCallback();\n this._animationFrame = null;\n });\n }, BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n if (this._blinkInterval) {\n window.clearInterval(this._blinkInterval);\n this._blinkInterval = null;\n }\n if (this._blinkStartTimeout) {\n window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = null;\n }\n if (this._animationFrame) {\n window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n }\n\n public resume(terminal: ITerminal): void {\n this._animationTimeRestarted = null;\n this._restartInterval();\n this.restartBlinkAnimation(terminal);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorSet, IColorManager } from './Interfaces';\nimport { ITheme } from '../Interfaces';\n\nconst DEFAULT_FOREGROUND = '#ffffff';\nconst DEFAULT_BACKGROUND = '#000000';\nconst DEFAULT_CURSOR = '#ffffff';\nconst DEFAULT_CURSOR_ACCENT = '#000000';\nconst DEFAULT_SELECTION = 'rgba(255, 255, 255, 0.3)';\nexport const DEFAULT_ANSI_COLORS = [\n // dark:\n '#2e3436',\n '#cc0000',\n '#4e9a06',\n '#c4a000',\n '#3465a4',\n '#75507b',\n '#06989a',\n '#d3d7cf',\n // bright:\n '#555753',\n '#ef2929',\n '#8ae234',\n '#fce94f',\n '#729fcf',\n '#ad7fa8',\n '#34e2e2',\n '#eeeeec'\n];\n\n/**\n * Fills an existing 16 length string with the remaining 240 ANSI colors.\n * @param first16Colors The first 16 ANSI colors.\n */\nfunction generate256Colors(first16Colors: string[]): string[] {\n let colors = first16Colors.slice();\n\n // Generate colors (16-231)\n let v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = toPaddedHex(v[(i / 36) % 6 | 0]);\n const g = toPaddedHex(v[(i / 6) % 6 | 0]);\n const b = toPaddedHex(v[i % 6]);\n colors.push(`#${r}${g}${b}`);\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = toPaddedHex(8 + i * 10);\n colors.push(`#${c}${c}${c}`);\n }\n\n return colors;\n}\n\nfunction toPaddedHex(c: number): string {\n let s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Manages the source of truth for a terminal's colors.\n */\nexport class ColorManager implements IColorManager {\n public colors: IColorSet;\n\n constructor() {\n this.colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selection: DEFAULT_SELECTION,\n ansi: generate256Colors(DEFAULT_ANSI_COLORS)\n };\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n public setTheme(theme: ITheme): void {\n this.colors.foreground = theme.foreground || DEFAULT_FOREGROUND;\n this.colors.background = this._validateColor(theme.background, DEFAULT_BACKGROUND);\n this.colors.cursor = theme.cursor || DEFAULT_CURSOR;\n this.colors.cursorAccent = theme.cursorAccent || DEFAULT_CURSOR_ACCENT;\n this.colors.selection = theme.selection || DEFAULT_SELECTION;\n this.colors.ansi[0] = theme.black || DEFAULT_ANSI_COLORS[0];\n this.colors.ansi[1] = theme.red || DEFAULT_ANSI_COLORS[1];\n this.colors.ansi[2] = theme.green || DEFAULT_ANSI_COLORS[2];\n this.colors.ansi[3] = theme.yellow || DEFAULT_ANSI_COLORS[3];\n this.colors.ansi[4] = theme.blue || DEFAULT_ANSI_COLORS[4];\n this.colors.ansi[5] = theme.magenta || DEFAULT_ANSI_COLORS[5];\n this.colors.ansi[6] = theme.cyan || DEFAULT_ANSI_COLORS[6];\n this.colors.ansi[7] = theme.white || DEFAULT_ANSI_COLORS[7];\n this.colors.ansi[8] = theme.brightBlack || DEFAULT_ANSI_COLORS[8];\n this.colors.ansi[9] = theme.brightRed || DEFAULT_ANSI_COLORS[9];\n this.colors.ansi[10] = theme.brightGreen || DEFAULT_ANSI_COLORS[10];\n this.colors.ansi[11] = theme.brightYellow || DEFAULT_ANSI_COLORS[11];\n this.colors.ansi[12] = theme.brightBlue || DEFAULT_ANSI_COLORS[12];\n this.colors.ansi[13] = theme.brightMagenta || DEFAULT_ANSI_COLORS[13];\n this.colors.ansi[14] = theme.brightCyan || DEFAULT_ANSI_COLORS[14];\n this.colors.ansi[15] = theme.brightWhite || DEFAULT_ANSI_COLORS[15];\n }\n\n private _validateColor(color: string, fallback: string): string {\n if (!color) {\n return fallback;\n }\n if (color.length === 7 && color.charAt(0) === '#') {\n return color;\n }\n if (color.length === 4 && color.charAt(0) === '#') {\n const r = color.charAt(1);\n const g = color.charAt(2);\n const b = color.charAt(3);\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return fallback;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ITheme } from '../Interfaces';\nimport { IColorSet } from '../renderer/Interfaces';\nimport { isFirefox } from '../utils/Browser';\n\nexport const CHAR_ATLAS_CELL_SPACING = 1;\n\ninterface ICharAtlasConfig {\n fontSize: number;\n fontFamily: string;\n scaledCharWidth: number;\n scaledCharHeight: number;\n colors: IColorSet;\n}\n\ninterface ICharAtlasCacheEntry {\n bitmap: HTMLCanvasElement | Promise;\n config: ICharAtlasConfig;\n ownedBy: ITerminal[];\n}\n\nlet charAtlasCache: ICharAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n * @param terminal The terminal.\n * @param colors The colors to use.\n */\nexport function acquireCharAtlas(terminal: ITerminal, colors: IColorSet, scaledCharWidth: number, scaledCharHeight: number): HTMLCanvasElement | Promise {\n const newConfig = generateConfig(scaledCharWidth, scaledCharHeight, terminal, colors);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.bitmap;\n } else {\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.bitmap;\n }\n }\n\n const newEntry: ICharAtlasCacheEntry = {\n bitmap: generator.generate(scaledCharWidth, scaledCharHeight, terminal.options.fontSize, terminal.options.fontFamily, colors.background, colors.foreground, colors.ansi),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.bitmap;\n}\n\nfunction generateConfig(scaledCharWidth: number, scaledCharHeight: number, terminal: ITerminal, colors: IColorSet): ICharAtlasConfig {\n const clonedColors = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: null,\n cursorAccent: null,\n selection: null,\n ansi: colors.ansi.slice(0, 16)\n };\n return {\n scaledCharWidth,\n scaledCharHeight,\n fontFamily: terminal.options.fontFamily,\n fontSize: terminal.options.fontSize,\n colors: clonedColors\n };\n}\n\nfunction configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i] !== b.colors.ansi[i]) {\n return false;\n }\n }\n return a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.scaledCharWidth === b.scaledCharWidth &&\n a.scaledCharHeight === b.scaledCharHeight &&\n a.colors.foreground === b.colors.foreground &&\n a.colors.background === b.colors.background;\n}\n\nlet generator: CharAtlasGenerator;\n\n/**\n * Initializes the char atlas generator.\n * @param document The document.\n */\nexport function initialize(document: Document): void {\n if (!generator) {\n generator = new CharAtlasGenerator(document);\n }\n}\n\nclass CharAtlasGenerator {\n private _canvas: HTMLCanvasElement;\n private _ctx: CanvasRenderingContext2D;\n\n constructor(private _document: Document) {\n this._canvas = this._document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d', {alpha: false});\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n }\n\n public generate(scaledCharWidth: number, scaledCharHeight: number, fontSize: number, fontFamily: string, background: string, foreground: string, ansiColors: string[]): HTMLCanvasElement | Promise {\n const cellWidth = scaledCharWidth + CHAR_ATLAS_CELL_SPACING;\n const cellHeight = scaledCharHeight + CHAR_ATLAS_CELL_SPACING;\n this._canvas.width = 255 * cellWidth;\n this._canvas.height = (/*default+default bold*/2 + /*0-15*/16) * cellHeight;\n\n this._ctx.fillStyle = background;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n\n this._ctx.save();\n this._ctx.fillStyle = foreground;\n this._ctx.font = `${fontSize * window.devicePixelRatio}px ${fontFamily}`;\n this._ctx.textBaseline = 'top';\n\n // Default color\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, 0, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, 0);\n this._ctx.restore();\n }\n // Default color bold\n this._ctx.save();\n this._ctx.font = `bold ${this._ctx.font}`;\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, cellHeight, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, cellHeight);\n this._ctx.restore();\n }\n this._ctx.restore();\n\n // Colors 0-15\n this._ctx.font = `${fontSize * window.devicePixelRatio}px ${fontFamily}`;\n for (let colorIndex = 0; colorIndex < 16; colorIndex++) {\n // colors 8-15 are bold\n if (colorIndex === 8) {\n this._ctx.font = `bold ${this._ctx.font}`;\n }\n const y = (colorIndex + 2) * cellHeight;\n // Draw ascii characters\n for (let i = 0; i < 256; i++) {\n this._ctx.save();\n this._ctx.beginPath();\n this._ctx.rect(i * cellWidth, y, cellWidth, cellHeight);\n this._ctx.clip();\n this._ctx.fillStyle = ansiColors[colorIndex];\n this._ctx.fillText(String.fromCharCode(i), i * cellWidth, y);\n this._ctx.restore();\n }\n }\n this._ctx.restore();\n\n // Support is patchy for createImageBitmap at the moment, pass a canvas back\n // if support is lacking as drawImage works there too. Firefox is also\n // included here as ImageBitmap appears both buggy and has horrible\n // performance (tested on v55).\n if (!('createImageBitmap' in window) || isFirefox) {\n // Regenerate canvas and context as they are now owned by the char atlas\n const result = this._canvas;\n this._canvas = this._document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d');\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n return result;\n }\n\n const charAtlasImageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height);\n\n // Remove the background color from the image so characters may overlap\n const r = parseInt(background.substr(1, 2), 16);\n const g = parseInt(background.substr(3, 2), 16);\n const b = parseInt(background.substr(5, 2), 16);\n this._clearColor(charAtlasImageData, r, g, b);\n\n const promise = window.createImageBitmap(charAtlasImageData);\n // Clear the rect while the promise is in progress\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n return promise;\n }\n\n private _clearColor(imageData: ImageData, r: number, g: number, b: number): void {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n }\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderLayer, IColorSet, IRenderDimensions } from './Interfaces';\nimport { ITerminal, ITerminalOptions } from '../Interfaces';\nimport { acquireCharAtlas, CHAR_ATLAS_CELL_SPACING } from './CharAtlas';\nimport { CharData } from '../Types';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from '../Buffer';\n\nexport const INVERTED_DEFAULT_COLOR = -1;\nconst DIM_OPACITY = 0.5;\n\nexport abstract class BaseRenderLayer implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx: CanvasRenderingContext2D;\n private _scaledCharWidth: number = 0;\n private _scaledCharHeight: number = 0;\n private _scaledCellWidth: number = 0;\n private _scaledCellHeight: number = 0;\n private _scaledCharLeft: number = 0;\n private _scaledCharTop: number = 0;\n\n private _charAtlas: HTMLCanvasElement | ImageBitmap;\n\n constructor(\n container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected _colors: IColorSet\n ) {\n this._canvas = document.createElement('canvas');\n this._canvas.id = `xterm-${id}-layer`;\n this._canvas.style.zIndex = zIndex.toString();\n this._ctx = this._canvas.getContext('2d', {alpha: _alpha});\n this._ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n // Draw the background if this is an opaque layer\n if (!_alpha) {\n this.clearAll();\n }\n container.appendChild(this._canvas);\n }\n\n public onOptionsChanged(terminal: ITerminal): void {}\n public onBlur(terminal: ITerminal): void {}\n public onFocus(terminal: ITerminal): void {}\n public onCursorMove(terminal: ITerminal): void {}\n public onGridChanged(terminal: ITerminal, startRow: number, endRow: number): void {}\n public onSelectionChanged(terminal: ITerminal, start: [number, number], end: [number, number]): void {}\n\n public onThemeChanged(terminal: ITerminal, colorSet: IColorSet): void {\n this._refreshCharAtlas(terminal, colorSet);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: ITerminal, colorSet: IColorSet): void {\n if (this._scaledCharWidth <= 0 && this._scaledCharHeight <= 0) {\n return;\n }\n this._charAtlas = null;\n const result = acquireCharAtlas(terminal, this._colors, this._scaledCharWidth, this._scaledCharHeight);\n if (result instanceof HTMLCanvasElement) {\n this._charAtlas = result;\n } else {\n result.then(bitmap => this._charAtlas = bitmap);\n }\n }\n\n public resize(terminal: ITerminal, dim: IRenderDimensions, charSizeChanged: boolean): void {\n this._scaledCellWidth = dim.scaledCellWidth;\n this._scaledCellHeight = dim.scaledCellHeight;\n this._scaledCharWidth = dim.scaledCharWidth;\n this._scaledCharHeight = dim.scaledCharHeight;\n this._scaledCharLeft = dim.scaledCharLeft;\n this._scaledCharTop = dim.scaledCharTop;\n this._canvas.width = dim.scaledCanvasWidth;\n this._canvas.height = dim.scaledCanvasHeight;\n this._canvas.style.width = `${dim.canvasWidth}px`;\n this._canvas.style.height = `${dim.canvasHeight}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this.clearAll();\n }\n\n if (charSizeChanged) {\n this._refreshCharAtlas(terminal, this._colors);\n }\n }\n\n public abstract reset(terminal: ITerminal): void;\n\n /**\n * Fills 1+ cells completely. This uses the existing fillStyle on the context.\n * @param x The column to start at.\n * @param y The row to start at\n * @param width The number of columns to fill.\n * @param height The number of rows to fill.\n */\n protected fillCells(x: number, y: number, width: number, height: number): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n }\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n (y + 1) * this._scaledCellHeight - window.devicePixelRatio - 1 /* Ensure it's drawn within the cell */,\n width * this._scaledCellWidth,\n window.devicePixelRatio);\n }\n\n /**\n * Fills a 1px line (2px on HDPI) at the left of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected fillLeftLineAtCell(x: number, y: number): void {\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n window.devicePixelRatio,\n this._scaledCellHeight);\n }\n\n /**\n * Strokes a 1px rectangle (2px on HDPI) around a cell. This uses the existing\n * strokeStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected strokeRectAtCell(x: number, y: number, width: number, height: number): void {\n this._ctx.lineWidth = window.devicePixelRatio;\n this._ctx.strokeRect(\n x * this._scaledCellWidth + window.devicePixelRatio / 2,\n y * this._scaledCellHeight + (window.devicePixelRatio / 2),\n width * this._scaledCellWidth - window.devicePixelRatio,\n (height * this._scaledCellHeight) - window.devicePixelRatio);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._colors.background;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n } else {\n this._ctx.fillStyle = this._colors.background;\n this._ctx.fillRect(\n x * this._scaledCellWidth,\n y * this._scaledCellHeight,\n width * this._scaledCellWidth,\n height * this._scaledCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param charData The char data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n * @param color The color of the character.\n */\n protected fillCharTrueColor(terminal: ITerminal, charData: CharData, x: number, y: number): void {\n this._ctx.font = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n this._ctx.textBaseline = 'top';\n this._clipRow(terminal, y);\n this._ctx.fillText(\n charData[CHAR_DATA_CHAR_INDEX],\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop);\n }\n\n /**\n * Draws a character at a cell. If possible this will draw using the character\n * atlas to reduce draw time.\n * @param terminal The terminal.\n * @param char The character.\n * @param code The character code.\n * @param width The width of the character.\n * @param x The column to draw at.\n * @param y The row to draw at.\n * @param fg The foreground color, in the format stored within the attributes.\n * @param bg The background color, in the format stored within the attributes.\n * This is used to validate whether a cached image can be used.\n * @param bold Whether the text is bold.\n */\n protected drawChar(terminal: ITerminal, char: string, code: number, width: number, x: number, y: number, fg: number, bg: number, bold: boolean, dim: boolean): void {\n let colorIndex = 0;\n if (fg < 256) {\n colorIndex = fg + 2;\n } else {\n // If default color and bold\n if (bold && terminal.options.enableBold) {\n colorIndex = 1;\n }\n }\n const isAscii = code < 256;\n // A color is basic if it is one of the standard normal or bold weight\n // colors of the characters held in the char atlas. Note that this excludes\n // the normal weight _light_ color characters.\n const isBasicColor = (colorIndex > 1 && fg < 16) && (fg < 8 || bold);\n const isDefaultColor = fg >= 256;\n const isDefaultBackground = bg >= 256;\n if (this._charAtlas && isAscii && (isBasicColor || isDefaultColor) && isDefaultBackground) {\n // ImageBitmap's draw about twice as fast as from a canvas\n const charAtlasCellWidth = this._scaledCharWidth + CHAR_ATLAS_CELL_SPACING;\n const charAtlasCellHeight = this._scaledCharHeight + CHAR_ATLAS_CELL_SPACING;\n\n // Apply alpha to dim the character\n if (dim) {\n this._ctx.globalAlpha = DIM_OPACITY;\n }\n\n // Draw the non-bold version of the same color if bold is not enabled\n if (bold && !terminal.options.enableBold) {\n // Ignore default color as it's not touched above\n if (colorIndex > 1) {\n colorIndex -= 8;\n }\n }\n\n this._ctx.drawImage(this._charAtlas,\n code * charAtlasCellWidth,\n colorIndex * charAtlasCellHeight,\n charAtlasCellWidth,\n this._scaledCharHeight,\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop,\n charAtlasCellWidth,\n this._scaledCharHeight);\n } else {\n this._drawUncachedChar(terminal, char, width, fg, x, y, bold, dim);\n }\n // This draws the atlas (for debugging purposes)\n // this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n // this._ctx.drawImage(this._charAtlas, 0, 0);\n }\n\n /**\n * Draws a character at a cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character.\n * @param terminal The terminal.\n * @param char The character.\n * @param width The width of the character.\n * @param fg The foreground color, in the format stored within the attributes.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n private _drawUncachedChar(terminal: ITerminal, char: string, width: number, fg: number, x: number, y: number, bold: boolean, dim: boolean): void {\n this._ctx.save();\n this._ctx.font = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`;\n if (bold && terminal.options.enableBold) {\n this._ctx.font = `bold ${this._ctx.font}`;\n }\n this._ctx.textBaseline = 'top';\n\n if (fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._colors.background;\n } else if (fg < 256) {\n // 256 color support\n this._ctx.fillStyle = this._colors.ansi[fg];\n } else {\n this._ctx.fillStyle = this._colors.foreground;\n }\n\n this._clipRow(terminal, y);\n\n // Apply alpha to dim the character\n if (dim) {\n this._ctx.globalAlpha = DIM_OPACITY;\n }\n // Draw the character\n this._ctx.fillText(\n char,\n x * this._scaledCellWidth + this._scaledCharLeft,\n y * this._scaledCellHeight + this._scaledCharTop);\n this._ctx.restore();\n }\n\n /**\n * Clips a row to ensure no pixels will be drawn outside the cells in the row.\n * @param terminal The terminal.\n * @param y The row to clip.\n */\n private _clipRow(terminal: ITerminal, y: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n 0,\n y * this._scaledCellHeight,\n terminal.cols * this._scaledCellWidth,\n this._scaledCellHeight);\n this._ctx.clip();\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IMouseZoneManager, IMouseZone } from './Interfaces';\nimport { ITerminal } from '../Interfaces';\n\nconst HOVER_DURATION = 500;\n\n/**\n * The MouseZoneManager allows components to register zones within the terminal\n * that trigger hover and click callbacks.\n *\n * This class was intentionally made not so robust initially as the only case it\n * needed to support was single-line links which never overlap. Improvements can\n * be made in the future.\n */\nexport class MouseZoneManager implements IMouseZoneManager {\n private _zones: IMouseZone[] = [];\n\n private _areZonesActive: boolean = false;\n private _mouseMoveListener: (e: MouseEvent) => any;\n private _clickListener: (e: MouseEvent) => any;\n\n private _tooltipTimeout: number = null;\n private _currentZone: IMouseZone = null;\n private _lastHoverCoords: [number, number] = [null, null];\n\n constructor(\n private _terminal: ITerminal\n ) {\n this._terminal.element.addEventListener('mousedown', e => this._onMouseDown(e));\n\n // These events are expensive, only listen to it when mouse zones are active\n this._mouseMoveListener = e => this._onMouseMove(e);\n this._clickListener = e => this._onClick(e);\n }\n\n public add(zone: IMouseZone): void {\n this._zones.push(zone);\n if (this._zones.length === 1) {\n this._activate();\n }\n }\n\n public clearAll(start?: number, end?: number): void {\n // Exit if there's nothing to clear\n if (this._zones.length === 0) {\n return;\n }\n\n // Clear all if start/end weren't set\n if (!end) {\n start = 0;\n end = this._terminal.rows - 1;\n }\n\n // Iterate through zones and clear them out if they're within the range\n for (let i = 0; i < this._zones.length; i++) {\n const zone = this._zones[i];\n if (zone.y > start && zone.y <= end + 1) {\n if (this._currentZone && this._currentZone === zone) {\n this._currentZone.leaveCallback();\n this._currentZone = null;\n }\n this._zones.splice(i--, 1);\n }\n }\n\n // Deactivate the mouse zone manager if all the zones have been removed\n if (this._zones.length === 0) {\n this._deactivate();\n }\n }\n\n private _activate(): void {\n if (!this._areZonesActive) {\n this._areZonesActive = true;\n this._terminal.element.addEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.addEventListener('click', this._clickListener);\n }\n }\n\n private _deactivate(): void {\n if (this._areZonesActive) {\n this._areZonesActive = false;\n this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.removeEventListener('click', this._clickListener);\n }\n }\n\n private _onMouseMove(e: MouseEvent): void {\n // TODO: Ideally this would only clear the hover state when the mouse moves\n // outside of the mouse zone\n if (this._lastHoverCoords[0] !== e.pageX || this._lastHoverCoords[1] !== e.pageY) {\n this._onHover(e);\n // Record the current coordinates\n this._lastHoverCoords = [e.pageX, e.pageY];\n }\n }\n\n private _onHover(e: MouseEvent): void {\n const zone = this._findZoneEventAt(e);\n\n // Do nothing if the zone is the same\n if (zone === this._currentZone) {\n return;\n }\n\n // Fire the hover end callback and cancel any existing timer if a new zone\n // is being hovered\n if (this._currentZone) {\n this._currentZone.leaveCallback();\n this._currentZone = null;\n if (this._tooltipTimeout) {\n clearTimeout(this._tooltipTimeout);\n }\n }\n\n // Exit if there is not zone\n if (!zone) {\n return;\n }\n this._currentZone = zone;\n\n // Trigger the hover callback\n if (zone.hoverCallback) {\n zone.hoverCallback(e);\n }\n\n // Restart the tooltip timeout\n this._tooltipTimeout = setTimeout(() => this._onTooltip(e), HOVER_DURATION);\n }\n\n private _onTooltip(e: MouseEvent): void {\n this._tooltipTimeout = null;\n const zone = this._findZoneEventAt(e);\n if (zone && zone.tooltipCallback) {\n zone.tooltipCallback(e);\n }\n }\n\n private _onMouseDown(e: MouseEvent): void {\n // Ignore the event if there are no zones active\n if (!this._areZonesActive) {\n return;\n }\n\n // Find the active zone, prevent event propagation if found to prevent other\n // components from handling the mouse event.\n const zone = this._findZoneEventAt(e);\n if (zone) {\n // TODO: When link modifier support is added, the event should only be\n // cancelled when the modifier is held (see #1021)\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n private _onClick(e: MouseEvent): void {\n // Find the active zone and click it if found\n const zone = this._findZoneEventAt(e);\n if (zone) {\n zone.clickCallback(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n private _findZoneEventAt(e: MouseEvent): IMouseZone {\n const coords = this._terminal.mouseHelper.getCoords(e, this._terminal.element, this._terminal.charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows);\n if (!coords) {\n return null;\n }\n for (let i = 0; i < this._zones.length; i++) {\n const zone = this._zones[i];\n if (zone.y === coords[1] && zone.x1 <= coords[0] && zone.x2 > coords[0]) {\n return zone;\n }\n };\n return null;\n }\n}\n\nexport class MouseZone implements IMouseZone {\n constructor(\n public x1: number,\n public x2: number,\n public y: number,\n public clickCallback: (e: MouseEvent) => any,\n public hoverCallback?: (e: MouseEvent) => any,\n public tooltipCallback?: (e: MouseEvent) => any,\n public leaveCallback?: () => void\n ) {\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, ISelectionManager } from '../Interfaces';\n\ninterface IWindow extends Window {\n clipboardData?: {\n getData(format: string): string;\n setData(format: string, data: string): void;\n };\n}\n\ndeclare var window: IWindow;\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string, isMSWindows: boolean): string {\n if (isMSWindows) {\n return text.replace(/\\r?\\n/g, '\\r');\n }\n return text;\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (bracketedPasteMode) {\n return '\\x1b[200~' + text + '\\x1b[201~';\n }\n return text;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param {ClipboardEvent} ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, term: ITerminal, selectionManager: ISelectionManager): void {\n if (term.browser.isMSIE) {\n window.clipboardData.setData('Text', selectionManager.selectionText);\n } else {\n ev.clipboardData.setData('text/plain', selectionManager.selectionText);\n }\n\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n * @param {ClipboardEvent} ev The original paste event to be handled\n * @param {Terminal} term The terminal on which to apply the handled paste event\n */\nexport function pasteHandler(ev: ClipboardEvent, term: ITerminal): void {\n ev.stopPropagation();\n\n let text: string;\n\n let dispatchPaste = function(text: string): void {\n text = prepareTextForTerminal(text, term.browser.isMSWindows);\n text = bracketTextForPaste(text, term.bracketedPasteMode);\n term.handler(text);\n term.textarea.value = '';\n term.emit('paste', text);\n term.cancel(ev);\n };\n\n if (term.browser.isMSIE) {\n if (window.clipboardData) {\n text = window.clipboardData.getData('Text');\n dispatchPaste(text);\n }\n } else {\n if (ev.clipboardData) {\n text = ev.clipboardData.getData('text/plain');\n dispatchPaste(text);\n }\n }\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement): void {\n // Bring textarea at the cursor position\n textarea.style.position = 'fixed';\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = (ev.clientX - 10) + 'px';\n textarea.style.top = (ev.clientY - 10) + 'px';\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n\n // Reset the terminal textarea's styling\n setTimeout(() => {\n textarea.style.position = null;\n textarea.style.width = null;\n textarea.style.height = null;\n textarea.style.left = null;\n textarea.style.top = null;\n textarea.style.zIndex = null;\n }, 4);\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n * @param selectionManager The terminal's selection manager.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, selectionManager: ISelectionManager): void {\n moveTextAreaUnderMouseCursor(ev, textarea);\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionManager.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IViewport } from './Interfaces';\nimport { CharMeasure } from './utils/CharMeasure';\nimport { IColorSet } from './renderer/Interfaces';\n\n/**\n * Represents the viewport of a terminal, the visible area within the larger buffer of output.\n * Logic for the virtual scroll bar is included in this object.\n */\nexport class Viewport implements IViewport {\n private currentRowHeight: number = 0;\n private lastRecordedBufferLength: number = 0;\n private lastRecordedViewportHeight: number = 0;\n private lastRecordedBufferHeight: number = 0;\n private lastTouchY: number;\n\n /**\n * Creates a new Viewport.\n * @param terminal The terminal this viewport belongs to.\n * @param viewportElement The DOM element acting as the viewport.\n * @param scrollArea The DOM element acting as the scroll area.\n * @param charMeasure A DOM element used to measure the character size of. the terminal.\n */\n constructor(\n private terminal: ITerminal,\n private viewportElement: HTMLElement,\n private scrollArea: HTMLElement,\n private charMeasure: CharMeasure\n ) {\n this.viewportElement.addEventListener('scroll', this.onScroll.bind(this));\n\n // Perform this async to ensure the CharMeasure is ready.\n setTimeout(() => this.syncScrollArea(), 0);\n }\n\n public onThemeChanged(colors: IColorSet): void {\n this.viewportElement.style.backgroundColor = colors.background;\n }\n\n /**\n * Refreshes row height, setting line-height, viewport height and scroll area height if\n * necessary.\n */\n private refresh(): void {\n if (this.charMeasure.height > 0) {\n this.currentRowHeight = this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio;\n\n if (this.lastRecordedViewportHeight !== this.terminal.renderer.dimensions.canvasHeight) {\n this.lastRecordedViewportHeight = this.terminal.renderer.dimensions.canvasHeight;\n this.viewportElement.style.height = this.lastRecordedViewportHeight + 'px';\n }\n\n const newBufferHeight = Math.round(this.currentRowHeight * this.lastRecordedBufferLength);\n if (this.lastRecordedBufferHeight !== newBufferHeight) {\n this.lastRecordedBufferHeight = newBufferHeight;\n this.scrollArea.style.height = this.lastRecordedBufferHeight + 'px';\n }\n }\n }\n\n /**\n * Updates dimensions and synchronizes the scroll area if necessary.\n */\n public syncScrollArea(): void {\n if (this.lastRecordedBufferLength !== this.terminal.buffer.lines.length) {\n // If buffer height changed\n this.lastRecordedBufferLength = this.terminal.buffer.lines.length;\n this.refresh();\n } else if (this.lastRecordedViewportHeight !== (this.terminal).renderer.dimensions.canvasHeight) {\n // If viewport height changed\n this.refresh();\n } else {\n // If size has changed, refresh viewport\n if (this.terminal.renderer.dimensions.scaledCellHeight / window.devicePixelRatio !== this.currentRowHeight) {\n this.refresh();\n }\n }\n\n // Sync scrollTop\n const scrollTop = this.terminal.buffer.ydisp * this.currentRowHeight;\n if (this.viewportElement.scrollTop !== scrollTop) {\n this.viewportElement.scrollTop = scrollTop;\n }\n }\n\n /**\n * Handles scroll events on the viewport, calculating the new viewport and requesting the\n * terminal to scroll to it.\n * @param ev The scroll event.\n */\n private onScroll(ev: Event): void {\n const newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight);\n const diff = newRow - this.terminal.buffer.ydisp;\n this.terminal.scrollLines(diff, true);\n }\n\n /**\n * Handles mouse wheel events by adjusting the viewport's scrollTop and delegating the actual\n * scrolling to `onScroll`, this event needs to be attached manually by the consumer of\n * `Viewport`.\n * @param ev The mouse wheel event.\n */\n public onWheel(ev: WheelEvent): void {\n if (ev.deltaY === 0) {\n // Do nothing if it's not a vertical scroll event\n return;\n }\n // Fallback to WheelEvent.DOM_DELTA_PIXEL\n let multiplier = 1;\n if (ev.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n multiplier = this.currentRowHeight;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n multiplier = this.currentRowHeight * this.terminal.rows;\n }\n this.viewportElement.scrollTop += ev.deltaY * multiplier;\n // Prevent the page from scrolling when the terminal scrolls\n ev.preventDefault();\n };\n\n /**\n * Handles the touchstart event, recording the touch occurred.\n * @param ev The touch event.\n */\n public onTouchStart(ev: TouchEvent): void {\n this.lastTouchY = ev.touches[0].pageY;\n };\n\n /**\n * Handles the touchmove event, scrolling the viewport if the position shifted.\n * @param ev The touch event.\n */\n public onTouchMove(ev: TouchEvent): void {\n let deltaY = this.lastTouchY - ev.touches[0].pageY;\n this.lastTouchY = ev.touches[0].pageY;\n if (deltaY === 0) {\n return;\n }\n this.viewportElement.scrollTop += deltaY;\n ev.preventDefault();\n };\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport type LinkMatcher = {\n id: number,\n regex: RegExp,\n handler: LinkMatcherHandler,\n hoverTooltipCallback?: LinkMatcherHandler,\n hoverLeaveCallback?: () => void,\n matchIndex?: number,\n validationCallback?: LinkMatcherValidationCallback,\n priority?: number\n};\nexport type LinkMatcherHandler = (event: MouseEvent, uri: string) => boolean | void;\nexport type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type Charset = {[key: string]: string};\n\nexport type CharData = [number, string, number, number];\nexport type LineData = CharData[];\n\nexport type LinkHoverEvent = {\n x: number,\n y: number,\n length: number\n};\n\nexport enum LinkHoverEventTypes {\n HOVER = 'linkhover',\n TOOLTIP = 'linktooltip',\n LEAVE = 'linkleave'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { BufferSet } from './BufferSet';\nimport { Buffer, MAX_BUFFER_SIZE } from './Buffer';\nimport { CompositionHelper } from './CompositionHelper';\nimport { EventEmitter } from './EventEmitter';\nimport { Viewport } from './Viewport';\nimport { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './handlers/Clipboard';\nimport { CircularList } from './utils/CircularList';\nimport { C0 } from './EscapeSequences';\nimport { InputHandler } from './InputHandler';\nimport { Parser } from './Parser';\nimport { Renderer } from './renderer/Renderer';\nimport { Linkifier } from './Linkifier';\nimport { SelectionManager } from './SelectionManager';\nimport { CharMeasure } from './utils/CharMeasure';\nimport * as Browser from './utils/Browser';\nimport { MouseHelper } from './utils/MouseHelper';\nimport { CHARSETS } from './Charsets';\nimport { CustomKeyEventHandler, Charset, LinkMatcherHandler, LinkMatcherValidationCallback, CharData, LineData } from './Types';\nimport { ITerminal, IBrowser, ITerminalOptions, IInputHandlingTerminal, ILinkMatcherOptions, IViewport, ICompositionHelper, ITheme, ILinkifier } from './Interfaces';\nimport { BellSound } from './utils/Sounds';\nimport { DEFAULT_ANSI_COLORS } from './renderer/ColorManager';\nimport { IMouseZoneManager } from './input/Interfaces';\nimport { MouseZoneManager } from './input/MouseZoneManager';\nimport { initialize as initializeCharAtlas } from './renderer/CharAtlas';\nimport { IRenderer } from './renderer/Interfaces';\n\n// Declares required for loadAddon\ndeclare var exports: any;\ndeclare var module: any;\ndeclare var define: any;\ndeclare var require: any;\n\n// Let it work inside Node.js for automated testing purposes.\nconst document = (typeof window !== 'undefined') ? window.document : null;\n\n/**\n * The amount of write requests to queue before sending an XOFF signal to the\n * pty process. This number must be small in order for ^C and similar sequences\n * to be responsive.\n */\nconst WRITE_BUFFER_PAUSE_THRESHOLD = 5;\n\n/**\n * The number of writes to perform in a single batch before allowing the\n * renderer to catch up with a 0ms setTimeout.\n */\nconst WRITE_BATCH_SIZE = 300;\n\nconst DEFAULT_OPTIONS: ITerminalOptions = {\n convertEol: false,\n termName: 'xterm',\n geometry: [80, 24],\n cursorBlink: false,\n cursorStyle: 'block',\n bellSound: BellSound,\n bellStyle: 'none',\n enableBold: true,\n fontFamily: 'courier-new, courier, monospace',\n fontSize: 15,\n lineHeight: 1.0,\n letterSpacing: 0,\n scrollback: 1000,\n screenKeys: false,\n debug: false,\n cancelEvents: false,\n disableStdin: false,\n useFlowControl: false,\n tabStopWidth: 8,\n theme: null\n // programFeatures: false,\n // focusKeys: false,\n};\n\nexport class Terminal extends EventEmitter implements ITerminal, IInputHandlingTerminal {\n public textarea: HTMLTextAreaElement;\n public element: HTMLElement;\n\n /**\n * The HTMLElement that the terminal is created in, set by Terminal.open.\n */\n private parent: HTMLElement;\n private context: Window;\n private document: Document;\n private body: HTMLBodyElement;\n private viewportScrollArea: HTMLElement;\n private viewportElement: HTMLElement;\n private helperContainer: HTMLElement;\n private compositionView: HTMLElement;\n private charSizeStyleElement: HTMLStyleElement;\n private bellAudioElement: HTMLAudioElement;\n private visualBellTimer: number;\n\n public browser: IBrowser = Browser;\n\n public options: ITerminalOptions;\n private colors: any;\n\n // TODO: This can be changed to an enum or boolean, 0 and 1 seem to be the only options\n public cursorState: number;\n public cursorHidden: boolean;\n public convertEol: boolean;\n\n private sendDataQueue: string;\n private customKeyEventHandler: CustomKeyEventHandler;\n\n // modes\n public applicationKeypad: boolean;\n public applicationCursor: boolean;\n public originMode: boolean;\n public insertMode: boolean;\n public wraparoundMode: boolean; // defaults: xterm - true, vt100 - false\n public bracketedPasteMode: boolean;\n\n // charset\n // The current charset\n public charset: Charset;\n public gcharset: number;\n public glevel: number;\n public charsets: Charset[];\n\n // mouse properties\n private decLocator: boolean; // This is unstable and never set\n public x10Mouse: boolean;\n public vt200Mouse: boolean;\n private vt300Mouse: boolean; // This is unstable and never set\n public normalMouse: boolean;\n public mouseEvents: boolean;\n public sendFocus: boolean;\n public utfMouse: boolean;\n public sgrMouse: boolean;\n public urxvtMouse: boolean;\n\n // misc\n private refreshStart: number;\n private refreshEnd: number;\n public savedCols: number;\n\n // stream\n private readable: boolean;\n private writable: boolean;\n\n public defAttr: number;\n public curAttr: number;\n\n public params: (string | number)[];\n public currentParam: string | number;\n public prefix: string;\n public postfix: string;\n\n // user input states\n public writeBuffer: string[];\n private writeInProgress: boolean;\n\n /**\n * Whether _xterm.js_ sent XOFF in order to catch up with the pty process.\n * This is a distinct state from writeStopped so that if the user requested\n * XOFF via ^S that it will not automatically resume when the writeBuffer goes\n * below threshold.\n */\n private xoffSentToCatchUp: boolean;\n\n /** Whether writing has been stopped as a result of XOFF */\n private writeStopped: boolean;\n\n // leftover surrogate high from previous write invocation\n private surrogate_high: string;\n\n // Store if user went browsing history in scrollback\n private userScrolling: boolean;\n\n private inputHandler: InputHandler;\n private parser: Parser;\n public renderer: IRenderer;\n public selectionManager: SelectionManager;\n public linkifier: ILinkifier;\n public buffers: BufferSet;\n public buffer: Buffer;\n public viewport: IViewport;\n private compositionHelper: ICompositionHelper;\n public charMeasure: CharMeasure;\n private _mouseZoneManager: IMouseZoneManager;\n public mouseHelper: MouseHelper;\n\n public cols: number;\n public rows: number;\n public geometry: [/*cols*/number, /*rows*/number];\n\n /**\n * Creates a new `Terminal` object.\n *\n * @param {object} options An object containing a set of options, the available options are:\n * - `cursorBlink` (boolean): Whether the terminal cursor blinks\n * - `cols` (number): The number of columns of the terminal (horizontal size)\n * - `rows` (number): The number of rows of the terminal (vertical size)\n *\n * @public\n * @class Xterm Xterm\n * @alias module:xterm/src/xterm\n */\n constructor(\n options: ITerminalOptions = {}\n ) {\n super();\n this.options = options;\n this.setup();\n }\n\n private setup(): void {\n Object.keys(DEFAULT_OPTIONS).forEach((key) => {\n if (this.options[key] == null) {\n this.options[key] = DEFAULT_OPTIONS[key];\n }\n // TODO: We should move away from duplicate options on the Terminal object\n this[key] = this.options[key];\n });\n\n // this.context = options.context || window;\n // this.document = options.document || document;\n // TODO: WHy not document.body?\n this.parent = document ? document.body : null;\n\n this.cols = this.options.cols || this.options.geometry[0];\n this.rows = this.options.rows || this.options.geometry[1];\n this.geometry = [this.cols, this.rows];\n\n if (this.options.handler) {\n this.on('data', this.options.handler);\n }\n\n this.cursorState = 0;\n this.cursorHidden = false;\n this.sendDataQueue = '';\n this.customKeyEventHandler = null;\n\n // modes\n this.applicationKeypad = false;\n this.applicationCursor = false;\n this.originMode = false;\n this.insertMode = false;\n this.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this.bracketedPasteMode = false;\n\n // charset\n this.charset = null;\n this.gcharset = null;\n this.glevel = 0;\n // TODO: Can this be just []?\n this.charsets = [null];\n\n this.readable = true;\n this.writable = true;\n\n this.defAttr = (0 << 18) | (257 << 9) | (256 << 0);\n this.curAttr = (0 << 18) | (257 << 9) | (256 << 0);\n\n this.params = [];\n this.currentParam = 0;\n this.prefix = '';\n this.postfix = '';\n\n // user input states\n this.writeBuffer = [];\n this.writeInProgress = false;\n\n this.xoffSentToCatchUp = false;\n this.writeStopped = false;\n this.surrogate_high = '';\n this.userScrolling = false;\n\n this.inputHandler = new InputHandler(this);\n this.parser = new Parser(this.inputHandler, this);\n // Reuse renderer if the Terminal is being recreated via a reset call.\n this.renderer = this.renderer || null;\n this.selectionManager = this.selectionManager || null;\n this.linkifier = this.linkifier || new Linkifier(this);\n this._mouseZoneManager = this._mouseZoneManager || null;\n\n // Create the terminal's buffers and set the current buffer\n this.buffers = new BufferSet(this);\n this.buffer = this.buffers.active; // Convenience shortcut;\n this.buffers.on('activate', (buffer: Buffer) => {\n this.buffer = buffer;\n });\n\n // Ensure the selection manager has the correct buffer\n if (this.selectionManager) {\n this.selectionManager.setBuffer(this.buffer);\n }\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n public eraseAttr(): number {\n // if (this.is('screen')) return this.defAttr;\n return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff);\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n this.textarea.focus();\n }\n\n public get isFocused(): boolean {\n return document.activeElement === this.textarea;\n }\n\n /**\n * Retrieves an option's value from the terminal.\n * @param {string} key The option key.\n */\n public getOption(key: string): any {\n if (!(key in DEFAULT_OPTIONS)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n\n if (typeof this.options[key] !== 'undefined') {\n return this.options[key];\n }\n\n return this[key];\n }\n\n /**\n * Sets an option on the terminal.\n * @param {string} key The option key.\n * @param {any} value The option value.\n */\n public setOption(key: string, value: any): void {\n if (!(key in DEFAULT_OPTIONS)) {\n throw new Error('No option with key \"' + key + '\"');\n }\n switch (key) {\n case 'bellStyle':\n if (!value) {\n value = 'none';\n }\n break;\n case 'cursorStyle':\n if (!value) {\n value = 'block';\n }\n break;\n case 'lineHeight':\n if (value < 1) {\n console.warn(`${key} cannot be less than 1, value: ${value}`);\n return;\n }\n case 'tabStopWidth':\n if (value < 1) {\n console.warn(`${key} cannot be less than 1, value: ${value}`);\n return;\n }\n break;\n case 'theme':\n // If open has been called we do not want to set options.theme as the\n // source of truth is owned by the renderer.\n if (this.renderer) {\n this._setTheme(value);\n return;\n }\n break;\n case 'scrollback':\n value = Math.min(value, MAX_BUFFER_SIZE);\n\n if (value < 0) {\n console.warn(`${key} cannot be less than 0, value: ${value}`);\n return;\n }\n if (this.options[key] !== value) {\n const newBufferLength = this.rows + value;\n if (this.buffer.lines.length > newBufferLength) {\n const amountToTrim = this.buffer.lines.length - newBufferLength;\n const needsRefresh = (this.buffer.ydisp - amountToTrim < 0);\n this.buffer.lines.trimStart(amountToTrim);\n this.buffer.ybase = Math.max(this.buffer.ybase - amountToTrim, 0);\n this.buffer.ydisp = Math.max(this.buffer.ydisp - amountToTrim, 0);\n if (needsRefresh) {\n this.refresh(0, this.rows - 1);\n }\n }\n }\n break;\n }\n this[key] = value;\n this.options[key] = value;\n switch (key) {\n case 'fontFamily':\n case 'fontSize':\n // When the font changes the size of the cells may change which requires a renderer clear\n this.renderer.clear();\n this.charMeasure.measure(this.options);\n break;\n case 'enableBold':\n case 'letterSpacing':\n case 'lineHeight':\n // When the font changes the size of the cells may change which requires a renderer clear\n this.renderer.clear();\n this.renderer.onResize(this.cols, this.rows, false);\n this.refresh(0, this.rows - 1);\n // this.charMeasure.measure(this.options);\n case 'scrollback':\n this.buffers.resize(this.cols, this.rows);\n this.viewport.syncScrollArea();\n break;\n case 'tabStopWidth': this.buffers.setupTabStops(); break;\n case 'bellSound':\n case 'bellStyle': this.syncBellSound(); break;\n }\n // Inform renderer of changes\n if (this.renderer) {\n this.renderer.onOptionsChanged();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _onTextAreaFocus(): void {\n if (this.sendFocus) {\n this.send(C0.ESC + '[I');\n }\n this.element.classList.add('focus');\n this.showCursor();\n this.emit('focus');\n };\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _onTextAreaBlur(): void {\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.sendFocus) {\n this.send(C0.ESC + '[O');\n }\n this.element.classList.remove('focus');\n this.emit('blur');\n }\n\n /**\n * Initialize default behavior\n */\n private initGlobal(): void {\n this.bindKeys();\n\n // Bind clipboard functionality\n on(this.element, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this, this.selectionManager);\n });\n const pasteHandlerWrapper = event => pasteHandler(event, this);\n on(this.textarea, 'paste', pasteHandlerWrapper);\n on(this.element, 'paste', pasteHandlerWrapper);\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n on(this.element, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea, this.selectionManager);\n }\n });\n } else {\n on(this.element, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea, this.selectionManager);\n });\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n on(this.element, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea);\n }\n });\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private bindKeys(): void {\n const self = this;\n on(this.element, 'keydown', function (ev: KeyboardEvent): void {\n if (document.activeElement !== this) {\n return;\n }\n self._keyDown(ev);\n }, true);\n\n on(this.element, 'keypress', function (ev: KeyboardEvent): void {\n if (document.activeElement !== this) {\n return;\n }\n self._keyPress(ev);\n }, true);\n\n on(this.element, 'keyup', (ev: KeyboardEvent) => {\n if (!wasMondifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n }, true);\n\n on(this.textarea, 'keydown', (ev: KeyboardEvent) => {\n this._keyDown(ev);\n }, true);\n\n on(this.textarea, 'keypress', (ev: KeyboardEvent) => {\n this._keyPress(ev);\n // Truncate the textarea's value, since it is not needed\n this.textarea.value = '';\n }, true);\n\n on(this.textarea, 'compositionstart', () => this.compositionHelper.compositionstart());\n on(this.textarea, 'compositionupdate', (e: CompositionEvent) => this.compositionHelper.compositionupdate(e));\n on(this.textarea, 'compositionend', () => this.compositionHelper.compositionend());\n this.on('refresh', () => this.compositionHelper.updateCompositionElements());\n this.on('refresh', (data) => this.queueLinkification(data.start, data.end));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param {HTMLElement} parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n let i = 0;\n let div;\n\n this.parent = parent || this.parent;\n\n if (!this.parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n // Grab global elements\n this.context = this.parent.ownerDocument.defaultView;\n this.document = this.parent.ownerDocument;\n this.body = this.document.body;\n\n initializeCharAtlas(this.document);\n\n // Create main element container\n this.element = this.document.createElement('div');\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n\n this.element.setAttribute('tabindex', '0');\n\n this.viewportElement = document.createElement('div');\n this.viewportElement.classList.add('xterm-viewport');\n this.element.appendChild(this.viewportElement);\n this.viewportScrollArea = document.createElement('div');\n this.viewportScrollArea.classList.add('xterm-scroll-area');\n this.viewportElement.appendChild(this.viewportScrollArea);\n\n // preload audio\n this.syncBellSound();\n\n this._mouseZoneManager = new MouseZoneManager(this);\n this.on('scroll', () => this._mouseZoneManager.clearAll());\n this.linkifier.attachToDom(this._mouseZoneManager);\n\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this.helperContainer = document.createElement('div');\n this.helperContainer.classList.add('xterm-helpers');\n // TODO: This should probably be inserted once it's filled to prevent an additional layout\n this.element.appendChild(this.helperContainer);\n this.textarea = document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this.textarea.addEventListener('focus', () => this._onTextAreaFocus());\n this.textarea.addEventListener('blur', () => this._onTextAreaBlur());\n this.helperContainer.appendChild(this.textarea);\n\n this.compositionView = document.createElement('div');\n this.compositionView.classList.add('composition-view');\n this.compositionHelper = new CompositionHelper(this.textarea, this.compositionView, this);\n this.helperContainer.appendChild(this.compositionView);\n\n this.charSizeStyleElement = document.createElement('style');\n this.helperContainer.appendChild(this.charSizeStyleElement);\n\n this.parent.appendChild(this.element);\n\n this.charMeasure = new CharMeasure(document, this.helperContainer);\n\n this.renderer = new Renderer(this, this.options.theme);\n this.options.theme = null;\n this.viewport = new Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure);\n this.viewport.onThemeChanged(this.renderer.colorManager.colors);\n\n this.on('cursormove', () => this.renderer.onCursorMove());\n this.on('resize', () => this.renderer.onResize(this.cols, this.rows, false));\n this.on('blur', () => this.renderer.onBlur());\n this.on('focus', () => this.renderer.onFocus());\n window.addEventListener('resize', () => this.renderer.onWindowResize(window.devicePixelRatio));\n this.charMeasure.on('charsizechanged', () => this.renderer.onResize(this.cols, this.rows, true));\n this.renderer.on('resize', (dimensions) => this.viewport.syncScrollArea());\n\n this.selectionManager = new SelectionManager(this, this.buffer, this.charMeasure);\n this.element.addEventListener('mousedown', (e: MouseEvent) => this.selectionManager.onMouseDown(e));\n this.selectionManager.on('refresh', data => this.renderer.onSelectionChanged(data.start, data.end));\n this.selectionManager.on('newselection', text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea.value = text;\n this.textarea.focus();\n this.textarea.select();\n });\n this.on('scroll', () => {\n this.viewport.syncScrollArea();\n this.selectionManager.refresh();\n });\n this.viewportElement.addEventListener('scroll', () => this.selectionManager.refresh());\n\n this.mouseHelper = new MouseHelper(this.renderer);\n\n // Measure the character size\n this.charMeasure.measure(this.options);\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this.initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this.bindMouse();\n }\n\n /**\n * Sets the theme on the renderer. The renderer must have been initialized.\n * @param theme The theme to ste.\n */\n private _setTheme(theme: ITheme): void {\n const colors = this.renderer.setTheme(theme);\n if (this.viewport) {\n this.viewport.onThemeChanged(colors);\n }\n }\n\n /**\n * Attempts to load an add-on using CommonJS or RequireJS (whichever is available).\n * @param {string} addon The name of the addon to load\n * @static\n */\n public static loadAddon(addon: string, callback?: Function): boolean | any {\n // TODO: Improve return type and documentation\n if (typeof exports === 'object' && typeof module === 'object') {\n // CommonJS\n return require('./addons/' + addon + '/' + addon);\n } else if (typeof define === 'function') {\n // RequireJS\n return (require)(['./addons/' + addon + '/' + addon], callback);\n } else {\n console.error('Cannot load a module without a CommonJS or RequireJS environment.');\n return false;\n }\n }\n\n /**\n * XTerm mouse events\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking\n * To better understand these\n * the xterm code is very helpful:\n * Relevant files:\n * button.c, charproc.c, misc.c\n * Relevant functions in xterm/button.c:\n * BtnCode, EmitButtonCode, EditorButton, SendMousePosition\n */\n public bindMouse(): void {\n const el = this.element;\n const self = this;\n let pressed = 32;\n\n // mouseup, mousedown, wheel\n // left click: ^[[M 3<^[[M#3<\n // wheel up: ^[[M`3>\n function sendButton(ev: MouseEvent | WheelEvent): void {\n let button;\n let pos;\n\n // get the xterm-style button\n button = getButton(ev);\n\n // get mouse coordinates\n pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows);\n if (!pos) return;\n\n sendEvent(button, pos);\n\n switch ((ev).overrideType || ev.type) {\n case 'mousedown':\n pressed = button;\n break;\n case 'mouseup':\n // keep it at the left\n // button, just in case.\n pressed = 32;\n break;\n case 'wheel':\n // nothing. don't\n // interfere with\n // `pressed`.\n break;\n }\n }\n\n // motion example of a left click:\n // ^[[M 3<^[[M@4<^[[M@5<^[[M@6<^[[M@7<^[[M#7<\n function sendMove(ev: MouseEvent): void {\n let button = pressed;\n let pos = self.mouseHelper.getRawByteCoords(ev, self.element, self.charMeasure, self.options.lineHeight, self.cols, self.rows);\n if (!pos) return;\n\n // buttons marked as motions\n // are incremented by 32\n button += 32;\n\n sendEvent(button, pos);\n }\n\n // encode button and\n // position to characters\n function encode(data: number[], ch: number): void {\n if (!self.utfMouse) {\n if (ch === 255) {\n data.push(0);\n return;\n }\n if (ch > 127) ch = 127;\n data.push(ch);\n } else {\n if (ch === 2047) {\n data.push(0);\n return;\n }\n if (ch < 127) {\n data.push(ch);\n } else {\n if (ch > 2047) ch = 2047;\n data.push(0xC0 | (ch >> 6));\n data.push(0x80 | (ch & 0x3F));\n }\n }\n }\n\n // send a mouse event:\n // regular/utf8: ^[[M Cb Cx Cy\n // urxvt: ^[[ Cb ; Cx ; Cy M\n // sgr: ^[[ Cb ; Cx ; Cy M/m\n // vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \\r\n // locator: CSI P e ; P b ; P r ; P c ; P p & w\n function sendEvent(button: number, pos: {x: number, y: number}): void {\n // self.emit('mouse', {\n // x: pos.x - 32,\n // y: pos.x - 32,\n // button: button\n // });\n\n if (self.vt300Mouse) {\n // NOTE: Unstable.\n // http://www.vt100.net/docs/vt3xx-gp/chapter15.html\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n let data = C0.ESC + '[24';\n if (button === 0) data += '1';\n else if (button === 1) data += '3';\n else if (button === 2) data += '5';\n else if (button === 3) return;\n else data += '0';\n data += '~[' + pos.x + ',' + pos.y + ']\\r';\n self.send(data);\n return;\n }\n\n if (self.decLocator) {\n // NOTE: Unstable.\n button &= 3;\n pos.x -= 32;\n pos.y -= 32;\n if (button === 0) button = 2;\n else if (button === 1) button = 4;\n else if (button === 2) button = 6;\n else if (button === 3) button = 3;\n self.send(C0.ESC + '['\n + button\n + ';'\n + (button === 3 ? 4 : 0)\n + ';'\n + pos.y\n + ';'\n + pos.x\n + ';'\n // Not sure what page is meant to be\n + (pos).page || 0\n + '&w');\n return;\n }\n\n if (self.urxvtMouse) {\n pos.x -= 32;\n pos.y -= 32;\n pos.x++;\n pos.y++;\n self.send(C0.ESC + '[' + button + ';' + pos.x + ';' + pos.y + 'M');\n return;\n }\n\n if (self.sgrMouse) {\n pos.x -= 32;\n pos.y -= 32;\n self.send(C0.ESC + '[<'\n + (((button & 3) === 3 ? button & ~3 : button) - 32)\n + ';'\n + pos.x\n + ';'\n + pos.y\n + ((button & 3) === 3 ? 'm' : 'M'));\n return;\n }\n\n let data: number[] = [];\n\n encode(data, button);\n encode(data, pos.x);\n encode(data, pos.y);\n\n self.send(C0.ESC + '[M' + String.fromCharCode.apply(String, data));\n }\n\n function getButton(ev: MouseEvent): number {\n let button;\n let shift;\n let meta;\n let ctrl;\n let mod;\n\n // two low bits:\n // 0 = left\n // 1 = middle\n // 2 = right\n // 3 = release\n // wheel up/down:\n // 1, and 2 - with 64 added\n switch ((ev).overrideType || ev.type) {\n case 'mousedown':\n button = ev.button != null\n ? +ev.button\n : ev.which != null\n ? ev.which - 1\n : null;\n\n if (Browser.isMSIE) {\n button = button === 1 ? 0 : button === 4 ? 1 : button;\n }\n break;\n case 'mouseup':\n button = 3;\n break;\n case 'DOMMouseScroll':\n button = ev.detail < 0\n ? 64\n : 65;\n break;\n case 'wheel':\n button = (ev).wheelDeltaY > 0\n ? 64\n : 65;\n break;\n }\n\n // next three bits are the modifiers:\n // 4 = shift, 8 = meta, 16 = control\n shift = ev.shiftKey ? 4 : 0;\n meta = ev.metaKey ? 8 : 0;\n ctrl = ev.ctrlKey ? 16 : 0;\n mod = shift | meta | ctrl;\n\n // no mods\n if (self.vt200Mouse) {\n // ctrl only\n mod &= ctrl;\n } else if (!self.normalMouse) {\n mod = 0;\n }\n\n // increment to SP\n button = (32 + (mod << 2)) + button;\n\n return button;\n }\n\n on(el, 'mousedown', (ev: MouseEvent) => {\n\n // Prevent the focus on the textarea from getting lost\n // and make sure we get focused on mousedown\n ev.preventDefault();\n this.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this.mouseEvents || this.selectionManager.shouldForceSelection(ev)) {\n return;\n }\n\n // send the button\n sendButton(ev);\n\n // fix for odd bug\n // if (this.vt200Mouse && !this.normalMouse) {\n if (this.vt200Mouse) {\n (ev).overrideType = 'mouseup';\n sendButton(ev);\n return this.cancel(ev);\n }\n\n // bind events\n if (this.normalMouse) on(this.document, 'mousemove', sendMove);\n\n // x10 compatibility mode can't send button releases\n if (!this.x10Mouse) {\n const handler = (ev: MouseEvent) => {\n sendButton(ev);\n // TODO: Seems dangerous calling this on document?\n if (this.normalMouse) off(this.document, 'mousemove', sendMove);\n off(this.document, 'mouseup', handler);\n return this.cancel(ev);\n };\n // TODO: Seems dangerous calling this on document?\n on(this.document, 'mouseup', handler);\n }\n\n return this.cancel(ev);\n });\n\n // if (this.normalMouse) {\n // on(this.document, 'mousemove', sendMove);\n // }\n\n on(el, 'wheel', (ev: WheelEvent) => {\n if (!this.mouseEvents) return;\n if (this.x10Mouse || this.vt300Mouse || this.decLocator) return;\n sendButton(ev);\n ev.preventDefault();\n });\n\n // allow wheel scrolling in\n // the shell for example\n on(el, 'wheel', (ev: WheelEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onWheel(ev);\n return this.cancel(ev);\n });\n\n on(el, 'touchstart', (ev: TouchEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onTouchStart(ev);\n return this.cancel(ev);\n });\n\n on(el, 'touchmove', (ev: TouchEvent) => {\n if (this.mouseEvents) return;\n this.viewport.onTouchMove(ev);\n return this.cancel(ev);\n });\n }\n\n /**\n * Destroys the terminal.\n */\n public destroy(): void {\n super.destroy();\n this.readable = false;\n this.writable = false;\n this.handler = () => {};\n this.write = () => {};\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n // this.emit('close');\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number): void {\n if (this.renderer) {\n this.renderer.queueRefresh(start, end);\n }\n }\n\n /**\n * Queues linkification for the specified rows.\n * @param {number} start The row to start from (between 0 and this.rows - 1).\n * @param {number} end The row to end at (between start and this.rows - 1).\n */\n private queueLinkification(start: number, end: number): void {\n if (this.linkifier) {\n this.linkifier.linkifyRows(start, end);\n }\n }\n\n /**\n * Display the cursor element\n */\n public showCursor(): void {\n if (!this.cursorState) {\n this.cursorState = 1;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(isWrapped?: boolean): void {\n const newLine = this.blankLine(undefined, isWrapped);\n const topRow = this.buffer.ybase + this.buffer.scrollTop;\n let bottomRow = this.buffer.ybase + this.buffer.scrollBottom;\n\n if (this.buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = this.buffer.lines.length === this.buffer.lines.maxLength;\n\n // Insert the line using the fastest method\n if (bottomRow === this.buffer.lines.length - 1) {\n this.buffer.lines.push(newLine);\n } else {\n this.buffer.lines.splice(bottomRow + 1, 0, newLine);\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n this.buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.userScrolling) {\n this.buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.userScrolling) {\n this.buffer.ydisp = Math.max(this.buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1/*as it's zero-based*/;\n this.buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n this.buffer.lines.set(bottomRow, newLine);\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.userScrolling) {\n this.buffer.ydisp = this.buffer.ybase;\n }\n\n // Flag rows that need updating\n this.updateRange(this.buffer.scrollTop);\n this.updateRange(this.buffer.scrollBottom);\n\n /**\n * This event is emitted whenever the terminal is scrolled.\n * The one parameter passed is the new y display position.\n *\n * @event scroll\n */\n this.emit('scroll', this.buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param {number} disp The number of lines to scroll down (negative scroll up).\n * @param {boolean} suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n if (disp < 0) {\n if (this.buffer.ydisp === 0) {\n return;\n }\n this.userScrolling = true;\n } else if (disp + this.buffer.ydisp >= this.buffer.ybase) {\n this.userScrolling = false;\n }\n\n const oldYdisp = this.buffer.ydisp;\n this.buffer.ydisp = Math.max(Math.min(this.buffer.ydisp + disp, this.buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === this.buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this.emit('scroll', this.buffer.ydisp);\n }\n\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Scroll the display of the terminal by a number of pages.\n * @param {number} pageCount The number of pages to scroll (negative scrolls up).\n */\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n /**\n * Scrolls the display of the terminal to the top.\n */\n public scrollToTop(): void {\n this.scrollLines(-this.buffer.ydisp);\n }\n\n /**\n * Scrolls the display of the terminal to the bottom.\n */\n public scrollToBottom(): void {\n this.scrollLines(this.buffer.ybase - this.buffer.ydisp);\n }\n\n /**\n * Writes text to the terminal.\n * @param {string} data The text to write to the terminal.\n */\n public write(data: string): void {\n this.writeBuffer.push(data);\n\n // Send XOFF to pause the pty process if the write buffer becomes too large so\n // xterm.js can catch up before more data is sent. This is necessary in order\n // to keep signals such as ^C responsive.\n if (this.options.useFlowControl && !this.xoffSentToCatchUp && this.writeBuffer.length >= WRITE_BUFFER_PAUSE_THRESHOLD) {\n // XOFF - stop pty pipe\n // XON will be triggered by emulator before processing data chunk\n this.send(C0.DC3);\n this.xoffSentToCatchUp = true;\n }\n\n if (!this.writeInProgress && this.writeBuffer.length > 0) {\n // Kick off a write which will write all data in sequence recursively\n this.writeInProgress = true;\n // Kick off an async innerWrite so more writes can come in while processing data\n setTimeout(() => {\n this.innerWrite();\n });\n }\n }\n\n private innerWrite(): void {\n const writeBatch = this.writeBuffer.splice(0, WRITE_BATCH_SIZE);\n while (writeBatch.length > 0) {\n const data = writeBatch.shift();\n\n // If XOFF was sent in order to catch up with the pty process, resume it if\n // the writeBuffer is empty to allow more data to come in.\n if (this.xoffSentToCatchUp && writeBatch.length === 0 && this.writeBuffer.length === 0) {\n this.send(C0.DC1);\n this.xoffSentToCatchUp = false;\n }\n\n this.refreshStart = this.buffer.y;\n this.refreshEnd = this.buffer.y;\n\n // HACK: Set the parser state based on it's state at the time of return.\n // This works around the bug #662 which saw the parser state reset in the\n // middle of parsing escape sequence in two chunks. For some reason the\n // state of the parser resets to 0 after exiting parser.parse. This change\n // just sets the state back based on the correct return statement.\n const state = this.parser.parse(data);\n this.parser.setState(state);\n\n this.updateRange(this.buffer.y);\n this.refresh(this.refreshStart, this.refreshEnd);\n }\n if (this.writeBuffer.length > 0) {\n // Allow renderer to catch up before processing the next batch\n setTimeout(() => this.innerWrite(), 0);\n } else {\n this.writeInProgress = false;\n }\n }\n\n /**\n * Writes text to the terminal, followed by a break line character (\\n).\n * @param {string} data The text to write to the terminal.\n */\n public writeln(data: string): void {\n this.write(data + '\\r\\n');\n }\n\n /**\n * Attaches a custom key event handler which is run before keys are processed,\n * giving consumers of xterm.js ultimate control as to what keys should be\n * processed by the terminal and what keys should not.\n * @param customKeyEventHandler The custom KeyboardEvent handler to attach.\n * This is a function that takes a KeyboardEvent, allowing consumers to stop\n * propogation and/or prevent the default action. The function returns whether\n * the event should be processed by xterm.js.\n */\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this.customKeyEventHandler = customKeyEventHandler;\n }\n\n /**\n * Attaches a http(s) link handler, forcing web links to behave differently to\n * regular tags. This will trigger a refresh as links potentially need to be\n * reconstructed. Calling this with null will remove the handler.\n * @param handler The handler callback function.\n */\n public setHypertextLinkHandler(handler: LinkMatcherHandler): void {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext link handler before Terminal.open is called');\n }\n this.linkifier.setHypertextLinkHandler(handler);\n // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Attaches a validation callback for hypertext links. This is useful to use\n * validation logic or to do something with the link's element and url.\n * @param callback The callback to use, this can\n * be cleared with null.\n */\n public setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void {\n if (!this.linkifier) {\n throw new Error('Cannot attach a hypertext validation callback before Terminal.open is called');\n }\n this.linkifier.setHypertextValidationCallback(callback);\n // // Refresh to force links to refresh\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param regex The regular expression to search for, specifically\n * this searches the textContent of the rows. You will want to use \\s to match\n * a space ' ' character for example.\n * @param handler The callback when the link is called.\n * @param options Options for the link matcher.\n * @return The ID of the new matcher, this can be used to deregister.\n */\n public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number {\n if (this.linkifier) {\n const matcherId = this.linkifier.registerLinkMatcher(regex, handler, options);\n this.refresh(0, this.rows - 1);\n return matcherId;\n }\n return 0;\n }\n\n /**\n * Deregisters a link matcher if it has been registered.\n * @param matcherId The link matcher's ID (returned after register)\n */\n public deregisterLinkMatcher(matcherId: number): void {\n if (this.linkifier) {\n if (this.linkifier.deregisterLinkMatcher(matcherId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this.selectionManager ? this.selectionManager.hasSelection : false;\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this.selectionManager ? this.selectionManager.selectionText : '';\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n if (this.selectionManager) {\n this.selectionManager.clearSelection();\n }\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n if (this.selectionManager) {\n this.selectionManager.selectAll();\n }\n }\n\n /**\n * Handle a keydown event\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keydown event to be handled.\n */\n protected _keyDown(ev: KeyboardEvent): boolean {\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (!this.compositionHelper.keydown(ev)) {\n if (this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom();\n }\n return false;\n }\n\n const result = this._evaluateKeyEscapeSequence(ev);\n\n if (result.key === C0.DC3) { // XOFF\n this.writeStopped = true;\n } else if (result.key === C0.DC1) { // XON\n this.writeStopped = false;\n }\n\n if (result.scrollLines) {\n this.scrollLines(result.scrollLines);\n return this.cancel(ev, true);\n }\n\n if (isThirdLevelShift(this.browser, ev)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n this.cancel(ev, true);\n }\n\n if (!result.key) {\n return true;\n }\n\n this.emit('keydown', ev);\n this.emit('key', result.key, ev);\n this.showCursor();\n this.handler(result.key);\n\n return this.cancel(ev, true);\n }\n\n /**\n * Returns an object that determines how a KeyboardEvent should be handled. The key of the\n * returned value is the new key code to pass to the PTY.\n *\n * Reference: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * @param ev The keyboard event to be translated to key escape sequence.\n */\n protected _evaluateKeyEscapeSequence(ev: KeyboardEvent): {cancel: boolean, key: string, scrollLines: number} {\n const result: {cancel: boolean, key: string, scrollLines: number} = {\n // Whether to cancel event propogation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key even to emit\n key: undefined,\n // The number of characters to scroll, if this is defined it will cancel the event\n scrollLines: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (this.applicationCursor) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n if (ev.shiftKey) {\n result.key = C0.BS; // ^H\n break;\n }\n result.key = C0.DEL; // ^?\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n result.key = C0.CR;\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key === C0.ESC + '[1;3D') {\n result.key = (this.browser.isMac) ? C0.ESC + 'b' : C0.ESC + '[1;5D';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward\n // http://unix.stackexchange.com/a/108106\n // macOS uses different escape sequences than linux\n if (result.key === C0.ESC + '[1;3C') {\n result.key = (this.browser.isMac) ? C0.ESC + 'f' : C0.ESC + '[1;5C';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key === C0.ESC + '[1;3A') {\n result.key = C0.ESC + '[1;5A';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow\n // http://unix.stackexchange.com/a/108106\n if (result.key === C0.ESC + '[1;3B') {\n result.key = C0.ESC + '[1;5B';\n }\n } else if (this.applicationCursor) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OH';\n else\n result.key = C0.ESC + '[H';\n break;\n case 35:\n // end\n if (modifiers)\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n else if (this.applicationCursor)\n result.key = C0.ESC + 'OF';\n else\n result.key = C0.ESC + '[F';\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.scrollLines = -(this.rows - 1);\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.scrollLines = this.rows - 1;\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n // NUL\n result.key = String.fromCharCode(0);\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n // delete\n result.key = String.fromCharCode(127);\n } else if (ev.keyCode === 219) {\n // ^[ - Control Sequence Introducer (CSI)\n result.key = String.fromCharCode(27);\n } else if (ev.keyCode === 220) {\n // ^\\ - String Terminator (ST)\n result.key = String.fromCharCode(28);\n } else if (ev.keyCode === 221) {\n // ^] - Operating System Command (OSC)\n result.key = String.fromCharCode(29);\n }\n } else if (!this.browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) {\n // On Mac this is a third level shift. Use instead.\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = C0.ESC + String.fromCharCode(ev.keyCode + 32);\n } else if (ev.keyCode === 192) {\n result.key = C0.ESC + '`';\n } else if (ev.keyCode >= 48 && ev.keyCode <= 57) {\n result.key = C0.ESC + (ev.keyCode - 48);\n }\n } else if (this.browser.isMac && !ev.altKey && !ev.ctrlKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n this.selectAll();\n }\n }\n break;\n }\n\n return result;\n }\n\n /**\n * Set the G level of the terminal\n * @param g\n */\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this.charsets[g];\n }\n\n /**\n * Set the charset for the given G level of the terminal\n * @param g\n * @param charset\n */\n public setgCharset(g: number, charset: Charset): void {\n this.charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param {KeyboardEvent} ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n if (this.customKeyEventHandler && this.customKeyEventHandler(ev) === false) {\n return false;\n }\n\n this.cancel(ev);\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which == null) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this.emit('keypress', key, ev);\n this.emit('key', key, ev);\n this.showCursor();\n this.handler(key);\n\n return true;\n }\n\n /**\n * Send data for handling to the terminal\n * @param {string} data\n */\n public send(data: string): void {\n if (!this.sendDataQueue) {\n setTimeout(() => {\n this.handler(this.sendDataQueue);\n this.sendDataQueue = '';\n }, 1);\n }\n\n this.sendDataQueue += data;\n }\n\n /**\n * Ring the bell.\n * Note: We could do sweet things with webaudio here\n */\n public bell(): void {\n this.emit('bell');\n if (this.soundBell()) this.bellAudioElement.play();\n\n if (this.visualBell()) {\n this.element.classList.add('visual-bell-active');\n clearTimeout(this.visualBellTimer);\n this.visualBellTimer = window.setTimeout(() => {\n this.element.classList.remove('visual-bell-active');\n }, 200);\n }\n }\n\n /**\n * Log the current state to the console.\n */\n public log(text: string, data?: any): void {\n if (!this.options.debug) return;\n if (!this.context.console || !this.context.console.log) return;\n this.context.console.log(text, data);\n }\n\n /**\n * Log the current state as error to the console.\n */\n public error(text: string, data?: any): void {\n if (!this.options.debug) return;\n if (!this.context.console || !this.context.console.error) return;\n this.context.console.error(text, data);\n }\n\n /**\n * Resizes the terminal.\n *\n * @param {number} x The number of columns to resize to.\n * @param {number} y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (!this.charMeasure.width || !this.charMeasure.height) {\n this.charMeasure.measure(this.options);\n }\n return;\n }\n\n if (x < 1) x = 1;\n if (y < 1) y = 1;\n\n this.buffers.resize(x, y);\n\n this.cols = x;\n this.rows = y;\n this.buffers.setupTabStops(this.cols);\n\n this.charMeasure.measure(this.options);\n\n this.refresh(0, this.rows - 1);\n\n this.geometry = [this.cols, this.rows];\n this.emit('resize', {cols: x, rows: y});\n }\n\n /**\n * Updates the range of rows to refresh\n * @param {number} y The number of rows to refresh next.\n */\n public updateRange(y: number): void {\n if (y < this.refreshStart) this.refreshStart = y;\n if (y > this.refreshEnd) this.refreshEnd = y;\n // if (y > this.refreshEnd) {\n // this.refreshEnd = y;\n // if (y > this.rows - 1) {\n // this.refreshEnd = this.rows - 1;\n // }\n // }\n }\n\n /**\n * Set the range of refreshing to the maximum value\n */\n public maxRange(): void {\n this.refreshStart = 0;\n this.refreshEnd = this.rows - 1;\n }\n\n /**\n * Erase in the identified line everything from \"x\" to the end of the line (right).\n * @param {number} x The column from which to start erasing to the end of the line.\n * @param {number} y The line in which to operate.\n */\n public eraseRight(x: number, y: number): void {\n const line = this.buffer.lines.get(this.buffer.ybase + y);\n if (!line) {\n return;\n }\n const ch: CharData = [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */]; // xterm\n for (; x < this.cols; x++) {\n line[x] = ch;\n }\n this.updateRange(y);\n }\n\n /**\n * Erase in the identified line everything from \"x\" to the start of the line (left).\n * @param {number} x The column from which to start erasing to the start of the line.\n * @param {number} y The line in which to operate.\n */\n public eraseLeft(x: number, y: number): void {\n const line = this.buffer.lines.get(this.buffer.ybase + y);\n if (!line) {\n return;\n }\n const ch: CharData = [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */]; // xterm\n x++;\n while (x--) {\n line[x] = ch;\n }\n this.updateRange(y);\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n if (this.buffer.ybase === 0 && this.buffer.y === 0) {\n // Don't clear if it's already clear\n return;\n }\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y));\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.blankLine());\n }\n this.refresh(0, this.rows - 1);\n this.emit('scroll', this.buffer.ydisp);\n }\n\n /**\n * Erase all content in the given line\n * @param {number} y The line to erase all of its contents.\n */\n public eraseLine(y: number): void {\n this.eraseRight(0, y);\n }\n\n /**\n * Return the data array of a blank line\n * @param {boolean} cur First bunch of data for each \"blank\" character.\n * @param {boolean} isWrapped Whether the new line is wrapped from the previous line.\n * @param {boolean} cols The number of columns in the terminal, if this is not\n * set, the terminal's current column count would be used.\n */\n public blankLine(cur?: boolean, isWrapped?: boolean, cols?: number): LineData {\n const attr = cur ? this.eraseAttr() : this.defAttr;\n\n const ch: CharData = [attr, ' ', 1, 32 /* ' '.charCodeAt(0) */]; // width defaults to 1 halfwidth character\n const line: LineData = [];\n\n // TODO: It is not ideal that this is a property on an array, a buffer line\n // class should be added that will hold this data and other useful functions.\n if (isWrapped) {\n (line).isWrapped = isWrapped;\n }\n\n cols = cols || this.cols;\n for (let i = 0; i < cols; i++) {\n line[i] = ch;\n }\n\n return line;\n }\n\n /**\n * If cur return the back color xterm feature attribute. Else return defAttr.\n * @param cur\n */\n public ch(cur?: boolean): CharData {\n if (cur) {\n return [this.eraseAttr(), ' ', 1, 32 /* ' '.charCodeAt(0) */];\n }\n return [this.defAttr, ' ', 1, 32 /* ' '.charCodeAt(0) */];\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n public is(term: string): boolean {\n return (this.options.termName + '').indexOf(term) === 0;\n }\n\n /**\n * Emit the 'data' event and populate the given data.\n * @param {string} data The data to populate in the event.\n */\n public handler(data: string): void {\n // Prevents all events to pty process if stdin is disabled\n if (this.options.disableStdin) {\n return;\n }\n\n // Clear the selection if the selection manager is available and has an active selection\n if (this.selectionManager && this.selectionManager.hasSelection) {\n this.selectionManager.clearSelection();\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n if (this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom();\n }\n this.emit('data', data);\n }\n\n /**\n * Emit the 'title' event and populate the given title.\n * @param {string} title The title to populate in the event.\n */\n private handleTitle(title: string): void {\n /**\n * This event is emitted when the title of the terminal is changed\n * from inside the terminal. The parameter is the new title.\n *\n * @event title\n */\n this.emit('title', title);\n }\n\n /**\n * ESC\n */\n\n /**\n * ESC D Index (IND is 0x84).\n */\n public index(): void {\n this.buffer.y++;\n if (this.buffer.y > this.buffer.scrollBottom) {\n this.buffer.y--;\n this.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this.buffer.x >= this.cols) {\n this.buffer.x--;\n }\n }\n\n /**\n * ESC M Reverse Index (RI is 0x8d).\n *\n * Move the cursor up one row, inserting a new blank line if necessary.\n */\n public reverseIndex(): void {\n if (this.buffer.y === this.buffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this.buffer.scrollBottom - this.buffer.scrollTop;\n this.buffer.lines.shiftElements(this.buffer.y + this.buffer.ybase, scrollRegionHeight, 1);\n this.buffer.lines.set(this.buffer.y + this.buffer.ybase, this.blankLine(true));\n this.updateRange(this.buffer.scrollTop);\n this.updateRange(this.buffer.scrollBottom);\n } else {\n this.buffer.y--;\n }\n }\n\n /**\n * ESC c Full Reset (RIS).\n */\n public reset(): void {\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this.customKeyEventHandler;\n const inputHandler = this.inputHandler;\n const buffers = this.buffers;\n this.setup();\n this.customKeyEventHandler = customKeyEventHandler;\n this.inputHandler = inputHandler;\n this.buffers = buffers;\n this.refresh(0, this.rows - 1);\n this.viewport.syncScrollArea();\n }\n\n\n /**\n * ESC H Tab Set (HTS is 0x88).\n */\n private tabSet(): void {\n this.buffer.tabs[this.buffer.x] = true;\n }\n\n // TODO: Remove cancel function and cancelEvents option\n public cancel(ev: Event, force?: boolean): boolean {\n if (!this.options.cancelEvents && !force) {\n return;\n }\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // TODO: Remove when true color is implemented\n public matchColor(r1: number, g1: number, b1: number): number {\n return matchColor_(r1, g1, b1);\n }\n\n private visualBell(): boolean {\n return this.options.bellStyle === 'visual' ||\n this.options.bellStyle === 'both';\n }\n\n private soundBell(): boolean {\n return this.options.bellStyle === 'sound' ||\n this.options.bellStyle === 'both';\n }\n\n private syncBellSound(): void {\n if (this.soundBell() && this.bellAudioElement) {\n this.bellAudioElement.setAttribute('src', this.options.bellSound);\n } else if (this.soundBell()) {\n this.bellAudioElement = document.createElement('audio');\n this.bellAudioElement.setAttribute('preload', 'auto');\n this.bellAudioElement.setAttribute('src', this.options.bellSound);\n this.helperContainer.appendChild(this.bellAudioElement);\n } else if (this.bellAudioElement) {\n this.helperContainer.removeChild(this.bellAudioElement);\n }\n }\n}\n\n/**\n * Helpers\n */\n\nfunction globalOn(el: any, type: string, handler: (event: Event) => any, capture?: boolean): void {\n if (!Array.isArray(el)) {\n el = [el];\n }\n el.forEach((element: HTMLElement) => {\n element.addEventListener(type, handler, capture || false);\n });\n}\n// TODO: Remove once everything is typed\nconst on = globalOn;\n\nfunction off(el: any, type: string, handler: (event: Event) => any, capture: boolean = false): void {\n el.removeEventListener(type, handler, capture);\n}\n\nfunction isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n}\n\nfunction wasMondifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18; // Alt\n}\n\n/**\n * TODO:\n * The below color-related code can be removed when true color is implemented.\n * It's only purpose is to match true color requests with the closest matching\n * ANSI color code.\n */\n\n// Colors 0-15 + 16-255\n// Much thanks to TooTallNate for writing this.\nconst vcolors: number[][] = (function(): number[][] {\n const result = DEFAULT_ANSI_COLORS.map(c => {\n c = c.substring(1);\n return [\n parseInt(c.substring(0, 2), 16),\n parseInt(c.substring(2, 4), 16),\n parseInt(c.substring(4, 6), 16)\n ];\n });\n const r = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n\n // 16-231\n for (let i = 0; i < 216; i++) {\n result.push([\n r[(i / 36) % 6 | 0],\n r[(i / 6) % 6 | 0],\n r[i % 6]\n ]);\n }\n\n // 232-255 (grey)\n let c: number;\n for (let i = 0; i < 24; i++) {\n c = 8 + i * 10;\n result.push([c, c, c]);\n }\n\n return result;\n})();\n\nconst matchColorCache: {[colorRGBHash: number]: number} = {};\n\n// http://stackoverflow.com/questions/1633828\nfunction matchColorDistance(r1: number, g1: number, b1: number, r2: number, g2: number, b2: number): number {\n return Math.pow(30 * (r1 - r2), 2)\n + Math.pow(59 * (g1 - g2), 2)\n + Math.pow(11 * (b1 - b2), 2);\n};\n\n\nfunction matchColor_(r1: number, g1: number, b1: number): number {\n const hash = (r1 << 16) | (g1 << 8) | b1;\n\n if (matchColorCache[hash] != null) {\n return matchColorCache[hash];\n }\n\n let ldiff = Infinity;\n let li = -1;\n let i = 0;\n let c: number[];\n let r2: number;\n let g2: number;\n let b2: number;\n let diff: number;\n\n for (; i < vcolors.length; i++) {\n c = vcolors[i];\n r2 = c[0];\n g2 = c[1];\n b2 = c[2];\n\n diff = matchColorDistance(r1, g1, b1, r2, g2, b2);\n\n if (diff === 0) {\n li = i;\n break;\n }\n\n if (diff < ldiff) {\n ldiff = diff;\n li = i;\n }\n }\n\n return matchColorCache[hash] = li;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number];\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number];\n\n constructor(\n private _terminal: ITerminal\n ) {\n this.clearSelection();\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = null;\n this.selectionEnd = null;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] {\n if (this.isSelectAllActive) {\n return [this._terminal.cols, this._terminal.buffer.ybase + this._terminal.rows - 1];\n }\n\n if (!this.selectionStart) {\n return null;\n }\n\n // Use the selection start if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n return [this.selectionStart[0] + this.selectionStartLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n return [Math.max(this.selectionStart[0] + this.selectionStartLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @return Whether a refresh is necessary.\n */\n public onTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start is trimmed, ensure the start column is 0.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart[1] = 0;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { MouseHelper } from './utils/MouseHelper';\nimport * as Browser from './utils/Browser';\nimport { CharMeasure } from './utils/CharMeasure';\nimport { CircularList } from './utils/CircularList';\nimport { EventEmitter } from './EventEmitter';\nimport { ITerminal, ICircularList, ISelectionManager, IBuffer } from './Interfaces';\nimport { SelectionModel } from './SelectionModel';\nimport { LineData, CharData } from './Types';\nimport { CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from './Buffer';\n\n/**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\nconst DRAG_SCROLL_MAX_THRESHOLD = 50;\n\n/**\n * The maximum scrolling speed\n */\nconst DRAG_SCROLL_MAX_SPEED = 15;\n\n/**\n * The number of milliseconds between drag scroll updates.\n */\nconst DRAG_SCROLL_INTERVAL = 50;\n\n/**\n * A string containing all characters that are considered word separated by the\n * double click to select work logic.\n */\nconst WORD_SEPARATORS = ' ()[]{}\\'\"';\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nenum SelectionMode {\n NORMAL,\n WORD,\n LINE\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionManager handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionManager but a 'refresh' event is fired when the\n * selection is ready to be redrawn.\n */\nexport class SelectionManager extends EventEmitter implements ISelectionManager {\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number;\n\n /**\n * The current selection mode.\n */\n private _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: NodeJS.Timer;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n\n constructor(\n private _terminal: ITerminal,\n private _buffer: IBuffer,\n private _charMeasure: CharMeasure\n ) {\n super();\n this._initListeners();\n this.enable();\n\n this._model = new SelectionModel(_terminal);\n this._activeSelectionMode = SelectionMode.NORMAL;\n }\n\n /**\n * Initializes listener variables.\n */\n private _initListeners(): void {\n this._mouseMoveListener = event => this._onMouseMove(event);\n this._mouseUpListener = event => this._onMouseUp(event);\n\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._buffer.lines.on('trim', (amount: number) => this._onTrim(amount));\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n /**\n * Sets the active buffer, this should be called when the alt buffer is\n * switched in or out.\n * @param buffer The active buffer.\n */\n public setBuffer(buffer: IBuffer): void {\n this._buffer = buffer;\n this.clearSelection();\n }\n\n public get selectionStart(): [number, number] { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : null;\n let result: string[] = [];\n result.push(this._buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = this._buffer.lines.get(i);\n const lineText = this._buffer.translateBufferLineToString(i, true);\n if ((bufferLine).isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = this._buffer.lines.get(end[1]);\n const lineText = this._buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if ((bufferLine).isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isMSWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isNewSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isNewSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isNewSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this.emit('newselection', this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = null;\n this.emit('refresh', { start: this._model.finalSelectionStart, end: this._model.finalSelectionEnd });\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this.emit('selection');\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _onTrim(amount: number): void {\n const needsRefresh = this._model.onTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] {\n const coords = this._terminal.mouseHelper.getCoords(event, this._terminal.element, this._charMeasure, this._terminal.options.lineHeight, this._terminal.cols, this._terminal.rows, true);\n if (!coords) {\n return null;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._terminal.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = MouseHelper.getCoordsRelativeToElement(event, this._terminal.element)[1];\n const terminalHeight = this._terminal.rows * Math.ceil(this._charMeasure.height * this._terminal.options.lineHeight);\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -DRAG_SCROLL_MAX_THRESHOLD), DRAG_SCROLL_MAX_THRESHOLD);\n offset /= DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n return Browser.isMac ? event.altKey : event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public onMouseDown(event: MouseEvent): void {\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._onIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._onSingleClick(event);\n } else if (event.detail === 2) {\n this._onDoubleClick(event);\n } else if (event.detail === 3) {\n this._onTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n this._terminal.element.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n this._dragScrollIntervalTimer = setInterval(() => this._dragScroll(), DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n this._terminal.element.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._terminal.element.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = null;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _onIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _onSingleClick(event: MouseEvent): void {\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = null;\n\n // Ensure the line exists\n const line = this._buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length >= this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n const char = line[this._model.selectionStart[0]];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current work.\n * @param event The mouse event.\n */\n private _onDoubleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.WORD;\n this._selectWordAt(coords);\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _onTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _onMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propogation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._terminal.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively.\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._terminal.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n if (this._model.selectionEnd[1] < this._buffer.lines.length) {\n const char = this._buffer.lines.get(this._model.selectionEnd[1])[this._model.selectionEnd[0]];\n if (char && char[CHAR_DATA_WIDTH_INDEX] === 0) {\n this._model.selectionEnd[0]++;\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (this._dragScrollAmount) {\n this._terminal.scrollLines(this._dragScrollAmount, false);\n // Re-evaluate selection\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd = [this._terminal.cols - 1, this._terminal.buffer.ydisp + this._terminal.rows];\n } else {\n this._model.selectionEnd = [0, this._terminal.buffer.ydisp];\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _onMouseUp(event: MouseEvent): void {\n this._removeMouseDownListeners();\n\n if (this.hasSelection)\n this.emit('selection');\n }\n\n /**\n * Converts a viewport column to the character index on the buffer line, the\n * latter takes into account wide characters.\n * @param coords The coordinates to find the 2 index for.\n */\n private _convertViewportColToCharacterIndex(bufferLine: any, coords: [number, number]): number {\n let charIndex = coords[0];\n for (let i = 0; coords[0] >= i; i++) {\n const char = bufferLine[i];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1 && coords[0] !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number]): IWordPosition {\n const bufferLine = this._buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return null;\n }\n\n const line = this._buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine[startCol][CHAR_DATA_WIDTH_INDEX] === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine[endCol][CHAR_DATA_WIDTH_INDEX] === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n if (bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length > 1) {\n rightLongCharOffset += bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length - 1;\n endIndex += bufferLine[endCol][CHAR_DATA_CHAR_INDEX].length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine[startCol - 1])) {\n const char = bufferLine[startCol - 1];\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += char[CHAR_DATA_CHAR_INDEX].length - 1;\n startIndex -= char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine[endCol + 1])) {\n const char = bufferLine[endCol + 1];\n if (char[CHAR_DATA_WIDTH_INDEX] === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += char[CHAR_DATA_CHAR_INDEX].length - 1;\n endIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n const start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n const length = Math.min(this._terminal.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n */\n protected _selectWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n if (wordPosition) {\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords);\n if (wordPosition) {\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : (wordPosition.start + wordPosition.length), coords[1]];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param char The character to check.\n */\n private _isCharWordSeparator(charData: CharData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (charData[CHAR_DATA_WIDTH_INDEX] === 0) {\n return false;\n }\n return WORD_SEPARATORS.indexOf(charData[CHAR_DATA_CHAR_INDEX]) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n this._model.selectionStart = [0, line];\n this._model.selectionStartLength = this._terminal.cols;\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { C0 } from './EscapeSequences';\nimport { IInputHandler } from './Interfaces';\nimport { CHARSETS, DEFAULT_CHARSET } from './Charsets';\n\nconst normalStateHandler: {[key: string]: (parser: Parser, handler: IInputHandler) => void} = {};\nnormalStateHandler[C0.BEL] = (parser, handler) => handler.bell();\nnormalStateHandler[C0.LF] = (parser, handler) => handler.lineFeed();\nnormalStateHandler[C0.VT] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.FF] = normalStateHandler[C0.LF];\nnormalStateHandler[C0.CR] = (parser, handler) => handler.carriageReturn();\nnormalStateHandler[C0.BS] = (parser, handler) => handler.backspace();\nnormalStateHandler[C0.HT] = (parser, handler) => handler.tab();\nnormalStateHandler[C0.SO] = (parser, handler) => handler.shiftOut();\nnormalStateHandler[C0.SI] = (parser, handler) => handler.shiftIn();\nnormalStateHandler[C0.ESC] = (parser, handler) => parser.setState(ParserState.ESCAPED);\n\n// TODO: Remove terminal when parser owns params and currentParam\nconst escapedStateHandler: {[key: string]: (parser: Parser, terminal: any) => void} = {};\nescapedStateHandler['['] = (parser, terminal) => {\n // ESC [ Control Sequence Introducer (CSI is 0x9b)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.CSI_PARAM);\n};\nescapedStateHandler[']'] = (parser, terminal) => {\n // ESC ] Operating System Command (OSC is 0x9d)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.OSC);\n};\nescapedStateHandler['P'] = (parser, terminal) => {\n // ESC P Device Control String (DCS is 0x90)\n terminal.params = [];\n terminal.currentParam = 0;\n parser.setState(ParserState.DCS);\n};\nescapedStateHandler['_'] = (parser, terminal) => {\n // ESC _ Application Program Command ( APC is 0x9f).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['^'] = (parser, terminal) => {\n // ESC ^ Privacy Message ( PM is 0x9e).\n parser.setState(ParserState.IGNORE);\n};\nescapedStateHandler['c'] = (parser, terminal) => {\n // ESC c Full Reset (RIS).\n terminal.reset();\n};\nescapedStateHandler['E'] = (parser, terminal) => {\n // ESC E Next Line ( NEL is 0x85).\n terminal.buffer.x = 0;\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['D'] = (parser, terminal) => {\n // ESC D Index ( IND is 0x84).\n terminal.index();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['M'] = (parser, terminal) => {\n // ESC M Reverse Index ( RI is 0x8d).\n terminal.reverseIndex();\n parser.setState(ParserState.NORMAL);\n};\nescapedStateHandler['%'] = (parser, terminal) => {\n // ESC % Select default/utf-8 character set.\n // @ = default, G = utf-8\n terminal.setgLevel(0);\n terminal.setgCharset(0, DEFAULT_CHARSET); // US (default)\n parser.setState(ParserState.NORMAL);\n parser.skipNextChar();\n};\nescapedStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiParamStateHandler: {[key: string]: (parser: Parser) => void} = {};\ncsiParamStateHandler['?'] = (parser) => parser.setPrefix('?');\ncsiParamStateHandler['>'] = (parser) => parser.setPrefix('>');\ncsiParamStateHandler['!'] = (parser) => parser.setPrefix('!');\ncsiParamStateHandler['0'] = (parser) => parser.setParam(parser.getParam() * 10);\ncsiParamStateHandler['1'] = (parser) => parser.setParam(parser.getParam() * 10 + 1);\ncsiParamStateHandler['2'] = (parser) => parser.setParam(parser.getParam() * 10 + 2);\ncsiParamStateHandler['3'] = (parser) => parser.setParam(parser.getParam() * 10 + 3);\ncsiParamStateHandler['4'] = (parser) => parser.setParam(parser.getParam() * 10 + 4);\ncsiParamStateHandler['5'] = (parser) => parser.setParam(parser.getParam() * 10 + 5);\ncsiParamStateHandler['6'] = (parser) => parser.setParam(parser.getParam() * 10 + 6);\ncsiParamStateHandler['7'] = (parser) => parser.setParam(parser.getParam() * 10 + 7);\ncsiParamStateHandler['8'] = (parser) => parser.setParam(parser.getParam() * 10 + 8);\ncsiParamStateHandler['9'] = (parser) => parser.setParam(parser.getParam() * 10 + 9);\ncsiParamStateHandler['$'] = (parser) => parser.setPostfix('$');\ncsiParamStateHandler['\"'] = (parser) => parser.setPostfix('\"');\ncsiParamStateHandler[' '] = (parser) => parser.setPostfix(' ');\ncsiParamStateHandler['\\''] = (parser) => parser.setPostfix('\\'');\ncsiParamStateHandler[';'] = (parser) => parser.finalizeParam();\ncsiParamStateHandler[C0.CAN] = (parser) => parser.setState(ParserState.NORMAL);\n\nconst csiStateHandler: {[key: string]: (handler: IInputHandler, params: number[], prefix: string, postfix: string, parser: Parser) => void} = {};\ncsiStateHandler['@'] = (handler, params, prefix) => handler.insertChars(params);\ncsiStateHandler['A'] = (handler, params, prefix) => handler.cursorUp(params);\ncsiStateHandler['B'] = (handler, params, prefix) => handler.cursorDown(params);\ncsiStateHandler['C'] = (handler, params, prefix) => handler.cursorForward(params);\ncsiStateHandler['D'] = (handler, params, prefix) => handler.cursorBackward(params);\ncsiStateHandler['E'] = (handler, params, prefix) => handler.cursorNextLine(params);\ncsiStateHandler['F'] = (handler, params, prefix) => handler.cursorPrecedingLine(params);\ncsiStateHandler['G'] = (handler, params, prefix) => handler.cursorCharAbsolute(params);\ncsiStateHandler['H'] = (handler, params, prefix) => handler.cursorPosition(params);\ncsiStateHandler['I'] = (handler, params, prefix) => handler.cursorForwardTab(params);\ncsiStateHandler['J'] = (handler, params, prefix) => handler.eraseInDisplay(params);\ncsiStateHandler['K'] = (handler, params, prefix) => handler.eraseInLine(params);\ncsiStateHandler['L'] = (handler, params, prefix) => handler.insertLines(params);\ncsiStateHandler['M'] = (handler, params, prefix) => handler.deleteLines(params);\ncsiStateHandler['P'] = (handler, params, prefix) => handler.deleteChars(params);\ncsiStateHandler['S'] = (handler, params, prefix) => handler.scrollUp(params);\ncsiStateHandler['T'] = (handler, params, prefix) => {\n if (params.length < 2 && !prefix) {\n handler.scrollDown(params);\n }\n};\ncsiStateHandler['X'] = (handler, params, prefix) => handler.eraseChars(params);\ncsiStateHandler['Z'] = (handler, params, prefix) => handler.cursorBackwardTab(params);\ncsiStateHandler['`'] = (handler, params, prefix) => handler.charPosAbsolute(params);\ncsiStateHandler['a'] = (handler, params, prefix) => handler.HPositionRelative(params);\ncsiStateHandler['b'] = (handler, params, prefix) => handler.repeatPrecedingCharacter(params);\ncsiStateHandler['c'] = (handler, params, prefix) => handler.sendDeviceAttributes(params);\ncsiStateHandler['d'] = (handler, params, prefix) => handler.linePosAbsolute(params);\ncsiStateHandler['e'] = (handler, params, prefix) => handler.VPositionRelative(params);\ncsiStateHandler['f'] = (handler, params, prefix) => handler.HVPosition(params);\ncsiStateHandler['g'] = (handler, params, prefix) => handler.tabClear(params);\ncsiStateHandler['h'] = (handler, params, prefix) => handler.setMode(params);\ncsiStateHandler['l'] = (handler, params, prefix) => handler.resetMode(params);\ncsiStateHandler['m'] = (handler, params, prefix) => handler.charAttributes(params);\ncsiStateHandler['n'] = (handler, params, prefix) => handler.deviceStatus(params);\ncsiStateHandler['p'] = (handler, params, prefix) => {\n switch (prefix) {\n case '!': handler.softReset(params); break;\n }\n};\ncsiStateHandler['q'] = (handler, params, prefix, postfix) => {\n if (postfix === ' ') {\n handler.setCursorStyle(params);\n }\n};\ncsiStateHandler['r'] = (handler, params) => handler.setScrollRegion(params);\ncsiStateHandler['s'] = (handler, params) => handler.saveCursor(params);\ncsiStateHandler['u'] = (handler, params) => handler.restoreCursor(params);\ncsiStateHandler[C0.CAN] = (handler, params, prefix, postfix, parser) => parser.setState(ParserState.NORMAL);\n\nexport enum ParserState {\n NORMAL = 0,\n ESCAPED = 1,\n CSI_PARAM = 2,\n CSI = 3,\n OSC = 4,\n CHARSET = 5,\n DCS = 6,\n IGNORE = 7\n}\n\n/**\n * The terminal's parser, all input into the terminal goes through the parser\n * which parses and defers the actual input handling the the IInputHandler\n * specified in the constructor.\n */\nexport class Parser {\n private _state: ParserState;\n private _position: number;\n\n // TODO: Remove terminal when handler can do everything\n constructor(\n private _inputHandler: IInputHandler,\n private _terminal: any\n ) {\n this._state = ParserState.NORMAL;\n }\n\n /**\n * Parse and handle data.\n *\n * @param data The data to parse.\n */\n public parse(data: string): ParserState {\n const l = data.length;\n let j;\n let cs;\n let ch;\n let code;\n let low;\n\n const cursorStartX = this._terminal.buffer.x;\n const cursorStartY = this._terminal.buffer.y;\n\n if (this._terminal.debug) {\n this._terminal.log('data: ' + data);\n }\n\n this._position = 0;\n // apply leftover surrogate high from last write\n if (this._terminal.surrogate_high) {\n data = this._terminal.surrogate_high + data;\n this._terminal.surrogate_high = '';\n }\n\n for (; this._position < l; this._position++) {\n ch = data[this._position];\n\n // FIXME: higher chars than 0xa0 are not allowed in escape sequences\n // --> maybe move to default\n code = data.charCodeAt(this._position);\n if (0xD800 <= code && code <= 0xDBFF) {\n // we got a surrogate high\n // get surrogate low (next 2 bytes)\n low = data.charCodeAt(this._position + 1);\n if (isNaN(low)) {\n // end of data stream, save surrogate high\n this._terminal.surrogate_high = ch;\n continue;\n }\n code = ((code - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n ch += data.charAt(this._position + 1);\n }\n // surrogate low - already handled above\n if (0xDC00 <= code && code <= 0xDFFF)\n continue;\n\n switch (this._state) {\n case ParserState.NORMAL:\n if (ch in normalStateHandler) {\n normalStateHandler[ch](this, this._inputHandler);\n } else {\n this._inputHandler.addChar(ch, code);\n }\n break;\n case ParserState.ESCAPED:\n if (ch in escapedStateHandler) {\n escapedStateHandler[ch](this, this._terminal);\n // Skip switch as it was just handled\n break;\n }\n switch (ch) {\n\n // ESC (,),*,+,-,. Designate G0-G2 Character Set.\n case '(': // <-- this seems to get all the attention\n case ')':\n case '*':\n case '+':\n case '-':\n case '.':\n switch (ch) {\n case '(':\n this._terminal.gcharset = 0;\n break;\n case ')':\n this._terminal.gcharset = 1;\n break;\n case '*':\n this._terminal.gcharset = 2;\n break;\n case '+':\n this._terminal.gcharset = 3;\n break;\n case '-':\n this._terminal.gcharset = 1;\n break;\n case '.':\n this._terminal.gcharset = 2;\n break;\n }\n this._state = ParserState.CHARSET;\n break;\n\n // Designate G3 Character Set (VT300).\n // A = ISO Latin-1 Supplemental.\n // Not implemented.\n case '/':\n this._terminal.gcharset = 3;\n this._state = ParserState.CHARSET;\n this._position--;\n break;\n\n // ESC N\n // Single Shift Select of G2 Character Set\n // ( SS2 is 0x8e). This affects next character only.\n case 'N':\n break;\n // ESC O\n // Single Shift Select of G3 Character Set\n // ( SS3 is 0x8f). This affects next character only.\n case 'O':\n break;\n // ESC n\n // Invoke the G2 Character Set as GL (LS2).\n case 'n':\n this._terminal.setgLevel(2);\n break;\n // ESC o\n // Invoke the G3 Character Set as GL (LS3).\n case 'o':\n this._terminal.setgLevel(3);\n break;\n // ESC |\n // Invoke the G3 Character Set as GR (LS3R).\n case '|':\n this._terminal.setgLevel(3);\n break;\n // ESC }\n // Invoke the G2 Character Set as GR (LS2R).\n case '}':\n this._terminal.setgLevel(2);\n break;\n // ESC ~\n // Invoke the G1 Character Set as GR (LS1R).\n case '~':\n this._terminal.setgLevel(1);\n break;\n\n // ESC 7 Save Cursor (DECSC).\n case '7':\n this._inputHandler.saveCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC 8 Restore Cursor (DECRC).\n case '8':\n this._inputHandler.restoreCursor();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC # 3 DEC line height/width\n case '#':\n this._state = ParserState.NORMAL;\n this._position++;\n break;\n\n // ESC H Tab Set (HTS is 0x88).\n case 'H':\n this._terminal.tabSet();\n this._state = ParserState.NORMAL;\n break;\n\n // ESC = Application Keypad (DECKPAM).\n case '=':\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n if (this._terminal.viewport) {\n this._terminal.viewport.syncScrollArea();\n }\n this._state = ParserState.NORMAL;\n break;\n\n // ESC > Normal Keypad (DECKPNM).\n case '>':\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n if (this._terminal.viewport) {\n this._terminal.viewport.syncScrollArea();\n }\n this._state = ParserState.NORMAL;\n break;\n\n default:\n this._state = ParserState.NORMAL;\n this._terminal.error('Unknown ESC control: %s.', ch);\n break;\n }\n break;\n\n case ParserState.CHARSET:\n if (ch in CHARSETS) {\n cs = CHARSETS[ch];\n if (ch === '/') { // ISOLatin is actually /A\n this.skipNextChar();\n }\n } else {\n cs = DEFAULT_CHARSET;\n }\n this._terminal.setgCharset(this._terminal.gcharset, cs);\n this._terminal.gcharset = null;\n this._state = ParserState.NORMAL;\n break;\n\n case ParserState.OSC:\n // OSC Ps ; Pt ST\n // OSC Ps ; Pt BEL\n // Set Text Parameters.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n\n this._terminal.params.push(this._terminal.currentParam);\n\n switch (this._terminal.params[0]) {\n case 0:\n case 1:\n case 2:\n if (this._terminal.params[1]) {\n this._terminal.title = this._terminal.params[1];\n this._terminal.handleTitle(this._terminal.title);\n }\n break;\n case 3:\n // set X property\n break;\n case 4:\n case 5:\n // change dynamic colors\n break;\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n // change dynamic ui colors\n break;\n case 46:\n // change log file\n break;\n case 50:\n // dynamic font\n break;\n case 51:\n // emacs shell\n break;\n case 52:\n // manipulate selection data\n break;\n case 104:\n case 105:\n case 110:\n case 111:\n case 112:\n case 113:\n case 114:\n case 115:\n case 116:\n case 117:\n case 118:\n // reset colors\n break;\n }\n\n this._terminal.params = [];\n this._terminal.currentParam = 0;\n this._state = ParserState.NORMAL;\n } else {\n if (!this._terminal.params.length) {\n if (ch >= '0' && ch <= '9') {\n this._terminal.currentParam =\n this._terminal.currentParam * 10 + ch.charCodeAt(0) - 48;\n } else if (ch === ';') {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = '';\n }\n } else {\n this._terminal.currentParam += ch;\n }\n }\n break;\n\n case ParserState.CSI_PARAM:\n if (ch in csiParamStateHandler) {\n csiParamStateHandler[ch](this);\n break;\n }\n this.finalizeParam();\n // Fall through the CSI as this character should be the CSI code.\n this._state = ParserState.CSI;\n\n case ParserState.CSI:\n if (ch in csiStateHandler) {\n if (this._terminal.debug) {\n this._terminal.log(`CSI ${this._terminal.prefix ? this._terminal.prefix : ''} ${this._terminal.params ? this._terminal.params.join(';') : ''} ${this._terminal.postfix ? this._terminal.postfix : ''} ${ch}`);\n }\n csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this);\n } else {\n this._terminal.error('Unknown CSI code: %s.', ch);\n }\n\n this._state = ParserState.NORMAL;\n this._terminal.prefix = '';\n this._terminal.postfix = '';\n break;\n\n case ParserState.DCS:\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n let pt;\n let valid: boolean;\n\n switch (this._terminal.prefix) {\n // User-Defined Keys (DECUDK).\n case '':\n break;\n\n // Request Status String (DECRQSS).\n // test: echo -e '\\eP$q\"p\\e\\\\'\n case '$q':\n pt = this._terminal.currentParam;\n valid = false;\n\n switch (pt) {\n // DECSCA\n case '\"q':\n pt = '0\"q';\n break;\n\n // DECSCL\n case '\"p':\n pt = '61\"p';\n break;\n\n // DECSTBM\n case 'r':\n pt = ''\n + (this._terminal.buffer.scrollTop + 1)\n + ';'\n + (this._terminal.buffer.scrollBottom + 1)\n + 'r';\n break;\n\n // SGR\n case 'm':\n pt = '0m';\n break;\n\n default:\n this._terminal.error('Unknown DCS Pt: %s.', pt);\n pt = '';\n break;\n }\n\n this._terminal.send(C0.ESC + 'P' + +valid + '$r' + pt + C0.ESC + '\\\\');\n break;\n\n // Set Termcap/Terminfo Data (xterm, experimental).\n case '+p':\n break;\n\n // Request Termcap/Terminfo String (xterm, experimental)\n // Regular xterm does not even respond to this sequence.\n // This can cause a small glitch in vim.\n // test: echo -ne '\\eP+q6b64\\e\\\\'\n case '+q':\n pt = this._terminal.currentParam;\n valid = false;\n\n this._terminal.send(C0.ESC + 'P' + +valid + '+r' + pt + C0.ESC + '\\\\');\n break;\n\n default:\n this._terminal.error('Unknown DCS prefix: %s.', this._terminal.prefix);\n break;\n }\n\n this._terminal.currentParam = 0;\n this._terminal.prefix = '';\n this._state = ParserState.NORMAL;\n } else if (!this._terminal.currentParam) {\n if (!this._terminal.prefix && ch !== '$' && ch !== '+') {\n this._terminal.currentParam = ch;\n } else if (this._terminal.prefix.length === 2) {\n this._terminal.currentParam = ch;\n } else {\n this._terminal.prefix += ch;\n }\n } else {\n this._terminal.currentParam += ch;\n }\n break;\n\n case ParserState.IGNORE:\n // For PM and APC.\n if (ch === C0.ESC || ch === C0.BEL) {\n if (ch === C0.ESC) this._position++;\n this._state = ParserState.NORMAL;\n }\n break;\n }\n }\n\n // Fire the cursormove event if it's moved. This is done inside the parser\n // as a render cannot happen in the middle of a parsing round.\n if (this._terminal.buffer.x !== cursorStartX || this._terminal.buffer.y !== cursorStartY) {\n this._terminal.emit('cursormove');\n }\n\n return this._state;\n }\n\n /**\n * Set the parser's current parsing state.\n *\n * @param state The new state.\n */\n public setState(state: ParserState): void {\n this._state = state;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have prefixes of '?', '>'\n * or '!'.\n *\n * @param prefix The prefix.\n */\n public setPrefix(prefix: string): void {\n this._terminal.prefix = prefix;\n }\n\n /**\n * Sets the parsier's current prefix. CSI codes can have postfixes of '$',\n * '\"', ' ', '\\''.\n *\n * @param postfix The postfix.\n */\n public setPostfix(postfix: string): void {\n this._terminal.postfix = postfix;\n }\n\n /**\n * Sets the parser's current parameter.\n *\n * @param param the parameter.\n */\n public setParam(param: number): void {\n this._terminal.currentParam = param;\n }\n\n /**\n * Gets the parser's current parameter.\n */\n public getParam(): number {\n return this._terminal.currentParam;\n }\n\n /**\n * Finalizes the parser's current parameter, adding it to the list of\n * parameters and setting the new current parameter to 0.\n */\n public finalizeParam(): void {\n this._terminal.params.push(this._terminal.currentParam);\n this._terminal.currentParam = 0;\n }\n\n /**\n * Tell the parser to skip the next character.\n */\n public skipNextChar(): void {\n this._position++;\n }\n\n /**\n * Tell the parser to repeat parsing the current character (for example if it\n * needs parsing using a different state.\n */\n // public repeatChar(): void {\n // this._position--;\n // }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkMatcherOptions, ITerminal, IBufferAccessor, ILinkifier, IElementAccessor } from './Interfaces';\nimport { LinkMatcher, LinkMatcherHandler, LinkMatcherValidationCallback, LineData, LinkHoverEvent, LinkHoverEventTypes } from './Types';\nimport { IMouseZoneManager } from './input/Interfaces';\nimport { MouseZone } from './input/MouseZoneManager';\nimport { EventEmitter } from './EventEmitter';\n\nconst protocolClause = '(https?:\\\\/\\\\/)';\nconst domainCharacterSet = '[\\\\da-z\\\\.-]+';\nconst negatedDomainCharacterSet = '[^\\\\da-z\\\\.-]+';\nconst domainBodyClause = '(' + domainCharacterSet + ')';\nconst tldClause = '([a-z\\\\.]{2,6})';\nconst ipClause = '((\\\\d{1,3}\\\\.){3}\\\\d{1,3})';\nconst localHostClause = '(localhost)';\nconst portClause = '(:\\\\d{1,5})';\nconst hostClause = '((' + domainBodyClause + '\\\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?';\nconst pathClause = '(\\\\/[\\\\/\\\\w\\\\.\\\\-%~]*)*';\nconst queryStringHashFragmentCharacterSet = '[0-9\\\\w\\\\[\\\\]\\\\(\\\\)\\\\/\\\\?\\\\!#@$%&\\'*+,:;~\\\\=\\\\.\\\\-]*';\nconst queryStringClause = '(\\\\?' + queryStringHashFragmentCharacterSet + ')?';\nconst hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?';\nconst negatedPathCharacterSet = '[^\\\\/\\\\w\\\\.\\\\-%]+';\nconst bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause;\nconst start = '(?:^|' + negatedDomainCharacterSet + ')(';\nconst end = ')($|' + negatedPathCharacterSet + ')';\nconst strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);\n\n/**\n * The ID of the built in http(s) link matcher.\n */\nconst HYPERTEXT_LINK_MATCHER_ID = 0;\n\n/**\n * The Linkifier applies links to rows shortly after they have been refreshed.\n */\nexport class Linkifier extends EventEmitter implements ILinkifier {\n /**\n * The time to wait after a row is changed before it is linkified. This prevents\n * the costly operation of searching every row multiple times, potentially a\n * huge amount of times.\n */\n protected static TIME_BEFORE_LINKIFY = 200;\n\n protected _linkMatchers: LinkMatcher[] = [];\n\n private _mouseZoneManager: IMouseZoneManager;\n private _rowsTimeoutId: number;\n private _nextLinkMatcherId = HYPERTEXT_LINK_MATCHER_ID;\n private _rowsToLinkify: {start: number, end: number};\n\n constructor(\n protected _terminal: IBufferAccessor & IElementAccessor\n ) {\n super();\n this._rowsToLinkify = {\n start: null,\n end: null\n };\n this.registerLinkMatcher(strictUrlRegex, null, { matchIndex: 1 });\n }\n\n /**\n * Attaches the linkifier to the DOM, enabling linkification.\n * @param mouseZoneManager The mouse zone manager to register link zones with.\n */\n public attachToDom(mouseZoneManager: IMouseZoneManager): void {\n this._mouseZoneManager = mouseZoneManager;\n }\n\n /**\n * Queue linkification on a set of rows.\n * @param start The row to linkify from (inclusive).\n * @param end The row to linkify to (inclusive).\n */\n public linkifyRows(start: number, end: number): void {\n // Don't attempt linkify if not yet attached to DOM\n if (!this._mouseZoneManager) {\n return;\n }\n\n // Increase range to linkify\n if (!this._rowsToLinkify.start) {\n this._rowsToLinkify.start = start;\n this._rowsToLinkify.end = end;\n } else {\n this._rowsToLinkify.start = this._rowsToLinkify.start < start ? this._rowsToLinkify.start : start;\n this._rowsToLinkify.end = this._rowsToLinkify.end > end ? this._rowsToLinkify.end : end;\n }\n\n // Clear out any existing links on this row range\n this._mouseZoneManager.clearAll(start, end);\n\n // Restart timer\n if (this._rowsTimeoutId) {\n clearTimeout(this._rowsTimeoutId);\n }\n this._rowsTimeoutId = setTimeout(() => this._linkifyRows(), Linkifier.TIME_BEFORE_LINKIFY);\n }\n\n /**\n * Linkifies the rows requested.\n */\n private _linkifyRows(): void {\n this._rowsTimeoutId = null;\n for (let i = this._rowsToLinkify.start; i <= this._rowsToLinkify.end; i++) {\n this._linkifyRow(i);\n }\n this._rowsToLinkify.start = null;\n this._rowsToLinkify.end = null;\n }\n\n /**\n * Attaches a handler for hypertext links, overriding default behavior for\n * tandard http(s) links.\n * @param handler The handler to use, this can be cleared with null.\n */\n public setHypertextLinkHandler(handler: LinkMatcherHandler): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].handler = handler;\n }\n\n /**\n * Attaches a validation callback for hypertext links.\n * @param callback The callback to use, this can be cleared with null.\n */\n public setHypertextValidationCallback(callback: LinkMatcherValidationCallback): void {\n this._linkMatchers[HYPERTEXT_LINK_MATCHER_ID].validationCallback = callback;\n }\n\n /**\n * Registers a link matcher, allowing custom link patterns to be matched and\n * handled.\n * @param regex The regular expression to search for. Specifically, this\n * searches the textContent of the rows. You will want to use \\s to match a\n * space ' ' character for example.\n * @param handler The callback when the link is called.\n * @param options Options for the link matcher.\n * @return The ID of the new matcher, this can be used to deregister.\n */\n public registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options: ILinkMatcherOptions = {}): number {\n if (this._nextLinkMatcherId !== HYPERTEXT_LINK_MATCHER_ID && !handler) {\n throw new Error('handler must be defined');\n }\n const matcher: LinkMatcher = {\n id: this._nextLinkMatcherId++,\n regex,\n handler,\n matchIndex: options.matchIndex,\n validationCallback: options.validationCallback,\n hoverTooltipCallback: options.tooltipCallback,\n hoverLeaveCallback: options.leaveCallback,\n priority: options.priority || 0\n };\n this._addLinkMatcherToList(matcher);\n return matcher.id;\n }\n\n /**\n * Inserts a link matcher to the list in the correct position based on the\n * priority of each link matcher. New link matchers of equal priority are\n * considered after older link matchers.\n * @param matcher The link matcher to be added.\n */\n private _addLinkMatcherToList(matcher: LinkMatcher): void {\n if (this._linkMatchers.length === 0) {\n this._linkMatchers.push(matcher);\n return;\n }\n\n for (let i = this._linkMatchers.length - 1; i >= 0; i--) {\n if (matcher.priority <= this._linkMatchers[i].priority) {\n this._linkMatchers.splice(i + 1, 0, matcher);\n return;\n }\n }\n\n this._linkMatchers.splice(0, 0, matcher);\n }\n\n /**\n * Deregisters a link matcher if it has been registered.\n * @param matcherId The link matcher's ID (returned after register)\n * @return Whether a link matcher was found and deregistered.\n */\n public deregisterLinkMatcher(matcherId: number): boolean {\n // ID 0 is the hypertext link matcher which cannot be deregistered\n for (let i = 1; i < this._linkMatchers.length; i++) {\n if (this._linkMatchers[i].id === matcherId) {\n this._linkMatchers.splice(i, 1);\n return true;\n }\n }\n return false;\n }\n\n /**\n * Linkifies a row.\n * @param rowIndex The index of the row to linkify.\n */\n private _linkifyRow(rowIndex: number): void {\n const absoluteRowIndex = this._terminal.buffer.ydisp + rowIndex;\n if (absoluteRowIndex >= this._terminal.buffer.lines.length) {\n return;\n }\n const text = this._terminal.buffer.translateBufferLineToString(absoluteRowIndex, false);\n for (let i = 0; i < this._linkMatchers.length; i++) {\n this._doLinkifyRow(rowIndex, text, this._linkMatchers[i]);\n }\n }\n\n /**\n * Linkifies a row given a specific handler.\n * @param rowIndex The row index to linkify.\n * @param text The text of the row (excludes text in the row that's already\n * linkified).\n * @param matcher The link matcher for this line.\n * @param offset The how much of the row has already been linkified.\n * @return The link element(s) that were added.\n */\n private _doLinkifyRow(rowIndex: number, text: string, matcher: LinkMatcher, offset: number = 0): void {\n // Iterate over nodes as we want to consider text nodes\n let result = [];\n const isHttpLinkMatcher = matcher.id === HYPERTEXT_LINK_MATCHER_ID;\n\n // Find the first match\n let match = text.match(matcher.regex);\n if (!match || match.length === 0) {\n return;\n }\n let uri = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];\n\n // Get index, match.index is for the outer match which includes negated chars\n const index = text.indexOf(uri);\n\n // Ensure the link is valid before registering\n if (matcher.validationCallback) {\n matcher.validationCallback(uri, isValid => {\n // Discard link if the line has already changed\n if (this._rowsTimeoutId) {\n return;\n }\n if (isValid) {\n this._addLink(offset + index, rowIndex, uri, matcher);\n }\n });\n } else {\n this._addLink(offset + index, rowIndex, uri, matcher);\n }\n\n // Recursively check for links in the rest of the text\n const remainingStartIndex = index + uri.length;\n const remainingText = text.substr(remainingStartIndex);\n if (remainingText.length > 0) {\n this._doLinkifyRow(rowIndex, remainingText, matcher, offset + remainingStartIndex);\n }\n }\n\n /**\n * Registers a link to the mouse zone manager.\n * @param x The column the link starts.\n * @param y The row the link is on.\n * @param uri The URI of the link.\n * @param matcher The link matcher for the link.\n */\n private _addLink(x: number, y: number, uri: string, matcher: LinkMatcher): void {\n this._mouseZoneManager.add(new MouseZone(\n x + 1,\n x + 1 + uri.length,\n y + 1,\n e => {\n if (matcher.handler) {\n return matcher.handler(e, uri);\n }\n window.open(uri, '_blank');\n },\n e => {\n this.emit(LinkHoverEventTypes.HOVER, { x, y, length: uri.length});\n this._terminal.element.style.cursor = 'pointer';\n },\n e => {\n this.emit(LinkHoverEventTypes.TOOLTIP, { x, y, length: uri.length});\n if (matcher.hoverTooltipCallback) {\n matcher.hoverTooltipCallback(e, uri);\n }\n },\n () => {\n this.emit(LinkHoverEventTypes.LEAVE, { x, y, length: uri.length});\n this._terminal.element.style.cursor = '';\n if (matcher.hoverLeaveCallback) {\n matcher.hoverLeaveCallback();\n }\n }\n ));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, ITerminal, IInputHandlingTerminal } from './Interfaces';\nimport { C0 } from './EscapeSequences';\nimport { DEFAULT_CHARSET } from './Charsets';\nimport { CharData } from './Types';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX } from './Buffer';\nimport { FLAGS } from './renderer/Types';\nimport { wcwidth } from './CharWidth';\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler implements IInputHandler {\n constructor(private _terminal: IInputHandlingTerminal) { }\n\n public addChar(char: string, code: number): void {\n if (char >= ' ') {\n // calculate print space\n // expensive call, therefore we save width in line buffer\n const ch_width = wcwidth(code);\n\n if (this._terminal.charset && this._terminal.charset[char]) {\n char = this._terminal.charset[char];\n }\n\n let row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n // insert combining char in last cell\n // FIXME: needs handling after cursor jumps\n if (!ch_width && this._terminal.buffer.x) {\n // dont overflow left\n if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) {\n if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][CHAR_DATA_WIDTH_INDEX]) {\n // found empty cell after fullwidth, need to go 2 cells back\n if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][CHAR_DATA_CHAR_INDEX] += char;\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0);\n }\n } else {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][CHAR_DATA_CHAR_INDEX] += char;\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0);\n }\n this._terminal.updateRange(this._terminal.buffer.y);\n }\n return;\n }\n\n // goto next line if ch would overflow\n // TODO: needs a global min terminal width of 2\n if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) {\n // autowrap - DECAWM\n if (this._terminal.wraparoundMode) {\n this._terminal.buffer.x = 0;\n this._terminal.buffer.y++;\n if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {\n this._terminal.buffer.y--;\n this._terminal.scroll(true);\n } else {\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n (this._terminal.buffer.lines.get(this._terminal.buffer.y)).isWrapped = true;\n }\n } else {\n if (ch_width === 2) // FIXME: check for xterm behavior\n return;\n }\n }\n row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n // insert mode: move characters to right\n if (this._terminal.insertMode) {\n // do this twice for a fullwidth char\n for (let moves = 0; moves < ch_width; ++moves) {\n // remove last cell, if it's width is 0\n // we have to adjust the second last cell as well\n const removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop();\n if (removed[CHAR_DATA_WIDTH_INDEX] === 0\n && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2]\n && this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][CHAR_DATA_WIDTH_INDEX] === 2) {\n this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)];\n }\n\n // insert empty cell at cursor\n this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]);\n }\n }\n\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)];\n this._terminal.buffer.x++;\n this._terminal.updateRange(this._terminal.buffer.y);\n\n // fullwidth char - set next cell width to zero and advance cursor\n if (ch_width === 2) {\n this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined];\n this._terminal.buffer.x++;\n }\n }\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n */\n public bell(): void {\n this._terminal.bell();\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n */\n public lineFeed(): void {\n if (this._terminal.convertEol) {\n this._terminal.buffer.x = 0;\n }\n this._terminal.buffer.y++;\n if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {\n this._terminal.buffer.y--;\n this._terminal.scroll();\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n /**\n * This event is emitted whenever the terminal outputs a LF or NL.\n *\n * @event lineFeed\n */\n this._terminal.emit('lineFeed');\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n */\n public carriageReturn(): void {\n this._terminal.buffer.x = 0;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n */\n public backspace(): void {\n if (this._terminal.buffer.x > 0) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n */\n public tab(): void {\n this._terminal.buffer.x = this._terminal.buffer.nextStop();\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n */\n public shiftOut(): void {\n this._terminal.setgLevel(1);\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n */\n public shiftIn(): void {\n this._terminal.setgLevel(0);\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n */\n public insertChars(params: number[]): void {\n let param = params[0];\n if (param < 1) param = 1;\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n let j = this._terminal.buffer.x;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.buffer.lines.get(row).splice(j++, 0, ch);\n this._terminal.buffer.lines.get(row).pop();\n }\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n */\n public cursorUp(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y -= param;\n if (this._terminal.buffer.y < 0) {\n this._terminal.buffer.y = 0;\n }\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n */\n public cursorDown(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n */\n public cursorForward(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x += param;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n */\n public cursorBackward(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n this._terminal.buffer.x -= param;\n if (this._terminal.buffer.x < 0) {\n this._terminal.buffer.x = 0;\n }\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * same as CSI Ps B ?\n */\n public cursorNextLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n this._terminal.buffer.x = 0;\n }\n\n\n /**\n * CSI Ps F\n * Cursor Preceding Line Ps Times (default = 1) (CNL).\n * reuse CSI Ps A ?\n */\n public cursorPrecedingLine(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y -= param;\n if (this._terminal.buffer.y < 0) {\n this._terminal.buffer.y = 0;\n }\n this._terminal.buffer.x = 0;\n }\n\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n */\n public cursorCharAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x = param - 1;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n */\n public cursorPosition(params: number[]): void {\n let col: number;\n let row: number = params[0] - 1;\n\n if (params.length >= 2) {\n col = params[1] - 1;\n } else {\n col = 0;\n }\n\n if (row < 0) {\n row = 0;\n } else if (row >= this._terminal.rows) {\n row = this._terminal.rows - 1;\n }\n\n if (col < 0) {\n col = 0;\n } else if (col >= this._terminal.cols) {\n col = this._terminal.cols - 1;\n }\n\n this._terminal.buffer.x = col;\n this._terminal.buffer.y = row;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n */\n public cursorForwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.x = this._terminal.buffer.nextStop();\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInDisplay(params: number[]): void {\n let j;\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);\n j = this._terminal.buffer.y + 1;\n for (; j < this._terminal.rows; j++) {\n this._terminal.eraseLine(j);\n }\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);\n j = this._terminal.buffer.y;\n while (j--) {\n this._terminal.eraseLine(j);\n }\n break;\n case 2:\n j = this._terminal.rows;\n while (j--) this._terminal.eraseLine(j);\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._terminal.buffer.lines.length - this._terminal.rows;\n if (scrollBackSize > 0) {\n this._terminal.buffer.lines.trimStart(scrollBackSize);\n this._terminal.buffer.ybase = Math.max(this._terminal.buffer.ybase - scrollBackSize, 0);\n this._terminal.buffer.ydisp = Math.max(this._terminal.buffer.ydisp - scrollBackSize, 0);\n // Force a scroll event to refresh viewport\n this._terminal.emit('scroll', 0);\n }\n break;\n }\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n */\n public eraseInLine(params: number[]): void {\n switch (params[0]) {\n case 0:\n this._terminal.eraseRight(this._terminal.buffer.x, this._terminal.buffer.y);\n break;\n case 1:\n this._terminal.eraseLeft(this._terminal.buffer.x, this._terminal.buffer.y);\n break;\n case 2:\n this._terminal.eraseLine(this._terminal.buffer.y);\n break;\n }\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n */\n public insertLines(params: number[]): void {\n let param: number = params[0];\n if (param < 1) {\n param = 1;\n }\n let row: number = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n let scrollBottomRowsOffset = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;\n let scrollBottomAbsolute = this._terminal.rows - 1 + this._terminal.buffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.buffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._terminal.buffer.lines.splice(row, 0, this._terminal.blankLine(true));\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.y);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n */\n public deleteLines(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n const row: number = this._terminal.buffer.y + this._terminal.buffer.ybase;\n\n let j: number;\n j = this._terminal.rows - 1 - this._terminal.buffer.scrollBottom;\n j = this._terminal.rows - 1 + this._terminal.buffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._terminal.buffer.lines.splice(row, 1);\n this._terminal.buffer.lines.splice(j, 0, this._terminal.blankLine(true));\n }\n\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.y);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n */\n public deleteChars(params: number[]): void {\n let param: number = params[0];\n if (param < 1) {\n param = 1;\n }\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param--) {\n this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 1);\n this._terminal.buffer.lines.get(row).push(ch);\n }\n this._terminal.updateRange(this._terminal.buffer.y);\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n */\n public scrollUp(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 1);\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.scrollTop);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n */\n public scrollDown(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollBottom, 1);\n this._terminal.buffer.lines.splice(this._terminal.buffer.ybase + this._terminal.buffer.scrollTop, 0, this._terminal.blankLine());\n }\n // this.maxRange();\n this._terminal.updateRange(this._terminal.buffer.scrollTop);\n this._terminal.updateRange(this._terminal.buffer.scrollBottom);\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n */\n public eraseChars(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n\n const row = this._terminal.buffer.y + this._terminal.buffer.ybase;\n let j = this._terminal.buffer.x;\n const ch: CharData = [this._terminal.eraseAttr(), ' ', 1, 32]; // xterm\n\n while (param-- && j < this._terminal.cols) {\n this._terminal.buffer.lines.get(row)[j++] = ch;\n }\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n */\n public cursorBackwardTab(params: number[]): void {\n let param = params[0] || 1;\n while (param--) {\n this._terminal.buffer.x = this._terminal.buffer.prevStop();\n }\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n */\n public charPosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x = param - 1;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n * reuse CSI Ps C ?\n */\n public HPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.x += param;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n */\n public repeatPrecedingCharacter(params: number[]): void {\n let param = params[0] || 1;\n const line = this._terminal.buffer.lines.get(this._terminal.buffer.ybase + this._terminal.buffer.y);\n const ch = line[this._terminal.buffer.x - 1] || [this._terminal.defAttr, ' ', 1, 32];\n\n while (param--) {\n line[this._terminal.buffer.x++] = ch;\n }\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n */\n public sendDeviceAttributes(params: number[]): void {\n if (params[0] > 0) {\n return;\n }\n\n if (!this._terminal.prefix) {\n if (this._terminal.is('xterm') || this._terminal.is('rxvt-unicode') || this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[?1;2c');\n } else if (this._terminal.is('linux')) {\n this._terminal.send(C0.ESC + '[?6c');\n }\n } else if (this._terminal.prefix === '>') {\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._terminal.is('xterm')) {\n this._terminal.send(C0.ESC + '[>0;276;0c');\n } else if (this._terminal.is('rxvt-unicode')) {\n this._terminal.send(C0.ESC + '[>85;95;0c');\n } else if (this._terminal.is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._terminal.send(params[0] + 'c');\n } else if (this._terminal.is('screen')) {\n this._terminal.send(C0.ESC + '[>83;40003;0c');\n }\n }\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n */\n public linePosAbsolute(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y = param - 1;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n */\n public VPositionRelative(params: number[]): void {\n let param = params[0];\n if (param < 1) {\n param = 1;\n }\n this._terminal.buffer.y += param;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x--;\n }\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n */\n public HVPosition(params: number[]): void {\n if (params[0] < 1) params[0] = 1;\n if (params[1] < 1) params[1] = 1;\n\n this._terminal.buffer.y = params[0] - 1;\n if (this._terminal.buffer.y >= this._terminal.rows) {\n this._terminal.buffer.y = this._terminal.rows - 1;\n }\n\n this._terminal.buffer.x = params[1] - 1;\n if (this._terminal.buffer.x >= this._terminal.cols) {\n this._terminal.buffer.x = this._terminal.cols - 1;\n }\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n */\n public tabClear(params: number[]): void {\n let param = params[0];\n if (param <= 0) {\n delete this._terminal.buffer.tabs[this._terminal.buffer.x];\n } else if (param === 3) {\n this._terminal.buffer.tabs = {};\n }\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n */\n public setMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.setMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = true;\n break;\n case 20:\n // this._t.convertEol = true;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = true;\n break;\n case 2:\n this._terminal.setgCharset(0, DEFAULT_CHARSET);\n this._terminal.setgCharset(1, DEFAULT_CHARSET);\n this._terminal.setgCharset(2, DEFAULT_CHARSET);\n this._terminal.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3: // 132 col mode\n this._terminal.savedCols = this._terminal.cols;\n this._terminal.resize(132, this._terminal.rows);\n break;\n case 6:\n this._terminal.originMode = true;\n break;\n case 7:\n this._terminal.wraparoundMode = true;\n break;\n case 12:\n // this.cursorBlink = true;\n break;\n case 66:\n this._terminal.log('Serial port requested application keypad.');\n this._terminal.applicationKeypad = true;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n case 1000: // vt200 mouse\n // no motion.\n // no modifiers, except control on the wheel.\n case 1002: // button event mouse\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n\n // TODO: Why are params[0] compares nested within a switch for params[0]?\n\n this._terminal.x10Mouse = params[0] === 9;\n this._terminal.vt200Mouse = params[0] === 1000;\n this._terminal.normalMouse = params[0] > 1000;\n this._terminal.mouseEvents = true;\n this._terminal.element.classList.add('enable-mouse-events');\n this._terminal.selectionManager.disable();\n this._terminal.log('Binding to mouse events.');\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._terminal.sendFocus = true;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = true;\n // for wide terminals\n // simply encodes large values as utf8 characters\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = true;\n // for wide terminals\n // does not add 32 to fields\n // press: ^[[ Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n */\n public resetMode(params: number[]): void {\n if (params.length > 1) {\n for (let i = 0; i < params.length; i++) {\n this.resetMode([params[i]]);\n }\n\n return;\n }\n\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 4:\n this._terminal.insertMode = false;\n break;\n case 20:\n // this._t.convertEol = false;\n break;\n }\n } else if (this._terminal.prefix === '?') {\n switch (params[0]) {\n case 1:\n this._terminal.applicationCursor = false;\n break;\n case 3:\n if (this._terminal.cols === 132 && this._terminal.savedCols) {\n this._terminal.resize(this._terminal.savedCols, this._terminal.rows);\n }\n delete this._terminal.savedCols;\n break;\n case 6:\n this._terminal.originMode = false;\n break;\n case 7:\n this._terminal.wraparoundMode = false;\n break;\n case 12:\n // this.cursorBlink = false;\n break;\n case 66:\n this._terminal.log('Switching back to normal keypad.');\n this._terminal.applicationKeypad = false;\n this._terminal.viewport.syncScrollArea();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._terminal.x10Mouse = false;\n this._terminal.vt200Mouse = false;\n this._terminal.normalMouse = false;\n this._terminal.mouseEvents = false;\n this._terminal.element.classList.remove('enable-mouse-events');\n this._terminal.selectionManager.enable();\n break;\n case 1004: // send focusin/focusout events\n this._terminal.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse\n this._terminal.utfMouse = false;\n break;\n case 1006: // sgr ext mode mouse\n this._terminal.sgrMouse = false;\n break;\n case 1015: // urxvt ext mode mouse\n this._terminal.urxvtMouse = false;\n break;\n case 25: // hide cursor\n this._terminal.cursorHidden = true;\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Ensure the selection manager has the correct buffer\n this._terminal.buffers.activateNormalBuffer();\n // TODO: Not sure if we need to save/restore after switching the buffer\n // if (params[0] === 1049) {\n // this.restoreCursor(params);\n // }\n this._terminal.selectionManager.setBuffer(this._terminal.buffer);\n this._terminal.refresh(0, this._terminal.rows - 1);\n this._terminal.viewport.syncScrollArea();\n this._terminal.showCursor();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._terminal.bracketedPasteMode = false;\n break;\n }\n }\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n * Ps = 0 -> Normal (default).\n * Ps = 1 -> Bold.\n * Ps = 2 -> Faint, decreased intensity (ISO 6429).\n * Ps = 4 -> Underlined.\n * Ps = 5 -> Blink (appears as Bold).\n * Ps = 7 -> Inverse.\n * Ps = 8 -> Invisible, i.e., hidden (VT300).\n * Ps = 2 2 -> Normal (neither bold nor faint).\n * Ps = 2 4 -> Not underlined.\n * Ps = 2 5 -> Steady (not blinking).\n * Ps = 2 7 -> Positive (not inverse).\n * Ps = 2 8 -> Visible, i.e., not hidden (VT300).\n * Ps = 3 0 -> Set foreground color to Black.\n * Ps = 3 1 -> Set foreground color to Red.\n * Ps = 3 2 -> Set foreground color to Green.\n * Ps = 3 3 -> Set foreground color to Yellow.\n * Ps = 3 4 -> Set foreground color to Blue.\n * Ps = 3 5 -> Set foreground color to Magenta.\n * Ps = 3 6 -> Set foreground color to Cyan.\n * Ps = 3 7 -> Set foreground color to White.\n * Ps = 3 9 -> Set foreground color to default (original).\n * Ps = 4 0 -> Set background color to Black.\n * Ps = 4 1 -> Set background color to Red.\n * Ps = 4 2 -> Set background color to Green.\n * Ps = 4 3 -> Set background color to Yellow.\n * Ps = 4 4 -> Set background color to Blue.\n * Ps = 4 5 -> Set background color to Magenta.\n * Ps = 4 6 -> Set background color to Cyan.\n * Ps = 4 7 -> Set background color to White.\n * Ps = 4 9 -> Set background color to default (original).\n *\n * If 16-color support is compiled, the following apply. Assume\n * that xterm's resources are set so that the ISO color codes are\n * the first 8 of a set of 16. Then the aixterm colors are the\n * bright versions of the ISO colors:\n * Ps = 9 0 -> Set foreground color to Black.\n * Ps = 9 1 -> Set foreground color to Red.\n * Ps = 9 2 -> Set foreground color to Green.\n * Ps = 9 3 -> Set foreground color to Yellow.\n * Ps = 9 4 -> Set foreground color to Blue.\n * Ps = 9 5 -> Set foreground color to Magenta.\n * Ps = 9 6 -> Set foreground color to Cyan.\n * Ps = 9 7 -> Set foreground color to White.\n * Ps = 1 0 0 -> Set background color to Black.\n * Ps = 1 0 1 -> Set background color to Red.\n * Ps = 1 0 2 -> Set background color to Green.\n * Ps = 1 0 3 -> Set background color to Yellow.\n * Ps = 1 0 4 -> Set background color to Blue.\n * Ps = 1 0 5 -> Set background color to Magenta.\n * Ps = 1 0 6 -> Set background color to Cyan.\n * Ps = 1 0 7 -> Set background color to White.\n *\n * If xterm is compiled with the 16-color support disabled, it\n * supports the following, from rxvt:\n * Ps = 1 0 0 -> Set foreground and background color to\n * default.\n *\n * If 88- or 256-color support is compiled, the following apply.\n * Ps = 3 8 ; 5 ; Ps -> Set foreground color to the second\n * Ps.\n * Ps = 4 8 ; 5 ; Ps -> Set background color to the second\n * Ps.\n */\n public charAttributes(params: number[]): void {\n // Optimize a single SGR0.\n if (params.length === 1 && params[0] === 0) {\n this._terminal.curAttr = this._terminal.defAttr;\n return;\n }\n\n const l = params.length;\n let flags = this._terminal.curAttr >> 18;\n let fg = (this._terminal.curAttr >> 9) & 0x1ff;\n let bg = this._terminal.curAttr & 0x1ff;\n let p;\n\n for (let i = 0; i < l; i++) {\n p = params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n fg = p - 30;\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n bg = p - 40;\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n p += 8;\n fg = p - 90;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n p += 8;\n bg = p - 100;\n } else if (p === 0) {\n // default\n flags = this._terminal.defAttr >> 18;\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n // flags = 0;\n // fg = 0x1ff;\n // bg = 0x1ff;\n } else if (p === 1) {\n // bold text\n flags |= FLAGS.BOLD;\n } else if (p === 4) {\n // underlined text\n flags |= FLAGS.UNDERLINE;\n } else if (p === 5) {\n // blink\n flags |= FLAGS.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n flags |= FLAGS.INVERSE;\n } else if (p === 8) {\n // invisible\n flags |= FLAGS.INVISIBLE;\n } else if (p === 2) {\n // dimmed text\n flags |= FLAGS.DIM;\n } else if (p === 22) {\n // not bold nor faint\n flags &= ~FLAGS.BOLD;\n flags &= ~FLAGS.DIM;\n } else if (p === 24) {\n // not underlined\n flags &= ~FLAGS.UNDERLINE;\n } else if (p === 25) {\n // not blink\n flags &= ~FLAGS.BLINK;\n } else if (p === 27) {\n // not inverse\n flags &= ~FLAGS.INVERSE;\n } else if (p === 28) {\n // not invisible\n flags &= ~FLAGS.INVISIBLE;\n } else if (p === 39) {\n // reset fg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n } else if (p === 49) {\n // reset bg\n bg = this._terminal.defAttr & 0x1ff;\n } else if (p === 38) {\n // fg color 256\n if (params[i + 1] === 2) {\n i += 2;\n fg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (fg === -1) fg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n fg = p;\n }\n } else if (p === 48) {\n // bg color 256\n if (params[i + 1] === 2) {\n i += 2;\n bg = this._terminal.matchColor(\n params[i] & 0xff,\n params[i + 1] & 0xff,\n params[i + 2] & 0xff);\n if (bg === -1) bg = 0x1ff;\n i += 2;\n } else if (params[i + 1] === 5) {\n i += 2;\n p = params[i] & 0xff;\n bg = p;\n }\n } else if (p === 100) {\n // reset fg/bg\n fg = (this._terminal.defAttr >> 9) & 0x1ff;\n bg = this._terminal.defAttr & 0x1ff;\n } else {\n this._terminal.error('Unknown SGR attribute: %d.', p);\n }\n }\n\n this._terminal.curAttr = (flags << 18) | (fg << 9) | bg;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n */\n public deviceStatus(params: number[]): void {\n if (!this._terminal.prefix) {\n switch (params[0]) {\n case 5:\n // status report\n this._terminal.send(C0.ESC + '[0n');\n break;\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '['\n + (this._terminal.buffer.y + 1)\n + ';'\n + (this._terminal.buffer.x + 1)\n + 'R');\n break;\n }\n } else if (this._terminal.prefix === '?') {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params[0]) {\n case 6:\n // cursor position\n this._terminal.send(C0.ESC + '[?'\n + (this._terminal.buffer.y + 1)\n + ';'\n + (this._terminal.buffer.x + 1)\n + 'R');\n break;\n case 15:\n // no printer\n // this.send(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.send(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.send(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.send(C0.ESC + '[?50n');\n break;\n }\n }\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n */\n public softReset(params: number[]): void {\n this._terminal.cursorHidden = false;\n this._terminal.insertMode = false;\n this._terminal.originMode = false;\n this._terminal.wraparoundMode = true; // defaults: xterm - true, vt100 - false\n this._terminal.applicationKeypad = false; // ?\n this._terminal.viewport.syncScrollArea();\n this._terminal.applicationCursor = false;\n this._terminal.buffer.scrollTop = 0;\n this._terminal.buffer.scrollBottom = this._terminal.rows - 1;\n this._terminal.curAttr = this._terminal.defAttr;\n this._terminal.buffer.x = this._terminal.buffer.y = 0; // ?\n this._terminal.charset = null;\n this._terminal.glevel = 0; // ??\n this._terminal.charsets = [null]; // ??\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> blinking block.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n */\n public setCursorStyle(params?: number[]): void {\n const param = params[0] < 1 ? 1 : params[0];\n switch (param) {\n case 1:\n case 2:\n this._terminal.setOption('cursorStyle', 'block');\n break;\n case 3:\n case 4:\n this._terminal.setOption('cursorStyle', 'underline');\n break;\n case 5:\n case 6:\n this._terminal.setOption('cursorStyle', 'bar');\n break;\n }\n const isBlinking = param % 2 === 1;\n this._terminal.setOption('cursorBlink', isBlinking);\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n * CSI ? Pm r\n */\n public setScrollRegion(params: number[]): void {\n if (this._terminal.prefix) return;\n this._terminal.buffer.scrollTop = (params[0] || 1) - 1;\n this._terminal.buffer.scrollBottom = (params[1] && params[1] <= this._terminal.rows ? params[1] : this._terminal.rows) - 1;\n this._terminal.buffer.x = 0;\n this._terminal.buffer.y = 0;\n }\n\n\n /**\n * CSI s\n * Save cursor (ANSI.SYS).\n */\n public saveCursor(params: number[]): void {\n this._terminal.buffer.savedX = this._terminal.buffer.x;\n this._terminal.buffer.savedY = this._terminal.buffer.y;\n }\n\n\n /**\n * CSI u\n * Restore cursor (ANSI.SYS).\n */\n public restoreCursor(params: number[]): void {\n this._terminal.buffer.x = this._terminal.buffer.savedX || 0;\n this._terminal.buffer.y = this._terminal.buffer.savedY || 0;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IEventEmitter, IListenerType } from './Interfaces';\n\nexport class EventEmitter implements IEventEmitter {\n private _events: {[type: string]: IListenerType[]};\n\n constructor() {\n // Restore the previous events if available, this will happen if the\n // constructor is called multiple times on the same object (terminal reset).\n this._events = this._events || {};\n }\n\n public on(type: string, listener: IListenerType): void {\n this._events[type] = this._events[type] || [];\n this._events[type].push(listener);\n }\n\n public off(type: string, listener: IListenerType): void {\n if (!this._events[type]) {\n return;\n }\n\n let obj = this._events[type];\n let i = obj.length;\n\n while (i--) {\n if (obj[i] === listener || obj[i].listener === listener) {\n obj.splice(i, 1);\n return;\n }\n }\n }\n\n public removeAllListeners(type: string): void {\n if (this._events[type]) {\n delete this._events[type];\n }\n }\n\n public once(type: string, listener: IListenerType): void {\n function on(): void {\n let args = Array.prototype.slice.call(arguments);\n this.off(type, on);\n listener.apply(this, args);\n }\n (on).listener = listener;\n this.on(type, on);\n }\n\n public emit(type: string, ...args: any[]): void {\n if (!this._events[type]) {\n return;\n }\n let obj = this._events[type];\n for (let i = 0; i < obj.length; i++) {\n obj[i].apply(this, args);\n }\n }\n\n public listeners(type: string): IListenerType[] {\n return this._events[type] || [];\n }\n\n protected destroy(): void {\n this._events = {};\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * C0 control codes\n * See = https://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\nexport namespace C0 {\n /** Null (Caret = ^@, C = \\0) */\n export const NUL = '\\x00';\n /** Start of Heading (Caret = ^A) */\n export const SOH = '\\x01';\n /** Start of Text (Caret = ^B) */\n export const STX = '\\x02';\n /** End of Text (Caret = ^C) */\n export const ETX = '\\x03';\n /** End of Transmission (Caret = ^D) */\n export const EOT = '\\x04';\n /** Enquiry (Caret = ^E) */\n export const ENQ = '\\x05';\n /** Acknowledge (Caret = ^F) */\n export const ACK = '\\x06';\n /** Bell (Caret = ^G, C = \\a) */\n export const BEL = '\\x07';\n /** Backspace (Caret = ^H, C = \\b) */\n export const BS = '\\x08';\n /** Character Tabulation, Horizontal Tabulation (Caret = ^I, C = \\t) */\n export const HT = '\\x09';\n /** Line Feed (Caret = ^J, C = \\n) */\n export const LF = '\\x0a';\n /** Line Tabulation, Vertical Tabulation (Caret = ^K, C = \\v) */\n export const VT = '\\x0b';\n /** Form Feed (Caret = ^L, C = \\f) */\n export const FF = '\\x0c';\n /** Carriage Return (Caret = ^M, C = \\r) */\n export const CR = '\\x0d';\n /** Shift Out (Caret = ^N) */\n export const SO = '\\x0e';\n /** Shift In (Caret = ^O) */\n export const SI = '\\x0f';\n /** Data Link Escape (Caret = ^P) */\n export const DLE = '\\x10';\n /** Device Control One (XON) (Caret = ^Q) */\n export const DC1 = '\\x11';\n /** Device Control Two (Caret = ^R) */\n export const DC2 = '\\x12';\n /** Device Control Three (XOFF) (Caret = ^S) */\n export const DC3 = '\\x13';\n /** Device Control Four (Caret = ^T) */\n export const DC4 = '\\x14';\n /** Negative Acknowledge (Caret = ^U) */\n export const NAK = '\\x15';\n /** Synchronous Idle (Caret = ^V) */\n export const SYN = '\\x16';\n /** End of Transmission Block (Caret = ^W) */\n export const ETB = '\\x17';\n /** Cancel (Caret = ^X) */\n export const CAN = '\\x18';\n /** End of Medium (Caret = ^Y) */\n export const EM = '\\x19';\n /** Substitute (Caret = ^Z) */\n export const SUB = '\\x1a';\n /** Escape (Caret = ^[, C = \\e) */\n export const ESC = '\\x1b';\n /** File Separator (Caret = ^\\) */\n export const FS = '\\x1c';\n /** Group Separator (Caret = ^]) */\n export const GS = '\\x1d';\n /** Record Separator (Caret = ^^) */\n export const RS = '\\x1e';\n /** Unit Separator (Caret = ^_) */\n export const US = '\\x1f';\n /** Space */\n export const SP = '\\x20';\n /** Delete (Caret = ^?) */\n export const DEL = '\\x7f';\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from './Interfaces';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private isComposing: boolean;\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private compositionPosition: IPosition;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private isSendingComposition: boolean;\n\n /**\n * Creates a new CompositionHelper.\n * @param textarea The textarea that xterm uses for input.\n * @param compositionView The element to display the in-progress composition in.\n * @param terminal The Terminal to forward the finished composition to.\n */\n constructor(\n private textarea: HTMLTextAreaElement,\n private compositionView: HTMLElement,\n private terminal: ITerminal\n ) {\n this.isComposing = false;\n this.isSendingComposition = false;\n this.compositionPosition = { start: null, end: null };\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this.isComposing = true;\n this.compositionPosition.start = this.textarea.value.length;\n this.compositionView.textContent = '';\n this.compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param {CompositionEvent} ev The event.\n */\n public compositionupdate(ev: CompositionEvent): void {\n this.compositionView.textContent = ev.data;\n this.updateCompositionElements();\n setTimeout(() => {\n this.compositionPosition.end = this.textarea.value.length;\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this.finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @return Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this.isComposing || this.isSendingComposition) {\n if (ev.keyCode === 229) {\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n } else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n } else {\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this.finalizeComposition(false);\n }\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this.handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropogation Whether to wait for events to propogate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is send before\n * the command is executed.\n */\n private finalizeComposition(waitForPropogation: boolean): void {\n this.compositionView.classList.remove('active');\n this.isComposing = false;\n this.clearTextareaPosition();\n\n if (!waitForPropogation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this.isSendingComposition = false;\n const input = this.textarea.value.substring(this.compositionPosition.start, this.compositionPosition.end);\n this.terminal.handler(input);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this.compositionPosition.start,\n end: this.compositionPosition.end,\n };\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved, this solution was used\n // because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this.isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this.isSendingComposition) {\n this.isSendingComposition = false;\n let input;\n if (this.isComposing) {\n // Use the end position to get the string if a new composition has started.\n input = this.textarea.value.substring(currentCompositionPosition.start, currentCompositionPosition.end);\n } else {\n // Don't use the end position here in order to pick up any characters after the\n // composition has finished, for example when typing a non-composition character\n // (eg. 2) after a composition character.\n input = this.textarea.value.substring(currentCompositionPosition.start);\n }\n this.terminal.handler(input);\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private handleAnyTextareaChanges(): void {\n const oldValue = this.textarea.value;\n setTimeout(() => {\n // Ignore if a composition has started since the timeout\n if (!this.isComposing) {\n const newValue = this.textarea.value;\n const diff = newValue.replace(oldValue, '');\n if (diff.length > 0) {\n this.terminal.handler(diff);\n }\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this.isComposing) {\n return;\n }\n\n if (this.terminal.buffer.isCursorInViewport) {\n const cellHeight = Math.ceil(this.terminal.charMeasure.height * this.terminal.options.lineHeight);\n const cursorTop = this.terminal.buffer.y * cellHeight;\n const cursorLeft = this.terminal.buffer.x * this.terminal.charMeasure.width;\n\n this.compositionView.style.left = cursorLeft + 'px';\n this.compositionView.style.top = cursorTop + 'px';\n this.compositionView.style.height = cellHeight + 'px';\n this.compositionView.style.lineHeight = cellHeight + 'px';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this.compositionView.getBoundingClientRect();\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = compositionViewBounds.width + 'px';\n this.textarea.style.height = compositionViewBounds.height + 'px';\n this.textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n };\n\n /**\n * Clears the textarea's position so that the cursor does not blink on IE.\n * @private\n */\n private clearTextareaPosition(): void {\n this.textarea.style.left = '';\n this.textarea.style.top = '';\n };\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Charset } from './Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: Charset } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: Charset = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u0009', // '\\t'\n 'c': '\\u000c', // '\\f'\n 'd': '\\u000d', // '\\r'\n 'e': '\\u000a', // '\\n'\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '\\u2424' (NL)\n 'i': '\\u000b', // '\\v'\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = null;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] =\nCHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] =\nCHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] =\nCHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const wcwidth = (function(opts: {nul: number, control: number}): (ucs: number) => number {\n // extracted from https://www.cl.cam.ac.uk/%7Emgk25/ucs/wcwidth.c\n // combining characters\n const COMBINING_BMP = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB],\n ];\n const COMBINING_HIGH = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n ];\n // binary search\n function bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1])\n return false;\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1])\n min = mid + 1;\n else if (ucs < data[mid][0])\n max = mid - 1;\n else\n return true;\n }\n return false;\n }\n function wcwidthBMP(ucs: number): number {\n // test for 8-bit control characters\n if (ucs === 0)\n return opts.nul;\n if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))\n return opts.control;\n // binary search in table of non-spacing characters\n if (bisearch(ucs, COMBINING_BMP))\n return 0;\n // if we arrive here, ucs is not a combining or C0/C1 control character\n if (isWideBMP(ucs)) {\n return 2;\n }\n return 1;\n }\n function isWideBMP(ucs: number): boolean {\n return (\n ucs >= 0x1100 && (\n ucs <= 0x115f || // Hangul Jamo init. consonants\n ucs === 0x2329 ||\n ucs === 0x232a ||\n (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) || // CJK..Yi\n (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables\n (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compat Ideographs\n (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms\n (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compat Forms\n (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms\n (ucs >= 0xffe0 && ucs <= 0xffe6)));\n }\n function wcwidthHigh(ucs: number): 0 | 1 | 2 {\n if (bisearch(ucs, COMBINING_HIGH))\n return 0;\n if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) {\n return 2;\n }\n return 1;\n }\n const control = opts.control | 0;\n let table: number[] | Uint32Array = null;\n function init_table(): number[] | Uint32Array {\n // lookup table for BMP\n const CODEPOINTS = 65536; // BMP holds 65536 codepoints\n const BITWIDTH = 2; // a codepoint can have a width of 0, 1 or 2\n const ITEMSIZE = 32; // using uint32_t\n const CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE;\n const CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH;\n table = (typeof Uint32Array === 'undefined')\n ? new Array(CONTAINERSIZE)\n : new Uint32Array(CONTAINERSIZE);\n for (let i = 0; i < CONTAINERSIZE; ++i) {\n let num = 0;\n let pos = CODEPOINTS_PER_ITEM;\n while (pos--)\n num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos);\n table[i] = num;\n }\n return table;\n }\n // get width from lookup table\n // position in container : num / CODEPOINTS_PER_ITEM\n // ==> n = table[Math.floor(num / 16)]\n // ==> n = table[num >> 4]\n // 16 codepoints per number: FFEEDDCCBBAA99887766554433221100\n // position in number : (num % CODEPOINTS_PER_ITEM) * BITWIDTH\n // ==> m = (n % 16) * 2\n // ==> m = (num & 15) << 1\n // right shift to position m\n // ==> n = n >> m e.g. m=12 000000000000FFEEDDCCBBAA99887766\n // we are only interested in 2 LSBs, cut off higher bits\n // ==> n = n & 3 e.g. 000000000000000000000000000000XX\n return function (num: number): number {\n num = num | 0; // get asm.js like optimization under V8\n if (num < 32)\n return control | 0;\n if (num < 127)\n return 1;\n let t = table || init_table();\n if (num < 65536)\n return t[num >> 4] >> ((num & 15) << 1) & 3;\n // do a full search for high codepoints\n return wcwidthHigh(num);\n };\n})({nul: 0, control: 0}); // configurable options\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IBufferSet } from './Interfaces';\nimport { Buffer } from './Buffer';\nimport { EventEmitter } from './EventEmitter';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends EventEmitter implements IBufferSet {\n private _normal: Buffer;\n private _alt: Buffer;\n private _activeBuffer: Buffer;\n\n /**\n * Create a new BufferSet for the given terminal.\n * @param {Terminal} terminal - The terminal the BufferSet will belong to\n */\n constructor(private _terminal: ITerminal) {\n super();\n this._normal = new Buffer(this._terminal, true);\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(this._terminal, false);\n this._activeBuffer = this._normal;\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n * @returns {Buffer}\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clear();\n\n this._activeBuffer = this._normal;\n this.emit('activate', this._normal);\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(): void {\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows();\n this._activeBuffer = this._alt;\n this.emit('activate', this._alt);\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal, IBuffer } from './Interfaces';\nimport { CircularList } from './utils/CircularList';\nimport { LineData, CharData } from './Types';\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer implements IBuffer {\n private _lines: CircularList;\n\n public ydisp: number;\n public ybase: number;\n public y: number;\n public x: number;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: any;\n public savedY: number;\n public savedX: number;\n\n /**\n * Create a new Buffer.\n * @param _terminal The terminal the Buffer will belong to.\n * @param _hasScrollback Whether the buffer should respect the scrollback of\n * the terminal.\n */\n constructor(\n private _terminal: ITerminal,\n private _hasScrollback: boolean\n ) {\n this.clear();\n }\n\n public get lines(): CircularList {\n return this._lines;\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._terminal.rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._terminal.rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._terminal.options.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(): void {\n if (this._lines.length === 0) {\n let i = this._terminal.rows;\n while (i--) {\n this.lines.push(this._terminal.blankLine());\n }\n }\n }\n\n /**\n * Clears the buffer to it's initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this._lines = new CircularList(this._getCorrectBufferLength(this._terminal.rows));\n this.scrollTop = 0;\n this.scrollBottom = this._terminal.rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this._lines.maxLength) {\n this._lines.maxLength = newMaxLength;\n }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this._lines.length > 0) {\n // Deal with columns increasing (we don't do anything when columns reduce)\n if (this._terminal.cols < newCols) {\n const ch: CharData = [this._terminal.defAttr, ' ', 1, 32]; // does xterm use the default attr?\n for (let i = 0; i < this._lines.length; i++) {\n // TODO: This should be removed, with tests setup for the case that was\n // causing the underlying bug, see https://github.com/sourcelair/xterm.js/issues/824\n if (this._lines.get(i) === undefined) {\n this._lines.set(i, this._terminal.blankLine(undefined, undefined, newCols));\n }\n while (this._lines.get(i).length < newCols) {\n this._lines.get(i).push(ch);\n }\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._terminal.rows < newRows) {\n for (let y = this._terminal.rows; y < newRows; y++) {\n if (this._lines.length < newRows + this.ybase) {\n if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this._lines.push(this._terminal.blankLine(undefined, undefined, newCols));\n }\n }\n }\n } else { // (this._terminal.rows >= newRows)\n for (let y = this._terminal.rows; y > newRows; y--) {\n if (this._lines.length > newRows + this.ybase) {\n if (this._lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this._lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this._lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this._lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this._lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n }\n this._lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n if (this.y >= newRows) {\n this.y = newRows - 1;\n }\n if (addToY) {\n this.y += addToY;\n }\n\n if (this.x >= newCols) {\n this.x = newCols - 1;\n }\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param line The line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol: number = null): string {\n // Get full line\n let lineString = '';\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n\n // Initialize column and index values. Column values represent the actual\n // cell column, indexes represent the index in the string. Indexes are\n // needed here because some chars are 0 characters long (eg. after wide\n // chars) and some chars are longer than 1 characters long (eg. emojis).\n let startIndex = startCol;\n endCol = endCol || line.length;\n let endIndex = endCol;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n lineString += char[CHAR_DATA_CHAR_INDEX];\n // Adjust start and end cols for wide characters if they affect their\n // column indexes\n if (char[CHAR_DATA_WIDTH_INDEX] === 0) {\n if (startCol >= i) {\n startIndex--;\n }\n if (endCol >= i) {\n endIndex--;\n }\n } else {\n // Adjust the columns to take glyphs that are represented by multiple\n // code points into account.\n if (char[CHAR_DATA_CHAR_INDEX].length > 1) {\n if (startCol > i) {\n startIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n if (endCol > i) {\n endIndex += char[CHAR_DATA_CHAR_INDEX].length - 1;\n }\n }\n }\n }\n\n // Calculate the final end col by trimming whitespace on the right of the\n // line if needed.\n if (trimRight) {\n const rightWhitespaceIndex = lineString.search(/\\s+$/);\n if (rightWhitespaceIndex !== -1) {\n endIndex = Math.min(endIndex, rightWhitespaceIndex);\n }\n // Return the empty string if only trimmed whitespace is selected\n if (endIndex <= startIndex) {\n return '';\n }\n }\n\n return lineString.substring(startIndex, endIndex);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i != null) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n if (x == null) {\n x = this.x;\n }\n while (!this.tabs[--x] && x > 0);\n return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n if (x == null) {\n x = this.x;\n }\n while (!this.tabs[++x] && x < this._terminal.cols);\n return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;\n }\n}\n",null],"names":[],"mappings":"AkCAA;;;ADMA;AAGa;AACA;AACA;AACA;AACA;AASb;AAmBA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;;;AAAA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAYA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAjSa;;;;;;;;;;;;;;;;;ADhBb;AACA;AAMA;AAAA;AASA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AAEA;;AACA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;;;AAAA;AAKA;AAIA;AAEA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAxFa;;;;;;;ADRA;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;ADpJa;AAKA;AAYb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AD7OA;AAwBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AAUA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAUA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AAAA;AApNa;;;;;;;ADRb;AAAA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAAC;;;;;;;ADvED;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AA/Da;;;;;;;ADAb;AACA;AAEA;AACA;AACA;AASA;AACA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAMA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAuCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAwFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoFA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAyBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAz5Ca;;;;;;;;;;;;;;;;;ADfb;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AAAA;AAeA;AAAA;AACA;AARA;AAIA;AAOA;AACA;AACA;AACA;AACA;;AACA;AAMA;AACA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AASA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AA3PA;AA4PA;AAlQA;AAAa;;;;;;;ADhCb;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAKA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AAIA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AAQA;AACA;AACA;AAQA;AACA;AACA;AAOA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AASA;AAAA;AAjfa;;;;;;;;;;;;;;;;;ADnKb;AACA;AAGA;AAEA;AAEA;AAMA;AAKA;AAKA;AAMA;AAEA;AACA;AAaA;AAAA;AACA;AACA;AACA;AACA;AAUA;AAAA;AAiCA;AAAA;AACA;AACA;AACA;AARA;AAWA;AACA;AAEA;AACA;;AACA;AAKA;AAAA;AACA;AACA;AAMA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAAA;;;AAAA;AACA;AAAA;;;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AAOA;AAAA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAAA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAIA;AAIA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAIA;AACA;AACA;AAAA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAIA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAjqBa;;;;;;;ADtDb;AAuBA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;AAAA;AAMA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAxHa;;;;;;;;;;;;;;;;;ADYb;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAUA;AAOA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AA8HA;AACA;AADA;AA3GA;AA+GA;AACA;;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAKA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAGA;AAGA;AAIA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAYA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AAOA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AAIA;AACA;AAKA;AACA;AACA;AAGA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAMA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAIA;AACA;AACA;AAGA;AACA;AAQA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAMA;AAAA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAWA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AASA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAMA;AACA;AAAA;AACA;AAAA;AAOA;AAKA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AASA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAMA;AAOA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AA//Da;AAqgEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAC;AAGD;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;AD9rEA;AAAA;AACA;AACA;AACA;AACA;AAAC;;;;;;;ADrBD;AAcA;AAAA;AACA;AACA;AACA;AACA;AAjBA;AACA;AACA;AACA;AAgBA;AAGA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAMA;AACA;AACA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAnIa;;;;;;;ADOb;AACA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AATA;AAgBA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBA;AAgCA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApBA;AA4BA;AACA;AAGA;AACA;AACA;AANA;;;;;;;AD9GA;AAUA;AAWA;AAAA;AACA;AAXA;AAEA;AAIA;AACA;AACA;AAKA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AArKa;AAuKb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAXa;;;;;;;ADlLb;AAEA;AAEa;AACb;AAEA;AAYA;AAIA;AACA;AAdA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAWA;AACA;AAKA;AAQA;AAAA;AACA;AAKA;AAQA;AACA;AAKA;AAQA;AACA;AACA;AAKA;AAKA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AAKA;AAAA;AACA;AACA;AAKA;AACA;AAYA;AACA;AACA;AACA;AACA;AAIA;AAgBA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AASA;AAAA;AACA;AACA;AAIA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAIA;AACA;AAOA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAhUsB;;;;;;;ADPtB;AAEa;AAgBb;AAQA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;ADrNA;AACA;AACA;AACA;AACA;AACa;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA1Da;;;;;;;;;;;;;;;;;AD5Db;AAGA;AAcA;AAEA;AAAA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AApMa;AAsMb;AAcA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAMA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;AD5VA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA3Ba;;;;;;;;;;;;;;;;;ADKb;AACA;AAEA;AAAA;AAGA;AAAA;AAFA;AAIA;AACA;;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAnCa;;;;;;;;;;;;;;;;;ADNb;AACA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AAWA;AAAA;AAAA;AATA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAMA;AAKA;AAMA;AAIA;AAGA;AAIA;AAIA;AACA;AAOA;AACA;AAQA;AACA;AAGA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AA5Ma;;;;;;;;;;;;;;;;;ADNb;AAEA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AA5Ea;;;;;;;;;;;;;;;;;ADLb;AACA;AACA;AAEA;AAOA;AAEA;AAAA;AAMA;AAAA;AAFA;AAIA;;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AAQA;AACA;AAMA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAKA;AAGA;AAGA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAnOa;;;;;;;ADZb;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAC;;;;;;;ADVD;AAEA;AACA;AACA;AAEa;AACA;AAKA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ADhBb;AAQA;AAAA;AAOA;AAAA;AAEA;AACA;;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAtDa;;;;;;;;;;;;;;;;;ADRb;AAOA;AAAA;AAKA;AAAA;AACA;AAGA;AACA;AACA;;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAjBA;AAmBA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AATA;AAWA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAAA;AAUA;AACA;AACA;AAUA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAMA;AACA;AACA;AAWA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAAA;AAxMa;;;;;;;ADFb;AACA;AACA;AAFA;AAEC;;;;;;;ADJD;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AAEA;AACA;AAYA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAtFa;;;;;;;ADCA;;;;;;;ADFb;AAEA;;;"} \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.css b/BTPanel/static/build/xterm.min.css new file mode 100644 index 00000000..4f3021b5 --- /dev/null +++ b/BTPanel/static/build/xterm.min.css @@ -0,0 +1,2 @@ +.xterm{font-feature-settings:"liga" 0;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:0}.xterm .xterm-helpers{position:absolute;top:0;z-index:10}.xterm .xterm-helper-textarea{position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-10;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:100;color:transparent}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline} +/*# sourceMappingURL=xterm.min.css.map */ \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.css.map b/BTPanel/static/build/xterm.min.css.map new file mode 100644 index 00000000..a5e42ebf --- /dev/null +++ b/BTPanel/static/build/xterm.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["xterm.css"],"names":[],"mappings":"AAqCA,OACI,sBAAuB,OAAO,EAC9B,SAAU,SACV,YAAa,KACb,gBAAiB,KACjB,oBAAqB,KAGzB,aACA,aACI,QAAS,EAGb,sBACI,SAAU,SACV,IAAK,EAKL,QAAS,GAGb,8BAKI,SAAU,SACV,QAAS,EACT,KAAM,QACN,IAAK,EACL,MAAO,EACP,OAAQ,EACR,QAAS,IAET,YAAa,OACb,SAAU,OACV,OAAQ,KAGZ,yBAEI,WAAY,KACZ,MAAO,KACP,QAAS,KACT,SAAU,SACV,YAAa,OACb,QAAS,EAGb,gCACI,QAAS,MAGb,uBAEI,iBAAkB,KAClB,WAAY,OACZ,OAAQ,QACR,SAAU,SACV,MAAO,EACP,KAAM,EACN,IAAK,EACL,OAAQ,EAGZ,qBACI,SAAU,SAGd,4BACI,SAAU,SACV,KAAM,EACN,IAAK,EAGT,0BACI,WAAY,OAGhB,4BACI,QAAS,aACT,WAAY,OACZ,SAAU,SACV,IAAK,EACL,KAAM,QACN,YAAa,OAGjB,OACI,OAAQ,KAGZ,2BAEI,OAAQ,QAGZ,4BACI,OAAQ,QAGZ,2BAEI,OAAQ,UAGZ,4BACA,sBACI,SAAU,SACV,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,EACP,QAAS,IACT,MAAO,YAGX,oBACI,SAAU,SACV,KAAM,QACN,MAAO,IACP,OAAQ,IACR,SAAU,OAGd,WACI,QAAS,GAGb,iBACI,gBAAiB"} \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.js b/BTPanel/static/build/xterm.min.js new file mode 100644 index 00000000..2e95797b --- /dev/null +++ b/BTPanel/static/build/xterm.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Terminal=e()}}(function(){return function s(o,a,l){function h(t,e){if(!a[t]){if(!o[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var n=a[t]={exports:{}};o[t][0].call(n.exports,function(e){return h(o[t][1][e]||e)},n,n.exports,s,o,a,l)}return a[t].exports}for(var c="function"==typeof require&&require,e=0;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},_.prototype._createAccessibilityTreeNode=function(){var e=document.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e},_.prototype._onTab=function(e){for(var t=0;tthis._rows},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"isCursorInViewport",{get:function(){var e=this.ybase+this.y-this.ydisp;return 0<=e&&ei.MAX_BUFFER_SIZE?i.MAX_BUFFER_SIZE:t},o.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=H.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},o.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new r.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},o.prototype.resize=function(e,t){var i=this.getNullCell(H.DEFAULT_ATTR_DATA),r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),0t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(re))for(n=0;nthis._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},o.prototype._reflowLarger=function(e,t){var i=O.reflowLargerGetLinesToRemove(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(H.DEFAULT_ATTR_DATA));if(0A+M){for(var R=T.newLines.length-1;0<=R;R--)this.lines.set(d--,T.newLines[R]);d++,S.push({index:A+1,amount:T.newLines.length}),M+=T.newLines.length,T=r[++x]}else this.lines.set(d,E[A--]);var k=0;for(d=S.length-1;0<=d;d--)S[d].index+=k,this.lines.onInsertEmitter.fire(S[d]),k+=S[d].amount;var D=Math.max(0,L+n-this.lines.maxLength);0=this._cols?this._cols-1:e<0?0:e},o.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e},o.prototype.addMarker=function(e){var t=this,i=new n.Marker(e);return this.markers.push(i),i.register(this.lines.onTrim(function(e){i.line-=e,i.line<0&&i.dispose()})),i.register(this.lines.onInsert(function(e){i.line>=e.index&&(i.line+=e.amount)})),i.register(this.lines.onDelete(function(e){i.line>=e.index&&i.linee.index&&(i.line-=e.amount)})),i.register(i.onDispose(function(){return t._removeMarker(i)})),i},o.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},o.prototype.iterator=function(e,t,i,r,n){return new a(this,e,t,i,r,n)},o);function o(e,t){this._terminal=e,this._hasScrollback=t,this.savedCurAttrData=H.DEFAULT_ATTR_DATA.clone(),this.markers=[],this._nullCell=H.CellData.fromCharData([0,H.NULL_CELL_CHAR,H.NULL_CELL_WIDTH,H.NULL_CELL_CODE]),this._whitespaceCell=H.CellData.fromCharData([0,H.WHITESPACE_CELL_CHAR,H.WHITESPACE_CELL_WIDTH,H.WHITESPACE_CELL_CODE]),this._cols=this._terminal.cols,this._rows=this._terminal.rows,this.clear()}i.Buffer=s;var a=(l.prototype.hasNext=function(){return this._currentthis._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t="",i=e.first;i<=e.last;++i)t+=this._buffer.translateBufferLineToString(i,this._trimRight);return this._current=e.last+1,{range:e,content:t}},l);function l(e,t,i,r,n,s){void 0===i&&(i=0),void 0===r&&(r=e.lines.length),void 0===n&&(n=0),void 0===s&&(s=0),this._buffer=e,this._trimRight=t,this._startIndex=i,this._endIndex=r,this._startOverscan=n,this._endOverscan=s,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}i.BufferStringIterator=a},{"./common/CircularList":20,"./core/buffer/BufferLine":29,"./core/buffer/BufferReflow":30,"./core/buffer/Marker":31}],3:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./Buffer"),n=e("./common/EventEmitter2"),s=(Object.defineProperty(o.prototype,"onBufferActivate",{get:function(){return this._onBufferActivate.event},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"alt",{get:function(){return this._alt},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"active",{get:function(){return this._activeBuffer},enumerable:!0,configurable:!0}),Object.defineProperty(o.prototype,"normal",{get:function(){return this._normal},enumerable:!0,configurable:!0}),o.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},o.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},o.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},o.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},o);function o(e){this._terminal=e,this._onBufferActivate=new n.EventEmitter2,this._normal=new r.Buffer(this._terminal,!0),this._normal.fillViewportRows(),this._alt=new r.Buffer(this._terminal,!1),this._activeBuffer=this._normal,this.setupTabStops()}i.BufferSet=s},{"./Buffer":2,"./common/EventEmitter2":23}],4:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./common/EventEmitter2"),n=(Object.defineProperty(s.prototype,"onCharSizeChanged",{get:function(){return this._onCharSizeChanged.event},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),s.prototype.measure=function(e){this._measureElement.style.fontFamily=e.fontFamily,this._measureElement.style.fontSize=e.fontSize+"px";var t=this._measureElement.getBoundingClientRect();if(0!==t.width&&0!==t.height){var i=Math.ceil(t.height);this._width===t.width&&this._height===i||(this._width=t.width,this._height=i,this._onCharSizeChanged.fire())}},s);function s(e,t){this._onCharSizeChanged=new r.EventEmitter2,this._document=e,this._parentElement=t,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement)}i.CharMeasure=n},{"./common/EventEmitter2":23}],5:[function(e,t,o){"use strict";Object.defineProperty(o,"__esModule",{value:!0});var a=e("./common/TypedArrayUtils");o.wcwidth=function(e){var t=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],i=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];var r=0|e.control,n=new Uint8Array(65536);a.fill(n,1),n[0]=e.nul,a.fill(n,e.control,1,32),a.fill(n,e.control,127,160),a.fill(n,2,4352,4448),n[9001]=2,n[9002]=2,a.fill(n,2,11904,42192),n[12351]=1,a.fill(n,2,44032,55204),a.fill(n,2,63744,64256),a.fill(n,2,65040,65050),a.fill(n,2,65072,65136),a.fill(n,2,65280,65377),a.fill(n,2,65504,65511);for(var s=0;st[n][1])return!1;for(;r<=n;)if(e>t[i=r+n>>1][1])r=1+i;else{if(!(e=i)return t+o.wcwidth(n);var s=e.charCodeAt(r);56320<=s&&s<=57343?n=1024*(n-55296)+s-56320+65536:t+=o.wcwidth(s)}t+=o.wcwidth(n)}return t}},{"./common/TypedArrayUtils":26}],6:[function(e,t,i){"use strict";function r(e){return e.replace(/\r?\n/g,"\r")}function n(e,t){return t?"[200~"+e+"[201~":e}function s(e,t){var i=t.screenElement.getBoundingClientRect(),r=e.clientX-i.left-10,n=e.clientY-i.top-10;t.textarea.style.position="absolute",t.textarea.style.width="20px",t.textarea.style.height="20px",t.textarea.style.left=r+"px",t.textarea.style.top=n+"px",t.textarea.style.zIndex="1000",t.textarea.focus(),setTimeout(function(){t.textarea.style.position=null,t.textarea.style.width=null,t.textarea.style.height=null,t.textarea.style.left=null,t.textarea.style.top=null,t.textarea.style.zIndex=null},200)}Object.defineProperty(i,"__esModule",{value:!0}),i.prepareTextForTerminal=r,i.bracketTextForPaste=n,i.copyHandler=function(e,t,i){t.browser.isMSIE?window.clipboardData.setData("Text",i.selectionText):e.clipboardData.setData("text/plain",i.selectionText),e.preventDefault()},i.pasteHandler=function(t,i){function e(e){e=n(e=r(e),i.bracketedPasteMode),i.handler(e),i.textarea.value="",i.emit("paste",e),i.cancel(t)}t.stopPropagation(),i.browser.isMSIE?window.clipboardData&&e(window.clipboardData.getData("Text")):t.clipboardData&&e(t.clipboardData.getData("text/plain"))},i.moveTextAreaUnderMouseCursor=s,i.rightClickHandler=function(e,t,i,r){s(e,t),r&&!i.isClickInSelection(e)&&i.selectWordAtCursor(e),t.textarea.value=i.selectionText,t.textarea.select()}},{}],7:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._compositionView.classList.add("active")},n.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout(function(){t._compositionPosition.end=t._textarea.value.length},0)},n.prototype.compositionend=function(){this._finalizeComposition(!0)},n.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},n.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove("active"),this._isComposing=!1,this._clearTextareaPosition(),e){var i={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout(function(){if(t._isSendingComposition){t._isSendingComposition=!1;var e=void 0;e=t._isComposing?t._textarea.value.substring(i.start,i.end):t._textarea.value.substring(i.start),t._terminal.handler(e)}},0)}else{this._isSendingComposition=!1;var r=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._terminal.handler(r)}},n.prototype._handleAnyTextareaChanges=function(){var t=this,i=this._textarea.value;setTimeout(function(){if(!t._isComposing){var e=t._textarea.value.replace(i,"");0>4){case 2:o=~o?o:d;break;case 3:~o&&(this._printHandler(e,o,d),o=-1),(_=this._executeHandlers[i])?_():this._executeHandlerFb(i);break;case 0:~o?(this._printHandler(e,o,d),o=-1):~a&&(f.put(e,a,d),a=-1);break;case 1:if(159=l)if(h)s.x=0,s.y++,s.y>s.scrollBottom?(s.y--,this._terminal.scroll(!0)):s.lines.get(s.y).isWrapped=!0,f=s.lines.get(s.y+s.ybase);else if(2===n)continue;if(c&&(f.insertCells(s.x,n,s.getNullCell(u)),2===f.getWidth(l-1)&&f.setCellFromCodePoint(l-1,y.NULL_CELL_CODE,y.NULL_CELL_WIDTH,u.fg,u.bg)),f.setCellFromCodePoint(s.x++,r,n,u.fg,u.bg),0e.scrollBottom&&(e.y--,this._terminal.scroll()),e.x>=this._terminal.cols&&e.x--,this._onLineFeed.fire()},C.prototype.carriageReturn=function(){this._terminal.buffer.x=0},C.prototype.backspace=function(){0=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--},C.prototype.cursorForward=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x+=t,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.cursorBackward=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--,this._terminal.buffer.x-=t,this._terminal.buffer.x<0&&(this._terminal.buffer.x=0)},C.prototype.cursorNextLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y+=t,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x=0},C.prototype.cursorPrecedingLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y-=t,this._terminal.buffer.y<0&&(this._terminal.buffer.y=0),this._terminal.buffer.x=0},C.prototype.cursorCharAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x=t-1},C.prototype.cursorPosition=function(e){var t,i=e[0]-1;t=2<=e.length?e[1]-1:0,i<0?i=0:i>=this._terminal.rows&&(i=this._terminal.rows-1),t<0?t=0:t>=this._terminal.cols&&(t=this._terminal.cols-1),this._terminal.buffer.x=t,this._terminal.buffer.y=i},C.prototype.cursorForwardTab=function(e){for(var t=e[0]||1;t--;)this._terminal.buffer.x=this._terminal.buffer.nextStop()},C.prototype._eraseInBufferLine=function(e,t,i,r){void 0===r&&(r=!1);var n=this._terminal.buffer.lines.get(this._terminal.buffer.ybase+e);n.replaceCells(t,i,this._terminal.buffer.getNullCell(this._terminal.eraseAttrData())),r&&(n.isWrapped=!1)},C.prototype._resetBufferLine=function(e){this._eraseInBufferLine(e,0,this._terminal.cols,!0)},C.prototype.eraseInDisplay=function(e){var t;switch(e[0]){case 0:for(t=this._terminal.buffer.y,this._terminal.updateRange(t),this._eraseInBufferLine(t++,this._terminal.buffer.x,this._terminal.cols,0===this._terminal.buffer.x);t=this._terminal.cols&&(this._terminal.buffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._terminal.updateRange(0);break;case 2:for(t=this._terminal.rows,this._terminal.updateRange(t-1);t--;)this._resetBufferLine(t);this._terminal.updateRange(0);break;case 3:var i=this._terminal.buffer.lines.length-this._terminal.rows;0=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.hPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.x+=t,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.repeatPrecedingCharacter=function(e){var t=this._terminal.buffer,i=t.lines.get(t.ybase+t.y);i.loadCell(t.x-1,this._workCell),i.replaceCells(t.x,t.x+(e[0]||1),void 0!==this._workCell.content?this._workCell:t.getNullCell(y.DEFAULT_ATTR_DATA))},C.prototype.sendDeviceAttributes=function(e,t){0"===t&&(this._terminal.is("xterm")?this._terminal.handler(o.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.handler(o.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.handler(e[0]+"c"):this._terminal.is("screen")&&this._terminal.handler(o.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.handler(o.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.handler(o.C0.ESC+"[?6c"))},C.prototype.linePosAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y=t-1,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1)},C.prototype.vPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.buffer.y+=t,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x>=this._terminal.cols&&this._terminal.buffer.x--},C.prototype.hVPosition=function(e){e[0]<1&&(e[0]=1),e[1]<1&&(e[1]=1),this._terminal.buffer.y=e[0]-1,this._terminal.buffer.y>=this._terminal.rows&&(this._terminal.buffer.y=this._terminal.rows-1),this._terminal.buffer.x=e[1]-1,this._terminal.buffer.x>=this._terminal.cols&&(this._terminal.buffer.x=this._terminal.cols-1)},C.prototype.tabClear=function(e){var t=e[0];t<=0?delete this._terminal.buffer.tabs[this._terminal.buffer.x]:3===t&&(this._terminal.buffer.tabs={})},C.prototype.setMode=function(e,t){if(1",function(){return r.keypadNumericMode()}),r._parser.setEscHandler("c",function(){return r.reset()}),r._parser.setEscHandler("n",function(){return r.setgLevel(2)}),r._parser.setEscHandler("o",function(){return r.setgLevel(3)}),r._parser.setEscHandler("|",function(){return r.setgLevel(3)}),r._parser.setEscHandler("}",function(){return r.setgLevel(2)}),r._parser.setEscHandler("~",function(){return r.setgLevel(1)}),r._parser.setEscHandler("%@",function(){return r.selectDefaultCharset()}),r._parser.setEscHandler("%G",function(){return r.selectDefaultCharset()});function i(e){n._parser.setEscHandler("("+e,function(){return r.selectCharset("("+e)}),n._parser.setEscHandler(")"+e,function(){return r.selectCharset(")"+e)}),n._parser.setEscHandler("*"+e,function(){return r.selectCharset("*"+e)}),n._parser.setEscHandler("+"+e,function(){return r.selectCharset("+"+e)}),n._parser.setEscHandler("-"+e,function(){return r.selectCharset("-"+e)}),n._parser.setEscHandler("."+e,function(){return r.selectCharset("."+e)}),n._parser.setEscHandler("/"+e,function(){return r.selectCharset("/"+e)})}var n=this;for(var s in a.CHARSETS)i(s);return r._parser.setErrorHandler(function(e){return r._terminal.error("Parsing error: ",e),e}),r._parser.setDcsHandler("$q",new f(r._terminal)),r}i.InputHandler=g},{"./CharWidth":5,"./EscapeSequenceParser":8,"./common/EventEmitter2":23,"./common/Lifecycle":24,"./common/TypedArrayUtils":26,"./common/data/EscapeSequences":28,"./core/buffer/BufferLine":29,"./core/data/Charsets":32,"./core/input/TextDecoder":34}],10:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var u=e("./MouseZoneManager"),f=e("./CharWidth"),r=e("./common/EventEmitter2"),n=(Object.defineProperty(a.prototype,"onLinkHover",{get:function(){return this._onLinkHover.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLinkLeave",{get:function(){return this._onLinkLeave.event},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"onLinkTooltip",{get:function(){return this._onLinkTooltip.event},enumerable:!0,configurable:!0}),a.prototype.attachToDom=function(e){this._mouseZoneManager=e},a.prototype.linkifyRows=function(e,t){var i=this;this._mouseZoneManager&&(null===this._rowsToLinkify.start?(this._rowsToLinkify.start=e,this._rowsToLinkify.end=t):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,e),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,t)),this._mouseZoneManager.clearAll(e,t),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout(function(){return i._linkifyRows()},a.TIME_BEFORE_LINKIFY))},a.prototype._linkifyRows=function(){this._rowsTimeoutId=null;var e=this._terminal.buffer,t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var i=e.ydisp+Math.min(this._rowsToLinkify.end,this._terminal.rows)+1,r=Math.ceil(a.OVERSCAN_CHAR_LIMIT/this._terminal.cols),n=this._terminal.buffer.iterator(!1,t,i,r,r);n.hasNext();)for(var s=n.next(),o=0;o>9&511),o.validationCallback?o.validationCallback(t,function(e){l._rowsTimeoutId||e&&l._addLink(i[1],i[0]-l._terminal.buffer.ydisp,t,o,r)}):u._addLink(i[1],i[0]-u._terminal.buffer.ydisp,t,o,r)},u=this;null!==(a=h.exec(s))&&"break"!==e(););},a.prototype._addLink=function(e,t,i,r,n){var s=this,o=f.getStringCellWidth(i),a=e%this._terminal.cols,l=t+Math.floor(e/this._terminal.cols),h=(a+o)%this._terminal.cols,c=l+Math.floor((a+o)/this._terminal.cols);0===h&&(h=this._terminal.cols,c--),this._mouseZoneManager.add(new u.MouseZone(1+a,l+1,h+1,c+1,function(e){if(r.handler)return r.handler(e,i);window.open(i,"_blank")},function(){s._onLinkHover.fire(s._createLinkHoverEvent(a,l,h,c,n)),s._terminal.element.classList.add("xterm-cursor-pointer")},function(e){s._onLinkTooltip.fire(s._createLinkHoverEvent(a,l,h,c,n)),r.hoverTooltipCallback&&r.hoverTooltipCallback(e,i)},function(){s._onLinkLeave.fire(s._createLinkHoverEvent(a,l,h,c,n)),s._terminal.element.classList.remove("xterm-cursor-pointer"),r.hoverLeaveCallback&&r.hoverLeaveCallback()},function(e){return!r.willLinkActivate||r.willLinkActivate(e,i)}))},a.prototype._createLinkHoverEvent=function(e,t,i,r,n){return{x1:e,y1:t,x2:i,y2:r,cols:this._terminal.cols,fg:n}},a.TIME_BEFORE_LINKIFY=200,a.OVERSCAN_CHAR_LIMIT=2e3,a);function a(e){this._terminal=e,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onLinkHover=new r.EventEmitter2,this._onLinkLeave=new r.EventEmitter2,this._onLinkTooltip=new r.EventEmitter2,this._rowsToLinkify={start:null,end:null}}i.Linkifier=n},{"./CharWidth":5,"./MouseZoneManager":12,"./common/EventEmitter2":23}],11:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(a.getCoordsRelativeToElement=function(e,t){var i=t.getBoundingClientRect();return[e.clientX-i.left,e.clientY-i.top]},a.prototype.getCoords=function(e,t,i,r,n,s){if(!i.width||!i.height)return null;var o=a.getCoordsRelativeToElement(e,t);return o?(o[0]=Math.ceil((o[0]+(s?this._renderCoordinator.dimensions.actualCellWidth/2:0))/this._renderCoordinator.dimensions.actualCellWidth),o[1]=Math.ceil(o[1]/this._renderCoordinator.dimensions.actualCellHeight),o[0]=Math.min(Math.max(o[0],1),r+(s?1:0)),o[1]=Math.min(Math.max(o[1],1),n),o):null},a.prototype.getRawByteCoords=function(e,t,i,r,n){var s=this.getCoords(e,t,i,r,n),o=s[0],a=s[1];return{x:o+=32,y:a+=32}},a);function a(e){this._renderCoordinator=e}i.MouseHelper=r},{}],12:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,o=e("./common/Lifecycle"),a=e("./ui/Lifecycle"),l=(s=o.Disposable,n(h,s),h.prototype.dispose=function(){s.prototype.dispose.call(this),this._deactivate()},h.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},h.prototype.clearAll=function(e,t){if(0!==this._zones.length){t||(e=0,t=this._terminal.rows-1);for(var i=0;ie&&r.y1<=t+1||r.y2>e&&r.y2<=t+1||r.y1t+1)&&(this._currentZone&&this._currentZone===r&&(this._currentZone.leaveCallback(),this._currentZone=null),this._zones.splice(i--,1))}0===this._zones.length&&this._deactivate()}},h.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._terminal.element.addEventListener("mousemove",this._mouseMoveListener),this._terminal.element.addEventListener("mouseleave",this._mouseLeaveListener),this._terminal.element.addEventListener("click",this._clickListener))},h.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._terminal.element.removeEventListener("mousemove",this._mouseMoveListener),this._terminal.element.removeEventListener("mouseleave",this._mouseLeaveListener),this._terminal.element.removeEventListener("click",this._clickListener))},h.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},h.prototype._onHover=function(e){var t=this,i=this._findZoneEventAt(e);i!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=null,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),i&&((this._currentZone=i).hoverCallback&&i.hoverCallback(e),this._tooltipTimeout=setTimeout(function(){return t._onTooltip(e)},500)))},h.prototype._onTooltip=function(e){this._tooltipTimeout=null;var t=this._findZoneEventAt(e);t&&t.tooltipCallback&&t.tooltipCallback(e)},h.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._terminal.getSelection().length,this._areZonesActive){var t=this._findZoneEventAt(e);t&&t.willLinkActivate(e)&&(e.preventDefault(),e.stopImmediatePropagation())}},h.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=null,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},h.prototype._onClick=function(e){var t=this._findZoneEventAt(e),i=this._terminal.getSelection().length;t&&i===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},h.prototype._findZoneEventAt=function(e){var t=this._terminal.mouseHelper.getCoords(e,this._terminal.screenElement,this._terminal.charMeasure,this._terminal.cols,this._terminal.rows);if(!t)return null;for(var i=t[0],r=t[1],n=0;n=s.x1&&i=s.x1||r===s.y2&&is.y1&&rt[1]&&e[1]=t[0]&&e[0]=t[0]},f.prototype.selectWordAtCursor=function(e){var t=this._getMouseBufferCoords(e);t&&(this._selectWordAt(t,!1),this._model.selectionEnd=null,this.refresh(!0))},f.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},f.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._terminal.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._terminal.cols,t],this.refresh(),this._onSelectionChange.fire()},f.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},f.prototype._getMouseBufferCoords=function(e){var t=this._terminal.mouseHelper.getCoords(e,this._terminal.screenElement,this._charMeasure,this._terminal.cols,this._terminal.rows,!0);return t?(t[0]--,t[1]--,t[1]+=this._terminal.buffer.ydisp,t):null},f.prototype._getMouseEventScrollAmount=function(e){var t=r.MouseHelper.getCoordsRelativeToElement(e,this._terminal.screenElement)[1],i=this._terminal.rows*Math.ceil(this._charMeasure.height*this._terminal.options.lineHeight);return 0<=t&&t<=i?0:(i=this._model.selectionStart[0]||0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++)}},f.prototype._onDoubleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=1,this._selectWordAt(t,!0))},f.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},f.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._terminal.options.macOptionClickForcesSelection)},f.prototype._onMouseMove=function(e){e.stopImmediatePropagation();var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd?(2===this._activeSelectionMode?this._model.selectionEnd[1]=r;r++){var n=e.loadCell(r,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:1=this._terminal.cols)return null;var n=this._buffer.lines.get(e[1]);if(!n)return null;var s=this._buffer.translateBufferLineToString(e[1],!1),o=this._convertViewportColToCharacterIndex(n,e),a=o,l=e[0]-o,h=0,c=0,u=0,f=0;if(" "===s.charAt(o)){for(;0this._terminal.cols;)t.length-=this._terminal.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}},f.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&0<=" ()[]{}'\"".indexOf(e.getChars())},f.prototype._selectLineAt=function(e){var t=this._buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._terminal.cols,t.last],this._model.selectionStartLength=0},f);function f(e,t){this._terminal=e,this._charMeasure=t,this._enabled=!0,this._workCell=new o.CellData,this._onLinuxMouseSelection=new l.EventEmitter2,this._onRedrawRequest=new l.EventEmitter2,this._onSelectionChange=new l.EventEmitter2,this._initListeners(),this.enable(),this._model=new n.SelectionModel(e),this._activeSelectionMode=0}i.SelectionManager=u},{"./MouseHelper":11,"./SelectionModel":14,"./common/EventEmitter2":23,"./common/Platform":25,"./core/buffer/BufferLine":29,"./handlers/AltClickHandler":35}],14:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.clearSelection=function(){this.selectionStart=null,this.selectionEnd=null,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(n.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._terminal.cols,this._terminal.buffer.ybase+this._terminal.rows-1];if(!this.selectionStart)return null;if(this.selectionEnd&&!this.areSelectionValuesReversed())return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd;var e=this.selectionStart[0]+this.selectionStartLength;return e>this._terminal.cols?[e%this._terminal.cols,this.selectionStart[1]+Math.floor(e/this._terminal.cols)]:[e,this.selectionStart[1]]},enumerable:!0,configurable:!0}),n.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},n.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},n);function n(e){this._terminal=e,this.clearSelection()}i.SelectionModel=r},{}],15:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_BELL_SOUND="data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg==";var r=(Object.defineProperty(n,"audioContext",{get:function(){if(!n._audioContext){var e=window.AudioContext||window.webkitAudioContext;if(!e)return console.warn("Web Audio API is not supported by this browser. Consider upgrading to the latest version"),null;n._audioContext=new e}return n._audioContext},enumerable:!0,configurable:!0}),n.prototype.playBellSound=function(){var t=n.audioContext;if(t){var i=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._terminal.options.bellSound)),function(e){i.buffer=e,i.connect(t.destination),i.start(0)})}},n.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),i=t.length,r=new Uint8Array(i),n=0;ni){var r=this.buffer.lines.length-i,n=this.buffer.ydisp-r<0;this.buffer.lines.trimStart(r),this.buffer.ybase=Math.max(this.buffer.ybase-r,0),this.buffer.ydisp=Math.max(this.buffer.ydisp-r,0),n&&this.refresh(0,this.rows-1)}}}switch(this.options[e]=t,e){case"fontFamily":case"fontSize":this._renderCoordinator&&(this._renderCoordinator.clear(),this.charMeasure.measure(this.options));break;case"drawBoldTextInBrightColors":case"experimentalCharAtlas":case"enableBold":case"letterSpacing":case"lineHeight":case"fontWeight":case"fontWeightBold":this._renderCoordinator&&(this._renderCoordinator.clear(),this._renderCoordinator.onResize(this.cols,this.rows),this.refresh(0,this.rows-1));break;case"rendererType":this._renderCoordinator&&this._renderCoordinator.setRenderer(this._createRenderer());break;case"scrollback":this.buffers.resize(this.cols,this.rows),this.viewport&&this.viewport.syncScrollArea();break;case"screenReaderMode":t?!this._accessibilityManager&&this._renderCoordinator&&(this._accessibilityManager=new E.AccessibilityManager(this,this._renderCoordinator.dimensions)):this._accessibilityManager&&(this._accessibilityManager.dispose(),this._accessibilityManager=null);break;case"tabStopWidth":this.buffers.setupTabStops();break;case"windowsMode":t?this._windowsMode||(this._windowsMode=k.applyWindowsMode(this)):this._windowsMode&&(this._windowsMode.dispose(),this._windowsMode=void 0)}this._renderCoordinator&&this._renderCoordinator.onOptionsChanged()}},I.prototype._onTextAreaFocus=function(e){this.sendFocus&&this.handler(f.C0.ESC+"[I"),this.updateCursorStyle(e),this.element.classList.add("focus"),this.showCursor(),this.emit("focus")},I.prototype.blur=function(){return this.textarea.blur()},I.prototype._onTextAreaBlur=function(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.sendFocus&&this.handler(f.C0.ESC+"[O"),this.element.classList.remove("focus"),this.emit("blur")},I.prototype._initGlobal=function(){var t=this;function e(e){return u.pasteHandler(e,t)}this._bindKeys(),this.register(C.addDisposableDomListener(this.element,"copy",function(e){t.hasSelection()&&u.copyHandler(e,t,t.selectionManager)})),this.register(C.addDisposableDomListener(this.textarea,"paste",e)),this.register(C.addDisposableDomListener(this.element,"paste",e)),g.isFirefox?this.register(C.addDisposableDomListener(this.element,"mousedown",function(e){2===e.button&&u.rightClickHandler(e,t,t.selectionManager,t.options.rightClickSelectsWord)})):this.register(C.addDisposableDomListener(this.element,"contextmenu",function(e){u.rightClickHandler(e,t,t.selectionManager,t.options.rightClickSelectsWord)})),g.isLinux&&this.register(C.addDisposableDomListener(this.element,"auxclick",function(e){1===e.button&&u.moveTextAreaUnderMouseCursor(e,t)}))},I.prototype._bindKeys=function(){var t=this,i=this;this.register(C.addDisposableDomListener(this.element,"keydown",function(e){O.activeElement===this&&i._keyDown(e)},!0)),this.register(C.addDisposableDomListener(this.element,"keypress",function(e){O.activeElement===this&&i._keyPress(e)},!0)),this.register(C.addDisposableDomListener(this.element,"keyup",function(e){!function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)&&t.focus(),i._keyUp(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"keydown",function(e){return t._keyDown(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"keypress",function(e){return t._keyPress(e)},!0)),this.register(C.addDisposableDomListener(this.textarea,"compositionstart",function(){return t._compositionHelper.compositionstart()})),this.register(C.addDisposableDomListener(this.textarea,"compositionupdate",function(e){return t._compositionHelper.compositionupdate(e)})),this.register(C.addDisposableDomListener(this.textarea,"compositionend",function(){return t._compositionHelper.compositionend()})),this.register(this.onRender(function(){return t._compositionHelper.updateCompositionElements()})),this.register(this.onRender(function(e){return t._queueLinkification(e.start,e.end)}))},I.prototype.open=function(e){var t=this;if(this._parent=e||this._parent,!this._parent)throw new Error("Terminal requires a parent element.");this._context=this._parent.ownerDocument.defaultView,this._document=this._parent.ownerDocument,this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.setAttribute("tabindex","0"),this._parent.appendChild(this.element);var i=O.createDocumentFragment();this._viewportElement=O.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),i.appendChild(this._viewportElement),this._viewportScrollArea=O.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=O.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._helperContainer=O.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),i.appendChild(this.screenElement),this._mouseZoneManager=new S.MouseZoneManager(this),this.register(this._mouseZoneManager),this.register(this.onScroll(function(){return t._mouseZoneManager.clearAll()})),this.linkifier.attachToDom(this._mouseZoneManager),this.textarea=O.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",v.promptLabel),this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.register(C.addDisposableDomListener(this.textarea,"focus",function(e){return t._onTextAreaFocus(e)})),this.register(C.addDisposableDomListener(this.textarea,"blur",function(){return t._onTextAreaBlur()})),this._helperContainer.appendChild(this.textarea),this._compositionView=O.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=new l.CompositionHelper(this.textarea,this._compositionView,this),this._helperContainer.appendChild(this._compositionView),this.charMeasure=new y.CharMeasure(O,this._helperContainer),this.element.appendChild(i),this._theme=this.options.theme,this._colorManager=new D.ColorManager(O,this.options.allowTransparency),this._colorManager.setTheme(this._theme);var r=this._createRenderer();this._renderCoordinator=new H.RenderCoordinator(r,this.rows,this.screenElement),this._renderCoordinator.onRender(function(e){return t._onRender.fire(e)}),this.onResize(function(e){return t._renderCoordinator.resize(e.cols,e.rows)}),this.viewport=new c.Viewport(this,this._viewportElement,this._viewportScrollArea,this.charMeasure,this._renderCoordinator.dimensions),this.viewport.onThemeChange(this._colorManager.colors),this.register(this.viewport),this.register(this.onCursorMove(function(){return t._renderCoordinator.onCursorMove()})),this.register(this.onResize(function(){return t._renderCoordinator.onResize(t.cols,t.rows)})),this.register(this.addDisposableListener("blur",function(){return t._renderCoordinator.onBlur()})),this.register(this.addDisposableListener("focus",function(){return t._renderCoordinator.onFocus()})),this.register(this.charMeasure.onCharSizeChanged(function(){return t._renderCoordinator.onCharSizeChanged()})),this.register(this._renderCoordinator.onDimensionsChange(function(){return t.viewport.syncScrollArea()})),this.selectionManager=new m.SelectionManager(this,this.charMeasure),this.register(this.selectionManager.onSelectionChange(function(){return t._onSelectionChange.fire()})),this.register(C.addDisposableDomListener(this.element,"mousedown",function(e){return t.selectionManager.onMouseDown(e)})),this.register(this.selectionManager.onRedrawRequest(function(e){return t._renderCoordinator.onSelectionChanged(e.start,e.end,e.columnSelectMode)})),this.register(this.selectionManager.onLinuxMouseSelection(function(e){t.textarea.value=e,t.textarea.focus(),t.textarea.select()})),this.register(this.onScroll(function(){t.viewport.syncScrollArea(),t.selectionManager.refresh()})),this.register(C.addDisposableDomListener(this._viewportElement,"scroll",function(){return t.selectionManager.refresh()})),this.mouseHelper=new b.MouseHelper(this._renderCoordinator),this.element.classList.toggle("enable-mouse-events",this.mouseEvents),this.mouseEvents?this.selectionManager.disable():this.selectionManager.enable(),this.options.screenReaderMode&&(this._accessibilityManager=new E.AccessibilityManager(this,this._renderCoordinator.dimensions),this._accessibilityManager.register(this._renderCoordinator.onDimensionsChange(function(e){return t._accessibilityManager.setDimensions(e)}))),this.charMeasure.measure(this.options),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()},I.prototype._createRenderer=function(){switch(this.options.rendererType){case"canvas":return new d.Renderer(this,this._colorManager.colors);case"dom":return new A.DomRenderer(this,this._colorManager.colors);default:throw new Error('Unrecognized rendererType "'+this.options.rendererType+'"')}},I.prototype._setTheme=function(e){this._theme=e,this._colorManager&&this._colorManager.setTheme(e),this._renderCoordinator&&this._renderCoordinator.setColors(this._colorManager.colors),this.viewport&&this.viewport.onThemeChange(this._colorManager.colors)},I.prototype.bindMouse=function(){var s=this,e=this.element,o=this,r=32;function a(e){var t,i;if(t=function(e){var t,i,r,n,s;switch(e.overrideType||e.type){case"mousedown":t=null!==e.button&&void 0!==e.button?+e.button:null!==e.which&&void 0!==e.which?e.which-1:null,g.isMSIE&&(t=1===t?0:4===t?1:t);break;case"mouseup":t=3;break;case"DOMMouseScroll":t=e.detail<0?64:65;break;case"wheel":t=e.deltaY<0?64:65}return i=e.shiftKey?4:0,r=e.metaKey?8:0,n=e.ctrlKey?16:0,s=i|r|n,o.vt200Mouse?s&=n:o.normalMouse||(s=0),t=32+(s<<2)+t}(e),i=o.mouseHelper.getRawByteCoords(e,o.screenElement,o.charMeasure,o.cols,o.rows))switch(l(t,i),e.overrideType||e.type){case"mousedown":r=t;break;case"mouseup":r=32}}function n(e,t){if(o.utfMouse){if(2047=this.buffer.ybase&&(this._userScrolling=!1);var i=this.buffer.ydisp;this.buffer.ydisp=Math.max(Math.min(this.buffer.ydisp+e,this.buffer.ybase),0),i!==this.buffer.ydisp&&(t||this._onScroll.fire(this.buffer.ydisp),this.refresh(0,this.rows-1))},I.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},I.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},I.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},I.prototype.scrollToLine=function(e){var t=e-this.buffer.ydisp;0!=t&&this.scrollLines(t)},I.prototype.writeUtf8=function(e){var t=this;this._isDisposed||e&&(this.writeBufferUtf8.push(e),this.options.useFlowControl&&!this._xoffSentToCatchUp&&5<=this.writeBufferUtf8.length&&(this.handler(f.C0.DC3),this._xoffSentToCatchUp=!0),!this._writeInProgress&&0e;){var r=this.writeBufferUtf8[e];if(e++,this._xoffSentToCatchUp&&this.writeBufferUtf8.length===e&&(this.handler(f.C0.DC1),this._xoffSentToCatchUp=!1),this._refreshStart=this.buffer.y,this._refreshEnd=this.buffer.y,this._inputHandler.parseUtf8(r),this.updateRange(this.buffer.y),this.refresh(this._refreshStart,this._refreshEnd),12<=Date.now()-i)break}this.writeBufferUtf8.length>e?(50e;){var r=this.writeBuffer[e];if(e++,this._xoffSentToCatchUp&&this.writeBuffer.length===e&&(this.handler(f.C0.DC1),this._xoffSentToCatchUp=!1),this._refreshStart=this.buffer.y,this._refreshEnd=this.buffer.y,this._inputHandler.parse(r),this.updateRange(this.buffer.y),this.refresh(this._refreshStart,this._refreshEnd),12<=Date.now()-i)break}this.writeBuffer.length>e?(50this._refreshEnd&&(this._refreshEnd=e)},I.prototype.maxRange=function(){this._refreshStart=0,this._refreshEnd=this.rows-1},I.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;ethis.buffer.scrollBottom&&(this.buffer.y--,this.scroll()),this.buffer.x>=this.cols&&this.buffer.x--},I.prototype.reverseIndex=function(){if(this.buffer.y===this.buffer.scrollTop){var e=this.buffer.scrollBottom-this.buffer.scrollTop;this.buffer.lines.shiftElements(this.buffer.y+this.buffer.ybase,e,1),this.buffer.lines.set(this.buffer.y+this.buffer.ybase,this.buffer.getBlankLine(this.eraseAttrData())),this.updateRange(this.buffer.scrollTop),this.updateRange(this.buffer.scrollBottom)}else this.buffer.y--},I.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var e=this._customKeyEventHandler,t=this._inputHandler,i=this.cursorState,r=this.writeBuffer,n=this.writeBufferUtf8,s=this._writeInProgress,o=this._xoffSentToCatchUp,a=this._userScrolling;this._setup(),this._customKeyEventHandler=e,this._inputHandler=t,this.cursorState=i,this.writeBuffer=r,this.writeBufferUtf8=n,this._writeInProgress=s,this._xoffSentToCatchUp=o,this._userScrolling=a,this.refresh(0,this.rows-1),this.viewport&&this.viewport.syncScrollArea()},I.prototype.tabSet=function(){this.buffer.tabs[this.buffer.x]=!0},I.prototype.cancel=function(e,t){if(this.options.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},I.prototype._visualBell=function(){return!1},I.prototype._soundBell=function(){return"sound"===this.options.bellStyle},I);function I(e){void 0===e&&(e={});var t=s.call(this)||this;return t.browser=g,t._blankLine=null,t._onCursorMove=new M.EventEmitter2,t._onData=new M.EventEmitter2,t._onKey=new M.EventEmitter2,t._onLineFeed=new M.EventEmitter2,t._onRender=new M.EventEmitter2,t._onResize=new M.EventEmitter2,t._onScroll=new M.EventEmitter2,t._onSelectionChange=new M.EventEmitter2,t._onTitleChange=new M.EventEmitter2,t.options=T.clone(e),t._setup(),t.onCursorMove(function(){return t.emit("cursormove")}),t.onData(function(e){return t.emit("data",e)}),t.onKey(function(e){return t.emit("key",e.key,e.domEvent)}),t.onLineFeed(function(){return t.emit("linefeed")}),t.onRender(function(e){return t.emit("refresh",e)}),t.onResize(function(e){return t.emit("resize",e)}),t.onSelectionChange(function(){return t.emit("selection")}),t.onScroll(function(e){return t.emit("scroll",e)}),t.onTitleChange(function(e){return t.emit("title",e)}),t}i.Terminal=F},{"./AccessibilityManager":1,"./Buffer":2,"./BufferSet":3,"./CharMeasure":4,"./Clipboard":6,"./CompositionHelper":7,"./InputHandler":9,"./Linkifier":10,"./MouseHelper":11,"./MouseZoneManager":12,"./SelectionManager":13,"./SoundManager":15,"./Strings":16,"./Viewport":18,"./WindowsMode":19,"./common/Clone":21,"./common/EventEmitter":22,"./common/EventEmitter2":23,"./common/Platform":25,"./common/data/EscapeSequences":28,"./core/buffer/BufferLine":29,"./core/input/Keyboard":33,"./renderer/RenderCoordinator":43,"./renderer/Renderer":44,"./renderer/atlas/CharAtlasCache":48,"./renderer/dom/DomRenderer":56,"./ui/ColorManager":58,"./ui/Lifecycle":59}],18:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var o,s=e("./common/Lifecycle"),a=e("./ui/Lifecycle"),l=(o=s.Disposable,n(h,o),h.prototype.onDimensionsChance=function(e){this._dimensions=e},h.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},h.prototype._refresh=function(){var e=this;null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame(function(){return e._innerRefresh()}))},h.prototype._innerRefresh=function(){if(0this._length)for(var t=this._length;tthis._maxLength){var s=this._length+i.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=i.length},s.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},s.prototype.shiftElements=function(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(0this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(r=0;r=e.length)return e;i=(e.length+i)%e.length,r=r>=e.length?e.length:(e.length+r)%e.length;for(var n=i;n>>16&255,e>>>8&255,255&e]},l.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},l.prototype.clone=function(){var e=new l;return e.fg=this.fg,e.bg=this.bg,e},l.prototype.isInverse=function(){return 67108864&this.fg},l.prototype.isBold=function(){return 134217728&this.fg},l.prototype.isUnderline=function(){return 268435456&this.fg},l.prototype.isBlink=function(){return 536870912&this.fg},l.prototype.isInvisible=function(){return 1073741824&this.fg},l.prototype.isItalic=function(){return 67108864&this.bg},l.prototype.isDim=function(){return 134217728&this.bg},l.prototype.getFgColorMode=function(){return 50331648&this.fg},l.prototype.getBgColorMode=function(){return 50331648&this.bg},l.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},l.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},l.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},l.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},l.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},l.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},l.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},l.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},l);function l(){this.fg=0,this.bg=0}o.AttributeData=s,o.DEFAULT_ATTR_DATA=Object.freeze(new s);var h,c=(i(u,h=s),u.fromCharData=function(e){var t=new u;return t.setFromCharData(e),t},u.prototype.isCombined=function(){return 2097152&this.content},u.prototype.getWidth=function(){return this.content>>22},u.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?a.stringFromCodePoint(2097151&this.content):""},u.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},u.prototype.setFromCharData=function(e){this.fg=e[o.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(2>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]},_.prototype.set=function(e,t){this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],1>22},_.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},_.prototype.getFg=function(e){return this._data[3*e+1]},_.prototype.getBg=function(e){return this._data[3*e+2]},_.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},_.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},_.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},_.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?a.stringFromCodePoint(2097151&t):""},_.prototype.loadCell=function(e,t){var i=3*e;return t.content=this._data[0+i],t.fg=this._data[1+i],t.bg=this._data[2+i],2097152&t.content&&(t.combinedData=this._combined[e]),t},_.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},_.prototype.setCellFromCodePoint=function(e,t,i,r,n){this._data[3*e+0]=t|i<<22,this._data[3*e+1]=r,this._data[3*e+2]=n},_.prototype.addCodepointToCell=function(e,t){var i=this._data[3*e+0];2097152&i?this._combined[e]+=a.stringFromCodePoint(t):(2097151&i?(this._combined[e]=a.stringFromCodePoint(2097151&i)+a.stringFromCodePoint(t),i&=-2097152,i|=2097152):i=t|1<<22,this._data[3*e+0]=i)},_.prototype.insertCells=function(e,t,i){if(e%=this.length,tthis.length){var i=new Uint32Array(3*e);this.length&&(3*e>22);return 0},_.prototype.copyCellsFrom=function(e,t,i,r,n){var s=e._data;if(n)for(var o=r-1;0<=o;o--)for(var a=0;a<3;a++)this._data[3*(i+o)+a]=s[3*(t+o)+a];else for(o=0;o>22||1}return r},_);function _(e,t,i){void 0===i&&(i=!1),this.isWrapped=i,this._combined={},this._data=new Uint32Array(3*e);for(var r=t||c.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]),n=0;n"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};i.evaluateKeyboardEvent=function(e,t,i,r){var n={type:0,cancel:!1,key:void 0},s=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?n.key=t?h.C0.ESC+"OA":h.C0.ESC+"[A":"UIKeyInputLeftArrow"===e.key?n.key=t?h.C0.ESC+"OD":h.C0.ESC+"[D":"UIKeyInputRightArrow"===e.key?n.key=t?h.C0.ESC+"OC":h.C0.ESC+"[C":"UIKeyInputDownArrow"===e.key&&(n.key=t?h.C0.ESC+"OB":h.C0.ESC+"[B");break;case 8:if(e.shiftKey){n.key=h.C0.BS;break}if(e.altKey){n.key=h.C0.ESC+h.C0.DEL;break}n.key=h.C0.DEL;break;case 9:if(e.shiftKey){n.key=h.C0.ESC+"[Z";break}n.key=h.C0.HT,n.cancel=!0;break;case 13:n.key=h.C0.CR,n.cancel=!0;break;case 27:n.key=h.C0.ESC,n.cancel=!0;break;case 37:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"D",n.key===h.C0.ESC+"[1;3D"&&(n.key=i?h.C0.ESC+"b":h.C0.ESC+"[1;5D")):n.key=t?h.C0.ESC+"OD":h.C0.ESC+"[D";break;case 39:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"C",n.key===h.C0.ESC+"[1;3C"&&(n.key=i?h.C0.ESC+"f":h.C0.ESC+"[1;5C")):n.key=t?h.C0.ESC+"OC":h.C0.ESC+"[C";break;case 38:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"A",n.key===h.C0.ESC+"[1;3A"&&(n.key=h.C0.ESC+"[1;5A")):n.key=t?h.C0.ESC+"OA":h.C0.ESC+"[A";break;case 40:s?(n.key=h.C0.ESC+"[1;"+(1+s)+"B",n.key===h.C0.ESC+"[1;3B"&&(n.key=h.C0.ESC+"[1;5B")):n.key=t?h.C0.ESC+"OB":h.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(n.key=h.C0.ESC+"[2~");break;case 46:n.key=s?h.C0.ESC+"[3;"+(1+s)+"~":h.C0.ESC+"[3~";break;case 36:n.key=s?h.C0.ESC+"[1;"+(1+s)+"H":t?h.C0.ESC+"OH":h.C0.ESC+"[H";break;case 35:n.key=s?h.C0.ESC+"[1;"+(1+s)+"F":t?h.C0.ESC+"OF":h.C0.ESC+"[F";break;case 33:e.shiftKey?n.type=2:n.key=h.C0.ESC+"[5~";break;case 34:e.shiftKey?n.type=3:n.key=h.C0.ESC+"[6~";break;case 112:n.key=s?h.C0.ESC+"[1;"+(1+s)+"P":h.C0.ESC+"OP";break;case 113:n.key=s?h.C0.ESC+"[1;"+(1+s)+"Q":h.C0.ESC+"OQ";break;case 114:n.key=s?h.C0.ESC+"[1;"+(1+s)+"R":h.C0.ESC+"OR";break;case 115:n.key=s?h.C0.ESC+"[1;"+(1+s)+"S":h.C0.ESC+"OS";break;case 116:n.key=s?h.C0.ESC+"[15;"+(1+s)+"~":h.C0.ESC+"[15~";break;case 117:n.key=s?h.C0.ESC+"[17;"+(1+s)+"~":h.C0.ESC+"[17~";break;case 118:n.key=s?h.C0.ESC+"[18;"+(1+s)+"~":h.C0.ESC+"[18~";break;case 119:n.key=s?h.C0.ESC+"[19;"+(1+s)+"~":h.C0.ESC+"[19~";break;case 120:n.key=s?h.C0.ESC+"[20;"+(1+s)+"~":h.C0.ESC+"[20~";break;case 121:n.key=s?h.C0.ESC+"[21;"+(1+s)+"~":h.C0.ESC+"[21~";break;case 122:n.key=s?h.C0.ESC+"[23;"+(1+s)+"~":h.C0.ESC+"[23~";break;case 123:n.key=s?h.C0.ESC+"[24;"+(1+s)+"~":h.C0.ESC+"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(i&&!r||!e.altKey||e.metaKey)i&&!e.altKey&&!e.ctrlKey&&e.metaKey?65===e.keyCode&&(n.type=1):e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&48<=e.keyCode&&1===e.key.length?n.key=e.key:e.key&&e.ctrlKey&&"_"===e.key&&(n.key=h.C0.US);else{var o=c[e.keyCode],a=o&&o[e.shiftKey?1:0];if(a)n.key=h.C0.ESC+a;else if(65<=e.keyCode&&e.keyCode<=90){var l=e.ctrlKey?e.keyCode-64:e.keyCode+32;n.key=h.C0.ESC+String.fromCharCode(l)}}else 65<=e.keyCode&&e.keyCode<=90?n.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?n.key=String.fromCharCode(0):51<=e.keyCode&&e.keyCode<=55?n.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?n.key=String.fromCharCode(127):219===e.keyCode?n.key=String.fromCharCode(27):220===e.keyCode?n.key=String.fromCharCode(28):221===e.keyCode&&(n.key=String.fromCharCode(29))}return n}},{"../../common/data/EscapeSequences":28}],34:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.stringFromCodePoint=function(e){return 65535>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},i.utf32ToString=function(e,t,i){void 0===t&&(t=0),void 0===i&&(i=e.length);for(var r="",n=t;n>10))+String.fromCharCode(s%1024+56320)):r+=String.fromCharCode(s)}return r};var r=(n.prototype.clear=function(){this._interim=0},n.prototype.decode=function(e,t){var i=e.length;if(!i)return 0;var r=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[r++]=1024*(this._interim-55296)+a-56320+65536:(t[r++]=this._interim,t[r++]=a),this._interim=0);for(var s=n;s=i)return this._interim=o,r;var a;56320<=(a=e.charCodeAt(s))&&a<=57343?t[r++]=1024*(o-55296)+a-56320+65536:(t[r++]=o,t[r++]=a)}else t[r++]=o}return r},n);function n(){this._interim=0}i.StringToUtf32=r;var s=(o.prototype.clear=function(){this.interim.fill(0)},o.prototype.decode=function(e,t){var i=e.length;if(!i)return 0;var r,n,s,o,a=0,l=0,h=0;if(this.interim[0]){var c=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;h=this._endCol&&ethis._endRow?"A":"B"},s.prototype._bufferLine=function(e,t,i,r,n){for(var s=e,o=t,a="";s!==i||o!==r;)s+=n?1:-1,n&&s>this._terminal.cols-1?(a+=this._terminal.buffer.translateBufferLineToString(o,!1,e,s),e=s=0,o++):!n&&s<0&&(a+=this._terminal.buffer.translateBufferLineToString(o,!1,0,e+1),e=s=this._terminal.cols-1,o--);return a+this._terminal.buffer.translateBufferLineToString(o,!1,e,s)},s.prototype._sequence=function(e){var t=this._terminal.applicationCursor?"O":"[";return r.C0.ESC+t+e},s);function s(e,t){var i;this._mouseEvent=e,this._terminal=t,this._lines=this._terminal.buffer.lines,this._startCol=this._terminal.buffer.x,this._startRow=this._terminal.buffer.y;var r=this._terminal.mouseHelper.getCoords(this._mouseEvent,this._terminal.element,this._terminal.charMeasure,this._terminal.cols,this._terminal.rows,!1);r&&(i=r.map(function(e){return e-1}),this._endCol=i[0],this._endRow=i[1])}function o(e,t){e=Math.floor(e);for(var i="",r=0;r=this._line.length))return new f(this._line,e)},u.prototype.translateToString=function(e,t,i){return this._line.translateToString(e,t,i)},u);function u(e){this._line=e}var f=(Object.defineProperty(_.prototype,"char",{get:function(){return this._line.getString(this._x)},enumerable:!0,configurable:!0}),Object.defineProperty(_.prototype,"width",{get:function(){return this._line.getWidth(this._x)},enumerable:!0,configurable:!0}),_);function _(e,t){this._line=e,this._x=t}},{"../Strings":16,"../Terminal":17,"./AddonManager":36}],38:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var o=e("../common/Types"),a=e("./atlas/Types"),r=e("./atlas/CharAtlasCache"),l=e("../core/buffer/BufferLine"),n=(s.prototype.dispose=function(){this._container.removeChild(this._canvas),this._charAtlas&&this._charAtlas.dispose()},s.prototype._initCanvas=function(){this._ctx=this._canvas.getContext("2d",{alpha:this._alpha}),this._alpha||this.clearAll()},s.prototype.onOptionsChanged=function(e){},s.prototype.onBlur=function(e){},s.prototype.onFocus=function(e){},s.prototype.onCursorMove=function(e){},s.prototype.onGridChanged=function(e,t,i){},s.prototype.onSelectionChanged=function(e,t,i,r){void 0===r&&(r=!1)},s.prototype.setColors=function(e,t){this._refreshCharAtlas(e,t)},s.prototype.setTransparency=function(e,t){if(t!==this._alpha){var i=this._canvas;this._alpha=t,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(e,this._colors),this.onGridChanged(e,0,e.rows-1)}},s.prototype._refreshCharAtlas=function(e,t){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=r.acquireCharAtlas(e,t,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},s.prototype.resize=function(e,t){this._scaledCellWidth=t.scaledCellWidth,this._scaledCellHeight=t.scaledCellHeight,this._scaledCharWidth=t.scaledCharWidth,this._scaledCharHeight=t.scaledCharHeight,this._scaledCharLeft=t.scaledCharLeft,this._scaledCharTop=t.scaledCharTop,this._canvas.width=t.scaledCanvasWidth,this._canvas.height=t.scaledCanvasHeight,this._canvas.style.width=t.canvasWidth+"px",this._canvas.style.height=t.canvasHeight+"px",this._alpha||this.clearAll(),this._refreshCharAtlas(e,this._colors)},s.prototype.fillCells=function(e,t,i,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight)},s.prototype.fillBottomLineAtCells=function(e,t,i){void 0===i&&(i=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,i*this._scaledCellWidth,window.devicePixelRatio)},s.prototype.fillLeftLineAtCell=function(e,t){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio,this._scaledCellHeight)},s.prototype.strokeRectAtCell=function(e,t,i,r){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,i*this._scaledCellWidth-window.devicePixelRatio,r*this._scaledCellHeight-window.devicePixelRatio)},s.prototype.clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},s.prototype.clearCells=function(e,t,i,r){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,i*this._scaledCellWidth,r*this._scaledCellHeight))},s.prototype.fillCharTrueColor=function(e,t,i,r){this._ctx.font=this._getFont(e,!1,!1),this._ctx.textBaseline="middle",this._clipRow(e,r),this._ctx.fillText(t.getChars(),i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2)},s.prototype.drawChars=function(e,t,i,r){var n,s;t.isFgRGB()||t.isBgRGB()?this._drawUncachedChars(e,t,i,r):(t.isInverse()?(n=t.isBgDefault()?a.INVERTED_DEFAULT_COLOR:t.getBgColor(),s=t.isFgDefault()?a.INVERTED_DEFAULT_COLOR:t.getFgColor()):(s=t.isBgDefault()?o.DEFAULT_COLOR:t.getBgColor(),n=t.isFgDefault()?o.DEFAULT_COLOR:t.getFgColor()),n+=e.options.drawBoldTextInBrightColors&&t.isBold()&&n<8&&n!==a.INVERTED_DEFAULT_COLOR?8:0,this._currentGlyphIdentifier.chars=t.getChars()||l.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=t.getCode()||l.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=s,this._currentGlyphIdentifier.fg=n,this._currentGlyphIdentifier.bold=t.isBold()&&e.options.enableBold,this._currentGlyphIdentifier.dim=!!t.isDim(),this._currentGlyphIdentifier.italic=!!t.isItalic(),this._charAtlas&&this._charAtlas.draw(this._ctx,this._currentGlyphIdentifier,i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop)||this._drawUncachedChars(e,t,i,r))},s.prototype._drawUncachedChars=function(e,t,i,r){if(this._ctx.save(),this._ctx.font=this._getFont(e,t.isBold()&&e.options.enableBold,!!t.isItalic()),this._ctx.textBaseline="middle",t.isInverse())t.isBgDefault()?this._ctx.fillStyle=this._colors.background.css:t.isBgRGB()?this._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(t.getBgColor()).join(",")+")":this._ctx.fillStyle=this._colors.ansi[t.getBgColor()].css;else if(t.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(t.isFgRGB())this._ctx.fillStyle="rgb("+l.AttributeData.toColorRGB(t.getFgColor()).join(",")+")";else{var n=t.getFgColor();e.options.drawBoldTextInBrightColors&&t.isBold()&&n<8&&(n+=8),this._ctx.fillStyle=this._colors.ansi[n].css}this._clipRow(e,r),t.isDim()&&(this._ctx.globalAlpha=a.DIM_OPACITY),this._ctx.fillText(t.getChars(),i*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight/2),this._ctx.restore()},s.prototype._clipRow=function(e,t){this._ctx.beginPath(),this._ctx.rect(0,t*this._scaledCellHeight,e.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},s.prototype._getFont=function(e,t,i){return(i?"italic":"")+" "+(t?e.options.fontWeightBold:e.options.fontWeight)+" "+e.options.fontSize*window.devicePixelRatio+"px "+e.options.fontFamily},s);function s(e,t,i,r,n){this._container=e,this._alpha=r,this._colors=n,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-"+t+"-layer"),this._canvas.style.zIndex=i.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}i.BaseRenderLayer=n},{"../common/Types":27,"../core/buffer/BufferLine":29,"./atlas/CharAtlasCache":48,"./atlas/Types":55}],39:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,f=e("../core/buffer/BufferLine"),o=(s=f.AttributeData,n(a,s),a.prototype.isCombined=function(){return 2097152},a.prototype.getWidth=function(){return this._width},a.prototype.getChars=function(){return this.combinedData},a.prototype.getCode=function(){return 2097151},a.prototype.setFromCharData=function(e){throw new Error("not implemented")},a.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},a);function a(e,t,i){var r=s.call(this)||this;return r.content=0,r.combinedData="",r.fg=e.fg,r.bg=e.bg,r.combinedData=t,r._width=i,r}i.JoinedCellData=o;var l=(c.prototype.registerCharacterJoiner=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},c.prototype.deregisterCharacterJoiner=function(e){for(var t=0;t=e.rows)this._clearCursor();else if(e.buffer.lines.get(i).loadCell(e.buffer.x,this._cell),void 0!==this._cell.content){if(!e.isFocused)return this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._renderBlurCursor(e,e.buffer.x,r,this._cell),this._ctx.restore(),this._state.x=e.buffer.x,this._state.y=r,this._state.isFocused=!1,this._state.style=e.options.cursorStyle,void(this._state.width=this._cell.getWidth());if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===e.buffer.x&&this._state.y===r&&this._state.isFocused===e.isFocused&&this._state.style===e.options.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[e.options.cursorStyle||"block"](e,e.buffer.x,r,this._cell),this._ctx.restore(),this._state.x=e.buffer.x,this._state.y=r,this._state.isFocused=!1,this._state.style=e.options.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}else this._clearCursor()},h.prototype._clearCursor=function(){this._state&&(this.clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:null,y:null,isFocused:null,style:null,width:null})},h.prototype._renderBarCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillLeftLineAtCell(t,i),this._ctx.restore()},h.prototype._renderBlockCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillCells(t,i,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this.fillCharTrueColor(e,r,t,i),this._ctx.restore()},h.prototype._renderUnderlineCursor=function(e,t,i,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this.fillBottomLineAtCells(t,i),this._ctx.restore()},h.prototype._renderBlurCursor=function(e,t,i,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this.strokeRectAtCell(t,i,r.getWidth(),1),this._ctx.restore()},h);function h(e,t,i){var r=s.call(this,e,"cursor",t,!0,i)||this;return r._cell=new a.CellData,r._state={x:null,y:null,isFocused:null,style:null,width:null},r._cursorRenderers={bar:r._renderBarCursor.bind(r),block:r._renderBlockCursor.bind(r),underline:r._renderUnderlineCursor.bind(r)},r}i.CursorRenderLayer=l;var c=(Object.defineProperty(u.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!0,configurable:!0}),u.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=null),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=null),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=null)},u.prototype.restartBlinkAnimation=function(e){var t=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){t._renderCallback(),t._animationFrame=null})))},u.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=600),this._blinkInterval&&window.clearInterval(this._blinkInterval),this._blinkStartTimeout=setTimeout(function(){if(t._animationTimeRestarted){var e=600-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=null,0=e.rows||a<0)){if(this._ctx.fillStyle=this._colors.selection.css,r){var l=t[0],h=i[0]-l,c=a-o+1;this.fillCells(l,o,h,c)}else{l=n===o?t[0]:0;var u=o===a?i[0]:e.cols;this.fillCells(l,o,u-l,1);var f=Math.max(a-o-1,0);if(this.fillCells(0,o+1,e.cols,f),o!==a){var _=s===a?i[0]:e.cols;this.fillCells(0,a,_,1)}}this._state.start=[t[0],t[1]],this._state.end=[i[0],i[1]],this._state.columnSelectMode=r,this._state.ydisp=e.buffer.ydisp}}else this._clearState()},l.prototype._didStateChange=function(e,t,i,r){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||i!==this._state.columnSelectMode||r!==this._state.ydisp},l.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&e[0]===t[0]&&e[1]===t[1]},l);function l(e,t,i){var r=s.call(this,e,"selection",t,!0,i)||this;return r._clearState(),r}i.SelectionRenderLayer=a},{"./BaseRenderLayer":38}],46:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var o,a=e("./GridCache"),s=e("./BaseRenderLayer"),d=e("../core/buffer/BufferLine"),p=e("./CharacterJoinerRegistry"),l=(o=s.BaseRenderLayer,n(h,o),h.prototype.resize=function(e,t){o.prototype.resize.call(this,e,t);var i=this._getFont(e,!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===i||(this._characterWidth=t.scaledCharWidth,this._characterFont=i,this._characterOverlapCache={}),this._state.clear(),this._state.resize(e.cols,e.rows)},h.prototype.reset=function(e){this._state.clear(),this.clearAll()},h.prototype._forEachCell=function(e,t,i,r,n){for(var s=t;s<=i;s++)for(var o=s+e.buffer.ydisp,a=e.buffer.lines.get(o),l=r?r.getJoinedCharacters(o):[],h=0;hthis._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=i},h);function h(e,t,i,r,n){var s=o.call(this,e,"text",t,n,i)||this;return s._characterOverlapCache={},s._workCell=new d.CellData,s._state=new a.GridCache,s._characterJoinerRegistry=r,s}i.TextRenderLayer=l},{"../core/buffer/BufferLine":29,"./BaseRenderLayer":38,"./CharacterJoinerRegistry":39,"./GridCache":41}],47:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.dispose=function(){},n.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},n.prototype._doWarmUp=function(){},n.prototype.beginFrame=function(){},n);function n(){this._didWarmUp=!1}i.default=r},{}],48:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var h=e("./CharAtlasUtils"),r=e("./DynamicCharAtlas"),n=e("./NoneCharAtlas"),s=e("./StaticCharAtlas"),c={none:n.default,static:s.default,dynamic:r.default},u=[];i.acquireCharAtlas=function(e,t,i,r){for(var n=h.generateConfig(i,r,e,t),s=0;s>>24,n=t.rgba>>>16&255,s=t.rgba>>>8&255,o=0;o=this.capacity)i=this._head,this._unlinkNode(i),delete this._map[i.key],i.key=e,i.value=t,this._map[e]=i;else{var r=this._nodePool;0t;)this._rowContainer.removeChild(this._rowElements.pop())},y.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},y.prototype.onCharSizeChanged=function(){this._updateDimensions()},y.prototype.onBlur=function(){this._rowContainer.classList.remove(_)},y.prototype.onFocus=function(){this._rowContainer.classList.add(_)},y.prototype.onSelectionChanged=function(e,t,i){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var r=e[1]-this._terminal.buffer.ydisp,n=t[1]-this._terminal.buffer.ydisp,s=Math.max(r,0),o=Math.min(n,this._terminal.rows-1);if(!(s>=this._terminal.rows||o<0)){var a=document.createDocumentFragment();if(i)a.appendChild(this._createSelectionElement(s,e[0],t[0],o-s+1));else{var l=r===s?e[0]:0,h=s===o?t[0]:this._terminal.cols;a.appendChild(this._createSelectionElement(s,l,h));var c=o-s-1;if(a.appendChild(this._createSelectionElement(s+1,0,this._terminal.cols,c)),s!==o){var u=n===o?t[0]:this._terminal.cols;a.appendChild(this._createSelectionElement(o,0,u))}}this._selectionContainer.appendChild(a)}}},y.prototype._createSelectionElement=function(e,t,i,r){void 0===r&&(r=1);var n=document.createElement("div");return n.style.height=r*this.dimensions.actualCellHeight+"px",n.style.top=e*this.dimensions.actualCellHeight+"px",n.style.left=t*this.dimensions.actualCellWidth+"px",n.style.width=this.dimensions.actualCellWidth*(i-t)+"px",n},y.prototype.onCursorMove=function(){},y.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss(),this._terminal.refresh(0,this._terminal.rows-1)},y.prototype.clear=function(){this._rowElements.forEach(function(e){return e.innerHTML=""})},y.prototype.renderRows=function(e,t){for(var i=this._terminal,r=i.buffer.ybase+i.buffer.y,n=this._terminal.buffer.x,s=this._terminal.options.cursorBlink,o=e;o<=t;o++){var a=this._rowElements[o];a.innerHTML="";var l=o+i.buffer.ydisp,h=i.buffer.lines.get(l),c=i.options.cursorStyle;a.appendChild(this._rowFactory.createRow(h,l===r,c,n,s,this.dimensions.actualCellWidth,i.cols))}},Object.defineProperty(y.prototype,"_terminalSelector",{get:function(){return"."+h+this._terminalClass},enumerable:!0,configurable:!0}),y.prototype.registerCharacterJoiner=function(e){return-1},y.prototype.deregisterCharacterJoiner=function(e){return!1},y.prototype._onLinkHover=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)},y.prototype._onLinkLeave=function(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)},y.prototype._setCellUnderline=function(e,t,i,r,n,s){for(;e!==t||i!==r;){var o=this._rowElements[i];if(!o)return;var a=o.children[e];a&&(a.style.textDecoration=s?"underline":"none"),++e>=n&&(e=0,i++)}},y);function y(e,t){var i=s.call(this)||this;return i._terminal=e,i._colors=t,i._terminalClass=p++,i._rowElements=[],i._rowContainer=document.createElement("div"),i._rowContainer.classList.add(c),i._rowContainer.style.lineHeight="normal",i._rowContainer.setAttribute("aria-hidden","true"),i._refreshRowElements(i._terminal.cols,i._terminal.rows),i._selectionContainer=document.createElement("div"),i._selectionContainer.classList.add(d),i._selectionContainer.setAttribute("aria-hidden","true"),i.dimensions={scaledCharWidth:null,scaledCharHeight:null,scaledCellWidth:null,scaledCellHeight:null,scaledCharLeft:null,scaledCharTop:null,scaledCanvasWidth:null,scaledCanvasHeight:null,canvasWidth:null,canvasHeight:null,actualCellWidth:null,actualCellHeight:null},i._updateDimensions(),i._injectCss(),i._rowFactory=new o.DomRendererRowFactory(e.options,document),i._terminal.element.classList.add(h+i._terminalClass),i._terminal.screenElement.appendChild(i._rowContainer),i._terminal.screenElement.appendChild(i._selectionContainer),i._terminal.linkifier.onLinkHover(function(e){return i._onLinkHover(e)}),i._terminal.linkifier.onLinkLeave(function(e){return i._onLinkLeave(e)}),i}i.DomRenderer=m},{"../../common/Lifecycle":24,"../atlas/Types":55,"./DomRendererRowFactory":57}],57:[function(e,t,p){"use strict";Object.defineProperty(p,"__esModule",{value:!0});var m=e("../atlas/Types"),y=e("../../core/buffer/BufferLine");p.BOLD_CLASS="xterm-bold",p.DIM_CLASS="xterm-dim",p.ITALIC_CLASS="xterm-italic",p.UNDERLINE_CLASS="xterm-underline",p.CURSOR_CLASS="xterm-cursor",p.CURSOR_BLINK_CLASS="xterm-cursor-blink",p.CURSOR_STYLE_BLOCK_CLASS="xterm-cursor-block",p.CURSOR_STYLE_BAR_CLASS="xterm-cursor-bar",p.CURSOR_STYLE_UNDERLINE_CLASS="xterm-cursor-underline";var i=(r.prototype.createRow=function(e,t,i,r,n,s,o){for(var a=this._document.createDocumentFragment(),l=0,h=Math.min(e.length,o)-1;0<=h;h--)if(e.loadCell(h,this._workCell).getCode()!==y.NULL_CELL_CODE||t&&h===r){l=h+1;break}for(h=0;h>>0})}for(i=0;i<24;i++){var o=8+10*i,a=u(o);e.push({css:"#"+a+a+a,rgba:(o<<24|o<<16|o<<8|255)>>>0})}return e}();var i=(r.prototype.setTheme=function(e){void 0===e&&(e={}),this.colors.foreground=this._parseColor(e.foreground,s),this.colors.background=this._parseColor(e.background,o),this.colors.cursor=this._parseColor(e.cursor,a,!0),this.colors.cursorAccent=this._parseColor(e.cursorAccent,l,!0),this.colors.selection=this._parseColor(e.selection,h,!0),this.colors.ansi[0]=this._parseColor(e.black,n.DEFAULT_ANSI_COLORS[0]),this.colors.ansi[1]=this._parseColor(e.red,n.DEFAULT_ANSI_COLORS[1]),this.colors.ansi[2]=this._parseColor(e.green,n.DEFAULT_ANSI_COLORS[2]),this.colors.ansi[3]=this._parseColor(e.yellow,n.DEFAULT_ANSI_COLORS[3]),this.colors.ansi[4]=this._parseColor(e.blue,n.DEFAULT_ANSI_COLORS[4]),this.colors.ansi[5]=this._parseColor(e.magenta,n.DEFAULT_ANSI_COLORS[5]),this.colors.ansi[6]=this._parseColor(e.cyan,n.DEFAULT_ANSI_COLORS[6]),this.colors.ansi[7]=this._parseColor(e.white,n.DEFAULT_ANSI_COLORS[7]),this.colors.ansi[8]=this._parseColor(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),this.colors.ansi[9]=this._parseColor(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),this.colors.ansi[10]=this._parseColor(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),this.colors.ansi[11]=this._parseColor(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),this.colors.ansi[12]=this._parseColor(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),this.colors.ansi[13]=this._parseColor(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),this.colors.ansi[14]=this._parseColor(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),this.colors.ansi[15]=this._parseColor(e.brightWhite,n.DEFAULT_ANSI_COLORS[15])},r.prototype._parseColor=function(e,t,i){if(void 0===i&&(i=this.allowTransparency),void 0===e)return t;if(this._ctx.fillStyle=this._litmusColor,this._ctx.fillStyle=e,"string"!=typeof this._ctx.fillStyle)return console.warn("Color: "+e+" is invalid using fallback "+t.css),t;this._ctx.fillRect(0,0,1,1);var r=this._ctx.getImageData(0,0,1,1).data;return i||255===r[3]?{css:e,rgba:(r[0]<<24|r[1]<<16|r[2]<<8|r[3])>>>0}:(console.warn("Color: "+e+" is using transparency, but allowTransparency is false. Using fallback "+t.css+"."),t)},r);function r(e,t){this.allowTransparency=t;var i=e.createElement("canvas");i.width=1,i.height=1;var r=i.getContext("2d");if(!r)throw new Error("Could not get rendering context");this._ctx=r,this._ctx.globalCompositeOperation="copy",this._litmusColor=this._ctx.createLinearGradient(0,0,1,1),this.colors={foreground:s,background:o,cursor:a,cursorAccent:l,selection:h,ansi:n.DEFAULT_ANSI_COLORS.slice()}}n.ColorManager=i},{}],59:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.addDisposableDomListener=function(e,t,i,r){return e.addEventListener(t,i,r),{dispose:function(){i&&e.removeEventListener(t,i,r)}}}},{}],60:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=(n.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},n.prototype.refresh=function(e,t,i){var r=this;this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame(function(){return r._innerRefresh()}))},n.prototype._innerRefresh=function(){void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount&&(this._rowStart=Math.max(this._rowStart,0),this._rowEnd=Math.min(this._rowEnd,this._rowCount-1),this._renderCallback(this._rowStart,this._rowEnd),this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0)},n);function n(e){this._renderCallback=e}i.RenderDebouncer=r},{}],61:[function(e,t,i){"use strict";var r,n=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)});Object.defineProperty(i,"__esModule",{value:!0});var s,o=e("../common/Lifecycle"),a=(s=o.Disposable,n(l,s),l.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},l.prototype.dispose=function(){s.prototype.dispose.call(this),this.clearListener()},l.prototype._updateDpr=function(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia("screen and (resolution: "+window.devicePixelRatio+"dppx)"),this._resolutionMediaMatchList.addListener(this._outerListener))},l.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},l);function l(){var e=null!==s&&s.apply(this,arguments)||this;return e._currentDevicePixelRatio=window.devicePixelRatio,e}i.ScreenDprMonitor=a},{"../common/Lifecycle":24}],62:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var r=e("./public/Terminal");t.exports=r.Terminal},{"./public/Terminal":37}]},{},[62])(62)}); \ No newline at end of file diff --git a/BTPanel/static/build/xterm.min.js.map b/BTPanel/static/build/xterm.min.js.map new file mode 100644 index 00000000..3d80d04b --- /dev/null +++ b/BTPanel/static/build/xterm.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["xterm.js"],"names":["f","exports","module","define","amd","window","global","self","this","Terminal","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","extendStatics","__extends","d","b","Object","setPrototypeOf","__proto__","Array","hasOwnProperty","__","constructor","prototype","create","defineProperty","value","_super","Strings","Platform_1","RenderDebouncer_1","Lifecycle_1","Lifecycle_2","ScreenDprMonitor_1","AccessibilityManager","Disposable","dispose","_terminal","element","removeChild","_accessibilityTreeRoot","_rowElements","_onBoundaryFocus","position","boundaryElement","target","beforeBoundaryElement","getAttribute","buffer","lines","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","_rowContainer","shift","removeEventListener","_topBoundaryFocusListener","_bottomBoundaryFocusListener","newElement","_createAccessibilityTreeNode","unshift","insertAdjacentElement","push","appendChild","addEventListener","scrollLines","focus","preventDefault","stopImmediatePropagation","_onResize","rows","children","_refreshRowsDimensions","document","createElement","setAttribute","tabIndex","_refreshRowDimensions","_onTab","spaceCount","_onChar","char","_this","_liveRegionLineCount","MAX_ROWS_TO_READ","_charsToConsume","_charsToAnnounce","_liveRegion","textContent","tooMuchOutput","isMac","parentNode","setTimeout","_clearLiveRegion","_onKey","keyChar","_refreshRows","start","end","_renderRowsDebouncer","refresh","_renderRows","setSize","toString","lineData","translateBufferLineToString","ydisp","posInSet","blankLine","_announceCharacters","_dimensions","actualCellHeight","setDimensions","dimensions","style","height","classList","add","RenderDebouncer","bind","register","onResize","onRender","onScroll","addDisposableListener","onLineFeed","onKey","key","_screenDprMonitor","ScreenDprMonitor","setListener","addDisposableDomListener","./Strings","./common/Lifecycle","./common/Platform","./ui/Lifecycle","./ui/RenderDebouncer","./ui/ScreenDprMonitor","2","CircularList_1","BufferLine_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","getNullCell","attr","_nullCell","fg","bg","getWhitespaceCell","_whitespaceCell","getBlankLine","isWrapped","BufferLine","cols","get","_hasScrollback","maxLength","_rows","enumerable","configurable","relativeY","ybase","y","_getCorrectBufferLength","correctBufferLength","options","scrollback","fillViewportRows","fillAttr","undefined","DEFAULT_ATTR_DATA","clear","x","CircularList","scrollTop","scrollBottom","setupTabStops","resize","newCols","newRows","nullCell","newMaxLength","_cols","addToY","amountToTrim","trimStart","Math","max","min","savedY","savedX","_isReflowEnabled","_reflow","windowsMode","_reflowLarger","_reflowSmaller","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","nextLine","getTrimmedLength","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","apply","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","copyCellsFrom","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","set","index","amount","insertCountEmitted","onInsertEmitter","fire","onTrimEmitter","stringIndexToBufferIndex","lineIndex","stringIndex","trimRight","line","length_1","CHAR_DATA_WIDTH_INDEX","CHAR_DATA_CHAR_INDEX","startCol","endCol","translateToString","getWrappedRangeForLine","first","last","tabs","prevStop","tabStopWidth","nextStop","addMarker","marker","Marker","markers","onTrim","onInsert","event","onDelete","onDispose","_removeMarker","splice","indexOf","iterator","startIndex","endIndex","startOverscan","endOverscan","BufferStringIterator","savedCurAttrData","clone","CellData","fromCharData","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","hasNext","_current","_endIndex","next","range","_buffer","_startIndex","_startOverscan","_endOverscan","result","_trimRight","content","./common/CircularList","./core/buffer/BufferLine","./core/buffer/BufferReflow","./core/buffer/Marker","3","Buffer_1","EventEmitter2_1","BufferSet","_onBufferActivate","_alt","_activeBuffer","_normal","activateNormalBuffer","activeBuffer","inactiveBuffer","activateAltBuffer","EventEmitter2","./Buffer","./common/EventEmitter2","4","CharMeasure","_onCharSizeChanged","_width","_height","measure","_measureElement","fontFamily","fontSize","geometry","getBoundingClientRect","width","adjustedHeight","ceil","parentElement","_document","_parentElement","5","TypedArrayUtils_1","wcwidth","opts","COMBINING_BMP","COMBINING_HIGH","control","table","Uint8Array","fill","nul","num","ucs","data","mid","bisearch","wcwidthHigh","getStringCellWidth","s","charCodeAt","second","./common/TypedArrayUtils","6","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","moveTextAreaUnderMouseCursor","ev","term","pos","screenElement","left","clientX","top","clientY","textarea","zIndex","copyHandler","selectionManager","browser","isMSIE","clipboardData","setData","selectionText","pasteHandler","dispatchPaste","handler","emit","cancel","stopPropagation","getData","rightClickHandler","shouldSelectWord","isClickInSelection","selectWordAtCursor","select","7","CompositionHelper","compositionstart","_isComposing","_compositionPosition","_textarea","_compositionView","compositionupdate","updateCompositionElements","compositionend","_finalizeComposition","keydown","_isSendingComposition","keyCode","_handleAnyTextareaChanges","waitForPropagation","remove","_clearTextareaPosition","currentCompositionPosition_1","input","substring","oldValue","diff","dontRecurse","isCursorInViewport","cellHeight","charMeasure","lineHeight","cursorTop","cursorLeft","compositionViewBounds","8","TextDecoder_1","low","high","arr","TransitionTable","state","action","addMany","codes","PRINTABLES","EXECUTABLES","VT500_TRANSITION_TABLE","states","DcsDummy","hook","collect","params","flag","put","unhook","EscapeSequenceParser","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_oscHandlerFb","_dcsHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_escHandlers","_csiHandlers","_oscHandlers","_dcsHandlers","_activeDcsHandler","_errorHandler","setPrintHandler","callback","clearPrintHandler","setExecuteHandler","clearExecuteHandler","setExecuteHandlerFallback","addCsiHandler","handlerList","handlerIndex","setCsiHandler","clearCsiHandler","setCsiHandlerFallback","setEscHandler","collectAndFlag","clearEscHandler","setEscHandlerFallback","addOscHandler","ident","setOscHandler","clearOscHandler","setOscHandlerFallback","setDcsHandler","clearDcsHandler","setDcsHandlerFallback","setErrorHandler","clearErrorHandler","reset","currentState","initialState","_osc","_params","_collect","parse","transition","error","print","dcs","osc","TRANSITIONS","dcsHandler","abort","handlers","j","String","fromCharCode","j_1","utf32ToString","idx","identifier","parseInt","handlers_1","j_2","./core/input/TextDecoder","9","EscapeSequences_1","Charsets_1","CharWidth_1","EscapeSequenceParser_1","GLEVEL","(",")","*","+","-",".","DECRQSS","_data","Uint32Array","concat","subarray","C0","ESC","pt","block","underline","bar","getOption","InputHandler","_onCursorMove","_onData","_onLineFeed","_onScroll","cursorStartX","cursorStartY","debug","log","_parseBuffer","_parser","_stringDecoder","decode","parseUtf8","_utf8Decoder","chWidth","charset","screenReaderMode","wraparoundMode","insertMode","curAttr","curAttrData","bufferRow","updateRange","ch","stringFromCodePoint","scroll","insertCells","getWidth","setCellFromCodePoint","addCodepointToCell","bell","lineFeed","convertEol","carriageReturn","backspace","tab","originalX","shiftOut","setgLevel","shiftIn","insertChars","eraseAttrData","cursorUp","param","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","col","row","cursorForwardTab","_eraseInBufferLine","clearWrap","replaceCells","_resetBufferLine","eraseInDisplay","scrollBackSize","eraseInLine","insertLines","scrollBottomRowsOffset","scrollBottomAbsolute","deleteLines","deleteChars","deleteCells","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","loadCell","_workCell","sendDeviceAttributes","is","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","applicationCursor","setgCharset","DEFAULT_CHARSET","savedCols","originMode","applicationKeypad","viewport","syncScrollArea","x10Mouse","vt200Mouse","normalMouse","mouseEvents","disable","sendFocus","utfMouse","sgrMouse","urxvtMouse","cursorHidden","saveCursor","buffers","showCursor","resetMode","enable","restoreCursor","charAttributes","l","AttributeData","fromColorRGB","deviceStatus","softReset","glevel","charsets","setCursorStyle","setOption","isBlinking","setScrollRegion","setTitle","handleTitle","keypadApplicationMode","keypadNumericMode","selectDefaultCharset","selectCharset","CHARSETS","tabSet","reverseIndex","level","StringToUtf32","Utf8ToUtf32","BEL","LF","VT","FF","CR","BS","HT","SO","SI","C1","IND","NEL","HTS","_loop_1","this_1","./CharWidth","./EscapeSequenceParser","./common/data/EscapeSequences","./core/data/Charsets","10","MouseZoneManager_1","Linkifier","_onLinkHover","_onLinkLeave","_onLinkTooltip","attachToDom","mouseZoneManager","_mouseZoneManager","linkifyRows","_rowsToLinkify","clearAll","_rowsTimeoutId","clearTimeout","_linkifyRows","TIME_BEFORE_LINKIFY","absoluteRowIndexStart","absoluteRowIndexEnd","overscanLineLimit","OVERSCAN_CHAR_LIMIT","_linkMatchers","_doLinkifyRow","registerLinkMatcher","regex","matcher","id","_nextLinkMatcherId","matchIndex","validationCallback","hoverTooltipCallback","tooltipCallback","hoverLeaveCallback","leaveCallback","willLinkActivate","priority","_addLinkMatcherToList","deregisterLinkMatcher","matcherId","rowIndex","match","rex","RegExp","source","flags","uri","console","lastIndex","bufferIndex","getFg","isValid","_addLink","exec","x1","y1","floor","x2","y2","MouseZone","open","_createLinkHoverEvent","./MouseZoneManager","11","MouseHelper","getCoordsRelativeToElement","rect","getCoords","colCount","rowCount","isSelection","coords","_renderCoordinator","actualCellWidth","getRawByteCoords","12","MouseZoneManager","_deactivate","zone","_zones","_activate","_currentZone","_areZonesActive","_mouseMoveListener","_mouseLeaveListener","_clickListener","_onMouseMove","_lastHoverCoords","pageX","pageY","_onHover","_findZoneEventAt","_tooltipTimeout","hoverCallback","_onTooltip","_onMouseDown","_initialSelectionLength","getSelection","_onMouseLeave","_onClick","currentSelectionLength","clickCallback","mouseHelper","13","MouseHelper_1","Browser","SelectionModel_1","AltClickHandler_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","SelectionManager","_onLinuxMouseSelection","_onRedrawRequest","_onSelectionChange","_removeMouseDownListeners","active","_initListeners","_mouseUpListener","_onMouseUp","initBuffersListeners","_trimListener","_onTrim","onBufferActivate","clearSelection","_enabled","_model","finalSelectionStart","finalSelectionEnd","_activeSelectionMode","lineText","startRowEndCol","bufferLine","map","join","isMSWindows","isLinuxMouseSelection","_refreshAnimationFrame","requestAnimationFrame","_refresh","isLinux","columnSelectMode","_getMouseBufferCoords","_areCoordsInSelection","_selectWordAt","selectionEnd","selectAll","isSelectAllActive","selectLines","selectionStart","_charMeasure","_getMouseEventScrollAmount","offset","terminalHeight","abs","round","shouldForceSelection","altKey","macOptionClickForcesSelection","shiftKey","onMouseDown","_mouseDownTimeStamp","timeStamp","button","hasSelection","_dragScrollAmount","_onIncrementalClick","detail","_onSingleClick","_onDoubleClick","_onTripleClick","_addMouseDownListeners","ownerDocument","_dragScrollIntervalTimer","setInterval","_dragScroll","clearInterval","selectionStartLength","shouldColumnSelect","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","AltClickHandler","move","_convertViewportColToCharacterIndex","charIndex","getChars","setSelection","_getWordAt","allowWhitespaceOnlySelection","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","length_2","getString","_isCharWordSeparator","length_3","length_4","slice","trim","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","endRow","areSelectionValuesReversed","cell","wrappedRange","SelectionModel","./MouseHelper","./SelectionModel","./handlers/AltClickHandler","14","startPlusLength","15","DEFAULT_BELL_SOUND","SoundManager","_audioContext","audioContextCtor","AudioContext","webkitAudioContext","warn","playBellSound","ctx","audioContext","bellAudioSource","createBufferSource","decodeAudioData","_base64ToArrayBuffer","_removeMimeType","bellSound","connect","destination","base64","binaryString","atob","len","bytes","dataURI","split","16","promptLabel","17","BufferSet_1","CompositionHelper_1","EventEmitter_1","Viewport_1","Clipboard_1","InputHandler_1","Renderer_1","Linkifier_1","SelectionManager_1","CharMeasure_1","SoundManager_1","AccessibilityManager_1","CharAtlasCache_1","DomRenderer_1","Keyboard_1","Clone_1","WindowsMode_1","ColorManager_1","RenderCoordinator_1","CONSTRUCTOR_ONLY_OPTIONS","DEFAULT_OPTIONS","termName","cursorBlink","cursorStyle","bellStyle","drawBoldTextInBrightColors","enableBold","experimentalCharAtlas","fontWeight","fontWeightBold","letterSpacing","screenKeys","macOptionIsMeta","cancelEvents","disableStdin","useFlowControl","allowTransparency","theme","rightClickSelectsWord","rendererType","EventEmitter","_onRender","_onTitleChange","_windowsMode","_customKeyEventHandler","removeTerminalFromCache","write","destroy","_setup","keys","forEach","_parent","body","onData","cursorState","gcharset","_eraseAttrData","currentParam","writeBuffer","writeBufferUtf8","_writeInProgress","_xoffSentToCatchUp","_userScrolling","_inputHandler","onCursorMove","linkifier","soundManager","applyWindowsMode","preventScroll","activeElement","hasFocus","_setTheme","newBufferLength","needsRefresh","setRenderer","_createRenderer","_accessibilityManager","onOptionsChanged","_onTextAreaFocus","updateCursorStyle","blur","_onTextAreaBlur","_initGlobal","pasteHandlerWrapper","_bindKeys","isFirefox","_keyDown","_keyPress","wasModifierKeyOnlyEvent","_keyUp","_compositionHelper","_queueLinkification","parent","_context","defaultView","dir","fragment","createDocumentFragment","_viewportElement","_viewportScrollArea","_helperContainer","_theme","_colorManager","ColorManager","setTheme","renderer","RenderCoordinator","Viewport","onThemeChange","colors","onBlur","onFocus","onCharSizeChanged","onDimensionsChange","onSelectionChange","onRedrawRequest","onSelectionChanged","onLinuxMouseSelection","toggle","bindMouse","Renderer","DomRenderer","setColors","el","pressed","sendButton","meta","ctrl","mod","overrideType","type","which","deltaY","metaKey","ctrlKey","getButton","sendEvent","encode","_vt300Mouse","data_1","_decLocator","page","moveHandler","sendMove","hasScrollback","getLinesScrolled","sequence","onWheel","onTouchStart","onTouchMove","refreshRows","_blankLine","eraseAttr","getBg","topRow","bottomRow","willBufferBeTrimmed","isFull","recycle","copyFrom","scrollRegionHeight","shiftElements","disp","suppressScrollEvent","oldYdisp","scrollPages","pageCount","scrollToTop","scrollToBottom","scrollToLine","scrollAmount","writeUtf8","_isDisposed","DC3","_innerWriteUtf8","bufferOffset","startTime","Date","now","DC1","_refreshStart","_refreshEnd","_innerWrite","writeln","attachCustomKeyEventHandler","customKeyEventHandler","registerCharacterJoiner","joinerId","deregisterCharacterJoiner","cursorYOffset","normal","column","getSelectionPosition","startColumn","startRow","endColumn","evaluateKeyboardEvent","_isThirdLevelShift","domEvent","scrollCount","thirdLevelKey","g","charCode","_soundBell","_visualBell","_visualBellTimer","isNaN","maxRange","title","inputHandler","writeInProgress","xoffSentToCatchUp","userScrolling","force","onTitleChange","./AccessibilityManager","./BufferSet","./CharMeasure","./Clipboard","./CompositionHelper","./InputHandler","./Linkifier","./SelectionManager","./SoundManager","./Viewport","./WindowsMode","./common/Clone","./common/EventEmitter","./core/input/Keyboard","./renderer/RenderCoordinator","./renderer/Renderer","./renderer/atlas/CharAtlasCache","./renderer/dom/DomRenderer","./ui/ColorManager","18","onDimensionsChance","backgroundColor","background","css","_innerRefresh","_currentRowHeight","scaledCellHeight","devicePixelRatio","_lastRecordedViewportHeight","offsetHeight","newBufferHeight","_lastRecordedBufferLength","canvasHeight","_lastRecordedBufferHeight","_scrollArea","_ignoreNextScrollEvent","newScrollTop","_lastScrollTop","offsetParent","_getPixelsScrolled","deltaMode","WheelEvent","DOM_DELTA_LINE","DOM_DELTA_PAGE","DOM_DELTA_PIXEL","_wheelPartialScroll","_lastTouchY","touches","scrollBarWidth","offsetWidth","19","terminal","lastChar","CHAR_DATA_CODE_INDEX","20","onDeleteEmitter","_maxLength","newArray","_array","_getCyclicIndex","_length","newLength","deleteCount","items","_i","arguments","countToTrim","count","expandListBy","./EventEmitter2","21","val","depth","clonedObject","isArray","22","on","listener","_events","disposed","off","obj","removeAllListeners","args","emitMayRemoveListeners","listeners","./Lifecycle","23","_event","_listeners","queue","24","_disposables","unregister","25","isNode","navigator","userAgent","platform","contains","isSafari","test","isIpad","isIphone","26","fillFallback","array","27","DEFAULT_COLOR","28","NUL","SOH","STX","ETX","EOT","ENQ","ACK","DLE","DC2","DC4","NAK","SYN","ETB","CAN","EM","SUB","FS","GS","RS","US","SP","DEL","PAD","HOP","BPH","NBH","SSA","ESA","HTJ","VTS","PLD","PLU","RI","SS2","SS3","DCS","PU1","PU2","STS","CCH","MW","SPA","EPA","SOS","SGCI","SCI","CSI","ST","OSC","PM","APC","29","Types_1","DEFAULT_ATTR","CHAR_DATA_ATTR_INDEX","toColorRGB","newObj","isInverse","isBold","isUnderline","isBlink","isInvisible","isItalic","isDim","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","getFgColor","getBgColor","freeze","setFromCharData","isCombined","combinedData","getCode","combined","getAsCharData","cp","_combined","hasContent","codePoint","fillCellData","src","applyInReverse","srcData","srcCombinedKeys","../../common/Types","../input/TextDecoder","30","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","i_1","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","reduce","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","lineLength","31","_id","_onDispose","isDisposed","_nextId","../../common/EventEmitter2","../../common/Lifecycle","32","`","h","k","m","q","v","w","z","{","|","}","~","#","@","[","\\","]","^","_","33","KEYCODE_KEY_MAPPINGS","48","49","50","51","52","53","54","55","56","57","186","187","188","189","190","191","192","219","220","221","222","applicationCursorMode","modifiers","keyMapping","../../common/data/EscapeSequences","34","codepoint","_interim","size","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","35","_mouseEvent","_endCol","_endRow","_arrowSequences","_moveHorizontallyOnly","_resetStartingRow","_moveToRequestedRow","_moveToRequestedCol","repeat","_bufferLine","_startCol","_startRow","_wrappedRowsForRow","_sequence","_wrappedRowsCount","_verticalDirection","direction","_horizontalDirection","wrappedRows","_lines","currentRow","lineWraps","forward","currentCol","bufferStr","_a","coordinates","coordinate","str","rpt","../common/data/EscapeSequences","36","AddonManager","_addons","instance","loadAddon","loadedAddon","_wrappedAddonDispose","activate","37","Terminal_1","AddonManager_1","_core","BufferApiView","columns","_addonManager","applyAddon","addon","getLine","BufferLineApiView","_line","getCell","BufferCellApiView","_x","../Strings","../Terminal","./AddonManager","38","Types_2","BaseRenderLayer","_container","_canvas","_charAtlas","_initCanvas","_ctx","getContext","alpha","_alpha","onGridChanged","colorSet","_refreshCharAtlas","setTransparency","oldCanvas","cloneNode","replaceChild","_colors","_scaledCharWidth","_scaledCharHeight","acquireCharAtlas","warmUp","dim","_scaledCellWidth","scaledCellWidth","_scaledCellHeight","scaledCharWidth","scaledCharHeight","_scaledCharLeft","scaledCharLeft","_scaledCharTop","scaledCharTop","scaledCanvasWidth","scaledCanvasHeight","canvasWidth","fillCells","fillRect","fillBottomLineAtCells","fillLeftLineAtCell","strokeRectAtCell","lineWidth","strokeRect","clearRect","fillStyle","clearCells","fillCharTrueColor","font","_getFont","textBaseline","_clipRow","fillText","drawChars","_drawUncachedChars","INVERTED_DEFAULT_COLOR","_currentGlyphIdentifier","chars","bold","italic","draw","save","ansi","foreground","globalAlpha","DIM_OPACITY","restore","beginPath","clip","../common/Types","../core/buffer/BufferLine","./atlas/CharAtlasCache","./atlas/Types","39","JoinedCellData","firstCell","CharacterJoinerRegistry","joiner","_nextCharacterJoinerId","_characterJoiners","getJoinedCharacters","ranges","lineStr","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","rangeAttrBG","joinedRanges","_getJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","newRange","inRange","40","BaseRenderLayer_1","CursorRenderLayer","_state","isFocused","_clearCursor","_cursorBlinkStateManager","pause","resume","CursorBlinkStateManager","_render","restartBlinkAnimation","isPaused","triggeredByAnimationFrame","cursorY","viewportRelativeCursorY","_cell","cursor","_renderBlurCursor","isCursorVisible","_cursorRenderers","_renderBarCursor","_renderBlockCursor","cursorAccent","_renderUnderlineCursor","strokeStyle","container","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_animationTimeRestarted","_renderCallback","_restartInterval","timeToStart","time","./BaseRenderLayer","41","GridCache","cache","42","CharAtlasUtils_1","LinkRenderLayer","_clearCurrentLink","middleRowCount","is256Color","onLinkHover","onLinkLeave","./atlas/CharAtlasUtils","43","_onDimensionsChange","_onRefreshRequest","_renderer","_onIntersectionChange","entry","_isPaused","intersectionRatio","_needsFullRefresh","_rowCount","_renderDebouncer","renderRows","_fireOnCanvasResize","changeOptions","_canvasWidth","_canvasHeight","_fullRefresh","onDevicePixelRatioChange","observer_1","IntersectionObserver","threshold","observe","disconnect","../common/EventEmitter2","../common/Lifecycle","../ui/Lifecycle","../ui/RenderDebouncer","../ui/ScreenDprMonitor","44","TextRenderLayer_1","SelectionRenderLayer_1","CursorRenderLayer_1","LinkRenderLayer_1","CharacterJoinerRegistry_1","_renderLayers","_devicePixelRatio","_updateDimensions","_runOperation","operation","_characterJoinerRegistry","TextRenderLayer","SelectionRenderLayer","../renderer/CharacterJoinerRegistry","./CursorRenderLayer","./LinkRenderLayer","./SelectionRenderLayer","./TextRenderLayer","45","_clearState","_didStateChange","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","selection","middleRowsCount","_areCoordinatesEqual","coord1","coord2","46","GridCache_1","terminalFont","_characterWidth","_characterFont","_characterOverlapCache","_forEachCell","firstRow","lastRow","joinerRegistry","isJoined","lastCharX","_isOverlapping","_drawBackground","startX","startY","prevFillStyle","nextFillStyle","_drawForeground","beginFrame","overlaps","measureText","characterJoinerRegistry","./CharacterJoinerRegistry","./GridCache","47","BaseCharAtlas","_didWarmUp","_doWarmUp","default","DynamicCharAtlas_1","NoneCharAtlas_1","StaticCharAtlas_1","charAtlasImplementations","none","static","dynamic","charAtlasCache","newConfig","generateConfig","ownedByIndex","ownedBy","configEquals","config","atlas","newEntry","./CharAtlasUtils","./DynamicCharAtlas","./NoneCharAtlas","./StaticCharAtlas","clearColor","imageData","color","isEmpty","rgba","getFont","generateStaticCharAtlasTexture","context","canvasFactory","cellWidth","CHAR_ATLAS_CELL_SPACING","canvas","colorIndex","charAtlasImageData","getImageData","createImageBitmap","../../common/Platform","./Types","clonedColors","colorCode","BaseCharAtlas_1","CharAtlasGenerator_1","LRUMap_1","TRANSPARENT_COLOR","getGlyphCacheKey","glyph","DynamicCharAtlas","_bitmapCommitTimeout","_drawToCacheCount","_canCache","glyphKey","cacheValue","_cacheMap","_drawFromCache","capacity","peek","cacheValue_1","_drawToCache","_toCoordinateX","_config","_toCoordinateY","cacheX","cacheY","drawImage","inBitmap","_bitmap","_cacheCanvas","_getColorFromAnsiIndex","DEFAULT_ANSI_COLORS","_getBackgroundColor","_getForegroundColor","_tmpCtx","globalCompositeOperation","fontStyle","_cacheCtx","putImageData","_addGlyphToBitmap","_glyphsWaitingOnBitmap","_generateBitmap","glyphsMovingToBitmap","then","bitmap","tmpCanvas","prealloc","../../ui/ColorManager","./BaseCharAtlas","./CharAtlasGenerator","./LRUMap","LRUMap","_unlinkNode","node","prev","_head","_tail","_appendNode","tail","nodePool","_nodePool","_map","peekValue","head","NoneCharAtlas","StaticCharAtlas","_canvasFactory","HTMLCanvasElement","_texture","texture","_isCached","isAscii","isBasicColor","isDefaultColor","isDefaultBackground","charAtlasCellWidth","charAtlasCellHeight","DomRendererRowFactory_1","TERMINAL_CLASS_PREFIX","ROW_CONTAINER_CLASS","FG_CLASS_PREFIX","BG_CLASS_PREFIX","FOCUS_CLASS","SELECTION_CLASS","nextTerminalId","_terminalClass","_selectionContainer","_themeStyleElement","_dimensionsStyleElement","overflow","styles","_terminalSelector","innerHTML","_injectCss","BOLD_CLASS","ITALIC_CLASS","CURSOR_CLASS","CURSOR_BLINK_CLASS","CURSOR_STYLE_BLOCK_CLASS","CURSOR_STYLE_BAR_CLASS","CURSOR_STYLE_UNDERLINE_CLASS","_refreshRowElements","documentFragment","_createSelectionElement","endCol_1","colStart","colEnd","cursorAbsoluteY","cursorX","rowElement","_rowFactory","createRow","_setCellUnderline","enabled","span","textDecoration","DomRendererRowFactory","../atlas/Types","./DomRendererRowFactory","DIM_CLASS","UNDERLINE_CLASS","isCursorRow","charElement","_terminalOptions","swapColor","../../core/buffer/BufferLine","58","DEFAULT_FOREGROUND","fromHex","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","toPaddedHex","_parseColor","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","fallback","_litmusColor","createLinearGradient","59","useCapture","60","rowStart","rowEnd","_rowStart","_rowEnd","61","_listener","clearListener","_outerListener","_currentDevicePixelRatio","_updateDpr","_resolutionMediaMatchList","removeListener","matchMedia","addListener","62","./public/Terminal"],"mappings":"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AC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C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"} \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/codemirror.css b/BTPanel/static/codemirror/lib/codemirror.css new file mode 100644 index 00000000..05cab2f4 --- /dev/null +++ b/BTPanel/static/codemirror/lib/codemirror.css @@ -0,0 +1,4 @@ +.CodeMirror{font-family:monospace;height:auto;color:black;border:#ccc 1px solid}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:0;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:#f00}.cm-invalidchar{color:#f00}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0} +.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:white;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:black;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:white} +.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.4em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:0;outline:0;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.Dialog-close{color:#111;float:right;font-family:Arial;font-size:16px;height:30px;line-height:30px;text-align:center;width:30px;cursor:pointer} +.CodeMirror-search-match{background:gold;border-top:1px solid orange;border-bottom:1px solid orange;-moz-box-sizing:border-box;box-sizing:border-box;opacity:.5} \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/codemirror.js b/BTPanel/static/codemirror/lib/codemirror.js new file mode 100644 index 00000000..b9cb291c --- /dev/null +++ b/BTPanel/static/codemirror/lib/codemirror.js @@ -0,0 +1 @@ +(function(c,d){typeof exports==="object"&&typeof module!=="undefined"?module.exports=d():typeof define==="function"&&define.amd?define(d):(c.CodeMirror=d())}(this,(function(){var iP=navigator.userAgent;var ir=navigator.platform;var kc=/gecko\/\d/i.test(iP);var kv=/MSIE \d/.test(iP);var nf=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(iP);var kj=kv||nf;var kH=kj&&(kv?document.documentMode||6:nf[1]);var mU=/WebKit\//.test(iP);var j6=mU&&/Qt\/\d+\.\d+/.test(iP);var ju=/Chrome\//.test(iP);var iL=/Opera\//.test(iP);var ob=/Apple Computer/.test(navigator.vendor);var jI=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(iP);var iq=/PhantomJS/.test(iP);var hE=/AppleWebKit/.test(iP)&&/Mobile\/\w+/.test(iP);var ie=hE||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(iP);var k9=hE||/Mac/.test(ir);var i6=/\bCrOS\b/.test(iP);var nW=/win/i.test(ir);var nE=iL&&iP.match(/Version\/(\d*\.\d*)/);if(nE){nE=Number(nE[1])}if(nE&&nE>=15){iL=false;mU=true}var mW=k9&&(j6||iL&&(nE==null||nE<12.11));var hT=kc||(kj&&kH>=9);function lO(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}var kS=function(d,c){var b=d.className;var e=lO(c).exec(b);if(e){var a=b.slice(e.index+e[0].length);d.className=b.slice(0,e.index)+(a?e[1]+a:"")}};function iN(b){for(var a=b.childNodes.length;a>0;--a){b.removeChild(b.firstChild)}return b}function mR(a,b){return iN(a).appendChild(b)}function gZ(f,b,c,d){var a=document.createElement(f);if(c){a.className=c}if(d){a.style.cssText=d}if(typeof b=="string"){a.appendChild(document.createTextNode(b))}else{if(b){for(var e=0;e=f){return h+(f-c)}h+=g-c;h+=b-(h%b);c=g+1}}function hA(){this.id=null}hA.prototype.set=function(a,b){clearTimeout(this.id);this.id=setTimeout(b,a)};function jb(a,c){for(var b=0;b=e){return a+Math.min(d,e-f)}f+=g-a;f+=b-(f%b);a=g+1;if(f>=e){return a}}}var gU=[""];function j7(a){while(gU.length<=a){gU.push(ji(gU)+" ")}return gU[a]}function ji(a){return a[a.length-1]}function mO(a,b){var d=[];for(var c=0;c"\x80"&&(a.toUpperCase()!=a.toLowerCase()||mu.test(a))}function mo(a,b){if(!b){return h0(a)}if(b.source.indexOf("\\w")>-1&&h0(a)){return true}return b.test(a)}function hS(a){for(var b in a){if(a.hasOwnProperty(b)&&a[b]){return false}}return true}var ky=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function iB(a){return a.charCodeAt(0)>=768&&ky.test(a)}function iU(b,c,d){var a=this;this.input=d;a.scrollbarFiller=gZ("div",null,"CodeMirror-scrollbar-filler");a.scrollbarFiller.setAttribute("cm-not-content","true");a.gutterFiller=gZ("div",null,"CodeMirror-gutter-filler");a.gutterFiller.setAttribute("cm-not-content","true");a.lineDiv=gZ("div",null,"CodeMirror-code");a.selectionDiv=gZ("div",null,null,"position: relative; z-index: 1");a.cursorDiv=gZ("div",null,"CodeMirror-cursors");a.measure=gZ("div",null,"CodeMirror-measure");a.lineMeasure=gZ("div",null,"CodeMirror-measure");a.lineSpace=gZ("div",[a.measure,a.lineMeasure,a.selectionDiv,a.cursorDiv,a.lineDiv],null,"position: relative; outline: none");a.mover=gZ("div",[gZ("div",[a.lineSpace],"CodeMirror-lines")],null,"position: relative");a.sizer=gZ("div",[a.mover],"CodeMirror-sizer");a.sizerWidth=null;a.heightForcer=gZ("div",null,null,"position: absolute; height: "+ko+"px; width: 1px;");a.gutters=gZ("div",null,"CodeMirror-gutters");a.lineGutter=null;a.scroller=gZ("div",[a.sizer,a.heightForcer,a.gutters],"CodeMirror-scroll");a.scroller.setAttribute("tabIndex","-1");a.wrapper=gZ("div",[a.scrollbarFiller,a.gutterFiller,a.scroller],"CodeMirror");if(kj&&kH<8){a.gutters.style.zIndex=-1;a.scroller.style.paddingRight=0}if(!mU&&!(kc&&ie)){a.scroller.draggable=true}if(b){if(b.appendChild){b.appendChild(a.wrapper)}else{b(a.wrapper)}}a.viewFrom=a.viewTo=c.first;a.reportedViewFrom=a.reportedViewTo=c.first;a.view=[];a.renderedView=null;a.externalMeasured=null;a.viewOffset=0;a.lastWrapHeight=a.lastWrapWidth=0;a.updateLineNumbers=null;a.nativeBarWidth=a.barHeight=a.barWidth=0;a.scrollbarsClipped=false;a.lineNumWidth=a.lineNumInnerWidth=a.lineNumChars=null;a.alignWidgets=false;a.cachedCharWidth=a.cachedTextHeight=a.cachedPaddingH=null;a.maxLine=null;a.maxLineLength=0;a.maxLineChanged=false;a.wheelDX=a.wheelDY=a.wheelStartX=a.wheelStartY=null;a.shift=false;a.selForContextMenu=null;a.activeTouch=null;d.init(a)}function hm(c,a){a-=c.first;if(a<0||a>=c.size){throw new Error("There is no line "+(a+c.first)+" in the document.")}var f=c;while(!f.lines){for(var e=0;;++e){var b=f.children[e],d=b.chunkSize();if(a=b.first&&aa){return lA(a,hm(c,a).text.length)}return iu(b,hm(c,b.line).text.length)}function iu(b,c){var a=b.ch;if(a==null||a>c){return lA(b.line,c)}else{if(a<0){return lA(b.line,0)}else{return b}}}function lo(b,a){var d=[];for(var c=0;c=g:a.to>g);(b||(b=[])).push(new h7(d,a.from,f?null:a.to))}}}return b}function oc(h,f,c){var b;if(h){for(var e=0;e=f:a.to>f);if(g||a.from==f&&d.type=="bookmark"&&(!c||a.marker.insertLeft)){var j=a.from==null||(d.inclusiveLeft?a.from<=f:a.from0&&h){for(var l=0;l0){continue}var d=[k,1],n=kI(m.from,l.from),e=kI(m.to,l.to);if(n<0||!f.inclusiveLeft&&!n){d.push({from:m.from,to:l.from})}if(e>0||!f.inclusiveRight&&!e){d.push({from:l.to,to:m.to})}h.splice.apply(h,d);k+=d.length-1}}return h}function hV(c){var a=c.markedSpans;if(!a){return}for(var b=0;b=0&&g<=0||c<=0&&g>=0){continue}if(c<=0&&(k.marker.inclusiveRight&&h.inclusiveLeft?kI(b.to,f)>=0:kI(b.to,f)>0)||c>=0&&(k.marker.inclusiveRight&&h.inclusiveLeft?kI(b.from,e)<=0:kI(b.from,e)<0)){return true}}}}function jV(b){var a;while(a=kb(b)){b=a.find(-1,true).line}return b}function kW(b){var a,c;while(a=jy(b)){b=a.find(1,true).line;(c||(c=[])).push(b)}return c}function nJ(b,d){var a=hm(b,d),c=jV(a);if(a==c){return d}return m5(c)}function iJ(b,c){if(c>b.lastLine()){return c}var d=hm(b,c),a;if(!il(b,d)){return c}while(a=jy(d)){d=a.find(1,true).line}return m5(d)+1}function il(a,d){var e=gN&&d.markedSpans;if(e){for(var b=void 0,c=0;cb.maxLineLength){b.maxLineLength=e;b.maxLine=d}})}function iG(g,a,b,c){if(!g){return c(a,b,"ltr")}var d=false;for(var e=0;ea||a==b&&f.to==a){c(Math.max(f.from,a),Math.min(f.to,b),f.level==1?"rtl":"ltr");d=true}}if(!d){c(a,b,"ltr")}}function kT(a){return a.level%2?a.to:a.from}function hJ(a){return a.level%2?a.from:a.to}function md(b){var a=ld(b);return a?kT(a[0]):0}function lj(b){var a=ld(b);if(!a){return b.text.length}return hJ(ji(a))}function ne(d,c,b){var a=d[0].level;if(c==a){return true}if(b==a){return false}return ca){return d}if((b.from==a||b.to==a)){if(c==null){c=d}else{if(ne(e,b.level,e[c].level)){if(b.from!=b.to){hz=c}return d}else{if(b.from!=b.to){hz=d}return c}}}}return c}function hl(b,a,d,c){if(!c){return a+d}do{a+=d}while(a>0&&iB(b.text.charAt(a)));return a}function ka(f,a,g,e){var d=ld(f);if(!d){return nn(f,a,g,e)}var b=n6(d,a),h=d[b];var c=hl(f,a,h.level%2?-g:g,e);for(;;){if(c>h.from&&c0)==h.level%2?h.to:h.from}else{h=d[b+=g];if(!h){return null}if((g>0)==h.level%2){c=hl(f,h.to,-1,e)}else{c=hl(f,h.from,1,e)}}}}function nn(c,a,e,d){var b=a+e;if(d){while(b>0&&iB(c.text.charAt(b))){b+=e}}return b<0||b>c.text.length?null:b}var mc=(function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";var g="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm";function h(l){if(l<=247){return e.charAt(l)}else{if(1424<=l&&l<=1524){return"R"}else{if(1536<=l&&l<=1773){return g.charAt(l-1536)}else{if(1774<=l&&l<=2220){return"r"}else{if(8192<=l&&l<=8203){return"w"}else{if(l==8204){return"b"}else{return"L"}}}}}}}var b=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;var a=/[stwN]/,j=/[LRr]/,k=/[Lb1n]/,f=/[1n]/;var c="L";function d(l,m,n){this.level=l;this.from=m;this.to=n}return function(s){if(!b.test(s)){return false}var R=s.length,F=[];for(var l=0;l-1){d[e]=c.slice(0,f).concat(c.slice(f+1))}}}}}function n9(a,b){var e=h4(a,b);if(!e.length){return}var d=Array.prototype.slice.call(arguments,2);for(var c=0;c0}function nA(a){a.prototype.on=function(c,b){nY(this,c,b)};a.prototype.off=function(c,b){ih(this,c,b)}}function l7(a){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}}function iT(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}}function na(a){return a.defaultPrevented!=null?a.defaultPrevented:a.returnValue==false}function jK(a){l7(a);iT(a)}function mb(a){return a.target||a.srcElement}function hi(b){var a=b.which;if(a==null){if(b.button&1){a=1}else{if(b.button&2){a=3}else{if(b.button&4){a=2}}}}if(k9&&b.ctrlKey&&a==1){a=3}return a}var kr=function(){if(kj&&kH<9){return false}var a=gZ("div");return"draggable" in a||"dragDrop" in a}();var hk;function lP(a){if(hk==null){var b=gZ("span","\u200b");mR(a,gZ("span",[b,document.createTextNode("x")]));if(a.firstChild.offsetHeight!=0){hk=b.offsetWidth<=1&&b.offsetHeight>2&&!(kj&&kH<8)}}var c=hk?gZ("span","\u200b"):gZ("span","\u00a0",null,"display: inline-block; width: 1px; margin-right: -1px");c.setAttribute("cm-text","");return c}var hj;function m2(b){if(hj!=null){return hj}var a=mR(b,document.createTextNode("A\u062eA"));var c=ki(a,0,1).getBoundingClientRect();var d=ki(a,1,2).getBoundingClientRect();iN(b);if(!c||c.left==c.right){return false}return hj=(d.right-c.right<3)}var hd="\n\nb".split(/\n/).length!=3?function(b){var a=0,e=[],c=b.length;while(a<=c){var d=b.indexOf("\n",a);if(d==-1){d=b.length}var f=b.slice(a,b.charAt(d-1)=="\r"?d-1:d);var g=f.indexOf("\r");if(g!=-1){e.push(f.slice(0,g));a+=g+1}else{e.push(f);a=d+1}}return e}:function(a){return a.split(/\r\n?|\n/)};var lv=window.getSelection?function(b){try{return b.selectionStart!=b.selectionEnd}catch(a){return false}}:function(b){var c;try{c=b.ownerDocument.selection.createRange()}catch(a){}if(!c||c.parentElement()!=b){return false}return c.compareEndPoints("StartToEnd",c)!=0};var jz=(function(){var a=gZ("div");if("oncopy" in a){return true}a.setAttribute("oncopy","return;");return typeof a.oncopy=="function"})();var hu=null;function n2(d){if(hu!=null){return hu}var c=mR(d,gZ("span","x"));var b=c.getBoundingClientRect();var a=ki(c,0,1).getBoundingClientRect();return hu=Math.abs(b.left-a.left)>1}var le={};var nQ={};function jE(a,b){if(arguments.length>2){b.dependencies=Array.prototype.slice.call(arguments,2)}le[a]=b}function lT(b,a){nQ[b]=a}function hP(a){if(typeof a=="string"&&nQ.hasOwnProperty(a)){a=nQ[a]}else{if(a&&typeof a.name=="string"&&nQ.hasOwnProperty(a.name)){var b=nQ[a.name];if(typeof b=="string"){b={name:b}}a=ks(b,a);a.name=b.name}else{if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a)){return hP("application/xml")}else{if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(a)){return hP("application/json")}}}}if(typeof a=="string"){return{name:a}}else{return a||{name:"null"}}}function h8(f,g){g=hP(g);var c=le[g.name];if(!c){return h8(f,"text/plain")}var b=c(f,g);if(iV.hasOwnProperty(g.name)){var e=iV[g.name];for(var a in e){if(!e.hasOwnProperty(a)){continue}if(b.hasOwnProperty(a)){b["_"+a]=b[a]}b[a]=e[a]}}b.name=g.name;if(g.helperType){b.helperType=g.helperType}if(g.modeProps){for(var d in g.modeProps){b[d]=g.modeProps[d]}}return b}var iV={};function jc(b,c){var a=iV.hasOwnProperty(b)?iV[b]:(iV[b]={});n0(c,a)}function nK(c,b){if(b===true){return b}if(c.copyState){return c.copyState(b)}var d={};for(var a in b){var e=b[a];if(e instanceof Array){e=e.concat([])}d[a]=e}return d}function hX(b,a){var c;while(b.innerMode){c=b.innerMode(a);if(!c||c.mode==b){break}a=c.state;b=c.mode}return c||{mode:b,state:a}}function nR(b,c,a){return b.startState?b.startState(c,a):true}var hU=function(a,b){this.pos=this.start=0;this.string=a;this.tabSize=b||8;this.lastColumnPos=this.lastColumnValue=0;this.lineStart=0};hU.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.posb},eatSpace:function(){var b=this;var a=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++b.pos}return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1){this.pos=b;return true}},backUp:function(a){this.pos-=a},column:function(){if(this.lastColumnPos0){return null}if(e&&f!==false){this.pos+=e[0].length}return e}},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(b,a){this.lineStart+=b;try{return a()}finally{this.lineStart-=b}}};function ib(f,g,b,c){var d=[f.state.modeGen],e={};j2(f,g.text,f.doc.mode,b,function(k,j){return d.push(k,j)},e,c);var h=function(j){var l=f.state.overlays[j],k=1,m=0;j2(f,g.text,l.mode,true,function(r,p){var n=k;while(mr){d.splice(k,1,r,d[k+1],q)}k+=2;m=Math.min(r,q)}if(!p){return}if(l.opaque){d.splice(n,k-n,r,"overlay "+p);k=n+2}else{for(;ne.options.maxHighlightLength?nK(e.doc.mode,c):c);d.stateAfter=c;d.styles=b.styles;if(b.classes){d.styleClasses=b.classes}else{if(d.styleClasses){d.styleClasses=null}}if(a===e.doc.frontier){e.doc.frontier++}}return d.styles}function kM(e,a,g){var c=e.doc,d=e.display;if(!c.mode.startState){return true}var b=mv(e,a,g),f=b>c.first&&hm(c,b-1).stateAfter;if(!f){f=nR(c.mode)}else{f=nK(c.mode,f)}c.iter(b,a,function(h){k0(e,h.text,f);var j=b==a-1||b%5==0||b>=d.viewFrom&&bb.start){return d}}throw new Error("Mode "+a.name+" failed to advance stream.")}function j4(c,f,j,k){var d=function(n){return({start:b.start,end:b.pos,string:b.current(),type:l||null,state:n?nK(e.mode,m):m})};var e=c.doc,h=e.mode,l;f=i3(e,f);var a=hm(e,f.line),m=kM(c,f.line,j);var b=new hU(a.text,c.options.tabSize),g;if(k){g=[]}while((k||b.pose.options.maxHighlightLength){o=false;if(m){k0(e,c,p,d.pos)}d.pos=c.length;g=null}else{g=i8(jj(l,d,p,a),n)}if(a){var b=a[0].name;if(b){g="m-"+(g?b+" "+g:b)}}if(!o||j!=g){while(hj;--a){if(a<=f.first){return f.first}var c=hm(f,a-1);if(c.stateAfter&&(!h||a<=f.frontier)){return a}var d=mV(c.text,null,e.options.tabSize);if(g==null||k>d){g=a-1;k=d}}return g}function gW(b,c,a){this.text=b;mM(this,c);this.height=a?a(this):1}nA(gW);gW.prototype.lineNo=function(){return m5(this)};function hY(e,a,d,c){e.text=a;if(e.stateAfter){e.stateAfter=null}if(e.styles){e.styles=null}if(e.order!=null){e.order=null}hV(e);mM(e,d);var b=c?c(e):1;if(b!=e.height){gV(e,b)}}function nv(a){a.parent=null;hV(a)}var lE={};var nM={};function hO(b,c){if(!b||/^\s*$/.test(b)){return null}var a=c.addModeClass?nM:lE;return a[b]||(a[b]=b.replace(/\S+/g,"cm-$&"))}function j0(c,d){var e=gZ("span",null,null,mU?"padding-right: .1px":null);var f={pre:gZ("pre",[e],"CodeMirror-line"),content:e,col:0,pos:0,cm:c,trailingSpace:false,splitSpaces:(kj||mU)&&c.getOption("lineWrapping")};d.measure={};for(var g=0;g<=(d.rest?d.rest.length:0);g++){var a=g?d.rest[g-1]:d.line,h=void 0;f.pos=0;f.addToken=ke;if(m2(c.display.measure)&&(h=ld(a))){f.addToken=lF(f.addToken,h)}f.map=[];var j=d!=c.display.externalMeasured&&m5(a);lK(a,f,jG(c,a,j));if(a.styleClasses){if(a.styleClasses.bgClass){f.bgClass=g9(a.styleClasses.bgClass,f.bgClass||"")}if(a.styleClasses.textClass){f.textClass=g9(a.styleClasses.textClass,f.textClass||"")}}if(f.map.length==0){f.map.push(0,0,f.content.appendChild(lP(c.display.measure)))}if(g==0){d.measure.map=f.map;d.measure.cache={}}else{(d.measure.maps||(d.measure.maps=[])).push(f.map);(d.measure.caches||(d.measure.caches=[])).push({})}}if(mU){var b=f.content.lastChild;if(/\bcm-tab\b/.test(b.className)||(b.querySelector&&b.querySelector(".cm-tab"))){f.content.className="cm-tab-wrap-hack"}}n9(c,"renderLine",c,d.line,f.pre);if(f.pre.className){f.textClass=g9(f.pre.className,f.textClass||"")}return f}function hn(b){var a=gZ("span","\u2022","cm-invalidchar");a.title="\\u"+b.charCodeAt(0).toString(16);a.setAttribute("aria-label",a.title);return a}function ke(e,k,u,c,g,r,l){if(!k){return}var a=e.splitSpaces?ma(k,e.trailingSpace):k;var q=e.cm.state.specialChars,p=false;var b;if(!q.test(k)){e.col+=k.length;b=document.createTextNode(a);e.map.push(e.pos,e.pos+k.length,b);if(kj&&kH<9){p=true}e.pos+=k.length}else{b=document.createDocumentFragment();var n=0;while(true){q.lastIndex=n;var d=q.exec(k);var s=d?d.index-n:k.length-n;if(s){var h=document.createTextNode(a.slice(n,n+s));if(kj&&kH<9){b.appendChild(gZ("span",[h]))}else{b.appendChild(h)}e.map.push(e.pos,e.pos+s,h);e.col+=s;e.pos+=s}if(!d){break}n+=s+1;var t=void 0;if(d[0]=="\t"){var f=e.cm.options.tabSize,j=f-e.col%f;t=b.appendChild(gZ("span",j7(j),"cm-tab"));t.setAttribute("role","presentation");t.setAttribute("cm-text","\t");e.col+=j}else{if(d[0]=="\r"||d[0]=="\n"){t=b.appendChild(gZ("span",d[0]=="\r"?"\u240d":"\u2424","cm-invalidchar"));t.setAttribute("cm-text",d[0]);e.col+=1}else{t=e.cm.options.specialCharPlaceholder(d[0]);t.setAttribute("cm-text",d[0]);if(kj&&kH<9){b.appendChild(gZ("span",[t]))}else{b.appendChild(t)}e.col+=1}}e.map.push(e.pos,e.pos+1,t);e.pos++}}e.trailingSpace=a.charCodeAt(k.length-1)==32;if(u||c||g||p||l){var o=u||"";if(c){o+=c}if(g){o+=g}var m=gZ("span",[b],o,l);if(r){m.title=r}return e.content.appendChild(m)}e.content.appendChild(b)}function ma(a,b){if(a.length>1&&!/ /.test(a)){return a}var e=b,f="";for(var d=0;dm&&l.from<=m){break}}if(l.to>=k){return b(f,d,n,j,c,e,g)}b(f,d.slice(0,l.to-m),n,j,null,e,g);j=null;d=d.slice(l.to-m);m=l.to}}}function ny(e,c,b,d){var a=!d&&b.widgetNode;if(a){e.map.push(e.pos,e.pos+c,a)}if(!d&&e.cm.display.input.needsContentAttribute){if(!a){a=e.content.appendChild(document.createElement("span"))}a.setAttribute("cm-marker",b.id)}if(a){e.cm.display.input.setUneditable(a);e.content.appendChild(a)}e.pos+=c;e.trailingSpace=false}function lK(d,A,e){var o=d.markedSpans,h=d.text,C=0;if(!o){for(var l=1;lq||B.collapsed&&y.to==q&&y.from==q)){if(y.to!=null&&y.to!=q&&k>y.to){k=y.to;m=""}if(B.className){v+=" "+B.className}if(B.css){c=(c?c+";":"")+B.css}if(B.startStyle&&y.from==q){D+=" "+B.startStyle}if(B.endStyle&&y.to==k){(f||(f=[])).push(B.endStyle,y.to)}if(B.title&&!g){g=B.title}if(B.collapsed&&(!t||lW(t.marker,B)<0)){t=y}}else{if(y.from>q&&k>y.from){k=y.from}}}}if(f){for(var n=0;n=w){break}var b=Math.min(w,k);while(true){if(a){var u=q+a.length;if(!t){var r=u>b?a.slice(0,b-q):a;A.addToken(A,r,s?s+v:v,D,q+r.length==k?m:"",g,c)}if(u>=b){a=a.slice(b-q);q=b;break}q=u;D=""}a=h.slice(C,C=e[x++]);s=hO(e[x++],A.cm.options)}}}function lk(b,a,c){this.line=a;this.rest=kW(a);this.size=this.rest?m5(ji(this.rest))-c+1:1;this.node=this.text=null;this.hidden=il(b,a)}function hQ(e,a,b){var c=[],f;for(var d=a;d2){e.push((b.bottom+j.top)/2-d.top)}}}e.push(d.bottom-d.top)}}function jT(c,e,b){if(c.line==e){return{map:c.measure.map,cache:c.measure.cache}}for(var d=0;db){return{map:c.measure.maps[a],cache:c.measure.caches[a],before:true}}}}function mP(c,d){d=jV(d);var a=m5(d);var e=c.display.externalMeasured=new lk(c.doc,d,a);e.lineN=a;var b=e.built=j0(c,e);e.text=b.pre;mR(c.display.lineMeasure,b.pre);return e}function ic(b,d,a,c){return mB(b,gP(b,d),a,c)}function hp(a,b){if(b>=a.display.viewFrom&&b=c.lineN&&bk){f=b-g;j=f-1;if(k>=b){c="right"}}}}if(j!=null){h=a[e+2];if(g==b&&d==(h.insertLeft?"left":"right")){c=d}if(d=="left"&&j==0){while(e&&a[e-2]==a[e-3]&&a[e-1].insertLeft){h=a[(e-=3)+2];c="left"}}if(d=="right"&&j==b-g){while(e=0;a--){if((b=d[a]).left!=b.right){break}}}return b}function kL(g,s,d,k){var f=n3(s.map,d,k);var u=f.node,l=f.start,m=f.end,p=f.collapse;var o;if(u.nodeType==3){for(var j=0;j<4;j++){while(l&&iB(s.line.text.charAt(f.coverStart+l))){--l}while(f.coverStart+m0){p=k="right"}var n;if(g.options.lineWrapping&&(n=u.getClientRects()).length>1){o=n[k=="right"?n.length-1:0]}else{o=u.getBoundingClientRect()}}if(kj&&kH<9&&!l&&(!o||!o.left&&!o.right)){var h=u.parentNode.getClientRects()[0];if(h){o={left:h.left,right:h.left+kJ(g.display),top:h.top,bottom:h.bottom}}else{o=jk}}var a=o.top-s.rect.top,c=o.bottom-s.rect.top;var q=(a+c)/2;var r=s.view.measure.heights;var t=0;for(;tp.from){return j(n-1)}return j(n,o)}var h=ld(g),c=e.ch;if(!h){return j(c)}var m=n6(h,c);var k=b(c,m);if(hz!=null){k.other=b(c,hz)}return k}function kw(c,a){var b=0;a=i3(c.doc,a);if(!c.options.lineWrapping){b=kJ(c.display)*a.ch}var e=hm(c.doc,a.line);var d=m7(e)+hs(c.display);return{left:b,right:b,top:d,bottom:d+e.height}}function g1(c,e,d,a){var b=lA(c,e);b.xRel=a;if(d){b.outside=true}return b}function hg(d,g,h){var e=d.doc;h+=d.display.viewOffset;if(h<0){return g1(e.first,0,true,-1)}var j=nj(e,h),c=e.first+e.size-1;if(j>c){return g1(e.first+e.size-1,hm(e,c).text.length,true,1)}if(g<0){g=0}var k=hm(e,j);for(;;){var b=mX(d,k,j,g,h);var f=jy(k);var a=f&&f.find(0,true);if(f&&(b.ch>a.from.ch||b.ch==a.from.ch&&b.xRel>0)){j=m5(k=a.to.line)}else{return b}}}function mX(e,r,m,c,d){var f=d-m7(r);var k=false,y=2*e.display.wrapper.clientWidth;var B=gP(e,r);function q(C){var D=lL(e,lA(m,C),"line",r,B);k=true;if(f>D.bottom){return D.left-y}else{if(fs){return g1(m,p,l,1)}for(;;){if(a?p==x||p==ka(r,x,1):p-x<=1){var b=c0&&b1){var w=mB(e,B,b,"right");if(f<=w.bottom&&f>=w.top&&Math.abs(c-w.right)1?1:0);return g}var h=Math.ceil(z/2),j=x+h;if(a){j=x;for(var v=0;vc){p=j;s=n;if(l=k){s+=1000}z=h}else{x=j;A=n;t=k;z-=h}}}var n7;function nF(a){if(a.cachedTextHeight!=null){return a.cachedTextHeight}if(n7==null){n7=gZ("pre");for(var b=0;b<49;++b){n7.appendChild(document.createTextNode("x"));n7.appendChild(gZ("br"))}n7.appendChild(document.createTextNode("x"))}mR(a.measure,n7);var c=n7.offsetHeight/50;if(c>3){a.cachedTextHeight=c}iN(a.measure);return c||1}function kJ(a){if(a.cachedCharWidth!=null){return a.cachedCharWidth}var c=gZ("span","xxxxxxxxxx");var b=gZ("pre",[c]);mR(a.measure,b);var d=c.getBoundingClientRect(),e=(d.right-d.left)/10;if(e>2){a.cachedCharWidth=e}return e||10}function ho(g){var b=g.display,d={},e={};var c=b.gutters.clientLeft;for(var a=b.gutters.firstChild,f=0;a;a=a.nextSibling,++f){d[g.options.gutters[f]]=a.offsetLeft+a.clientLeft+c;e[g.options.gutters[f]]=a.clientWidth}return{fixedPos:lw(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:d,gutterWidth:e,wrapperWidth:b.wrapper.clientWidth}}function lw(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function mp(b){var c=nF(b.display),d=b.options.lineWrapping;var a=d&&Math.max(5,b.display.scroller.clientWidth/kJ(b.display)-3);return function(f){if(il(b.doc,f)){return 0}var g=0;if(f.widgets){for(var e=0;e=d.display.viewTo){return null}a-=d.display.viewFrom;if(a<0){return null}var c=d.display.view;for(var b=0;b=c.display.viewTo||b.to().line3){e(D,F.top,null,F.bottom);D=n;if(F.bottomz.bottom||E.bottom==z.bottom&&E.right>z.right){z=E}if(D0){b.blinker=setInterval(function(){return b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate)}else{if(a.options.cursorBlinkRate<0){b.cursorDiv.style.visibility="hidden"}}}function kh(a){if(!a.state.focused){a.display.input.focus();mm(a)}}function nk(a){a.state.delayingBlurEvent=true;setTimeout(function(){if(a.state.delayingBlurEvent){a.state.delayingBlurEvent=false;nL(a)}},100)}function mm(a,b){if(a.state.delayingBlurEvent){a.state.delayingBlurEvent=false}if(a.options.readOnly=="nocursor"){return}if(!a.state.focused){n9(a,"focus",a,b);a.state.focused=true;h6(a.display.wrapper,"CodeMirror-focused");if(!a.curOp&&a.display.selForContextMenu!=a.doc.sel){a.display.input.reset();if(mU){setTimeout(function(){return a.display.input.reset(true)},20)}}a.display.input.receivedFocus()}ku(a)}function nL(a,b){if(a.state.delayingBlurEvent){return}if(a.state.focused){n9(a,"blur",a,b);a.state.focused=false;kS(a.display.wrapper,"CodeMirror-focused")}clearInterval(a.display.blinker);setTimeout(function(){if(!a.state.focused){a.display.shift=false}},150)}function ja(a){var c=a.display,b=c.view;if(!c.alignWidgets&&(!c.gutters.firstChild||!a.options.fixedGutter)){return}var e=lw(c)-c.scroller.scrollLeft+a.doc.scrollLeft;var j=c.gutters.offsetWidth,h=e+"px";for(var f=0;f0.001||d<-0.001){gV(b.line,a);kX(b.line);if(b.rest){for(var k=0;k=d){e=nj(c,m7(hm(c,b))-g.wrapper.clientHeight);d=b}}}return{from:e,to:Math.max(d,e+1)}}function l4(a,b){if(Math.abs(a.doc.scrollTop-b)<2){return}a.doc.scrollTop=b;if(!kc){lN(a,{top:b})}if(a.display.scroller.scrollTop!=b){a.display.scroller.scrollTop=b}a.display.scrollbars.setScrollTop(b);if(kc){lN(a)}ij(a,100)}function nq(a,b,c){if(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2){return}b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth);a.doc.scrollLeft=b;ja(a);if(a.display.scroller.scrollLeft!=b){a.display.scroller.scrollLeft=b}a.display.scrollbars.setScrollLeft(b)}var iF=0;var kG=null;if(kj){kG=-0.53}else{if(kc){kG=15}else{if(ju){kG=-0.7}else{if(ob){kG=-1/3}}}}function ls(b){var c=b.wheelDeltaX,a=b.wheelDeltaY;if(c==null&&b.detail&&b.axis==b.HORIZONTAL_AXIS){c=b.detail}if(a==null&&b.detail&&b.axis==b.VERTICAL_AXIS){a=b.detail}else{if(a==null){a=b.wheelDelta}}return{x:c,y:a}}function mF(a){var b=ls(a);b.x*=kG;b.y*=kG;return b}function k8(e,l){var c=ls(l),a=c.x,b=c.y;var j=e.display,f=j.scroller;var m=f.scrollWidth>f.clientWidth;var n=f.scrollHeight>f.clientHeight;if(!(a&&m||b&&n)){return}if(b&&k9&&mU){outer:for(var d=l.target,g=j.view;d!=f;d=d.parentNode){for(var o=0;od.clientWidth+1;var e=d.scrollHeight>d.clientHeight+1;var a=d.nativeBarWidth;if(e){this.vert.style.display="block";this.vert.style.bottom=b?a+"px":"0";var f=d.viewHeight-(b?a:0);this.vert.firstChild.style.height=Math.max(0,d.scrollHeight-d.clientHeight+f)+"px"}else{this.vert.style.display="";this.vert.firstChild.style.height="0"}if(b){this.horiz.style.display="block";this.horiz.style.right=e?a+"px":"0";this.horiz.style.left=d.barLeft+"px";var c=d.viewWidth-d.barLeft-(e?a:0);this.horiz.firstChild.style.width=(d.scrollWidth-d.clientWidth+c)+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedZeroWidth&&d.clientHeight>0){if(a==0){this.zeroWidthHack()}this.checkedZeroWidth=true}return{right:e?a:0,bottom:b?a:0}},setScrollLeft:function(a){if(this.horiz.scrollLeft!=a){this.horiz.scrollLeft=a}if(this.disableHoriz){this.enableZeroWidthBar(this.horiz,this.disableHoriz)}},setScrollTop:function(a){if(this.vert.scrollTop!=a){this.vert.scrollTop=a}if(this.disableVert){this.enableZeroWidthBar(this.vert,this.disableVert)}},zeroWidthHack:function(){var a=k9&&!jI?"12px":"18px";this.horiz.style.height=this.vert.style.width=a;this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none";this.disableHoriz=new hA;this.disableVert=new hA},enableZeroWidthBar:function(c,a){c.style.pointerEvents="auto";function b(){var d=c.getBoundingClientRect();var e=document.elementFromPoint(d.left+1,d.bottom-1);if(e!=c){c.style.pointerEvents="none"}else{a.set(1000,b)}}a.set(1000,b)},clear:function(){var a=this.horiz.parentNode;a.removeChild(this.horiz);a.removeChild(this.vert)}},i7.prototype);function hy(){}hy.prototype=n0({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},hy.prototype);function hK(c,a){if(!a){a=kR(c)}var d=c.display.barWidth,e=c.display.barHeight;nN(c,a);for(var b=0;b<4&&d!=c.display.barWidth||e!=c.display.barHeight;b++){if(d!=c.display.barWidth&&c.options.lineWrapping){i(c)}nN(c,kR(c));d=c.display.barWidth;e=c.display.barHeight}}function nN(b,d){var a=b.display;var c=a.scrollbars.update(d);a.sizer.style.paddingRight=(a.barWidth=c.right)+"px";a.sizer.style.paddingBottom=(a.barHeight=c.bottom)+"px";a.heightForcer.style.borderBottom=c.bottom+"px solid transparent";if(c.right&&c.bottom){a.scrollbarFiller.style.display="block";a.scrollbarFiller.style.height=c.bottom+"px";a.scrollbarFiller.style.width=c.right+"px"}else{a.scrollbarFiller.style.display=""}if(c.bottom&&b.options.coverGutterNextToScrollbar&&b.options.fixedGutter){a.gutterFiller.style.display="block";a.gutterFiller.style.height=c.bottom+"px";a.gutterFiller.style.width=d.gutterWidth+"px"}else{a.gutterFiller.style.display=""}}var lX={"native":i7,"null":hy};function oa(a){if(a.display.scrollbars){a.display.scrollbars.clear();if(a.display.scrollbars.addClass){kS(a.display.wrapper,a.display.scrollbars.addClass)}}a.display.scrollbars=new lX[a.options.scrollbarStyle](function(b){a.display.wrapper.insertBefore(b,a.display.scrollbarFiller);nY(b,"mousedown",function(){if(a.state.focused){setTimeout(function(){return a.display.input.focus()},0)}});b.setAttribute("cm-not-content","true")},function(b,c){if(c=="horizontal"){nq(a,b)}else{l4(a,b)}},a);if(a.display.scrollbars.addClass){h6(a.display.wrapper,a.display.scrollbars.addClass)}}function iD(f,b){if(nT(f,"scrollCursorIntoView")){return}var a=f.display,e=a.sizer.getBoundingClientRect(),d=null;if(b.top+e.top<0){d=true}else{if(b.bottom+e.top>(window.innerHeight||document.documentElement.clientHeight)){d=false}}if(d!=null&&!iq){var c=gZ("div","\u200b",null,("position: absolute;\n top: "+(b.top-a.viewOffset-hs(f.display))+"px;\n height: "+(b.bottom-b.top+lh(f)+a.barHeight)+"px;\n left: "+(b.left)+"px; width: 2px;"));f.display.lineSpace.appendChild(c);c.scrollIntoView(d);f.display.lineSpace.removeChild(c)}}function mx(a,d,h,j){if(j==null){j=0}var b;for(var g=0;g<5;g++){var f=false;b=lL(a,d);var c=!h||h==d?b:lL(a,h);var k=mn(a,Math.min(b.left,c.left),Math.min(b.top,c.top)-j,Math.max(b.left,c.left),Math.max(b.bottom,c.bottom)+j);var e=a.doc.scrollTop,l=a.doc.scrollLeft;if(k.scrollTop!=null){l4(a,k.scrollTop);if(Math.abs(a.doc.scrollTop-e)>1){f=true}}if(k.scrollLeft!=null){nq(a,k.scrollLeft);if(Math.abs(a.doc.scrollLeft-l)>1){f=true}}if(!f){break}}return b}function mt(d,e,b,f,c){var a=mn(d,e,b,f,c);if(a.scrollTop!=null){l4(d,a.scrollTop)}if(a.scrollLeft!=null){nq(d,a.scrollLeft)}}function mn(d,o,e,q,f){var j=d.display,l=nF(d.display);if(e<0){e=0}var n=d.curOp&&d.curOp.scrollTop!=null?d.curOp.scrollTop:j.scroller.scrollTop;var b=m8(d),r={};if(f-e>b){f=e+b}var p=d.doc.height+ni(j);var h=ep-l;if(en+b){var g=Math.min(e,(k?p:f)-b);if(g!=n){r.scrollTop=g}}}var a=d.curOp&&d.curOp.scrollLeft!=null?d.curOp.scrollLeft:j.scroller.scrollLeft;var c=i4(d)-(d.options.fixedGutter?j.gutters.offsetWidth:0);var m=q-o>c;if(m){q=o+c}if(o<10){r.scrollLeft=0}else{if(oc+a-3){r.scrollLeft=q+(m?0:10)-c}}}return r}function lM(a,b,c){if(b!=null||c!=null){h2(a)}if(b!=null){a.curOp.scrollLeft=(a.curOp.scrollLeft==null?a.doc.scrollLeft:a.curOp.scrollLeft)+b}if(c!=null){a.curOp.scrollTop=(a.curOp.scrollTop==null?a.doc.scrollTop:a.curOp.scrollTop)+c}}function jl(b){h2(b);var d=b.getCursor(),a=d,c=d;if(!b.options.lineWrapping){a=d.ch?lA(d.line,d.ch-1):d;c=lA(d.line,d.ch+1)}b.curOp.scrollToPos={from:a,to:c,margin:b.options.cursorScrollMargin,isCursor:true}}function h2(c){var d=c.curOp.scrollToPos;if(d){c.curOp.scrollToPos=null;var a=kw(c,d.from),b=kw(c,d.to);var e=mn(c,Math.min(a.left,b.left),Math.min(a.top,b.top)-d.margin,Math.max(a.right,b.right),Math.max(a.bottom,b.bottom)+d.margin);c.scrollTo(e.scrollLeft,e.scrollTop)}}var iv=0;function lY(a){a.curOp={cm:a,viewChanged:false,startHeight:a.doc.height,forceUpdate:false,updateInput:null,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:false,id:++iv};js(a.curOp)}function ng(a){var b=a.curOp;nX(b,function(c){for(var d=0;d=c.viewTo)||c.maxLineChanged&&a.options.lineWrapping;b.update=b.mustUpdate&&new n4(a,b.mustUpdate&&{top:b.scrollTop,ensure:b.scrollToPos},b.forceUpdate)}function m6(a){a.updatedDisplay=a.mustUpdate&&mC(a.cm,a.update)}function nP(b){var a=b.cm,c=a.display;if(b.updatedDisplay){i(a)}b.barMeasure=kR(a);if(c.maxLineChanged&&!a.options.lineWrapping){b.adjustWidthTo=ic(a,c.maxLine,c.maxLine.text.length).left+3;a.display.sizerWidth=b.adjustWidthTo;b.barMeasure.scrollWidth=Math.max(c.scroller.clientWidth,c.sizer.offsetLeft+b.adjustWidthTo+lh(a)+a.display.barWidth);b.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+b.adjustWidthTo-i4(a))}if(b.updatedDisplay||b.selectionChanged){b.preparedSelection=c.input.prepareSelection(b.focus)}}function m9(b){var a=b.cm;if(b.adjustWidthTo!=null){a.display.sizer.style.minWidth=b.adjustWidthTo+"px";if(b.maxScrollLefte)){h.updateLineNumbers=e}c.curOp.viewChanged=true;if(e>=h.viewTo){if(gN&&nJ(c.doc,e)h.viewFrom){jw(c)}else{h.viewFrom+=b;h.viewTo+=b}}else{if(e<=h.viewFrom&&d>=h.viewTo){jw(c)}else{if(e<=h.viewFrom){var f=jq(c,d,d+b,1);if(f){h.view=h.view.slice(f.index);h.viewFrom=f.lineN;h.viewTo+=b}else{jw(c)}}else{if(d>=h.viewTo){var k=jq(c,e,e,-1);if(k){h.view=h.view.slice(0,k.index);h.viewTo=k.lineN}else{jw(c)}}else{var g=jq(c,e,e,-1);var j=jq(c,d,d+b,1);if(g&&j){h.view=h.view.slice(0,g.index).concat(hQ(c,g.lineN,j.lineN)).concat(h.view.slice(j.index));h.viewTo+=b}else{jw(c)}}}}}}var a=h.externalMeasured;if(a){if(d=c.lineN&&f=a.viewTo){return}var e=a.view[iR(g,f)];if(e.node==null){return}var d=e.changes||(e.changes=[]);if(jb(d,b)==-1){d.push(b)}}function jw(a){a.display.viewFrom=a.display.viewTo=a.doc.first;a.display.view=[];a.display.viewOffset=0}function jq(a,g,e,h){var d=iR(a,g),b,c=a.display.view;if(!gN||e==a.doc.first+a.doc.size){return{index:d,lineN:e}}var j=a.display.viewFrom;for(var f=0;f0){if(d==c.length-1){return null}b=(j+c[d].size)-g;d++}else{b=j-g}g+=b;e+=b}while(nJ(a.doc,e)!=e){if(d==(h<0?0:c.length-1)){return null}e+=h*c[d-(h<0?1:0)].size;d+=h}return{index:d,lineN:e}}function lm(c,a,b){var d=c.display,e=d.view;if(e.length==0||a>=d.viewTo||b<=d.viewFrom){d.view=hQ(c,a,b);d.viewFrom=a}else{if(d.viewFrom>a){d.view=hQ(c,a,d.viewFrom).concat(d.view)}else{if(d.viewFromb){d.view=d.view.slice(0,iR(c,b))}}}d.viewTo=b}function jv(e){var d=e.display.view,a=0;for(var b=0;b=c.display.viewTo){return}var d=+new Date+c.options.workTime;var b=nK(a.mode,kM(c,a.frontier));var e=[];a.iter(a.frontier,Math.min(a.first+a.size,c.display.viewTo+500),function(h){if(a.frontier>=c.display.viewFrom){var n=h.styles,j=h.text.length>c.options.maxHighlightLength;var l=ib(c,h,j?nK(a.mode,b):b,true);h.styles=l.styles;var f=h.styleClasses,m=l.classes;if(m){h.styleClasses=m}else{if(f){h.styleClasses=null}}var k=!n||n.length!=h.styles.length||f!=m&&(!f||!m||f.bgClass!=m.bgClass||f.textClass!=m.textClass);for(var g=0;!k&&gd){ij(c,c.options.workDelay);return true}});if(e.length){lI(c,function(){for(var f=0;f=g.viewFrom&&h.visible.to<=g.viewTo&&(g.updateLineNumbers==null||g.updateLineNumbers>=g.viewTo)&&g.renderedView==g.view&&jv(b)==0){return false}if(iE(b)){jw(b);h.dims=ho(b)}var j=c.first+c.size;var e=Math.max(h.visible.from-b.options.viewportMargin,c.first);var d=Math.min(j,h.visible.to+b.options.viewportMargin);if(g.viewFromd&&g.viewTo-d<20){d=Math.min(j,g.viewTo)}if(gN){e=nJ(b.doc,e);d=iJ(b.doc,d)}var k=e!=g.viewFrom||d!=g.viewTo||g.lastWrapHeight!=h.wrapperHeight||g.lastWrapWidth!=h.wrapperWidth;lm(b,e,d);g.viewOffset=m7(hm(b.doc,g.viewFrom));b.display.mover.style.top=g.viewOffset+"px";var a=jv(b);if(!k&&a==0&&!h.force&&g.renderedView==g.view&&(g.updateLineNumbers==null||g.updateLineNumbers>=g.viewTo)){return false}var f=j3();if(a>4){g.lineDiv.style.display="none"}km(b,g.updateLineNumbers,h.dims);if(a>4){g.lineDiv.style.display=""}g.renderedView=g.view;if(f&&j3()!=f&&f.offsetHeight){f.focus()}iN(g.cursorDiv);iN(g.selectionDiv);g.gutters.style.height=g.sizer.style.minHeight=0;if(k){g.lastWrapHeight=h.wrapperHeight;g.lastWrapWidth=h.wrapperWidth;ij(b,400)}g.updateLineNumbers=null;return true}function kt(e,a){var c=a.viewport;for(var b=true;;b=false){if(!b||!e.options.lineWrapping||a.oldDisplayWidth==i4(e)){if(c&&c.top!=null){c={top:Math.min(e.doc.height+ni(e.display)-m8(e),c.top)}}a.visible=lc(e.display,e.doc,c);if(a.visible.from>=e.display.viewFrom&&a.visible.to<=e.display.viewTo){break}}if(!mC(e,a)){break}i(e);var d=kR(e);nu(e);hK(e,d);kV(e,d)}a.signal(e,"update",e);if(e.display.viewFrom!=e.display.reportedViewFrom||e.display.viewTo!=e.display.reportedViewTo){a.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo);e.display.reportedViewFrom=e.display.viewFrom;e.display.reportedViewTo=e.display.viewTo}}function lN(d,b){var a=new n4(d,b);if(mC(d,a)){i(d);kt(d,a);var c=kR(d);nu(d);hK(d,c);kV(d,c);a.finish()}}function km(c,m,d){var g=c.display,a=c.options.lineNumbers;var o=g.lineDiv,b=o.firstChild;function h(p){var q=p.nextSibling;if(mU&&k9&&c.display.currentWheelTarget==p){p.style.display="none"}else{p.parentNode.removeChild(p)}return q}var f=g.view,j=g.viewFrom;for(var l=0;l-1){e=false}nC(c,k,j,d)}if(e){iN(k.lineNumber);k.lineNumber.appendChild(document.createTextNode(jF(c.options,j)))}b=k.node.nextSibling}}j+=k.size}while(b){b=h(b)}}function jO(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px"}function kV(a,b){a.display.sizer.style.minHeight=b.docHeight+"px";a.display.heightForcer.style.top=b.docHeight+"px";a.display.gutters.style.height=(b.docHeight+a.display.barHeight+lh(a))+"px"}function io(f){var e=f.display.gutters,a=f.options.gutters;iN(e);var d=0;for(;d-1&&!a.lineNumbers){a.gutters=a.gutters.slice(0);a.gutters.splice(b,1)}}}function g0(a,b){this.ranges=a;this.primIndex=b}g0.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(e){var a=this;if(e==this){return true}if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length){return false}for(var c=0;c=0&&kI(a,d.to())<=0){return c}}return -1}};function lz(a,b){this.anchor=a;this.head=b}lz.prototype={from:function(){return m3(this.anchor,this.head)},to:function(){return nD(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};function mA(j,b){var g=j[b];j.sort(function(l,k){return kI(l.from(),k.from())});b=jb(j,g);for(var e=1;e=0){var d=m3(h.from(),a.from()),c=nD(h.to(),a.to());var f=h.empty()?a.from()==a.head:h.from()==h.head;if(e<=b){--b}j.splice(--e,2,new lz(f?c:d,f?d:c))}}return new g0(j,b)}function j1(a,b){return new g0([new lz(a,b||a)],0)}function m1(a){if(!a.text){return a.to}return lA(a.from.line+a.text.length-1,ji(a.text).length+(a.text.length==1?a.from.ch:0))}function nS(b,c){if(kI(b,c.from)<0){return b}if(kI(b,c.to)<=0){return m1(c)}var a=b.line+c.text.length-(c.to.line-c.from.line)-1,d=b.ch;if(b.line==c.to.line){d+=m1(c).ch-c.to.ch}return lA(a,d)}function iK(b,a){var d=[];for(var c=0;c1){r.remove(a.line+1,c-1)}r.insert(a.line+1,l)}}}}nw(r,"change",r,f)}function iA(b,c,d){function a(j,e,g){if(j.linked){for(var f=0;f1&&!b.done[b.done.length-2].ranges){b.done.pop();return ji(b.done)}}}}function iX(d,f,a,g){var h=d.history;h.undone.length=0;var j=+new Date,c;var b;if((h.lastOp==g||h.lastOrigin==f.origin&&f.origin&&((f.origin.charAt(0)=="+"&&d.cm&&h.lastModTime>j-d.cm.options.historyEventDelay)||f.origin.charAt(0)=="*"))&&(c=kl(h,h.lastOp==g))){b=ji(c.changes);if(kI(f.from,f.to)==0&&kI(f.from,b.to)==0){b.to=m1(f)}else{c.changes.push(k6(d,f))}}else{var e=ji(h.done);if(!e||!e.ranges){lx(d.sel,h.done)}c={changes:[k6(d,f)],generation:h.generation};h.done.push(c);while(h.done.length>h.undoDepth){h.done.shift();if(!h.done[0].ranges){h.done.shift()}}}h.done.push(a);h.generation=++h.maxGeneration;h.lastModTime=h.lastSelTime=j;h.lastOp=h.lastSelOp=g;h.lastOrigin=h.lastSelOrigin=f.origin;if(!b){n9(d,"historyAdded")}}function nx(a,c,d,b){var e=c.charAt(0);return e=="*"||e=="+"&&d.ranges.length==b.ranges.length&&d.somethingSelected()==b.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function hN(a,d,c,e){var b=a.history,f=e&&e.origin;if(c==b.lastSelOp||(f&&b.lastSelOrigin==f&&(b.lastModTime==b.lastSelTime&&b.lastOrigin==f||nx(a,f,ji(b.done),d)))){b.done[b.done.length-1]=d}else{lx(d,b.done)}b.lastSelTime=+new Date;b.lastSelOrigin=f;b.lastSelOp=c;if(e&&e.clearRedo!==false){h3(b.undone)}}function lx(c,a){var b=ji(a);if(!(b&&b.ranges&&b.equals(c))){a.push(c)}}function nU(f,a,b,d){var c=a["spans_"+f.id],e=0;f.iter(Math.max(f.first,b),Math.min(f.first+f.size,d),function(g){if(g.markedSpans){(c||(c=a["spans_"+f.id]={}))[e]=g.markedSpans}++e})}function l3(a){if(!a){return null}var c;for(var b=0;b-1){ji(c)[m]=e[m];delete e[m]}}}}}}return l}function im(a,f,b,d){if(a.cm&&a.cm.display.shift||a.extend){var c=f.anchor;if(d){var e=kI(b,c)<0;if(e!=(kI(d,c)<0)){c=b;b=d}else{if(e!=(kI(b,d)<0)){b=d}}}return new lz(c,b)}else{return new lz(d||b,b)}}function g5(b,c,a,d){mL(b,new g0([im(b,b.sel.primary(),c,a)],0),d)}function mN(a,b,d){var e=[];for(var c=0;c=d.ch:m.to>d.ch))){if(f){n9(l,"beforeCursorEnter");if(l.explicitlyCleared){if(!a.markedSpans){break}else{--h;continue}}}if(!l.atomic){continue}if(j){var e=l.find(k<0?1:-1),c=void 0;if(k<0?l.inclusiveRight:l.inclusiveLeft){e=hF(b,e,-k,e&&e.line==d.line?a:null)}if(e&&e.line==d.line&&(c=kI(e,j))&&(k<0?c<0:c>0)){return iS(b,e,d,k,f)}}var g=l.find(k<0?-1:1);if(k<0?l.inclusiveLeft:l.inclusiveRight){g=hF(b,g,k,g.line==d.line?a:null)}return g?iS(b,g,d,k,f):null}}}return d}function mJ(b,a,e,g,d){var f=g||1;var c=iS(b,a,e,f,d)||(!d&&iS(b,a,e,f,true))||iS(b,a,e,-f,d)||(!d&&iS(b,a,e,-f,true));if(!c){b.cantEdit=true;return lA(b.first,0)}return c}function hF(c,b,d,a){if(d<0&&b.ch==0){if(b.line>c.first){return i3(c,lA(b.line-1))}else{return null}}else{if(d>0&&b.ch==(a||hm(c,b.line)).text.length){if(b.line=0;--e){mf(b,{from:d[e].from,to:d[e].to,text:e?[""]:a.text})}}else{mf(b,a)}}function mf(c,b){if(b.text.length==1&&b.text[0]==""&&kI(b.from,b.to)==0){return}var d=iK(c,b);iX(c,b,d,c.cm?c.cm.curOp.id:NaN);ik(c,b,d,h5(c,b));var a=[];iA(c,function(e,f){if(!f&&jb(a,e.history)==-1){kF(e.history,b);a.push(e.history)}ik(e,b,null,h5(e,b))})}function k5(c,d,a){if(c.cm&&c.cm.state.suppressEdits&&!a){return}var e=c.history,n,l=c.sel;var o=d=="undo"?e.done:e.undone,b=d=="undo"?e.undone:e.done;var h=0;for(;h=0;--k){var j=g(k);if(j){return j.v}}}function iC(d,b){if(b==0){return}d.first+=b;d.sel=new g0(mO(d.sel.ranges,function(e){return new lz(lA(e.anchor.line+b,e.anchor.ch),lA(e.head.line+b,e.head.ch))}),d.sel.primIndex);if(d.cm){np(d.cm,d.first,d.first-b,b);for(var c=d.cm.display,a=c.viewFrom;ab.lastLine()){return}if(a.from.linee){a={from:a.from,to:lA(e,hm(b,e).text.length),text:[a.text[0]],origin:a.origin}}a.removed=gY(b,a.from,a.to);if(!d){d=iK(b,a)}if(b.cm){n5(b.cm,a,f)}else{id(b,a,f)}jN(b,d,ln)}function n5(b,g,j){var c=b.doc,h=b.display,f=g.from,d=g.to;var e=false,k=f.line;if(!b.options.lineWrapping){k=m5(jV(hm(c,f.line)));c.iter(k,d.line+1,function(o){if(o==h.maxLine){e=true;return true}})}if(c.sel.contains(g.from,g.to)>-1){lD(b)}id(c,g,j,mp(b));if(!b.options.lineWrapping){c.iter(k,f.line+g.text.length,function(o){var p=hZ(o);if(p>h.maxLineLength){h.maxLine=o;h.maxLineLength=p;h.maxLineChanged=true;e=false}});if(e){b.curOp.updateMaxLine=true}}c.frontier=Math.min(c.frontier,f.line);ij(b,400);var a=g.text.length-(d.line-f.line)-1;if(g.full){np(b)}else{if(f.line==d.line&&g.text.length==1&&!lR(b.doc,g)){lS(b,f.line,"text")}else{np(b,f.line,d.line+1,a)}}var m=iI(b,"changes"),l=iI(b,"change");if(l||m){var n={from:f,to:d,text:g.text,removed:g.removed,origin:g.origin};if(l){nw(b,"change",b,n)}if(m){(b.curOp.changeObjs||(b.curOp.changeObjs=[])).push(n)}}b.display.selForContextMenu=null}function gT(d,e,a,b,c){if(!b){b=a}if(kI(b,a)<0){var f=b;b=a;a=f}if(typeof e=="string"){e=d.splitLines(e)}mi(d,{from:a,to:b,text:e,origin:c})}function ml(b,c,d,a){if(d1||!(this.children[0] instanceof hH))){var a=[];this.collapse(a);this.children=[new hH(a)];this.children[0].parent=this}},collapse:function(c){var a=this;for(var b=0;b50){var h=k.lines.length%25+25;for(var c=h;c10);c.parent.maybeSpill()},iterN:function(g,h,a){var b=this;for(var f=0;fc.display.maxLineLength){c.display.maxLine=m;c.display.maxLineLength=f;c.display.maxLineChanged=true}}}if(j!=null&&c&&this.collapsed){np(c,j,e+1)}this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;if(c){jt(c.doc)}}if(c){nw(c,"markerCleared",c,this)}if(k){ng(c)}if(this.parent){this.parent.clear()}};lV.prototype.find=function(d,f){var h=this;if(d==null&&this.type=="bookmark"){d=1}var a,b;for(var e=0;e0||b==0&&h.clearWhenEmpty!==false){return h}if(h.replacedWith){h.collapsed=true;h.widgetNode=gZ("span",[h.replacedWith],"CodeMirror-widget");if(!a.handleMouseEvents){h.widgetNode.setAttribute("cm-ignore-events","true")}if(a.insertLeft){h.widgetNode.insertLeft=true}}if(h.collapsed){if(jS(c,e.line,e,d,h)||e.line!=d.line&&jS(c,d.line,e,d,h)){throw new Error("Inserting collapsed marker partially overlapping an existing one")}lf()}if(h.addToHistory){iX(c,{from:e,to:d,origin:"markText"},c.sel,NaN)}var k=e.line,f=c.cm,l;c.iter(k,d.line+1,function(m){if(f&&h.collapsed&&!f.options.lineWrapping&&jV(m)==f.display.maxLine){l=true}if(h.collapsed&&k!=e.line){gV(m,0)}kP(m,new h7(h,k==e.line?e.ch:null,k==d.line?d.ch:null));++k});if(h.collapsed){c.iter(e.line,d.line+1,function(m){if(il(c,m)){gV(m,0)}})}if(h.clearOnEnter){nY(h,"beforeCursorEnter",function(){return h.clear()})}if(h.readOnly){ia();if(c.history.done.length||c.history.undone.length){c.clearHistory()}}if(h.collapsed){h.id=++gQ;h.atomic=true}if(f){if(l){f.curOp.updateMaxLine=true}if(h.collapsed){np(f,e.line,d.line+1)}else{if(h.className||h.title||h.startStyle||h.endStyle||h.css){for(var j=e.line;j<=d.line;j++){lS(f,j,"text")}}}if(h.atomic){jt(f.doc)}nw(f,"markerAdded",f,h)}return h}function jZ(b,c){var a=this;this.markers=b;this.primary=c;for(var d=0;d=0;h--){mi(e,c[h])}if(k){ht(this,k)}else{if(this.cm){jl(this.cm)}}}),undo:mg(function(){k5(this,"undo")}),redo:mg(function(){k5(this,"redo")}),undoSelection:mg(function(){k5(this,"undo",true)}),redoSelection:mg(function(){k5(this,"redo",true)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){var b=this.history,e=0,c=0;for(var d=0;d=a.ch)){b.push(c.marker.parent||c.marker)}}}return b},findMarks:function(a,c,e){a=i3(this,a);c=i3(this,c);var d=[],b=a.line;this.iter(a.line,c.line+1,function(h){var f=h.markedSpans;if(f){for(var g=0;g=j.to||j.from==null&&b!=a.line||j.from!=null&&b==c.line&&j.from>=c.ch)&&(!e||e(j.marker))){d.push(j.marker.parent||j.marker)}}}++b});return d},getAllMarks:function(){var a=[];this.iter(function(c){var d=c.markedSpans;if(d){for(var b=0;bb){d=b;return true}b-=e;++a});return i3(this,lA(a,d))},indexFromPos:function(b){b=i3(this,b);var a=b.ch;if(b.linea){a=b.from}if(b.to!=null&&b.to-1){b.state.draggingText(d);setTimeout(function(){return b.display.input.focus()},20);return}try{var m=d.dataTransfer.getData("Text");if(m){var g;if(b.state.draggingText&&!b.state.draggingText.copy){g=b.listSelections()}jN(b.doc,j1(c,c));if(g){for(var j=0;j=0;h--){gT(g.doc,"",c[h].from,c[h].to,"+delete")}jl(g)})}var jg={selectAll:nh,singleSelection:function(a){return a.setSelection(a.getCursor("anchor"),a.getCursor("head"),ln)},killLine:function(a){return hL(a,function(b){if(b.empty()){var c=hm(a.doc,b.head.line).text.length;if(b.head.ch==c&&b.head.line0){b=new lA(b.line,b.ch+1);a.replaceRange(g.charAt(b.ch-1)+g.charAt(b.ch-2),lA(b.line,b.ch-2),b,"+transpose")}else{if(b.line>a.doc.first){var c=hm(a.doc,b.line-1).text;if(c){b=new lA(b.line,1);a.replaceRange(g.charAt(0)+a.doc.lineSeparator()+c.charAt(c.length-1),lA(b.line-1,c.length-1),b,"+transpose")}}}}f.push(new lz(b,b))}a.setSelections(f)})},newlineAndIndent:function(a){return lI(a,function(){var d=a.listSelections();for(var c=d.length-1;c>=0;c--){a.replaceRange(a.doc.lineSeparator(),d[c].anchor,d[c].head,"+input")}d=a.listSelections();for(var b=0;bg-400&&kI(jr.pos,a)==0){d="triple"}else{if(i1&&i1.time>g-400&&kI(i1.pos,a)==0){d="double";jr={time:g,pos:a}}else{d="single";i1={time:g,pos:a}}}var c=h.doc.sel,f=k9?b.metaKey:b.ctrlKey,e;if(h.options.dragDrop&&kr&&!h.isReadOnly()&&d=="single"&&(e=c.contains(a))>-1&&(kI((e=c.ranges[e]).from(),a)<0||a.xRel>0)&&(kI(e.to(),a)>0||a.xRel<0)){gR(h,b,a,f)}else{kB(h,b,a,d,f)}}function gR(f,b,a,g){var c=f.display,e=+new Date;var d=mQ(f,function(h){if(mU){c.scroller.draggable=false}f.state.draggingText=false;ih(document,"mouseup",d);ih(c.scroller,"drop",d);if(Math.abs(b.clientX-h.clientX)+Math.abs(b.clientY-h.clientY)<10){l7(h);if(!g&&+new Date-200-1){o=q[s]}else{o=new lz(n,n)}}else{o=r.sel.primary();s=r.sel.primIndex}if(i6?t.shiftKey&&t.metaKey:t.altKey){p="rect";if(!k){o=new lz(n,n)}n=kg(m,t,true,true);s=-1}else{if(p=="double"){var v=m.findWordAt(n);if(m.display.shift||r.extend){o=im(r,o,v.anchor,v.head)}else{o=v}}else{if(p=="triple"){var g=new lz(lA(n.line,0),i3(r,lA(n.line+1,0)));if(m.display.shift||r.extend){o=im(r,o,g.anchor,g.head)}else{o=g}}else{o=im(r,o,n)}}}if(!k){s=0;mL(r,new g0([o],0),l9);l=r.sel}else{if(s==-1){s=q.length;mL(r,mA(q.concat([o]),s),{scroll:false,origin:"*mouse"})}else{if(q.length>1&&q[s].empty()&&p=="single"&&!t.shiftKey){mL(r,mA(q.slice(0,s).concat(q.slice(s+1)),0),{scroll:false,origin:"*mouse"});l=r.sel}else{k2(r,s,o,l9)}}}var b=n;function c(B){if(kI(b,B)==0){return}b=B;if(p=="rect"){var J=[],E=m.options.tabSize;var K=mV(hm(r,n.line).text,n.ch,E);var x=mV(hm(r,B.line).text,B.ch,E);var I=Math.min(K,x),z=Math.max(K,x);for(var w=Math.min(n.line,B.line),G=Math.min(m.lastLine(),Math.max(n.line,B.line));w<=G;w++){var y=hm(r,w).text,H=jM(y,I,E);if(I==z){J.push(new lz(lA(w,H),lA(w,H)))}else{if(y.length>H){J.push(new lz(lA(w,H),lA(w,jM(y,z,E))))}}}if(!J.length){J.push(new lz(n,n))}mL(r,mA(l.ranges.slice(0,s).concat(J),s),{origin:"*mouse",scroll:false});m.scrollIntoView(B)}else{var D=o;var F=D.anchor,C=B;if(p!="single"){var A;if(p=="double"){A=m.findWordAt(B)}else{A=new lz(lA(B.line,0),i3(r,lA(B.line+1,0)))}if(kI(A.anchor,F)>0){C=A.head;F=m3(D.from(),A.anchor)}else{C=A.anchor;F=nD(D.to(),A.head)}}var L=l.ranges.slice(0);L[s]=new lz(i3(r,F),C);mL(r,mA(L,s),l9)}}var e=a.wrapper.getBoundingClientRect();var j=0;function u(x){var z=++j;var A=kg(m,x,true,p=="rect");if(!A){return}if(kI(A,b)!=0){m.curOp.focus=j3();c(A);var w=lc(a,r);if(A.line>=w.to||A.linee.bottom?20:0;if(y){setTimeout(mQ(m,function(){if(j!=z){return}a.scroller.scrollTop+=y;u(x)}),50)}}}function f(w){m.state.selectingText=false;j=Infinity;l7(w);a.input.focus();ih(document,"mousemove",d);ih(document,"mouseup",h);r.history.lastSelOrigin=null}var d=mQ(m,function(w){if(!hi(w)){f(w)}else{u(w)}});var h=mQ(m,f);m.state.selectingText=h;nY(document,"mousemove",d);nY(document,"mouseup",h)}function hC(b,f,d,c){var l,m;try{l=f.clientX;m=f.clientY}catch(f){return false}if(l>=Math.floor(b.display.gutters.getBoundingClientRect().right)){return false}if(c){l7(f)}var e=b.display;var g=e.lineDiv.getBoundingClientRect();if(m>g.bottom||!iI(b,d)){return na(f)}m-=g.top-e.viewOffset;for(var j=0;j=l){var a=nj(b.doc,m);var k=b.options.gutters[j];n9(b,d,b,a,k,f);return na(f)}}}function kE(a,b){return hC(a,b,"gutterClick",true)}function mI(a,b){if(my(a.display,b)||jh(a,b)){return}if(nT(a,b,"contextmenu")){return}a.display.input.onContextMenu(b)}function jh(a,b){if(!iI(a,"gutterContextMenu")){return false}return hC(a,b,"gutterContextMenu",false)}function lC(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-");nm(a)}var kQ={toString:function(){return"CodeMirror.Init"}};var hB={};var mk={};function i0(a){var b=a.optionHandlers;function c(g,d,e,f){a.defaults[g]=d;if(e){b[g]=f?function(h,j,k){if(k!=kQ){e(h,j,k)}}:e}}a.defineOption=c;a.Init=kQ;c("value","",function(e,d){return e.setValue(d)},true);c("mode",null,function(e,d){e.doc.modeOption=d;ly(e)},true);c("indentUnit",2,ly,true);c("indentWithTabs",false);c("smartIndent",true);c("tabSize",4,function(d){h1(d);nm(d);np(d)},true);c("lineSeparator",null,function(h,e){h.doc.lineSep=e;if(!e){return}var f=[],d=h.doc.first;h.doc.iter(function(l){for(var j=0;;){var k=l.text.indexOf(e,j);if(k==-1){break}j=k+e.length;f.push(lA(d,k))}d++});for(var g=f.length-1;g>=0;g--){gT(h.doc,e,f[g],lA(f[g].line,f[g].ch+e.length))}});c("specialChars",/[\u0000-\u001f\u007f\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(f,d,e){f.state.specialChars=new RegExp(d.source+(d.test("\t")?"":"|\t"),"g");if(e!=kQ){f.refresh()}});c("specialCharPlaceholder",hn,function(d){return d.refresh()},true);c("electricChars",true);c("inputStyle",ie?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},true);c("spellcheck",false,function(e,d){return e.getInputField().spellcheck=d},true);c("rtlMoveVisually",!nW);c("wholeLineUpdateBefore",true);c("theme","default",function(d){lC(d);k1(d)},true);c("keyMap","default",function(h,d,g){var f=g6(d);var e=g!=kQ&&g6(g);if(e&&e.detach){e.detach(h,f)}if(f.attach){f.attach(h,e||null)}});c("extraKeys",null);c("lineWrapping",false,i2,true);c("gutters",[],function(d){kK(d.options);k1(d)},true);c("fixedGutter",true,function(e,d){e.display.gutters.style.left=d?lw(e.display)+"px":"0";e.refresh()},true);c("coverGutterNextToScrollbar",false,function(d){return hK(d)},true);c("scrollbarStyle","native",function(d){oa(d);hK(d);d.display.scrollbars.setScrollTop(d.doc.scrollTop);d.display.scrollbars.setScrollLeft(d.doc.scrollLeft)},true);c("lineNumbers",false,function(d){kK(d.options);k1(d)},true);c("firstLineNumber",1,k1,true);c("lineNumberFormatter",function(d){return d},k1,true);c("showCursorWhenSelecting",false,nu,true);c("resetSelectionOnContextMenu",true);c("lineWiseCopyCut",true);c("readOnly",false,function(e,d){if(d=="nocursor"){nL(e);e.display.input.blur();e.display.disabled=true}else{e.display.disabled=false}e.display.input.readOnlyChanged(d)});c("disableInput",false,function(e,d){if(!d){e.display.input.reset()}},true);c("dragDrop",true,g2);c("allowDropFileTypes",null);c("cursorBlinkRate",530);c("cursorScrollMargin",0);c("cursorHeight",1,nu,true);c("singleCursorHeightPerLine",true,nu,true);c("workTime",100);c("workDelay",100);c("flattenSpans",true,h1,true);c("addModeClass",false,h1,true);c("pollInterval",100);c("undoDepth",200,function(e,d){return e.doc.history.undoDepth=d});c("historyEventDelay",1250);c("viewportMargin",10,function(d){return d.refresh()},true);c("maxHighlightLength",10000,h1,true);c("moveInputWithCursor",true,function(e,d){if(!d){e.display.input.resetPosition()}});c("tabindex",null,function(e,d){return e.display.input.getField().tabIndex=d||""});c("autofocus",null)}function k1(a){io(a);np(a);setTimeout(function(){return ja(a)},20)}function g2(f,b,e){var a=e&&e!=kQ;if(!b!=!a){var d=f.display.dragFunctions;var c=b?nY:ih;c(f.display.scroller,"dragstart",d.start);c(f.display.scroller,"dragenter",d.enter);c(f.display.scroller,"dragover",d.over);c(f.display.scroller,"dragleave",d.leave);c(f.display.scroller,"drop",d.drop)}}function i2(a){if(a.options.lineWrapping){h6(a.display.wrapper,"CodeMirror-wrap");a.display.sizer.style.minWidth="";a.display.sizerWidth=null}else{kS(a.display.wrapper,"CodeMirror-wrap");kY(a)}lr(a);np(a);nm(a);setTimeout(function(){return hK(a)},100)}function hx(g,e){var h=this;if(!(this instanceof hx)){return new hx(g,e)}this.options=e=e?n0(e):{};n0(hB,e,false);kK(e);var a=e.value;if(typeof a=="string"){a=new mT(a,e.mode,null,e.lineSeparator)}this.doc=a;var f=new hx.inputStyles[e.inputStyle](this);var b=this.display=new iU(g,a,f);b.wrapper.CodeMirror=this;io(this);lC(this);if(e.lineWrapping){this.display.wrapper.className+=" CodeMirror-wrap"}if(e.autofocus&&!ie){b.input.focus()}oa(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,delayingBlurEvent:false,focused:false,suppressEdits:false,pasteIncoming:false,cutIncoming:false,selectingText:false,draggingText:false,highlight:new hA(),keySeq:null,specialChars:null};if(kj&&kH<11){setTimeout(function(){return h.display.input.reset(true)},20)}hf(this);l8();lY(this);this.curOp.forceUpdate=true;ip(this,a);if((e.autofocus&&!ie)||this.hasFocus()){setTimeout(mD(mm,this),20)}else{nL(this)}for(var c in mk){if(mk.hasOwnProperty(c)){mk[c](h,e[c],kQ)}}iE(this);if(e.finishInit){e.finishInit(this)}for(var d=0;d20*20}nY(c.scroller,"touchstart",function(j){if(!nT(h,j)&&!e(j)){c.input.ensurePolled();clearTimeout(a);var k=+new Date;c.activeTouch={start:k,moved:false,prev:k-f.end<=300?f:null};if(j.touches.length==1){c.activeTouch.left=j.touches[0].pageX;c.activeTouch.top=j.touches[0].pageY}}});nY(c.scroller,"touchmove",function(){if(c.activeTouch){c.activeTouch.moved=true}});nY(c.scroller,"touchend",function(l){var j=c.activeTouch;if(j&&!my(c,l)&&j.left!=null&&!j.moved&&new Date-j.start<300){var k=h.coordsChar(c.activeTouch,"page"),m;if(!j.prev||g(j,j.prev)){m=new lz(k,k)}else{if(!j.prev.prev||g(j,j.prev.prev)){m=h.findWordAt(k)}else{m=new lz(lA(k.line,0),i3(h.doc,lA(k.line+1,0)))}}h.setSelection(m.anchor,m.head);h.focus();l7(l)}b()});nY(c.scroller,"touchcancel",b);nY(c.scroller,"scroll",function(){if(c.scroller.clientHeight){l4(h,c.scroller.scrollTop);nq(h,c.scroller.scrollLeft,true);n9(h,"scroll",h)}});nY(c.scroller,"mousewheel",function(j){return k8(h,j)});nY(c.scroller,"DOMMouseScroll",function(j){return k8(h,j)});nY(c.wrapper,"scroll",function(){return c.wrapper.scrollTop=c.wrapper.scrollLeft=0});c.dragFunctions={enter:function(j){if(!nT(h,j)){jK(j)}},over:function(j){if(!nT(h,j)){hD(h,j);jK(j)}},start:function(j){return l0(h,j)},drop:mQ(h,l5),leave:function(j){if(!nT(h,j)){jx(h)}}};var d=c.input.getField();nY(d,"keyup",function(j){return me.call(h,j)});nY(d,"keydown",mQ(h,kp));nY(d,"keypress",mQ(h,mw));nY(d,"focus",function(j){return mm(h,j)});nY(d,"blur",function(j){return nL(h,j)})}var a9=[];hx.defineInitHook=function(a){return a9.push(a)};function nz(r,l,a,n){var b=r.doc,o;if(a==null){a="add"}if(a=="smart"){if(!b.mode.indent){a="prev"}else{o=kM(r,l)}}var g=r.options.tabSize;var q=hm(b,l),h=mV(q.text,null,g);if(q.stateAfter){q.stateAfter=null}var p=q.text.match(/^\s*/)[0],d;if(!n&&!/\S/.test(q.text)){d=0;a="not"}else{if(a=="smart"){d=b.mode.indent(o,q.text.slice(p.length),q.text);if(d==kU||d>150){if(!n){return}a="prev"}}}if(a=="prev"){if(l>b.first){d=mV(hm(b,l-1).text,null,g)}else{d=0}}else{if(a=="add"){d=h+r.options.indentUnit}else{if(a=="subtract"){d=h-r.options.indentUnit}else{if(typeof a=="number"){d=h+a}}}}d=Math.max(0,d);var c="",e=0;if(r.options.indentWithTabs){for(var k=Math.floor(d/g);k;--k){e+=g;c+="\t"}}if(e1){if(lZ&&lZ.text.join("\n")==k){if(n.ranges.length%lZ.text.length==0){p=[];for(var j=0;j=0;o--){var q=n.ranges[o];var d=q.from(),e=q.to();if(q.empty()){if(m&&m>0){d=lA(d.line,d.ch-m)}else{if(a.state.overwrite&&!l){e=lA(e.line,Math.min(hm(c,e.line).text.length,e.ch+ji(h).length))}else{if(lZ&&lZ.lineWise&&lZ.text.join("\n")==k){d=e=lA(d.line,0)}}}}g=a.curOp.updateInput;var f={from:d,to:e,text:p?p[o%p.length]:h,origin:b||(l?"paste":a.state.cutIncoming?"cut":"+input")};mi(a.doc,f);nw(a,"inputRead",a,f)}if(k&&!l){g7(a,k)}jl(a);a.curOp.updateInput=g;a.curOp.typing=true;a.state.pasteIncoming=a.state.cutIncoming=false}function mz(b,a){var c=b.clipboardData&&b.clipboardData.getData("Text");if(c){b.preventDefault();if(!a.isReadOnly()&&!a.options.disableInput){lI(a,function(){return g4(a,c,0,null,"paste")})}return true}}function g7(g,d){if(!g.options.electricChars||!g.options.smartIndent){return}var c=g.doc.sel;for(var e=c.ranges.length-1;e>=0;e--){var a=c.ranges[e];if(a.head.ch>100||(e&&c.ranges[e-1].head.line==a.head.line)){continue}var b=g.getModeAt(a.head);var h=false;if(b.electricChars){for(var f=0;f-1){h=nz(g,a.head.line,"smart");break}}}else{if(b.electricInput){if(b.electricInput.test(hm(g.doc,a.head.line).text.slice(0,a.head.ch))){h=nz(g,a.head.line,"smart")}}}if(h){nw(g,"electricInput",g,a.head.line)}}}function jf(f){var a=[],d=[];for(var c=0;c0){k2(h.doc,j,new lz(g,m[j].to()),ln)}}else{if(d.head.line>l){nz(h,d.head.line,e,true);l=d.head.line;if(j==h.doc.sel.primIndex){jl(h)}}}}}),getTokenAt:function(d,e){return j4(this,d,e)},getLineTokens:function(d,e){return j4(this,lA(d),e,true)},getTokenTypeAt:function(j){j=i3(this.doc,j);var e=jG(this,hm(this.doc,j.line));var l=0,k=(e.length-1)/2,f=j.ch;var g;if(f==0){g=e[2]}else{for(;;){var h=(l+k)>>1;if((h?e[h*2-1]:0)>=f){k=h}else{if(e[h*2+1]e){g=e;h=true}}f=hm(this.doc,g)}else{f=g}return j8(this,f,{top:0,left:0},j||"page",d).top+(h?this.doc.height-m7(f):0)},defaultTextHeight:function(){return nF(this.display)},defaultCharWidth:function(){return kJ(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(h,l,f,k,d){var j=this.display;h=lL(this,i3(this.doc,h));var g=h.bottom,m=h.left;l.style.position="absolute";l.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(l);j.sizer.appendChild(l);if(k=="over"){g=h.top}else{if(k=="above"||k=="near"){var n=Math.max(j.wrapper.clientHeight,this.doc.height),e=Math.max(j.sizer.clientWidth,j.lineSpace.clientWidth);if((k=="above"||h.bottom+l.offsetHeight>n)&&h.top>l.offsetHeight){g=h.top-l.offsetHeight}else{if(h.bottom+l.offsetHeight<=n){g=h.bottom}}if(m+l.offsetWidth>e){m=e-l.offsetWidth}}}l.style.top=g+"px";l.style.left=l.style.right="";if(d=="right"){m=j.sizer.clientWidth-l.offsetWidth;l.style.right="0px"}else{if(d=="left"){m=0}else{if(d=="middle"){m=(j.sizer.clientWidth-l.offsetWidth)/2}}l.style.left=m+"px"}if(f){mt(this,m,g,m+l.offsetWidth,g+l.offsetHeight)}},triggerOnKeyDown:jC(kp),triggerOnKeyPress:jC(mw),triggerOnKeyUp:me,execCommand:function(d){if(jg.hasOwnProperty(d)){return jg[d].call(null,this)}},triggerElectric:jC(function(d){g7(this,d)}),findPosH:function(j,e,d,g){var k=this;var h=1;if(e<0){h=-1;e=-e}var l=i3(this.doc,j);for(var f=0;f0&&h(e.charAt(k-1))){--k}while(f0.5){lr(this)}n9(this,"refresh",this)}),swapDoc:jC(function(d){var e=this.doc;e.cm=null;ip(this,d);nm(this);this.display.input.reset();this.scrollTo(d.scrollLeft,d.scrollTop);this.curOp.forceScroll=true;nw(this,"swapDoc",this,e);return e}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};nA(a);a.registerHelper=function(e,f,d){if(!b.hasOwnProperty(e)){b[e]=a[e]={_global:[]}}b[e][f]=d};a.registerGlobalHelper=function(e,f,g,d){a.registerHelper(e,f,d);b[e]._global.push({pred:g,val:d})}};function lg(r,m,d,e,k){var g=m.line,f=m.ch,s=d;var p=hm(r,g);function a(){var t=g+d;if(t=r.first+r.size){return false}g=t;return p=hm(r,t)}function b(t){var u=(k?ka:nn)(p,f,d,true);if(u==null){if(!t&&a()){if(k){f=(d<0?lj:md)(p)}else{f=d<0?p.text.length:0}}else{return false}}else{f=u}return true}if(e=="char"){b()}else{if(e=="column"){b(true)}else{if(e=="word"||e=="group"){var c=null,j=e=="group";var q=r.cm&&r.cm.getHelper(m,"wordChars");for(var l=true;;l=false){if(d<0&&!b(!l)){break}var o=p.text.charAt(f)||"\n";var n=mo(o,q)?"w":j&&o=="\n"?"n":!j||/\s/.test(o)?null:"p";if(j&&!l&&!n){n="s"}if(c&&c!=n){if(d<0){d=1;b()}break}if(n){c=n}if(d>0&&!b(!l)){break}}}}}var h=mJ(r,lA(g,f),m,s,true);if(!kI(m,h)){h.hitSide=true}return h}function lB(b,g,k,c){var d=b.doc,e=g.left,f;if(c=="page"){var h=Math.min(b.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);var a=Math.max(h-0.5*nF(b.display),3);f=(k>0?g.bottom:g.top)+k*a}else{if(c=="line"){f=k>0?g.bottom+3:g.top-3}}var j;for(;;){j=hg(b,e,f);if(!j.outside){break}if(k<0?f<=0:f>=d.height){j.hitSide=true;break}f+=k*5}return j}function k7(a){this.cm=a;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new hA();this.composing=null;this.gracePeriod=false;this.readDOMTimeout=null}k7.prototype=n0({init:function(d){var a=this;var e=this,c=e.cm;var b=e.div=d.lineDiv;hh(b,c.options.spellcheck);nY(b,"paste",function(g){if(nT(c,g)||mz(g,c)){return}if(kH<=11){setTimeout(mQ(c,function(){if(!e.pollContent()){np(c)}}),20)}});nY(b,"compositionstart",function(g){a.composing={data:g.data}});nY(b,"compositionupdate",function(g){if(!a.composing){a.composing={data:g.data}}});nY(b,"compositionend",function(g){if(a.composing){if(g.data!=a.composing.data){a.readFromDOMSoon()}a.composing=null}});nY(b,"touchstart",function(){return e.forceCompositionEnd()});nY(b,"input",function(){if(!a.composing){a.readFromDOMSoon()}});function f(k){if(nT(c,k)){return}if(c.somethingSelected()){jJ({lineWise:false,text:c.getSelections()});if(k.type=="cut"){c.replaceSelection("",null,"cut")}}else{if(!c.options.lineWiseCopyCut){return}else{var g=jf(c);jJ({lineWise:true,text:g.text});if(k.type=="cut"){c.operation(function(){c.setSelections(g.ranges,0,ln);c.replaceSelection("",null,"cut")})}}}if(k.clipboardData){k.clipboardData.clearData();var l=lZ.text.join("\n");k.clipboardData.setData("Text",l);if(k.clipboardData.getData("Text")==l){k.preventDefault();return}}var m=nG(),j=m.firstChild;c.display.lineSpace.insertBefore(m,c.display.lineSpace.firstChild);j.value=lZ.text.join("\n");var h=document.activeElement;kf(j);setTimeout(function(){c.display.lineSpace.removeChild(m);h.focus();if(h==b){e.showPrimarySelection()}},50)}nY(b,"copy",f);nY(b,"cut",f)},prepareSelection:function(){var a=i9(this.cm,false);a.focus=this.cm.state.focused;return a},showSelection:function(b,a){if(!b||!this.cm.display.view.length){return}if(b.focus||a){this.showPrimarySelection()}this.showMultipleSelections(b)},showPrimarySelection:function(){var k=window.getSelection(),g=this.cm.doc.sel.primary();var j=mG(this.cm,k.anchorNode,k.anchorOffset);var e=mG(this.cm,k.focusNode,k.focusOffset);if(j&&!j.bad&&e&&!e.bad&&kI(m3(j,e),g.from())==0&&kI(nD(j,e),g.to())==0){return}var l=mq(this.cm,g.from());var f=mq(this.cm,g.to());if(!l&&!f){return}var b=this.cm.display.view;var h=k.rangeCount&&k.getRangeAt(0);if(!l){l={node:b[0].measure.map[2],offset:0}}else{if(!f){var m=b[b.length-1].measure;var a=m.maps?m.maps[m.maps.length-1]:m.map;f={node:a[a.length-1],offset:a[a.length-2]-a[a.length-3]}}}var d;try{d=ki(l.node,l.offset,f.offset,f.node)}catch(c){}if(d){if(!kc&&this.cm.state.focused){k.collapse(l.node,l.offset);if(!d.collapsed){k.removeAllRanges();k.addRange(d)}}else{k.removeAllRanges();k.addRange(d)}if(h&&k.anchorNode==null){k.addRange(h)}else{if(kc){this.startGracePeriod()}}}this.rememberSelection()},startGracePeriod:function(){var a=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){a.gracePeriod=false;if(a.selectionChanged()){a.cm.operation(function(){return a.cm.curOp.selectionChanged=true})}},20)},showMultipleSelections:function(a){mR(this.cm.display.cursorDiv,a.cursors);mR(this.cm.display.selectionDiv,a.selection)},rememberSelection:function(){var a=window.getSelection();this.lastAnchorNode=a.anchorNode;this.lastAnchorOffset=a.anchorOffset;this.lastFocusNode=a.focusNode;this.lastFocusOffset=a.focusOffset},selectionInEditor:function(){var b=window.getSelection();if(!b.rangeCount){return false}var a=b.getRangeAt(0).commonAncestorContainer;return hR(this.div,a)},focus:function(){if(this.cm.options.readOnly!="nocursor"){if(!this.selectionInEditor()){this.showSelection(this.prepareSelection(),true)}this.div.focus()}},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return true},receivedFocus:function(){var a=this;if(this.selectionInEditor()){this.pollSelection()}else{lI(this.cm,function(){return a.cm.curOp.selectionChanged=true})}function b(){if(a.cm.state.focused){a.pollSelection();a.polling.set(a.cm.options.pollInterval,b)}}this.polling.set(this.cm.options.pollInterval,b)},selectionChanged:function(){var a=window.getSelection();return a.anchorNode!=this.lastAnchorNode||a.anchorOffset!=this.lastAnchorOffset||a.focusNode!=this.lastFocusNode||a.focusOffset!=this.lastFocusOffset},pollSelection:function(){if(!this.composing&&this.readDOMTimeout==null&&!this.gracePeriod&&this.selectionChanged()){var b=window.getSelection(),a=this.cm;this.rememberSelection();var d=mG(a,b.anchorNode,b.anchorOffset);var c=mG(a,b.focusNode,b.focusOffset);if(d&&c){lI(a,function(){mL(a.doc,j1(d,c),ln);if(d.bad||c.bad){a.curOp.selectionChanged=true}})}}},pollContent:function(){if(this.readDOMTimeout!=null){clearTimeout(this.readDOMTimeout);this.readDOMTimeout=null}var f=this.cm,t=f.display,v=f.doc.sel.primary();var u=v.from(),m=v.to();if(u.ch==0&&u.line>f.firstLine()){u=lA(u.line-1,hm(f.doc,u.line-1).length)}if(m.ch==hm(f.doc,m.line).text.length&&m.linet.viewTo-1){return false}var j,l,g;if(u.line==t.viewFrom||(j=iR(f,u.line))==0){l=m5(t.view[0].line);g=t.view[0].node}else{l=m5(t.view[j].line);g=t.view[j-1].node.nextSibling}var w=iR(f,m.line);var d,a;if(w==t.view.length-1){d=t.viewTo-1;a=t.lineDiv.lastChild}else{d=m5(t.view[w+1].line)-1;a=t.view[w+1].node.previousSibling}if(!g){return false}var s=f.doc.splitLines(g3(f,g,a,l,d));var b=gY(f.doc,lA(l,0),lA(d,hm(f.doc,d).text.length));while(s.length>1&&b.length>1){if(ji(s)==ji(b)){s.pop();b.pop();d--}else{if(s[0]==b[0]){s.shift();b.shift();l++}else{break}}}var x=0,o=0;var e=s[0],p=b[0],q=Math.min(e.length,p.length);while(x1||s[0]||kI(k,c)){gT(f.doc,s,k,c,"+input");return true}},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){if(!this.composing){return}this.composing=null;if(!this.pollContent()){np(this.cm)}this.div.blur();this.div.focus()},readFromDOMSoon:function(){var a=this;if(this.readDOMTimeout!=null){return}this.readDOMTimeout=setTimeout(function(){a.readDOMTimeout=null;if(a.composing){return}if(a.cm.isReadOnly()||!a.pollContent()){lI(a.cm,function(){return np(a.cm)})}},80)},setUneditable:function(a){a.contentEditable="false"},onKeyPress:function(a){a.preventDefault();if(!this.cm.isReadOnly()){mQ(this.cm,g4)(this.cm,String.fromCharCode(a.charCode==null?a.keyCode:a.charCode),0)}},readOnlyChanged:function(a){this.div.contentEditable=String(a!="nocursor")},onContextMenu:g8,resetPosition:g8,needsContentAttribute:true},k7.prototype);function mq(d,f){var e=hp(d,f.line);if(!e||e.hidden){return null}var b=hm(d.doc,f.line);var j=jT(e,b,f.line);var h=ld(b),g="left";if(h){var a=n6(h,f.ch);g=a%2?"right":"left"}var c=n3(j.map,f.ch,g);c.offset=c.collapse=="right"?c.end:c.start;return c}function jH(b,a){if(a){b.bad=true}return b}function g3(c,e,d,h,k){var a="",j=false,b=c.doc.lineSeparator();function g(l){return function(m){return m.id==l}}function f(o){if(o.nodeType==1){var r=o.getAttribute("cm-text");if(r!=null){if(r==""){a+=o.textContent.replace(/\u200b/g,"")}else{a+=r}return}var p=o.getAttribute("cm-marker"),l;if(p){var n=c.findMarks(lA(h,0),lA(k+1,0),g(+p));if(n.length&&(l=n[0].find())){a+=gY(c.doc,l.from,l.to).join(b)}return}if(o.getAttribute("contenteditable")=="false"){return}for(var q=0;q=9&&a.hasSelection){a.hasSelection=null}g.poll()});nY(d,"paste",function(h){if(nT(e,h)||mz(h,e)){return}e.state.pasteIncoming=true;g.fastPoll()});function c(j){if(nT(e,j)){return}if(e.somethingSelected()){jJ({lineWise:false,text:e.getSelections()});if(g.inaccurateSelection){g.prevInput="";g.inaccurateSelection=false;d.value=lZ.text.join("\n");kf(d)}}else{if(!e.options.lineWiseCopyCut){return}else{var h=jf(e);jJ({lineWise:true,text:h.text});if(j.type=="cut"){e.setSelections(h.ranges,null,ln)}else{g.prevInput="";d.value=h.text.join("\n");kf(d)}}}if(j.type=="cut"){e.state.cutIncoming=true}}nY(d,"cut",c);nY(d,"copy",c);nY(f.scroller,"paste",function(h){if(my(f,h)||nT(e,h)){return}e.state.pasteIncoming=true;g.focus()});nY(f.lineSpace,"selectstart",function(h){if(!my(f,h)){l7(h)}});nY(d,"compositionstart",function(){var h=e.getCursor("from");if(g.composing){g.composing.range.clear()}g.composing={start:h,range:e.markText(h,e.getCursor("to"),{className:"CodeMirror-composing"})}});nY(d,"compositionend",function(){if(g.composing){g.poll();g.composing.range.clear();g.composing=null}})},prepareSelection:function(){var g=this.cm,b=g.display,c=g.doc;var e=i9(g);if(g.options.moveInputWithCursor){var a=lL(g,c.sel.primary().head,"div");var f=b.wrapper.getBoundingClientRect(),d=b.lineDiv.getBoundingClientRect();e.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,a.top+d.top-f.top));e.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,a.left+d.left-f.left))}return e},showSelection:function(b){var a=this.cm,c=a.display;mR(c.cursorDiv,b.cursors);mR(c.selectionDiv,b.selection);if(b.teTop!=null){this.wrapper.style.top=b.teTop+"px";this.wrapper.style.left=b.teLeft+"px"}},reset:function(e){if(this.contextMenuPending){return}var g,f,d=this.cm,b=d.doc;if(d.somethingSelected()){this.prevInput="";var a=b.sel.primary();g=jz&&(a.to().line-a.from().line>100||(f=d.getSelection()).length>1000);var c=g?"-":f||d.getSelection();this.textarea.value=c;if(d.state.focused){kf(this.textarea)}if(kj&&kH>=9){this.hasSelection=c}}else{if(!e){this.prevInput=this.textarea.value="";if(kj&&kH>=9){this.hasSelection=null}}}this.inaccurateSelection=g},getField:function(){return this.textarea},supportsTouch:function(){return false},focus:function(){if(this.cm.options.readOnly!="nocursor"&&(!ie||j3()!=this.textarea)){try{this.textarea.focus()}catch(a){}}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var a=this;if(this.pollingFast){return}this.polling.set(this.cm.options.pollInterval,function(){a.poll();if(a.cm.state.focused){a.slowPoll()}})},fastPoll:function(){var c=false,a=this;a.pollingFast=true;function b(){var d=a.poll();if(!d&&!c){c=true;a.polling.set(60,b)}else{a.pollingFast=false;a.slowPoll()}}a.polling.set(20,b)},poll:function(){var a=this;var f=this.cm,g=this.textarea,e=this.prevInput;if(this.contextMenuPending||!f.state.focused||(lv(g)&&!e&&!this.composing)||f.isReadOnly()||f.options.disableInput||f.state.keySeq){return false}var c=g.value;if(c==e&&!f.somethingSelected()){return false}if(kj&&kH>=9&&this.hasSelection===c||k9&&/[\uf700-\uf7ff]/.test(c)){f.display.input.reset();return false}if(f.doc.sel==f.display.selForContextMenu){var d=c.charCodeAt(0);if(d==8203&&!e){e="\u200b"}if(d==8666){this.reset();return this.cm.execCommand("undo")}}var b=0,h=Math.min(e.length,c.length);while(b1000||c.indexOf("\n")>-1){g.value=a.prevInput=""}else{a.prevInput=c}if(a.composing){a.composing.range.clear();a.composing.range=f.markText(a.composing.start,f.getCursor("to"),{className:"CodeMirror-composing"})}});return true},ensurePolled:function(){if(this.pollingFast&&this.poll()){this.pollingFast=false}},onKeyPress:function(){if(kj&&kH>=9){this.hasSelection=null}this.fastPoll()},onContextMenu:function(l){var e=this,d=e.cm,j=d.display,p=e.textarea;var f=kg(d,l),g=j.scroller.scrollTop;if(!f||iL){return}var m=d.options.resetSelectionOnContextMenu;if(m&&d.doc.sel.contains(f)==-1){mQ(d,mL)(d.doc,j1(f),ln)}var k=p.style.cssText,a=e.wrapper.style.cssText;e.wrapper.style.cssText="position: absolute";var b=e.wrapper.getBoundingClientRect();p.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(l.clientY-b.top-5)+"px; left: "+(l.clientX-b.left-5)+"px;\n z-index: 1000; background: "+(kj?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var c;if(mU){c=window.scrollY}j.input.focus();if(mU){window.scrollTo(null,c)}j.input.reset();if(!d.somethingSelected()){p.value=e.prevInput=" "}e.contextMenuPending=true;j.selForContextMenu=d.doc.sel;clearTimeout(j.detectingSelectAll);function n(){if(p.selectionStart!=null){var r=d.somethingSelected();var q="\u200b"+(r?p.value:"");p.value="\u21da";p.value=q;e.prevInput=r?"":"\u200b";p.selectionStart=1;p.selectionEnd=q.length;j.selForContextMenu=d.doc.sel}}function h(){e.contextMenuPending=false;e.wrapper.style.cssText=a;p.style.cssText=k;if(kj&&kH<9){j.scrollbars.setScrollTop(j.scroller.scrollTop=g)}if(p.selectionStart!=null){if(!kj||(kj&&kH<9)){n()}var r=0,q=function(){if(j.selForContextMenu==d.doc.sel&&p.selectionStart==0&&p.selectionEnd>0&&e.prevInput=="\u200b"){mQ(d,nh)(d)}else{if(r++<10){j.detectingSelectAll=setTimeout(q,500)}else{j.input.reset()}}};j.detectingSelectAll=setTimeout(q,200)}}if(kj&&kH>=9){n()}if(hT){jK(l);var o=function(){ih(window,"mouseup",o);setTimeout(h,20)};nY(window,"mouseup",o)}else{setTimeout(h,50)}},readOnlyChanged:function(a){if(!a){this.reset()}},setUneditable:g8,needsContentAttribute:false},lt.prototype);function je(c,b){b=b?n0(b):{};b.value=c.value;if(!b.tabindex&&c.tabIndex){b.tabindex=c.tabIndex}if(!b.placeholder&&c.placeholder){b.placeholder=c.placeholder}if(b.autofocus==null){var a=j3();b.autofocus=a==c||c.getAttribute("autofocus")!=null&&a==document.body}function f(){c.value=d.getValue()}var e;if(c.form){nY(c.form,"submit",f);if(!b.leaveSubmitMethodAlone){var j=c.form;e=j.submit;try{var g=j.submit=function(){f();j.submit=e;j.submit();j.submit=g}}catch(h){}}}b.finishInit=function(k){k.save=f;k.getTextArea=function(){return c};k.toTextArea=function(){k.toTextArea=isNaN;f();c.parentNode.removeChild(k.getWrapperElement());c.style.display="";if(c.form){ih(c.form,"submit",f);if(typeof c.form.submit=="function"){c.form.submit=e}}}};c.style.display="none";var d=hx(function(k){return c.parentNode.insertBefore(k,c.nextSibling)},b);return d}function iZ(a){a.off=ih;a.on=nY;a.wheelEventPixels=mF;a.Doc=mT;a.splitLines=hd;a.countColumn=mV;a.findColumn=jM;a.isWordChar=h0;a.Pass=kU;a.signal=n9;a.Line=gW;a.changeEnd=m1;a.scrollbarModel=lX;a.Pos=lA;a.cmpPos=kI;a.modes=le;a.mimeModes=nQ;a.resolveMode=hP;a.getMode=h8;a.modeExtensions=iV;a.extendMode=jc;a.copyState=nK;a.startState=nR;a.innerMode=hX;a.commands=jg;a.keyMap=hq;a.keyName=iw;a.isModifierKey=jm;a.lookupKey=kN;a.normalizeKeyMap=l2;a.StringStream=hU;a.SharedTextMarker=jZ;a.TextMarker=lV;a.LineWidget=kO;a.e_preventDefault=l7;a.e_stopPropagation=iT;a.e_stop=jK;a.addClass=h6;a.contains=hR;a.rmClass=kS;a.keyNames=iQ}i0(hx);jX(hx);var k4="iter insert remove copy getEditor constructor".split(" ");for(var nd in mT.prototype){if(mT.prototype.hasOwnProperty(nd)&&jb(k4,nd)<0){hx.prototype[nd]=(function(a){return function(){return a.apply(this.doc,arguments)}})(mT.prototype[nd])}}nA(mT);hx.inputStyles={textarea:lt,contenteditable:k7};hx.defineMode=function(a){if(!hx.defaults.mode&&a!="null"){hx.defaults.mode=a}jE.apply(this,arguments)};hx.defineMIME=lT;hx.defineMode("null",function(){return({token:function(a){return a.skipToEnd()}})});hx.defineMIME("text/plain","null");hx.defineExtension=function(a,b){hx.prototype[a]=b};hx.defineDocExtension=function(a,b){mT.prototype[a]=b};hx.fromTextArea=je;iZ(hx);hx.version="5.21.0";return hx}))); \ No newline at end of file diff --git a/BTPanel/static/codemirror/lib/index.html b/BTPanel/static/codemirror/lib/index.html new file mode 100644 index 00000000..35c63e8b --- /dev/null +++ b/BTPanel/static/codemirror/lib/index.html @@ -0,0 +1,13 @@ +
+

目标URL

+

发送域名

+

内容替换

+
+
    +
  • 目标Url必需是可以访问的,否则将直接502
  • +
  • 默认本站点所有域名访问将被传递到目标服务器,请确保目标服务器已绑定域名
  • +
  • 若您是被动代理,请在发送域名处填写上目标站点的域名
  • +
  • 若您不需要内容替换功能,请直接留空
  • +
  • 可通过purge清理指定URL的缓存,示例:http://test.com/purge/test.png
  • +
+
\ No newline at end of file diff --git a/BTPanel/static/js/database.js b/BTPanel/static/js/database.js index 714c60a3..93c346fd 100644 --- a/BTPanel/static/js/database.js +++ b/BTPanel/static/js/database.js @@ -105,7 +105,7 @@ var database = { shadeClose: false, content: '
\ \ diff --git a/BTPanel/static/js/files.js b/BTPanel/static/js/files.js index 2ff41371..df4d180d 100644 --- a/BTPanel/static/js/files.js +++ b/BTPanel/static/js/files.js @@ -773,7 +773,7 @@ function php_file_webshell(file) { } function auto_table_width() { - var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 111; + var oldTable = $(window).height() - $('#tipTools')[0].getBoundingClientRect().height - $('#filePage')[0].getBoundingClientRect().height - $('.footer')[0].getBoundingClientRect().height - 121; var oldTable_heigth = $('.oldTable table').height(); $('.oldTable thead th').each(function (index, el) { var table_th = $('.oldTable thead th').length; diff --git a/BTPanel/static/js/public.js b/BTPanel/static/js/public.js index bc18a01a..132156d6 100644 --- a/BTPanel/static/js/public.js +++ b/BTPanel/static/js/public.js @@ -479,7 +479,7 @@ var aceEditor = { var _html = '', _arry = ['White', 'Black']; for (var i = 0; i < _this.themeList.length; i++) { - if (_this.themeList[i] != _this.editorTheme) { + if (_this.aceConfig.themeList[i] != _this.aceConfig.aceEditor.editorTheme) { _html += '
  • ' + _this.themeList[i] + '【' + _arry[i] + '】
  • '; } else { _html += '
  • ' + _this.themeList[i] + '【' + _arry[i] + '】' + _icon + '
  • '; @@ -906,6 +906,26 @@ var aceEditor = { this.setEditorView(); this.reader_file_dir_menu(); }, + // 设置本地存储,设置类型type:session或local + setStorage:function(type,key,val){ + if(type != "local" && type != "session") val = key,key = type,type = 'session'; + window[type+'Storage'].setItem(key,val); + }, + //获取指定本地存储,设置类型type:session或local + getStorage:function(type,key){ + if(type != "local" && type != "session") key = type,type = 'session'; + return window[type+'Storage'].getItem(key); + }, + //删除指定本地存储,设置类型type:session或local + removeStorage:function(type,key){ + if(type != "local" && type != "session") key = type,type = 'session'; + window[type+'Storage'].removeItem(key); + }, + // 删除指定类型的所有存储信息 + clearStorage:function(type){ + if(type != "local" && type != "session") key = type,type = 'session'; + window[type+'Storage'].clear(); + }, // 新建文件类型 newly_file_type: function(that) { var _type = parseInt($(that).attr('data-type')), @@ -1480,7 +1500,7 @@ var aceEditor = { if (this.editor == null) this.editor = {}; this.editor['ace_editor_' + obj.id] = { ace: ace.edit("ace_editor_" + obj.id, { - theme: "ace/theme/" + _this.editorTheme, //主题 + theme: "ace/theme/" + _this.aceConfig.aceEditor.editorTheme, //主题 mode: "ace/mode/" + (obj.fileName != undefined ? obj.mode : 'text'), // 语言类型 wrap: _this.aceConfig.aceEditor.wrap, showInvisibles: _this.aceConfig.aceEditor.showInvisibles, @@ -1717,7 +1737,7 @@ var aceEditor = { tips:true, },function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(data)); + _this.setStorage('aceConfig',JSON.stringify(data)); if(callback) callback(rdata); }); }, @@ -1726,7 +1746,7 @@ var aceEditor = { var loadT = layer.msg(lan.public.get_ace_config,{time: 0,icon: 16,shade: [0.3, '#000']}),_this = this; this.getFileBody({path:'/www/server/panel/BTPanel/static/ace/ace.editor.config.json'},function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(rdata.data)); + _this.setStorage('aceConfig',JSON.stringify(rdata.data)); if(callback) callback(JSON.parse(rdata.data)); }); }, @@ -1734,7 +1754,7 @@ var aceEditor = { var loadT = layer.msg(lan.public.get_ace_config,{time: 0,icon: 16,shade: [0.3, '#000']}),_this = this; this.getFileBody({path:'/www/server/panel/BTPanel/static/ace/ace.editor.config.json'},function(rdata){ layer.close(loadT); - setCookie('aceConfig',JSON.stringify(rdata.data)); + _this.setStorage('aceConfig',JSON.stringify(rdata.data)); if(callback) callback(JSON.parse(rdata.data)); }); }, @@ -1818,7 +1838,7 @@ function openEditorView(type, path) { aceEditor.setEditorView(); }); } - var aceConfig = getCookie('aceConfig'); + var aceConfig = aceEditor.getStorage('aceConfig'); if(aceConfig == null){ // 获取编辑器配置 aceEditor.getAceConfig(function(res){ @@ -2905,6 +2925,7 @@ function setSelectChecked(c, d) { GetTaskCount(); function RecInstall() { + $.getScript('jquery.fly.min.js.js'); $.post("/ajax?action=GetSoftList", "", function(l) { var c = ""; var g = ""; diff --git a/BTPanel/static/js/site.js b/BTPanel/static/js/site.js index de5a1da9..4fef6343 100644 --- a/BTPanel/static/js/site.js +++ b/BTPanel/static/js/site.js @@ -1459,12 +1459,11 @@ var site = { }, get_rewrite_list: function(web) { var filename = '/www/server/panel/vhost/rewrite/' + web.name + '.conf'; - bt.site.get_rewrite_list(web.name, function(rdata) { - if (bt.get_cookie('serverType') == 'apache' || bt.get_cookie('serverType') == 'openlitespeed') filename = rdata.sitePath + '/.htaccess'; - var arrs = []; + var arrs = [], webserver = bt.get_cookie('serverType'); + if (webserver == 'apache' || webserver == 'openlitespeed') filename = rdata.sitePath + '/.htaccess'; + if (webserver == 'openlitespeed') webserver = 'apache'; for (var i = 0; i < rdata.rewrite.length; i++) arrs.push({ title: rdata.rewrite[i], value: rdata.rewrite[i] }); - var datas = [{ name: 'rewrite', type: 'select', @@ -1473,7 +1472,7 @@ var site = { callback: function(obj) { if (bt.os == 'Linux') { var spath = filename; - if (obj.val() != lan.site.rewritename) spath = '/www/server/panel/rewrite/' + bt.get_cookie('serverType') + '/' + obj.val() + '.conf'; + if (obj.val() != lan.site.rewritename) spath = '/www/server/panel/rewrite/' + webserver + '/' + obj.val() + '.conf'; bt.files.get_file_body(spath, function(ret) { editor.setValue(ret.data); }) diff --git a/class/ajax.py b/class/ajax.py index a8976e0d..6ffbb287 100644 --- a/class/ajax.py +++ b/class/ajax.py @@ -561,6 +561,7 @@ class ajax: phplib = json.loads(public.readFile('data/phplib.conf')) libs = [] tasks = public.M('tasks').where("status!=?",('1',)).field('status,name').select() + phpini_ols = None for lib in phplib: lib['task'] = '1' for task in tasks: @@ -574,9 +575,10 @@ class ajax: if public.get_webserver() == 'openlitespeed': lib['status'] = False get.php_version = "{}.{}".format(get.version[0],get.version[1]) - phpini = self.php_info(get)['phpinfo']['modules'].lower() - phpini = phpini.split() - for i in phpini: + if not phpini_ols: + phpini_ols = self.php_info(get)['phpinfo']['modules'].lower() + phpini_ols = phpini_ols.split() + for i in phpini_ols: if lib['check'][:-3].lower() == i : lib['status'] = True break @@ -596,20 +598,37 @@ class ajax: #获取PHP扩展 def getCloudPHPExt(self,get): - import json try: + self._process_chinese_ext_description() if 'php_ext' in session: return True - if not session.get('download_url'): session['download_url'] = 'http://download.bt.cn' - download_url = session['download_url'] + '/install/lib/phplib_en.json' - tstr = public.httpGet(download_url) - data = json.loads(tstr) - if not data: return False - public.writeFile('data/phplib.conf',json.dumps(data)) + if not self._get_cloud_phplib(): + return False session['php_ext'] = True return True except: return False - + + # 处理PHP插件变描述中文 + def _process_chinese_ext_description(self): + chinese = None + phplib = json.loads(public.readFile('data/phplib.conf')) + for p in phplib: + if "缓存器" in p['type']: + chinese = True + break + if chinese: + self._get_cloud_phplib() + + # 下载云端php扩展配置 + def _get_cloud_phplib(self): + if not session.get('download_url'): session['download_url'] = 'http://download.bt.cn' + download_url = session['download_url'] + '/install/lib/phplib_en.json' + tstr = public.httpGet(download_url) + data = json.loads(tstr) + if not data: return False + public.writeFile('data/phplib.conf', json.dumps(data)) + return True + #取PHPINFO信息 def GetPHPInfo(self,get): if public.get_webserver() == "openlitespeed": diff --git a/class/common.py b/class/common.py index 31a3e0f4..91487102 100644 --- a/class/common.py +++ b/class/common.py @@ -34,7 +34,7 @@ class panelSetup: ua = ua.lower() if ua.find('spider') != -1 or ua.find('bot') != -1: return redirect('https://www.google.com') - g.version = '6.6.7' + g.version = '6.6.9' g.title = public.GetConfigValue('title') g.uri = request.path if not os.path.exists('data/debug.pl'): diff --git a/class/config.py b/class/config.py index 444e4bae..eb363abf 100644 --- a/class/config.py +++ b/class/config.py @@ -892,6 +892,7 @@ class config: # 设置Session缓存方式 def SetSessionConf(self, get): + import glob g = get.save_handler ip = get.ip port = get.port @@ -910,22 +911,29 @@ class config: if re.search(prep, passwd): return public.returnMsg(False, 'SPECIAL_CHARACTRES', ('" ~ ` / = "')) filename = '/www/server/php/' + get.version + '/etc/php.ini' - filename_ols = '/usr/local/lsws/lsphp{}/etc/php/{}.{}/litespeed/php.ini'.format(get.version, get.version[0], - get.version[1]) - if os.path.exists('/etc/redhat-release'): - filename_ols = '/usr/local/lsws/lsphp' + get.version + '/etc/php.ini' - ols_php_os_path = "/usr/local/lsws/lsphp{}/lib/php/20*/".format(get.version) - if os.path.exists("/etc/redhat-release"): - ols_php_os_path = '/usr/local/lsws/lsphp{}/lib64/php/modules/'.format(get.version) - ols_so_list = os.listdir(ols_php_os_path) + filename_ols = None + if os.path.exists("/usr/local/lsws"): + filename_ols = '/usr/local/lsws/lsphp{}/etc/php/{}.{}/litespeed/php.ini'.format(get.version, get.version[0], + get.version[1]) + if os.path.exists('/etc/redhat-release'): + filename_ols = '/usr/local/lsws/lsphp' + get.version + '/etc/php.ini' + try: + ols_php_os_path = glob.glob("/usr/local/lsws/lsphp{}/lib/php/20*".format(get.version))[0] + except: + ols_php_os_path = None + if os.path.exists("/etc/redhat-release"): + ols_php_os_path = '/usr/local/lsws/lsphp{}/lib64/php/modules/'.format(get.version) + ols_so_list = os.listdir(ols_php_os_path) for f in [filename,filename_ols]: + if not f: + continue phpini = public.readFile(f) rep = r'session.save_handler\s*=\s*(.+)\r?\n' val = r'session.save_handler = ' + g + '\n' phpini = re.sub(rep, val, phpini) if g == "memcached": if not re.search("memcached.so", phpini) and "memcached.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) rep = r'\nsession.save_path\s*=\s*(.+)\r?\n' val = r'\nsession.save_path = "%s:%s" \n' % (ip,port) if re.search(rep, phpini): @@ -934,7 +942,7 @@ class config: phpini = re.sub('\n;session.save_path = "/tmp"', '\n;session.save_path = "/tmp"' + val, phpini) if g == "memcache": if not re.search("memcache.so", phpini) and "memcache.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) rep = r'\nsession.save_path\s*=\s*(.+)\r?\n' val = r'\nsession.save_path = "tcp://%s:%s"\n' % (ip, port) if re.search(rep, phpini): @@ -943,7 +951,7 @@ class config: phpini = re.sub('\n;session.save_path = "/tmp"', '\n;session.save_path = "/tmp"' + val, phpini) if g == "redis": if not re.search("redis.so", phpini) and "redis.so" not in ols_so_list: - return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g)) + return public.returnMsg(False, 'INSTALL_EXTEND_FIRST', (g,)) if passwd: passwd = "?auth=" + passwd else: diff --git a/class/files.py b/class/files.py index aaae2978..273bfe45 100644 --- a/class/files.py +++ b/class/files.py @@ -785,6 +785,7 @@ session.save_handler = files'''.format(path, sess_path, sess_path) public.WriteLog('TYPE_FILE', 'FILE_COPY_SUCCESS', (get.sfile, get.dfile)) stat = os.stat(get.sfile) + os.chmod(get.dfile,stat.st_mode) os.chown(get.dfile, stat.st_uid, stat.st_gid) return public.returnMsg(True, 'FILE_COPY_SUCCESS') except: @@ -807,6 +808,7 @@ session.save_handler = files'''.format(path, sess_path, sess_path) try: self.copytree(get.sfile, get.dfile) stat = os.stat(get.sfile) + os.chmod(get.dfile,stat.st_mode) os.chown(get.dfile, stat.st_uid, stat.st_gid) public.WriteLog('TYPE_FILE', 'DIR_COPY_SUCCESS', (get.sfile, get.dfile)) @@ -825,8 +827,11 @@ session.save_handler = files'''.format(path, sess_path, sess_path) if get.sfile == '/www/Recycle_bin': return public.returnMsg(False,'You cannot directly operate the recycle bin directory, please press the [Recycle Bin] button in the upper right corner to open') if not os.path.exists(get.sfile): - return public.returnMsg(False,'FILE_NOT_EXISTS') - + return public.returnMsg(False, 'FILE_NOT_EXISTS') + + if get.dfile[-1] == '/': + get.dfile = get.dfile[:-1] + if get.dfile == get.sfile: return public.returnMsg(False,'Meaningless operation') @@ -1331,6 +1336,11 @@ session.save_handler = files'''.format(path, sess_path, sess_path) os.remove(sfile) return True + + #创建软链 + def create_link(self,args): + pass + # 复制目录 def copytree(self, sfile, dfile): if sfile == dfile: diff --git a/class/panelBackup.py b/class/panelBackup.py index a969a559..0937a09a 100644 --- a/class/panelBackup.py +++ b/class/panelBackup.py @@ -28,6 +28,7 @@ class backup: _inode_min = 10 _db_mysql = None _cloud = None + _local_backdir = None _is_save_local = not os.path.exists('data/is_save_local_backup.pl') def __init__(self,cloud_object = None): ''' @@ -194,6 +195,7 @@ class backup: self.echo_info('Keep the latest number of backups: {} copies'.format(save)) num = len(backups) - int(save) if num > 0: + self._get_local_backdir() self.echo_info('-' * 90) for backup in backups: #处理目录备份到远程的情况 @@ -203,7 +205,10 @@ class backup: backup['name'] = tmp[-1] #尝试删除本地文件 if os.path.exists(backup['filename']): - os.remove(backup['filename']) + try: + os.remove(self._local_backdir + '/'+ data_type +'/' + backup['name']) + except: + pass self.echo_info("Expired backup files have been cleaned from disk:" + backup['filename']) #尝试删除远程文件 if self._cloud: @@ -215,6 +220,10 @@ class backup: num -= 1 if num < 1: break + # 获取本地备份目录 + def _get_local_backdir(self): + self._local_backdir = public.M('config').field('backup_path').find()['backup_path'] + #压缩目录 def backup_path_to(self,spath,dfile,exclude = [],siteName = None): if not os.path.exists(spath): @@ -445,7 +454,7 @@ class backup: else: backups = public.M('backup').where('type=? and pid=? and filename=?',('1',pid,filename)).field('id,name,filename').select() - + self.echo_info(str(backups)) self.delete_old(backups,save,'database') self.echo_end() return dfile diff --git a/class/php_info.php b/class/php_info.php index 4ea1d1ca..663e6db9 100644 --- a/class/php_info.php +++ b/class/php_info.php @@ -75,6 +75,6 @@ function get_info(){ return $data; } $result = get_info(); -exit(json_encode($result,1)); +exit(json_encode($result)); diff --git a/task.py b/task.py index 3829be3f..9adbeec8 100644 --- a/task.py +++ b/task.py @@ -45,6 +45,7 @@ def ExecShell(cmdstring, cwd=None, timeout=None, shell=True): import datetime import subprocess import time + subprocess.Popen('echo > ' + logPath, cwd=cwd, stdin=subprocess.PIPE, shell=shell, bufsize=4096) sub = subprocess.Popen(cmdstring+' &> '+logPath, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096) while sub.poll() is None: