mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 14:13:29 +00:00
Update Xterm.js to the latest version
Some checks failed
webmin.dev: webmin/webmin / build (push) Has been cancelled
Some checks failed
webmin.dev: webmin/webmin / build (push) Has been cancelled
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
* Fix to improve the message when socket authentication is used in the MySQL/MariaDB module
|
* Fix to improve the message when socket authentication is used in the MySQL/MariaDB module
|
||||||
* Fix to make upload tracking work correctly in all situations and on all systems
|
* Fix to make upload tracking work correctly in all situations and on all systems
|
||||||
* Fix to correctly display the PHP version in the PHP Configuration module when managing packages
|
* Fix to correctly display the PHP version in the PHP Configuration module when managing packages
|
||||||
|
* Update Xterm.js to the latest version with lots of improvements and fixes
|
||||||
|
|
||||||
#### 2.620 (January 9, 2026)
|
#### 2.620 (January 9, 2026)
|
||||||
* Add ability to use correct driver depending on the database in MySQL/MariaDB module
|
* Add ability to use correct driver depending on the database in MySQL/MariaDB module
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ my $termlinks =
|
|||||||
'js' => ["xterm.js?$wver",
|
'js' => ["xterm.js?$wver",
|
||||||
"xterm-addon-attach.js?$wver",
|
"xterm-addon-attach.js?$wver",
|
||||||
"xterm-addon-fit.js?$wver",
|
"xterm-addon-fit.js?$wver",
|
||||||
"xterm-addon-canvas.js?$wver",
|
|
||||||
"xterm-addon-webgl.js?$wver"] };
|
"xterm-addon-webgl.js?$wver"] };
|
||||||
|
|
||||||
# Pre-process options
|
# Pre-process options
|
||||||
@@ -77,6 +76,7 @@ if ($conf_cols_n && $conf_rows_n && !$xmlhr) {
|
|||||||
my $conf_screen_reader = $config{'screen_reader'} eq 'true' ? 'true' : 'false';
|
my $conf_screen_reader = $config{'screen_reader'} eq 'true' ? 'true' : 'false';
|
||||||
$termjs_opts{'Options'} = "{ cols: $env_cols, rows: $env_rows, ".
|
$termjs_opts{'Options'} = "{ cols: $env_cols, rows: $env_rows, ".
|
||||||
"screenReaderMode: $conf_screen_reader, ".
|
"screenReaderMode: $conf_screen_reader, ".
|
||||||
|
"overviewRuler: { width: 9 }, ".
|
||||||
"fontSize: $font_size }";
|
"fontSize: $font_size }";
|
||||||
|
|
||||||
my $term_size = "
|
my $term_size = "
|
||||||
@@ -212,8 +212,7 @@ $ENV{'SESSION_ID'} = $main::session_id;
|
|||||||
|
|
||||||
# Open the terminal
|
# Open the terminal
|
||||||
my $url = &get_miniserv_websocket_url($port, $config{'host'}, $module_name);
|
my $url = &get_miniserv_websocket_url($port, $config{'host'}, $module_name);
|
||||||
my $canvasAddon = $termlinks->{'js'}[3];
|
my $webGLAddon = $termlinks->{'js'}[3];
|
||||||
my $webGLAddon = $termlinks->{'js'}[4];
|
|
||||||
my $term_script = <<EOF;
|
my $term_script = <<EOF;
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
@@ -222,11 +221,10 @@ my $term_script = <<EOF;
|
|||||||
err_conn_cannot = 'Cannot connect to the socket $url',
|
err_conn_cannot = 'Cannot connect to the socket $url',
|
||||||
err_conn_lost = 'Connection to the socket $url lost',
|
err_conn_lost = 'Connection to the socket $url lost',
|
||||||
webGLAddonLink = '$webGLAddon',
|
webGLAddonLink = '$webGLAddon',
|
||||||
canvasAddonLink = '$canvasAddon',
|
|
||||||
detectWebGLContext = (function() {
|
detectWebGLContext = (function() {
|
||||||
const canvas = document.createElement("canvas"),
|
const canvas = document.createElement("canvas"),
|
||||||
gl = canvas.getContext("webgl") ||
|
gl = canvas.getContext("webgl") ||
|
||||||
canvas.getContext("experimental-webgl");
|
canvas.getContext("experimental-webgl");
|
||||||
return gl instanceof WebGLRenderingContext ? true : false;
|
return gl instanceof WebGLRenderingContext ? true : false;
|
||||||
})();
|
})();
|
||||||
socket.onopen = function() {
|
socket.onopen = function() {
|
||||||
@@ -234,27 +232,31 @@ my $term_script = <<EOF;
|
|||||||
attachAddon = new AttachAddon.AttachAddon(this),
|
attachAddon = new AttachAddon.AttachAddon(this),
|
||||||
fitAddon = new FitAddon.FitAddon(),
|
fitAddon = new FitAddon.FitAddon(),
|
||||||
renderScript = document.createElement('script');
|
renderScript = document.createElement('script');
|
||||||
renderScript.src = detectWebGLContext ? webGLAddonLink : canvasAddonLink;
|
|
||||||
|
renderScript.src = webGLAddonLink;
|
||||||
renderScript.async = false;
|
renderScript.async = false;
|
||||||
document.body.appendChild(renderScript);
|
document.body.appendChild(renderScript);
|
||||||
|
|
||||||
// Wait to load requested render addon
|
// Wait to load requested render addon
|
||||||
renderScript.addEventListener('load', function() {
|
renderScript.addEventListener('load', function() {
|
||||||
const rendererAddon = detectWebGLContext ?
|
let rendererAddon;
|
||||||
new WebglAddon.WebglAddon() :
|
|
||||||
new CanvasAddon.CanvasAddon();
|
if (detectWebGLContext && typeof WebglAddon === 'object') {
|
||||||
|
rendererAddon = new WebglAddon.WebglAddon();
|
||||||
|
term.loadAddon(rendererAddon);
|
||||||
|
|
||||||
|
// Handle case of dropping WebGL context
|
||||||
|
if (rendererAddon.onContextLoss) {
|
||||||
|
rendererAddon.onContextLoss(function() {
|
||||||
|
rendererAddon.dispose();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
term.loadAddon(attachAddon);
|
term.loadAddon(attachAddon);
|
||||||
term.loadAddon(fitAddon);
|
term.loadAddon(fitAddon);
|
||||||
term.loadAddon(rendererAddon);
|
|
||||||
term.open(termcont);
|
term.open(termcont);
|
||||||
setTimeout(function() {term.focus()}, 6e2);
|
setTimeout(function() { term.focus() }, 6e2);
|
||||||
|
|
||||||
// Handle case of dropping WebGL context
|
|
||||||
if (typeof WebglAddon === 'object') {
|
|
||||||
rendererAddon.onContextLoss(function() {
|
|
||||||
rendererAddon.dispose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// On resize event triggered by fit()
|
// On resize event triggered by fit()
|
||||||
term.onResize(function(e) {
|
term.onResize(function(e) {
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
// 0.11.0
|
// 0.12.0
|
||||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AttachAddon=t():e.AttachAddon=t()}(self,(()=>(()=>{"use strict";var e={};return(()=>{var t=e;function s(e,t,s){return e.addEventListener(t,s),{dispose:()=>{s&&e.removeEventListener(t,s)}}}Object.defineProperty(t,"__esModule",{value:!0}),t.AttachAddon=void 0,t.AttachAddon=class{constructor(e,t){this._disposables=[],this._socket=e,this._socket.binaryType="arraybuffer",this._bidirectional=!(t&&!1===t.bidirectional)}activate(e){this._disposables.push(s(this._socket,"message",(t=>{const s=t.data;e.write("string"==typeof s?s:new Uint8Array(s))}))),this._bidirectional&&(this._disposables.push(e.onData((e=>this._sendData(e)))),this._disposables.push(e.onBinary((e=>this._sendBinary(e))))),this._disposables.push(s(this._socket,"close",(()=>this.dispose()))),this._disposables.push(s(this._socket,"error",(()=>this.dispose())))}dispose(){for(const e of this._disposables)e.dispose()}_sendData(e){this._checkOpenSocket()&&this._socket.send(e)}_sendBinary(e){if(!this._checkOpenSocket())return;const t=new Uint8Array(e.length);for(let s=0;s<e.length;++s)t[s]=255&e.charCodeAt(s);this._socket.send(t)}_checkOpenSocket(){switch(this._socket.readyState){case WebSocket.OPEN:return!0;case WebSocket.CONNECTING:throw new Error("Attach addon was loaded before socket was open");case WebSocket.CLOSING:return console.warn("Attach addon socket is closing"),!1;case WebSocket.CLOSED:throw new Error("Attach addon socket is closed");default:throw new Error("Unexpected socket state")}}}})(),e})()));
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AttachAddon=t():e.AttachAddon=t()}(globalThis,(()=>(()=>{"use strict";var e={};return(()=>{var t=e;function s(e,t,s){return e.addEventListener(t,s),{dispose:()=>{s&&e.removeEventListener(t,s)}}}Object.defineProperty(t,"__esModule",{value:!0}),t.AttachAddon=void 0,t.AttachAddon=class{constructor(e,t){this._disposables=[],this._socket=e,this._socket.binaryType="arraybuffer",this._bidirectional=!(t&&!1===t.bidirectional)}activate(e){this._disposables.push(s(this._socket,"message",(t=>{const s=t.data;e.write("string"==typeof s?s:new Uint8Array(s))}))),this._bidirectional&&(this._disposables.push(e.onData((e=>this._sendData(e)))),this._disposables.push(e.onBinary((e=>this._sendBinary(e))))),this._disposables.push(s(this._socket,"close",(()=>this.dispose()))),this._disposables.push(s(this._socket,"error",(()=>this.dispose())))}dispose(){for(const e of this._disposables)e.dispose()}_sendData(e){this._checkOpenSocket()&&this._socket.send(e)}_sendBinary(e){if(!this._checkOpenSocket())return;const t=new Uint8Array(e.length);for(let s=0;s<e.length;++s)t[s]=255&e.charCodeAt(s);this._socket.send(t)}_checkOpenSocket(){switch(this._socket.readyState){case WebSocket.OPEN:return!0;case WebSocket.CONNECTING:throw new Error("Attach addon was loaded before socket was open");case WebSocket.CLOSING:return console.warn("Attach addon socket is closing"),!1;case WebSocket.CLOSED:throw new Error("Attach addon socket is closed");default:throw new Error("Unexpected socket state")}}}})(),e})()));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
|||||||
// 0.10.0
|
// 0.11.0
|
||||||
!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,(()=>(()=>{"use strict";var e={};return(()=>{var t=e;Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core,t=e._renderService.dimensions;if(0===t.css.cell.width||0===t.css.cell.height)return;const r=0===this._terminal.options.scrollback?0:e.viewport.scrollBarWidth,i=window.getComputedStyle(this._terminal.element.parentElement),o=parseInt(i.getPropertyValue("height")),s=Math.max(0,parseInt(i.getPropertyValue("width"))),n=window.getComputedStyle(this._terminal.element),l=o-(parseInt(n.getPropertyValue("padding-top"))+parseInt(n.getPropertyValue("padding-bottom"))),a=s-(parseInt(n.getPropertyValue("padding-right"))+parseInt(n.getPropertyValue("padding-left")))-r;return{cols:Math.max(2,Math.floor(a/t.css.cell.width)),rows:Math.max(1,Math.floor(l/t.css.cell.height))}}}})(),e})()));
|
!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()}(globalThis,(()=>(()=>{"use strict";var e={};return(()=>{var t=e;Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core._renderService.dimensions;if(0===e.css.cell.width||0===e.css.cell.height)return;const t=0===this._terminal.options.scrollback?0:this._terminal.options.overviewRuler?.width||14,r=window.getComputedStyle(this._terminal.element.parentElement),i=parseInt(r.getPropertyValue("height")),o=Math.max(0,parseInt(r.getPropertyValue("width"))),s=window.getComputedStyle(this._terminal.element),n=i-(parseInt(s.getPropertyValue("padding-top"))+parseInt(s.getPropertyValue("padding-bottom"))),l=o-(parseInt(s.getPropertyValue("padding-right"))+parseInt(s.getPropertyValue("padding-left")))-t;return{cols:Math.max(2,Math.floor(l/e.css.cell.width)),rows:Math.max(1,Math.floor(n/e.css.cell.height))}}}})(),e})()));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,8 +1,10 @@
|
|||||||
/*!
|
/*!
|
||||||
* Xterm.js v5.5.0 (https://github.com/xtermjs/xterm.js)
|
* Xterm.js v6.0.0 (https://github.com/xtermjs/xterm.js)
|
||||||
* Copyright (c) 2017-2023, The xterm.js authors (https://github.com/xtermjs/xterm.js)
|
* Copyright (c) 2017-2026, The xterm.js authors (https://github.com/xtermjs/xterm.js)
|
||||||
* Copyright (c) 2014-2016, SourceLair Private Company (https://www.sourcelair.com)
|
* Copyright (c) 2014-2016, SourceLair Private Company (https://www.sourcelair.com)
|
||||||
* Copyright (c) 2012-2013, Christopher Jeffrey (https://github.com/chjj/)
|
* Copyright (c) 2012-2013, Christopher Jeffrey (https://github.com/chjj/)
|
||||||
* Licensed under MIT (https://github.com/xtermjs/xterm.js/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/xtermjs/xterm.js/blob/master/LICENSE)
|
||||||
*/
|
*/
|
||||||
.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;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.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}
|
.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none;}.xterm.focus,.xterm:focus{outline:none;}.xterm .xterm-helpers{position:absolute;top:0;z-index:5;}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;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-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal;}.xterm.enable-mouse-events{cursor:default;}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer;}.xterm.column-select.focus{cursor:crosshair;}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none;}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent;}.xterm .xterm-accessibility-tree{font-family:monospace;user-select:text;white-space:pre;}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content;}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;}.xterm-dim{opacity:1!important;}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline;}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through;}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute;}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7;}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none;}.xterm-decoration-top{z-index:2;position:relative;}.xterm .xterm-scrollable-element>.scrollbar{cursor:default;}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important;}.xterm .xterm-scrollable-element>.visible{opacity:1;background:rgba(0,0,0,0);transition:opacity 100ms linear;z-index:11;}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none;}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity 800ms linear;}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none;}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px;}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;}
|
||||||
|
/* custom */
|
||||||
|
.xterm .xterm-decoration-overview-ruler { display: none; }
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user