@wendongfly/myhi 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/lib/xterm/LICENSE +21 -0
  3. package/dist/lib/xterm/README.md +225 -0
  4. package/dist/lib/xterm/css/xterm.css +190 -0
  5. package/dist/lib/xterm/lib/xterm.js +2 -0
  6. package/dist/lib/xterm/lib/xterm.js.map +1 -0
  7. package/dist/lib/xterm/package.json +90 -0
  8. package/dist/lib/xterm/src/browser/AccessibilityManager.ts +301 -0
  9. package/dist/lib/xterm/src/browser/Clipboard.ts +99 -0
  10. package/dist/lib/xterm/src/browser/ColorContrastCache.ts +39 -0
  11. package/dist/lib/xterm/src/browser/ColorManager.ts +268 -0
  12. package/dist/lib/xterm/src/browser/Dom.ts +10 -0
  13. package/dist/lib/xterm/src/browser/Lifecycle.ts +30 -0
  14. package/dist/lib/xterm/src/browser/Linkifier.ts +356 -0
  15. package/dist/lib/xterm/src/browser/Linkifier2.ts +397 -0
  16. package/dist/lib/xterm/src/browser/LocalizableStrings.ts +10 -0
  17. package/dist/lib/xterm/src/browser/MouseZoneManager.ts +236 -0
  18. package/dist/lib/xterm/src/browser/RenderDebouncer.ts +82 -0
  19. package/dist/lib/xterm/src/browser/ScreenDprMonitor.ts +69 -0
  20. package/dist/lib/xterm/src/browser/Terminal.ts +1447 -0
  21. package/dist/lib/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  22. package/dist/lib/xterm/src/browser/Types.d.ts +317 -0
  23. package/dist/lib/xterm/src/browser/Viewport.ts +276 -0
  24. package/dist/lib/xterm/src/browser/decorations/BufferDecorationRenderer.ts +131 -0
  25. package/dist/lib/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  26. package/dist/lib/xterm/src/browser/decorations/OverviewRulerRenderer.ts +228 -0
  27. package/dist/lib/xterm/src/browser/input/CompositionHelper.ts +237 -0
  28. package/dist/lib/xterm/src/browser/input/Mouse.ts +64 -0
  29. package/dist/lib/xterm/src/browser/input/MoveToCell.ts +249 -0
  30. package/dist/lib/xterm/src/browser/public/Terminal.ts +298 -0
  31. package/dist/lib/xterm/src/browser/renderer/BaseRenderLayer.ts +582 -0
  32. package/dist/lib/xterm/src/browser/renderer/CursorRenderLayer.ts +378 -0
  33. package/dist/lib/xterm/src/browser/renderer/CustomGlyphs.ts +632 -0
  34. package/dist/lib/xterm/src/browser/renderer/GridCache.ts +33 -0
  35. package/dist/lib/xterm/src/browser/renderer/LinkRenderLayer.ts +84 -0
  36. package/dist/lib/xterm/src/browser/renderer/Renderer.ts +219 -0
  37. package/dist/lib/xterm/src/browser/renderer/RendererUtils.ts +26 -0
  38. package/dist/lib/xterm/src/browser/renderer/SelectionRenderLayer.ts +131 -0
  39. package/dist/lib/xterm/src/browser/renderer/TextRenderLayer.ts +344 -0
  40. package/dist/lib/xterm/src/browser/renderer/Types.d.ts +109 -0
  41. package/dist/lib/xterm/src/browser/renderer/atlas/BaseCharAtlas.ts +58 -0
  42. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasCache.ts +95 -0
  43. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasUtils.ts +54 -0
  44. package/dist/lib/xterm/src/browser/renderer/atlas/Constants.ts +15 -0
  45. package/dist/lib/xterm/src/browser/renderer/atlas/DynamicCharAtlas.ts +404 -0
  46. package/dist/lib/xterm/src/browser/renderer/atlas/LRUMap.ts +136 -0
  47. package/dist/lib/xterm/src/browser/renderer/atlas/Types.d.ts +29 -0
  48. package/dist/lib/xterm/src/browser/renderer/dom/DomRenderer.ts +403 -0
  49. package/dist/lib/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +344 -0
  50. package/dist/lib/xterm/src/browser/selection/SelectionModel.ts +144 -0
  51. package/dist/lib/xterm/src/browser/selection/Types.d.ts +15 -0
  52. package/dist/lib/xterm/src/browser/services/CharSizeService.ts +87 -0
  53. package/dist/lib/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  54. package/dist/lib/xterm/src/browser/services/CoreBrowserService.ts +20 -0
  55. package/dist/lib/xterm/src/browser/services/MouseService.ts +36 -0
  56. package/dist/lib/xterm/src/browser/services/RenderService.ts +237 -0
  57. package/dist/lib/xterm/src/browser/services/SelectionService.ts +1027 -0
  58. package/dist/lib/xterm/src/browser/services/Services.ts +123 -0
  59. package/dist/lib/xterm/src/browser/services/SoundService.ts +63 -0
  60. package/dist/lib/xterm/src/common/CircularList.ts +239 -0
  61. package/dist/lib/xterm/src/common/Clone.ts +23 -0
  62. package/dist/lib/xterm/src/common/Color.ts +285 -0
  63. package/dist/lib/xterm/src/common/CoreTerminal.ts +300 -0
  64. package/dist/lib/xterm/src/common/EventEmitter.ts +69 -0
  65. package/dist/lib/xterm/src/common/InputHandler.ts +3230 -0
  66. package/dist/lib/xterm/src/common/Lifecycle.ts +68 -0
  67. package/dist/lib/xterm/src/common/Platform.ts +31 -0
  68. package/dist/lib/xterm/src/common/SortedList.ts +88 -0
  69. package/dist/lib/xterm/src/common/TypedArrayUtils.ts +50 -0
  70. package/dist/lib/xterm/src/common/Types.d.ts +489 -0
  71. package/dist/lib/xterm/src/common/WindowsMode.ts +27 -0
  72. package/dist/lib/xterm/src/common/buffer/AttributeData.ts +148 -0
  73. package/dist/lib/xterm/src/common/buffer/Buffer.ts +711 -0
  74. package/dist/lib/xterm/src/common/buffer/BufferLine.ts +441 -0
  75. package/dist/lib/xterm/src/common/buffer/BufferRange.ts +13 -0
  76. package/dist/lib/xterm/src/common/buffer/BufferReflow.ts +220 -0
  77. package/dist/lib/xterm/src/common/buffer/BufferSet.ts +131 -0
  78. package/dist/lib/xterm/src/common/buffer/CellData.ts +94 -0
  79. package/dist/lib/xterm/src/common/buffer/Constants.ts +139 -0
  80. package/dist/lib/xterm/src/common/buffer/Marker.ts +37 -0
  81. package/dist/lib/xterm/src/common/buffer/Types.d.ts +64 -0
  82. package/dist/lib/xterm/src/common/data/Charsets.ts +256 -0
  83. package/dist/lib/xterm/src/common/data/EscapeSequences.ts +153 -0
  84. package/dist/lib/xterm/src/common/input/Keyboard.ts +398 -0
  85. package/dist/lib/xterm/src/common/input/TextDecoder.ts +346 -0
  86. package/dist/lib/xterm/src/common/input/UnicodeV6.ts +133 -0
  87. package/dist/lib/xterm/src/common/input/WriteBuffer.ts +229 -0
  88. package/dist/lib/xterm/src/common/input/XParseColor.ts +80 -0
  89. package/dist/lib/xterm/src/common/parser/Constants.ts +58 -0
  90. package/dist/lib/xterm/src/common/parser/DcsParser.ts +192 -0
  91. package/dist/lib/xterm/src/common/parser/EscapeSequenceParser.ts +796 -0
  92. package/dist/lib/xterm/src/common/parser/OscParser.ts +238 -0
  93. package/dist/lib/xterm/src/common/parser/Params.ts +229 -0
  94. package/dist/lib/xterm/src/common/parser/Types.d.ts +274 -0
  95. package/dist/lib/xterm/src/common/public/AddonManager.ts +56 -0
  96. package/dist/lib/xterm/src/common/public/BufferApiView.ts +35 -0
  97. package/dist/lib/xterm/src/common/public/BufferLineApiView.ts +29 -0
  98. package/dist/lib/xterm/src/common/public/BufferNamespaceApi.ts +33 -0
  99. package/dist/lib/xterm/src/common/public/ParserApi.ts +37 -0
  100. package/dist/lib/xterm/src/common/public/UnicodeApi.ts +27 -0
  101. package/dist/lib/xterm/src/common/services/BufferService.ts +185 -0
  102. package/dist/lib/xterm/src/common/services/CharsetService.ts +34 -0
  103. package/dist/lib/xterm/src/common/services/CoreMouseService.ts +309 -0
  104. package/dist/lib/xterm/src/common/services/CoreService.ts +92 -0
  105. package/dist/lib/xterm/src/common/services/DecorationService.ts +139 -0
  106. package/dist/lib/xterm/src/common/services/DirtyRowService.ts +53 -0
  107. package/dist/lib/xterm/src/common/services/InstantiationService.ts +83 -0
  108. package/dist/lib/xterm/src/common/services/LogService.ts +88 -0
  109. package/dist/lib/xterm/src/common/services/OptionsService.ts +178 -0
  110. package/dist/lib/xterm/src/common/services/ServiceRegistry.ts +49 -0
  111. package/dist/lib/xterm/src/common/services/Services.ts +323 -0
  112. package/dist/lib/xterm/src/common/services/UnicodeService.ts +82 -0
  113. package/dist/lib/xterm/src/headless/Terminal.ts +170 -0
  114. package/dist/lib/xterm/src/headless/Types.d.ts +31 -0
  115. package/dist/lib/xterm/src/headless/public/Terminal.ts +216 -0
  116. package/dist/lib/xterm/typings/xterm.d.ts +1872 -0
  117. package/dist/lib/xterm-fit/LICENSE +19 -0
  118. package/dist/lib/xterm-fit/README.md +24 -0
  119. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js +2 -0
  120. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js.map +1 -0
  121. package/dist/lib/xterm-fit/out/FitAddon.js +58 -0
  122. package/dist/lib/xterm-fit/out/FitAddon.js.map +1 -0
  123. package/dist/lib/xterm-fit/out-test/FitAddon.api.js.map +1 -0
  124. package/dist/lib/xterm-fit/package.json +21 -0
  125. package/dist/lib/xterm-fit/src/FitAddon.ts +86 -0
  126. package/dist/lib/xterm-fit/typings/xterm-addon-fit.d.ts +55 -0
  127. package/dist/lib/xterm-links/LICENSE +19 -0
  128. package/dist/lib/xterm-links/README.md +21 -0
  129. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js +2 -0
  130. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js.map +1 -0
  131. package/dist/lib/xterm-links/package.json +26 -0
  132. package/dist/lib/xterm-links/src/WebLinkProvider.ts +145 -0
  133. package/dist/lib/xterm-links/src/WebLinksAddon.ts +77 -0
  134. package/dist/lib/xterm-links/typings/xterm-addon-web-links.d.ts +58 -0
  135. package/package.json +1 -1
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+ ## xterm-addon-fit
2
+
3
+ An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables fitting the terminal's dimensions to a containing element. This addon requires xterm.js v4+.
4
+
5
+ ### Install
6
+
7
+ ```bash
8
+ npm install --save xterm-addon-fit
9
+ ```
10
+
11
+ ### Usage
12
+
13
+ ```ts
14
+ import { Terminal } from 'xterm';
15
+ import { FitAddon } from 'xterm-addon-fit';
16
+
17
+ const terminal = new Terminal();
18
+ const fitAddon = new FitAddon();
19
+ terminal.loadAddon(fitAddon);
20
+ terminal.open(containerElement);
21
+ fitAddon.fit();
22
+ ```
23
+
24
+ See the full [API](https://github.com/xtermjs/xterm.js/blob/master/addons/xterm-addon-fit/typings/xterm-addon-fit.d.ts) for more advanced usage.
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FitAddon=t():e.FitAddon=t()}(self,(function(){return(()=>{"use strict";var e={775:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0;var r=function(){function e(){}return e.prototype.activate=function(e){this._terminal=e},e.prototype.dispose=function(){},e.prototype.fit=function(){var e=this.proposeDimensions();if(e&&this._terminal){var t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}},e.prototype.proposeDimensions=function(){if(this._terminal&&this._terminal.element&&this._terminal.element.parentElement){var e=this._terminal._core;if(0!==e._renderService.dimensions.actualCellWidth&&0!==e._renderService.dimensions.actualCellHeight){var t=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(t.getPropertyValue("height")),i=Math.max(0,parseInt(t.getPropertyValue("width"))),n=window.getComputedStyle(this._terminal.element),o=r-(parseInt(n.getPropertyValue("padding-top"))+parseInt(n.getPropertyValue("padding-bottom"))),a=i-(parseInt(n.getPropertyValue("padding-right"))+parseInt(n.getPropertyValue("padding-left")))-e.viewport.scrollBarWidth;return{cols:Math.max(2,Math.floor(a/e._renderService.dimensions.actualCellWidth)),rows:Math.max(1,Math.floor(o/e._renderService.dimensions.actualCellHeight))}}}},e}();t.FitAddon=r}},t={};return function r(i){if(t[i])return t[i].exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}(775)})()}));
2
+ //# sourceMappingURL=xterm-addon-fit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://FitAddon/webpack/universalModuleDefinition","webpack://FitAddon/./src/FitAddon.ts","webpack://FitAddon/webpack/bootstrap","webpack://FitAddon/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","activate","terminal","this","_terminal","dispose","fit","dims","proposeDimensions","core","_core","rows","cols","_renderService","clear","resize","element","parentElement","dimensions","actualCellWidth","actualCellHeight","parentElementStyle","window","getComputedStyle","parentElementHeight","parseInt","getPropertyValue","parentElementWidth","Math","max","elementStyle","availableHeight","availableWidth","viewport","scrollBarWidth","floor","FitAddon","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAkB,SAAID,IAEtBD,EAAe,SAAIC,IARrB,CASGK,MAAM,WACT,M,yGCSA,IAGA,aAGE,cA4DF,OA1DS,YAAAC,SAAP,SAAgBC,GACdC,KAAKC,UAAYF,GAGZ,YAAAG,QAAP,aAEO,YAAAC,IAAP,WACE,IAAMC,EAAOJ,KAAKK,oBAClB,GAAKD,GAASJ,KAAKC,UAAnB,CAKA,IAAMK,EAAQN,KAAKC,UAAkBM,MAGjCP,KAAKC,UAAUO,OAASJ,EAAKI,MAAQR,KAAKC,UAAUQ,OAASL,EAAKK,OACpEH,EAAKI,eAAeC,QACpBX,KAAKC,UAAUW,OAAOR,EAAKK,KAAML,EAAKI,SAInC,YAAAH,kBAAP,WACE,GAAKL,KAAKC,WAILD,KAAKC,UAAUY,SAAYb,KAAKC,UAAUY,QAAQC,cAAvD,CAKA,IAAMR,EAAQN,KAAKC,UAAkBM,MAErC,GAAuD,IAAnDD,EAAKI,eAAeK,WAAWC,iBAA6E,IAApDV,EAAKI,eAAeK,WAAWE,iBAA3F,CAIA,IAAMC,EAAqBC,OAAOC,iBAAiBpB,KAAKC,UAAUY,QAAQC,eACpEO,EAAsBC,SAASJ,EAAmBK,iBAAiB,WACnEC,EAAqBC,KAAKC,IAAI,EAAGJ,SAASJ,EAAmBK,iBAAiB,WAC9EI,EAAeR,OAAOC,iBAAiBpB,KAAKC,UAAUY,SAStDe,EAAkBP,GAPjBC,SAASK,EAAaJ,iBAAiB,gBACpCD,SAASK,EAAaJ,iBAAiB,oBAO3CM,EAAiBL,GANdF,SAASK,EAAaJ,iBAAiB,kBACxCD,SAASK,EAAaJ,iBAAiB,kBAKiBjB,EAAKwB,SAASC,eAK9E,MAJiB,CACftB,KAAMgB,KAAKC,IA7DI,EA6DcD,KAAKO,MAAMH,EAAiBvB,EAAKI,eAAeK,WAAWC,kBACxFR,KAAMiB,KAAKC,IA7DI,EA6DcD,KAAKO,MAAMJ,EAAkBtB,EAAKI,eAAeK,WAAWE,uBAI/F,EA/DA,GAAa,EAAAgB,aCrBTC,EAA2B,GCE/B,ODCA,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAU3C,QAG3C,IAAIC,EAASwC,EAAyBE,GAAY,CAGjD3C,QAAS,IAOV,OAHA4C,EAAoBD,GAAU1C,EAAQA,EAAOD,QAAS0C,GAG/CzC,EAAOD,QCjBR0C,CAAoB,M","file":"xterm-addon-fit.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FitAddon\"] = factory();\n\telse\n\t\troot[\"FitAddon\"] = factory();\n})(self, function() {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ITerminalAddon } from 'xterm';\n\ninterface ITerminalDimensions {\n /**\n * The number of rows in the terminal.\n */\n rows: number;\n\n /**\n * The number of columns in the terminal.\n */\n cols: number;\n}\n\nconst MINIMUM_COLS = 2;\nconst MINIMUM_ROWS = 1;\n\nexport class FitAddon implements ITerminalAddon {\n private _terminal: Terminal | undefined;\n\n constructor() {}\n\n public activate(terminal: Terminal): void {\n this._terminal = terminal;\n }\n\n public dispose(): void {}\n\n public fit(): void {\n const dims = this.proposeDimensions();\n if (!dims || !this._terminal) {\n return;\n }\n\n // TODO: Remove reliance on private API\n const core = (this._terminal as any)._core;\n\n // Force a full render\n if (this._terminal.rows !== dims.rows || this._terminal.cols !== dims.cols) {\n core._renderService.clear();\n this._terminal.resize(dims.cols, dims.rows);\n }\n }\n\n public proposeDimensions(): ITerminalDimensions | undefined {\n if (!this._terminal) {\n return undefined;\n }\n\n if (!this._terminal.element || !this._terminal.element.parentElement) {\n return undefined;\n }\n\n // TODO: Remove reliance on private API\n const core = (this._terminal as any)._core;\n\n if (core._renderService.dimensions.actualCellWidth === 0 || core._renderService.dimensions.actualCellHeight === 0) {\n return undefined;\n }\n\n const parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement);\n const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));\n const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));\n const elementStyle = window.getComputedStyle(this._terminal.element);\n const elementPadding = {\n top: parseInt(elementStyle.getPropertyValue('padding-top')),\n bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')),\n right: parseInt(elementStyle.getPropertyValue('padding-right')),\n left: parseInt(elementStyle.getPropertyValue('padding-left'))\n };\n const elementPaddingVer = elementPadding.top + elementPadding.bottom;\n const elementPaddingHor = elementPadding.right + elementPadding.left;\n const availableHeight = parentElementHeight - elementPaddingVer;\n const availableWidth = parentElementWidth - elementPaddingHor - core.viewport.scrollBarWidth;\n const geometry = {\n cols: Math.max(MINIMUM_COLS, Math.floor(availableWidth / core._renderService.dimensions.actualCellWidth)),\n rows: Math.max(MINIMUM_ROWS, Math.floor(availableHeight / core._renderService.dimensions.actualCellHeight))\n };\n return geometry;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(775);\n"],"sourceRoot":""}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FitAddon = void 0;
4
+ var MINIMUM_COLS = 2;
5
+ var MINIMUM_ROWS = 1;
6
+ var FitAddon = (function () {
7
+ function FitAddon() {
8
+ }
9
+ FitAddon.prototype.activate = function (terminal) {
10
+ this._terminal = terminal;
11
+ };
12
+ FitAddon.prototype.dispose = function () { };
13
+ FitAddon.prototype.fit = function () {
14
+ var dims = this.proposeDimensions();
15
+ if (!dims || !this._terminal) {
16
+ return;
17
+ }
18
+ var core = this._terminal._core;
19
+ if (this._terminal.rows !== dims.rows || this._terminal.cols !== dims.cols) {
20
+ core._renderService.clear();
21
+ this._terminal.resize(dims.cols, dims.rows);
22
+ }
23
+ };
24
+ FitAddon.prototype.proposeDimensions = function () {
25
+ if (!this._terminal) {
26
+ return undefined;
27
+ }
28
+ if (!this._terminal.element || !this._terminal.element.parentElement) {
29
+ return undefined;
30
+ }
31
+ var core = this._terminal._core;
32
+ if (core._renderService.dimensions.actualCellWidth === 0 || core._renderService.dimensions.actualCellHeight === 0) {
33
+ return undefined;
34
+ }
35
+ var parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement);
36
+ var parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));
37
+ var parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));
38
+ var elementStyle = window.getComputedStyle(this._terminal.element);
39
+ var elementPadding = {
40
+ top: parseInt(elementStyle.getPropertyValue('padding-top')),
41
+ bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')),
42
+ right: parseInt(elementStyle.getPropertyValue('padding-right')),
43
+ left: parseInt(elementStyle.getPropertyValue('padding-left'))
44
+ };
45
+ var elementPaddingVer = elementPadding.top + elementPadding.bottom;
46
+ var elementPaddingHor = elementPadding.right + elementPadding.left;
47
+ var availableHeight = parentElementHeight - elementPaddingVer;
48
+ var availableWidth = parentElementWidth - elementPaddingHor - core.viewport.scrollBarWidth;
49
+ var geometry = {
50
+ cols: Math.max(MINIMUM_COLS, Math.floor(availableWidth / core._renderService.dimensions.actualCellWidth)),
51
+ rows: Math.max(MINIMUM_ROWS, Math.floor(availableHeight / core._renderService.dimensions.actualCellHeight))
52
+ };
53
+ return geometry;
54
+ };
55
+ return FitAddon;
56
+ }());
57
+ exports.FitAddon = FitAddon;
58
+ //# sourceMappingURL=FitAddon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitAddon.js","sourceRoot":"","sources":["../src/FitAddon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitAddon.api.js","sourceRoot":"","sources":["../test/FitAddon.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "xterm-addon-fit",
3
+ "version": "0.5.0",
4
+ "author": {
5
+ "name": "The xterm.js authors",
6
+ "url": "https://xtermjs.org/"
7
+ },
8
+ "main": "lib/xterm-addon-fit.js",
9
+ "types": "typings/xterm-addon-fit.d.ts",
10
+ "repository": "https://github.com/xtermjs/xterm.js",
11
+ "license": "MIT",
12
+ "scripts": {
13
+ "build": "../../node_modules/.bin/tsc -p .",
14
+ "prepackage": "npm run build",
15
+ "package": "../../node_modules/.bin/webpack",
16
+ "prepublishOnly": "npm run package"
17
+ },
18
+ "peerDependencies": {
19
+ "xterm": "^4.0.0"
20
+ }
21
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Copyright (c) 2017 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { Terminal, ITerminalAddon } from 'xterm';
7
+
8
+ interface ITerminalDimensions {
9
+ /**
10
+ * The number of rows in the terminal.
11
+ */
12
+ rows: number;
13
+
14
+ /**
15
+ * The number of columns in the terminal.
16
+ */
17
+ cols: number;
18
+ }
19
+
20
+ const MINIMUM_COLS = 2;
21
+ const MINIMUM_ROWS = 1;
22
+
23
+ export class FitAddon implements ITerminalAddon {
24
+ private _terminal: Terminal | undefined;
25
+
26
+ constructor() {}
27
+
28
+ public activate(terminal: Terminal): void {
29
+ this._terminal = terminal;
30
+ }
31
+
32
+ public dispose(): void {}
33
+
34
+ public fit(): void {
35
+ const dims = this.proposeDimensions();
36
+ if (!dims || !this._terminal) {
37
+ return;
38
+ }
39
+
40
+ // TODO: Remove reliance on private API
41
+ const core = (this._terminal as any)._core;
42
+
43
+ // Force a full render
44
+ if (this._terminal.rows !== dims.rows || this._terminal.cols !== dims.cols) {
45
+ core._renderService.clear();
46
+ this._terminal.resize(dims.cols, dims.rows);
47
+ }
48
+ }
49
+
50
+ public proposeDimensions(): ITerminalDimensions | undefined {
51
+ if (!this._terminal) {
52
+ return undefined;
53
+ }
54
+
55
+ if (!this._terminal.element || !this._terminal.element.parentElement) {
56
+ return undefined;
57
+ }
58
+
59
+ // TODO: Remove reliance on private API
60
+ const core = (this._terminal as any)._core;
61
+
62
+ if (core._renderService.dimensions.actualCellWidth === 0 || core._renderService.dimensions.actualCellHeight === 0) {
63
+ return undefined;
64
+ }
65
+
66
+ const parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement);
67
+ const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));
68
+ const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));
69
+ const elementStyle = window.getComputedStyle(this._terminal.element);
70
+ const elementPadding = {
71
+ top: parseInt(elementStyle.getPropertyValue('padding-top')),
72
+ bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')),
73
+ right: parseInt(elementStyle.getPropertyValue('padding-right')),
74
+ left: parseInt(elementStyle.getPropertyValue('padding-left'))
75
+ };
76
+ const elementPaddingVer = elementPadding.top + elementPadding.bottom;
77
+ const elementPaddingHor = elementPadding.right + elementPadding.left;
78
+ const availableHeight = parentElementHeight - elementPaddingVer;
79
+ const availableWidth = parentElementWidth - elementPaddingHor - core.viewport.scrollBarWidth;
80
+ const geometry = {
81
+ cols: Math.max(MINIMUM_COLS, Math.floor(availableWidth / core._renderService.dimensions.actualCellWidth)),
82
+ rows: Math.max(MINIMUM_ROWS, Math.floor(availableHeight / core._renderService.dimensions.actualCellHeight))
83
+ };
84
+ return geometry;
85
+ }
86
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { Terminal, ITerminalAddon } from 'xterm';
7
+
8
+ declare module 'xterm-addon-fit' {
9
+ /**
10
+ * An xterm.js addon that enables resizing the terminal to the dimensions of
11
+ * its containing element.
12
+ */
13
+ export class FitAddon implements ITerminalAddon {
14
+ /**
15
+ * Creates a new fit addon.
16
+ */
17
+ constructor();
18
+
19
+ /**
20
+ * Activates the addon
21
+ * @param terminal The terminal the addon is being loaded in.
22
+ */
23
+ public activate(terminal: Terminal): void;
24
+
25
+ /**
26
+ * Disposes the addon.
27
+ */
28
+ public dispose(): void;
29
+
30
+ /**
31
+ * Resizes the terminal to the dimensions of its containing element.
32
+ */
33
+ public fit(): void;
34
+
35
+ /**
36
+ * Gets the proposed dimensions that will be used for a fit.
37
+ */
38
+ public proposeDimensions(): ITerminalDimensions;
39
+ }
40
+
41
+ /**
42
+ * Reprepresents the dimensions of a terminal.
43
+ */
44
+ export interface ITerminalDimensions {
45
+ /**
46
+ * The number of rows in the terminal.
47
+ */
48
+ rows: number;
49
+
50
+ /**
51
+ * The number of columns in the terminal.
52
+ */
53
+ cols: number;
54
+ }
55
+ }
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2017, The xterm.js authors (https://github.com/xtermjs/xterm.js)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ ## xterm-addon-web-links
2
+
3
+ An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables web links. This addon requires xterm.js v4+.
4
+
5
+ ### Install
6
+
7
+ ```bash
8
+ npm install --save xterm-addon-web-links
9
+ ```
10
+
11
+ ### Usage
12
+
13
+ ```ts
14
+ import { Terminal } from 'xterm';
15
+ import { WebLinksAddon } from 'xterm-addon-web-links';
16
+
17
+ const terminal = new Terminal();
18
+ terminal.loadAddon(new WebLinksAddon());
19
+ ```
20
+
21
+ See the full [API](https://github.com/xtermjs/xterm.js/blob/master/addons/xterm-addon-web-links/typings/xterm-addon-web-links.d.ts) for more advanced usage.
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.WebLinksAddon=t():e.WebLinksAddon=t()}(self,(function(){return(()=>{"use strict";var e={6:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LinkComputer=t.WebLinkProvider=void 0;var i=function(){function e(e,t,i,r){void 0===r&&(r={}),this._terminal=e,this._regex=t,this._handler=i,this._options=r}return e.prototype.provideLinks=function(e,t){var i=r.computeLink(e,this._regex,this._terminal,this._handler);t(this._addCallbacks(i))},e.prototype._addCallbacks=function(e){var t=this;return e.map((function(e){return e.leave=t._options.leave,e.hover=function(i,r){if(t._options.hover){var n=e.range;t._options.hover(i,r,n)}},e}))},e}();t.WebLinkProvider=i;var r=function(){function e(){}return e.computeLink=function(t,i,r,n){for(var o,a=new RegExp(i.source,(i.flags||"")+"g"),s=e._translateBufferLineToStringWithWrap(t-1,!1,r),d=s[0],l=s[1],c=-1,u=[];null!==(o=a.exec(d));){var h=o[1];if(!h){console.log("match found without corresponding matchIndex");break}if(c=d.indexOf(h,c+1),a.lastIndex=c+h.length,c<0)break;for(var v=c+h.length,f=l+1;v>r.cols;)v-=r.cols,f++;for(var p=c+1,_=l+1;p>r.cols;)p-=r.cols,_++;var k={start:{x:p,y:_},end:{x:v,y:f}};u.push({range:k,text:h,activate:n})}return u},e._translateBufferLineToStringWithWrap=function(e,t,i){var r,n,o="";do{if(!(s=i.buffer.active.getLine(e)))break;s.isWrapped&&e--,n=s.isWrapped}while(n);var a=e;do{var s,d=i.buffer.active.getLine(e+1);if(r=!!d&&d.isWrapped,!(s=i.buffer.active.getLine(e)))break;o+=s.translateToString(!r&&t).substring(0,i.cols),e++}while(r);return[o,a]},e}();t.LinkComputer=r}},t={};function i(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,i),o.exports}var r={};return(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.WebLinksAddon=void 0;var t=i(6),n=new RegExp("(?:^|[^\\da-z\\.-]+)((https?:\\/\\/)((([\\da-z\\.-]+)\\.([a-z\\.]{2,18}))|((\\d{1,3}\\.){3}\\d{1,3})|(localhost))(:\\d{1,5})?((\\/[\\/\\w\\.\\-%~:+@]*)*([^:\"'\\s]))?(\\?[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;~\\=\\.\\-]*)?(#[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;~\\=\\.\\-]*)?)($|[^\\/\\w\\.\\-%]+)");function o(e,t){var i=window.open();if(i){try{i.opener=null}catch(e){}i.location.href=t}else console.warn("Opening link blocked as opener could not be cleared")}var a=function(){function e(e,t,i){void 0===e&&(e=o),void 0===t&&(t={}),void 0===i&&(i=!1),this._handler=e,this._options=t,this._useLinkProvider=i}return e.prototype.activate=function(e){if(this._terminal=e,this._useLinkProvider&&"registerLinkProvider"in this._terminal){var i=(r=this._options).urlRegex||n;this._linkProvider=this._terminal.registerLinkProvider(new t.WebLinkProvider(this._terminal,i,this._handler,r))}else{var r;(r=this._options).matchIndex=1,this._linkMatcherId=this._terminal.registerLinkMatcher(n,this._handler,r)}},e.prototype.dispose=function(){var e;void 0!==this._linkMatcherId&&void 0!==this._terminal&&this._terminal.deregisterLinkMatcher(this._linkMatcherId),null===(e=this._linkProvider)||void 0===e||e.dispose()},e}();e.WebLinksAddon=a})(),r})()}));
2
+ //# sourceMappingURL=xterm-addon-web-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xterm-addon-web-links.js","mappings":"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","sources":["webpack://WebLinksAddon/webpack/universalModuleDefinition","webpack://WebLinksAddon/./src/WebLinkProvider.ts","webpack://WebLinksAddon/webpack/bootstrap","webpack://WebLinksAddon/./src/WebLinksAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WebLinksAddon\"] = factory();\n\telse\n\t\troot[\"WebLinksAddon\"] = factory();\n})(self, function() {\nreturn ","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ILinkProvider, ILink, Terminal, IViewportRange } from 'xterm';\n\nexport interface ILinkProviderOptions {\n hover?(event: MouseEvent, text: string, location: IViewportRange): void;\n leave?(event: MouseEvent, text: string): void;\n urlRegex?: RegExp;\n}\n\nexport class WebLinkProvider implements ILinkProvider {\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _regex: RegExp,\n private readonly _handler: (event: MouseEvent, uri: string) => void,\n private readonly _options: ILinkProviderOptions = {}\n ) {\n\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const links = LinkComputer.computeLink(y, this._regex, this._terminal, this._handler);\n callback(this._addCallbacks(links));\n }\n\n private _addCallbacks(links: ILink[]): ILink[] {\n return links.map(link => {\n link.leave = this._options.leave;\n link.hover = (event: MouseEvent, uri: string): void => {\n if (this._options.hover) {\n const { range } = link;\n this._options.hover(event, uri, range);\n }\n };\n return link;\n });\n }\n}\n\nexport class LinkComputer {\n public static computeLink(y: number, regex: RegExp, terminal: Terminal, activate: (event: MouseEvent, uri: string) => void): ILink[] {\n const rex = new RegExp(regex.source, (regex.flags || '') + 'g');\n\n const [line, startLineIndex] = LinkComputer._translateBufferLineToStringWithWrap(y - 1, false, terminal);\n\n let match;\n let stringIndex = -1;\n const result: ILink[] = [];\n\n while ((match = rex.exec(line)) !== null) {\n const text = match[1];\n if (!text) {\n // something matched but does not comply with the given matchIndex\n // since this is most likely a bug the regex itself we simply do nothing here\n console.log('match found without corresponding matchIndex');\n break;\n }\n\n // Get index, match.index is for the outer match which includes negated chars\n // therefore we cannot use match.index directly, instead we search the position\n // of the match group in text again\n // also correct regex and string search offsets for the next loop run\n stringIndex = line.indexOf(text, stringIndex + 1);\n rex.lastIndex = stringIndex + text.length;\n if (stringIndex < 0) {\n // invalid stringIndex (should not have happened)\n break;\n }\n\n let endX = stringIndex + text.length;\n let endY = startLineIndex + 1;\n\n while (endX > terminal.cols) {\n endX -= terminal.cols;\n endY++;\n }\n\n let startX = stringIndex + 1;\n let startY = startLineIndex + 1;\n while (startX > terminal.cols) {\n startX -= terminal.cols;\n startY++;\n }\n\n const range = {\n start: {\n x: startX,\n y: startY\n },\n end: {\n x: endX,\n y: endY\n }\n };\n\n result.push({ range, text, activate });\n }\n\n return result;\n }\n\n /**\n * Gets the entire line for the buffer line\n * @param line The line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param terminal The terminal\n */\n private static _translateBufferLineToStringWithWrap(lineIndex: number, trimRight: boolean, terminal: Terminal): [string, number] {\n let lineString = '';\n let lineWrapsToNext: boolean;\n let prevLinesToWrap: boolean;\n\n do {\n const line = terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n break;\n }\n\n if (line.isWrapped) {\n lineIndex--;\n }\n\n prevLinesToWrap = line.isWrapped;\n } while (prevLinesToWrap);\n\n const startLineIndex = lineIndex;\n\n do {\n const nextLine = terminal.buffer.active.getLine(lineIndex + 1);\n lineWrapsToNext = nextLine ? nextLine.isWrapped : false;\n const line = terminal.buffer.active.getLine(lineIndex);\n if (!line) {\n break;\n }\n lineString += line.translateToString(!lineWrapsToNext && trimRight).substring(0, terminal.cols);\n lineIndex++;\n } while (lineWrapsToNext);\n\n return [lineString, startLineIndex];\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Terminal, ILinkMatcherOptions, ITerminalAddon, IDisposable } from 'xterm';\nimport { ILinkProviderOptions, WebLinkProvider } from './WebLinkProvider';\n\nconst protocolClause = '(https?:\\\\/\\\\/)';\nconst domainCharacterSet = '[\\\\da-z\\\\.-]+';\nconst negatedDomainCharacterSet = '[^\\\\da-z\\\\.-]+';\nconst domainBodyClause = '(' + domainCharacterSet + ')';\nconst tldClause = '([a-z\\\\.]{2,18})';\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 pathCharacterSet = '(\\\\/[\\\\/\\\\w\\\\.\\\\-%~:+@]*)*([^:\"\\'\\\\s])';\nconst pathClause = '(' + pathCharacterSet + ')?';\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\nfunction handleLink(event: MouseEvent, uri: string): void {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n}\n\nexport class WebLinksAddon implements ITerminalAddon {\n private _linkMatcherId: number | undefined;\n private _terminal: Terminal | undefined;\n private _linkProvider: IDisposable | undefined;\n\n constructor(\n private _handler: (event: MouseEvent, uri: string) => void = handleLink,\n private _options: ILinkMatcherOptions | ILinkProviderOptions = {},\n private _useLinkProvider: boolean = false\n ) {\n }\n\n public activate(terminal: Terminal): void {\n this._terminal = terminal;\n\n if (this._useLinkProvider && 'registerLinkProvider' in this._terminal) {\n const options = this._options as ILinkProviderOptions;\n const regex = options.urlRegex || strictUrlRegex;\n this._linkProvider = this._terminal.registerLinkProvider(new WebLinkProvider(this._terminal, regex, this._handler, options));\n } else {\n // TODO: This should be removed eventually\n const options = this._options as ILinkMatcherOptions;\n options.matchIndex = 1;\n this._linkMatcherId = (this._terminal as Terminal).registerLinkMatcher(strictUrlRegex, this._handler, options);\n }\n }\n\n public dispose(): void {\n if (this._linkMatcherId !== undefined && this._terminal !== undefined) {\n this._terminal.deregisterLinkMatcher(this._linkMatcherId);\n }\n\n this._linkProvider?.dispose();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","_terminal","_regex","_handler","_options","provideLinks","y","callback","links","LinkComputer","computeLink","this","_addCallbacks","map","link","leave","hover","event","uri","range","WebLinkProvider","regex","terminal","activate","match","rex","RegExp","source","flags","_translateBufferLineToStringWithWrap","line","startLineIndex","stringIndex","result","exec","text","console","log","indexOf","lastIndex","length","endX","endY","cols","startX","startY","start","x","end","push","lineIndex","trimRight","lineWrapsToNext","prevLinesToWrap","lineString","buffer","active","getLine","isWrapped","nextLine","translateToString","substring","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","strictUrlRegex","handleLink","newWindow","window","open","opener","location","href","warn","_useLinkProvider","options","urlRegex","_linkProvider","registerLinkProvider","matchIndex","_linkMatcherId","registerLinkMatcher","dispose","deregisterLinkMatcher","WebLinksAddon"],"sourceRoot":""}
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "xterm-addon-web-links",
3
+ "version": "0.6.0",
4
+ "author": {
5
+ "name": "The xterm.js authors",
6
+ "url": "https://xtermjs.org/"
7
+ },
8
+ "main": "lib/xterm-addon-web-links.js",
9
+ "types": "typings/xterm-addon-web-links.d.ts",
10
+ "repository": "https://github.com/xtermjs/xterm.js",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "terminal",
14
+ "xterm",
15
+ "xterm.js"
16
+ ],
17
+ "scripts": {
18
+ "build": "../../node_modules/.bin/tsc -p .",
19
+ "prepackage": "npm run build",
20
+ "package": "../../node_modules/.bin/webpack",
21
+ "prepublishOnly": "npm run package"
22
+ },
23
+ "peerDependencies": {
24
+ "xterm": "^4.0.0"
25
+ }
26
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { ILinkProvider, ILink, Terminal, IViewportRange } from 'xterm';
7
+
8
+ export interface ILinkProviderOptions {
9
+ hover?(event: MouseEvent, text: string, location: IViewportRange): void;
10
+ leave?(event: MouseEvent, text: string): void;
11
+ urlRegex?: RegExp;
12
+ }
13
+
14
+ export class WebLinkProvider implements ILinkProvider {
15
+
16
+ constructor(
17
+ private readonly _terminal: Terminal,
18
+ private readonly _regex: RegExp,
19
+ private readonly _handler: (event: MouseEvent, uri: string) => void,
20
+ private readonly _options: ILinkProviderOptions = {}
21
+ ) {
22
+
23
+ }
24
+
25
+ public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {
26
+ const links = LinkComputer.computeLink(y, this._regex, this._terminal, this._handler);
27
+ callback(this._addCallbacks(links));
28
+ }
29
+
30
+ private _addCallbacks(links: ILink[]): ILink[] {
31
+ return links.map(link => {
32
+ link.leave = this._options.leave;
33
+ link.hover = (event: MouseEvent, uri: string): void => {
34
+ if (this._options.hover) {
35
+ const { range } = link;
36
+ this._options.hover(event, uri, range);
37
+ }
38
+ };
39
+ return link;
40
+ });
41
+ }
42
+ }
43
+
44
+ export class LinkComputer {
45
+ public static computeLink(y: number, regex: RegExp, terminal: Terminal, activate: (event: MouseEvent, uri: string) => void): ILink[] {
46
+ const rex = new RegExp(regex.source, (regex.flags || '') + 'g');
47
+
48
+ const [line, startLineIndex] = LinkComputer._translateBufferLineToStringWithWrap(y - 1, false, terminal);
49
+
50
+ let match;
51
+ let stringIndex = -1;
52
+ const result: ILink[] = [];
53
+
54
+ while ((match = rex.exec(line)) !== null) {
55
+ const text = match[1];
56
+ if (!text) {
57
+ // something matched but does not comply with the given matchIndex
58
+ // since this is most likely a bug the regex itself we simply do nothing here
59
+ console.log('match found without corresponding matchIndex');
60
+ break;
61
+ }
62
+
63
+ // Get index, match.index is for the outer match which includes negated chars
64
+ // therefore we cannot use match.index directly, instead we search the position
65
+ // of the match group in text again
66
+ // also correct regex and string search offsets for the next loop run
67
+ stringIndex = line.indexOf(text, stringIndex + 1);
68
+ rex.lastIndex = stringIndex + text.length;
69
+ if (stringIndex < 0) {
70
+ // invalid stringIndex (should not have happened)
71
+ break;
72
+ }
73
+
74
+ let endX = stringIndex + text.length;
75
+ let endY = startLineIndex + 1;
76
+
77
+ while (endX > terminal.cols) {
78
+ endX -= terminal.cols;
79
+ endY++;
80
+ }
81
+
82
+ let startX = stringIndex + 1;
83
+ let startY = startLineIndex + 1;
84
+ while (startX > terminal.cols) {
85
+ startX -= terminal.cols;
86
+ startY++;
87
+ }
88
+
89
+ const range = {
90
+ start: {
91
+ x: startX,
92
+ y: startY
93
+ },
94
+ end: {
95
+ x: endX,
96
+ y: endY
97
+ }
98
+ };
99
+
100
+ result.push({ range, text, activate });
101
+ }
102
+
103
+ return result;
104
+ }
105
+
106
+ /**
107
+ * Gets the entire line for the buffer line
108
+ * @param line The line being translated.
109
+ * @param trimRight Whether to trim whitespace to the right.
110
+ * @param terminal The terminal
111
+ */
112
+ private static _translateBufferLineToStringWithWrap(lineIndex: number, trimRight: boolean, terminal: Terminal): [string, number] {
113
+ let lineString = '';
114
+ let lineWrapsToNext: boolean;
115
+ let prevLinesToWrap: boolean;
116
+
117
+ do {
118
+ const line = terminal.buffer.active.getLine(lineIndex);
119
+ if (!line) {
120
+ break;
121
+ }
122
+
123
+ if (line.isWrapped) {
124
+ lineIndex--;
125
+ }
126
+
127
+ prevLinesToWrap = line.isWrapped;
128
+ } while (prevLinesToWrap);
129
+
130
+ const startLineIndex = lineIndex;
131
+
132
+ do {
133
+ const nextLine = terminal.buffer.active.getLine(lineIndex + 1);
134
+ lineWrapsToNext = nextLine ? nextLine.isWrapped : false;
135
+ const line = terminal.buffer.active.getLine(lineIndex);
136
+ if (!line) {
137
+ break;
138
+ }
139
+ lineString += line.translateToString(!lineWrapsToNext && trimRight).substring(0, terminal.cols);
140
+ lineIndex++;
141
+ } while (lineWrapsToNext);
142
+
143
+ return [lineString, startLineIndex];
144
+ }
145
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { Terminal, ILinkMatcherOptions, ITerminalAddon, IDisposable } from 'xterm';
7
+ import { ILinkProviderOptions, WebLinkProvider } from './WebLinkProvider';
8
+
9
+ const protocolClause = '(https?:\\/\\/)';
10
+ const domainCharacterSet = '[\\da-z\\.-]+';
11
+ const negatedDomainCharacterSet = '[^\\da-z\\.-]+';
12
+ const domainBodyClause = '(' + domainCharacterSet + ')';
13
+ const tldClause = '([a-z\\.]{2,18})';
14
+ const ipClause = '((\\d{1,3}\\.){3}\\d{1,3})';
15
+ const localHostClause = '(localhost)';
16
+ const portClause = '(:\\d{1,5})';
17
+ const hostClause = '((' + domainBodyClause + '\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?';
18
+ const pathCharacterSet = '(\\/[\\/\\w\\.\\-%~:+@]*)*([^:"\'\\s])';
19
+ const pathClause = '(' + pathCharacterSet + ')?';
20
+ const queryStringHashFragmentCharacterSet = '[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&\'*+,:;~\\=\\.\\-]*';
21
+ const queryStringClause = '(\\?' + queryStringHashFragmentCharacterSet + ')?';
22
+ const hashFragmentClause = '(#' + queryStringHashFragmentCharacterSet + ')?';
23
+ const negatedPathCharacterSet = '[^\\/\\w\\.\\-%]+';
24
+ const bodyClause = hostClause + pathClause + queryStringClause + hashFragmentClause;
25
+ const start = '(?:^|' + negatedDomainCharacterSet + ')(';
26
+ const end = ')($|' + negatedPathCharacterSet + ')';
27
+ const strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);
28
+
29
+ function handleLink(event: MouseEvent, uri: string): void {
30
+ const newWindow = window.open();
31
+ if (newWindow) {
32
+ try {
33
+ newWindow.opener = null;
34
+ } catch {
35
+ // no-op, Electron can throw
36
+ }
37
+ newWindow.location.href = uri;
38
+ } else {
39
+ console.warn('Opening link blocked as opener could not be cleared');
40
+ }
41
+ }
42
+
43
+ export class WebLinksAddon implements ITerminalAddon {
44
+ private _linkMatcherId: number | undefined;
45
+ private _terminal: Terminal | undefined;
46
+ private _linkProvider: IDisposable | undefined;
47
+
48
+ constructor(
49
+ private _handler: (event: MouseEvent, uri: string) => void = handleLink,
50
+ private _options: ILinkMatcherOptions | ILinkProviderOptions = {},
51
+ private _useLinkProvider: boolean = false
52
+ ) {
53
+ }
54
+
55
+ public activate(terminal: Terminal): void {
56
+ this._terminal = terminal;
57
+
58
+ if (this._useLinkProvider && 'registerLinkProvider' in this._terminal) {
59
+ const options = this._options as ILinkProviderOptions;
60
+ const regex = options.urlRegex || strictUrlRegex;
61
+ this._linkProvider = this._terminal.registerLinkProvider(new WebLinkProvider(this._terminal, regex, this._handler, options));
62
+ } else {
63
+ // TODO: This should be removed eventually
64
+ const options = this._options as ILinkMatcherOptions;
65
+ options.matchIndex = 1;
66
+ this._linkMatcherId = (this._terminal as Terminal).registerLinkMatcher(strictUrlRegex, this._handler, options);
67
+ }
68
+ }
69
+
70
+ public dispose(): void {
71
+ if (this._linkMatcherId !== undefined && this._terminal !== undefined) {
72
+ this._terminal.deregisterLinkMatcher(this._linkMatcherId);
73
+ }
74
+
75
+ this._linkProvider?.dispose();
76
+ }
77
+ }