Skip to content

Commit aebbe81

Browse files
committed
Add overviewRuler options to demo
1 parent d155bb6 commit aebbe81

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

demo/client/components/window/optionsWindow.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,14 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
121121
'windowOptions',
122122
'windowsPty',
123123
];
124-
const nestedBooleanOptions: { label: string, parent: string, prop: string }[] = [
125-
{ label: 'scrollbar.showScrollbar', parent: 'scrollbar', prop: 'showScrollbar' },
126-
{ label: 'scrollbar.showArrows', parent: 'scrollbar', prop: 'showArrows' },
127-
{ label: 'vtExtensions.kittyKeyboard', parent: 'vtExtensions', prop: 'kittyKeyboard' },
128-
{ label: 'vtExtensions.kittySgrBoldFaintControl', parent: 'vtExtensions', prop: 'kittySgrBoldFaintControl' },
129-
{ label: 'vtExtensions.win32InputMode', parent: 'vtExtensions', prop: 'win32InputMode' }
124+
const nestedBooleanOptions: { label: string, path: string[], prop: string }[] = [
125+
{ label: 'scrollbar.showScrollbar', path: ['scrollbar'], prop: 'showScrollbar' },
126+
{ label: 'scrollbar.showArrows', path: ['scrollbar'], prop: 'showArrows' },
127+
{ label: 'scrollbar.overviewRuler.showTopBorder', path: ['scrollbar', 'overviewRuler'], prop: 'showTopBorder' },
128+
{ label: 'scrollbar.overviewRuler.showBottomBorder', path: ['scrollbar', 'overviewRuler'], prop: 'showBottomBorder' },
129+
{ label: 'vtExtensions.kittyKeyboard', path: ['vtExtensions'], prop: 'kittyKeyboard' },
130+
{ label: 'vtExtensions.kittySgrBoldFaintControl', path: ['vtExtensions'], prop: 'kittySgrBoldFaintControl' },
131+
{ label: 'vtExtensions.win32InputMode', path: ['vtExtensions'], prop: 'win32InputMode' }
130132
];
131133
const stringOptions: { [key: string]: string[] | null } = {
132134
cursorStyle: ['block', 'underline', 'bar'],
@@ -162,8 +164,10 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
162164
booleanOptions.forEach(o => {
163165
html += `<div class="option"><label><input id="opt-${o}" type="checkbox" ${(this._terminal.options as Record<string, unknown>)[o] ? 'checked' : ''}/> ${o}</label></div>`;
164166
});
165-
nestedBooleanOptions.forEach(({ label, parent, prop }) => {
166-
const checked = (this._terminal.options as Record<string, Record<string, unknown> | undefined>)[parent]?.[prop] ?? false;
167+
nestedBooleanOptions.forEach(({ label, path, prop }) => {
168+
const options = this._terminal.options as Record<string, unknown>;
169+
const parent = path.reduce<Record<string, unknown> | undefined>((acc, key) => (acc as Record<string, unknown> | undefined)?.[key] as Record<string, unknown> | undefined, options);
170+
const checked = (parent as Record<string, unknown> | undefined)?.[prop] ?? false;
167171
html += `<div class="option"><label><input id="opt-${label.replace('.', '-')}" type="checkbox" ${checked ? 'checked' : ''}/> ${label}</label></div>`;
168172
});
169173
html += '</div><div class="option-group">';
@@ -197,11 +201,22 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
197201
}
198202
});
199203
});
200-
nestedBooleanOptions.forEach(({ label, parent, prop }) => {
204+
nestedBooleanOptions.forEach(({ label, path, prop }) => {
201205
const input = document.getElementById(`opt-${label.replace('.', '-')}`) as HTMLInputElement;
202206
addDomListener(input, 'change', () => {
203207
console.log('change', label, input.checked);
204-
(this._terminal.options as Record<string, unknown>)[parent] = { ...(this._terminal.options as Record<string, Record<string, unknown> | undefined>)[parent], [prop]: input.checked };
208+
const options = this._terminal.options as Record<string, unknown>;
209+
if (path.length === 1) {
210+
const parentKey = path[0];
211+
options[parentKey] = { ...(options[parentKey] as Record<string, unknown> | undefined), [prop]: input.checked };
212+
return;
213+
}
214+
if (path.length === 2) {
215+
const [parentKey, childKey] = path;
216+
const parent = (options[parentKey] as Record<string, unknown> | undefined) ?? {};
217+
const child = (parent[childKey] as Record<string, unknown> | undefined) ?? {};
218+
options[parentKey] = { ...parent, [childKey]: { ...child, [prop]: input.checked } };
219+
}
205220
});
206221
});
207222
numberOptions.forEach(o => {

0 commit comments

Comments
 (0)