diff --git a/src/assets/xterm_config/functionality.js b/src/assets/xterm_config/functionality.js index 0cd7de0..dd299b8 100644 --- a/src/assets/xterm_config/functionality.js +++ b/src/assets/xterm_config/functionality.js @@ -76,7 +76,7 @@ function setItem(json, path, item) { } } -window.load_options = function(config) { +window.loadOptions = function(config) { allOptions.forEach(option => { let value = getItem(config, option.path); if (option.nullable === true && option.type === "text" && value == null) value = null; @@ -88,7 +88,7 @@ window.load_options = function(config) { }); } -if (window.top !== window) alert("Error: Page is top level. This page is supposed to be accessed from inside Wetty."); +if (window.top === window) alert("Error: Page is top level. This page is supposed to be accessed from inside Wetty."); document.querySelector("#save_button").addEventListener("click", () => { const newConfig = {}; diff --git a/src/assets/xterm_config/style.css b/src/assets/xterm_config/style.css index 32998a9..fa21bfb 100644 --- a/src/assets/xterm_config/style.css +++ b/src/assets/xterm_config/style.css @@ -1,4 +1,5 @@ html { background-color: black; } +html, body { overflow: hidden auto; } body { display: flex; flex-flow: column nowrap; diff --git a/src/assets/xterm_config/xterm_advanced_options.js b/src/assets/xterm_config/xterm_advanced_options.js index 519fd4c..b1b745b 100644 --- a/src/assets/xterm_config/xterm_advanced_options.js +++ b/src/assets/xterm_config/xterm_advanced_options.js @@ -1,4 +1,4 @@ -window.inflate_options([ +window.inflateOptions([ { type: "boolean", name: "Allow Proposed XTerm APIs", diff --git a/src/assets/xterm_config/xterm_color_theme.js b/src/assets/xterm_config/xterm_color_theme.js index d112a54..7ca7fe1 100644 --- a/src/assets/xterm_config/xterm_color_theme.js +++ b/src/assets/xterm_config/xterm_color_theme.js @@ -11,7 +11,7 @@ const selectionColorOpacityOption = { path: ["wetty_void"], }; -window.inflate_options([ +window.inflateOptions([ { type: "color", name: "Foreground Color", diff --git a/src/assets/xterm_config/xterm_defaults.js b/src/assets/xterm_config/xterm_defaults.js index 14eeddc..d891d04 100644 --- a/src/assets/xterm_config/xterm_defaults.js +++ b/src/assets/xterm_config/xterm_defaults.js @@ -1,5 +1,5 @@ const DEFAULT_BELL_SOUND = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; -window.load_options({ +window.loadOptions({ wetty_fit_terminal: true, wetty_void: 0, diff --git a/src/assets/xterm_config/xterm_general_options.js b/src/assets/xterm_config/xterm_general_options.js index ae2b906..e3ddbd4 100644 --- a/src/assets/xterm_config/xterm_general_options.js +++ b/src/assets/xterm_config/xterm_general_options.js @@ -1,4 +1,4 @@ -window.inflate_options([ +window.inflateOptions([ { type: "text", name: "Font Family", diff --git a/src/client/wetty/term.ts b/src/client/wetty/term.ts index 4bdf4b5..1a1582e 100644 --- a/src/client/wetty/term.ts +++ b/src/client/wetty/term.ts @@ -5,19 +5,19 @@ import { FitAddon } from 'xterm-addon-fit'; import { Terminal } from 'xterm'; import type { Term } from './shared/type'; -import { configureTerm } from './term/confiruragtion.js'; +import { configureTerm, shouldFitTerm } from './term/confiruragtion.js'; import { terminal as termElement } from '../shared/elements.js'; export function terminal(socket: typeof Socket): Term | undefined { const term = new Terminal() as Term; - if (_.isNull(termElement)) return; + if (_.isNull(termElement)) return undefined; const webLinksAddon = new WebLinksAddon(); term.loadAddon(webLinksAddon); const fitAddon = new FitAddon(); term.loadAddon(fitAddon); term.open(termElement); term.resizeTerm = () => { - fitAddon.fit(); + if (shouldFitTerm()) fitAddon.fit(); socket.emit('resize', { cols: term.cols, rows: term.rows }); }; configureTerm(term); diff --git a/src/client/wetty/term/confiruragtion.ts b/src/client/wetty/term/confiruragtion.ts index 9c0c6e2..d7ef46b 100644 --- a/src/client/wetty/term/confiruragtion.ts +++ b/src/client/wetty/term/confiruragtion.ts @@ -35,3 +35,7 @@ export function configureTerm(term: Term): void { false, ); } + +export function shouldFitTerm(): boolean { + return (loadOptions() as any).wetty_fit_terminal ?? true; +} diff --git a/src/server/socketServer/html.ts b/src/server/socketServer/html.ts index ccdf72d..78a2926 100644 --- a/src/server/socketServer/html.ts +++ b/src/server/socketServer/html.ts @@ -9,6 +9,7 @@ const render = ( favicon: string, css: string[], js: string[], + configUrl: string, ): string => `
@@ -31,7 +32,7 @@ const render = ( href="#" alt="Toggle options" > - + ${js @@ -50,6 +51,7 @@ export const html = (base: string, title: string): RequestHandler => ( `${base}/favicon.ico`, cssFiles.map(css => `${base}/assets/css/${css}.css`), jsFiles.map(js => `${base}/client/${js}.js`), + `${base}/assets/xterm_config/index.html`, ), ); };