import { DEFAULT_FONT_SIZE, MIN_FONT_SIZE, MAX_FONT_SIZE, FONT_SIZE_KEY, readFontSize, saveFontSize } from './terminal-preferences.js';
const toolbar = document.createElement('header');
toolbar.className = 'terminal-settings';
toolbar.innerHTML = `
← 看板
保存在当前浏览器`;
document.body.prepend(toolbar);
const select = toolbar.querySelector('#terminalFontSize');
const smaller = toolbar.querySelector('#smallerFont');
const larger = toolbar.querySelector('#largerFont');
const status = toolbar.querySelector('#fontSizeStatus');
for (let size = MIN_FONT_SIZE; size <= MAX_FONT_SIZE; size++) {
select.add(new Option(`${size} px`, String(size)));
}
let fontSize = readFontSize();
let fittedTerminal;
function updateControls() {
select.value = String(fontSize);
smaller.disabled = fontSize <= MIN_FONT_SIZE;
larger.disabled = fontSize >= MAX_FONT_SIZE;
}
function applyFontSize() {
const term = window.term;
if (!term) return;
if (term.options.fontSize !== fontSize || fittedTerminal !== term) {
term.options.fontSize = fontSize;
term.fit();
fittedTerminal = term;
}
}
function changeFontSize(size) {
fontSize = size;
status.textContent = saveFontSize(size) ? '已保存到当前浏览器' : '无法保存设置,仅当前页面生效';
updateControls();
applyFontSize();
window.term?.focus();
}
select.addEventListener('change', () => changeFontSize(Number(select.value)));
smaller.addEventListener('click', () => changeFontSize(Math.max(MIN_FONT_SIZE, fontSize - 1)));
larger.addEventListener('click', () => changeFontSize(Math.min(MAX_FONT_SIZE, fontSize + 1)));
toolbar.querySelector('#resetFont').addEventListener('click', () => changeFontSize(DEFAULT_FONT_SIZE));
window.addEventListener('storage', (event) => {
if (event.key !== FONT_SIZE_KEY && event.key !== null) return;
fontSize = readFontSize();
updateControls();
applyFontSize();
});
updateControls();
applyFontSize();
// ttyd applies server preferences again on connect/reconnect; restore this browser's choice.
setInterval(applyFontSize, 250);