Cian Butler
3 years ago
committed by
GitHub
14 changed files with 780 additions and 659 deletions
@ -1,126 +1,162 @@ |
|||
function optionGenericGet() { return this.el.querySelector("input").value; } |
|||
function optionGenericSet(value) { this.el.querySelector("input").value = value; } |
|||
function optionEnumGet() { return this.el.querySelector("select").value; } |
|||
function optionEnumSet(value) { this.el.querySelector("select").value = value; } |
|||
function optionBoolGet() { return this.el.querySelector("input").checked; } |
|||
function optionBoolSet(value) { this.el.querySelector("input").checked = value; } |
|||
function optionGenericGet() { |
|||
return this.el.querySelector('input').value; |
|||
} |
|||
function optionGenericSet(value) { |
|||
this.el.querySelector('input').value = value; |
|||
} |
|||
function optionEnumGet() { |
|||
return this.el.querySelector('select').value; |
|||
} |
|||
function optionEnumSet(value) { |
|||
this.el.querySelector('select').value = value; |
|||
} |
|||
function optionBoolGet() { |
|||
return this.el.querySelector('input').checked; |
|||
} |
|||
function optionBoolSet(value) { |
|||
this.el.querySelector('input').checked = value; |
|||
} |
|||
function optionNumberGet() { |
|||
let value = (this.float === true ? parseFloat : parseInt)(this.el.querySelector("input").value); |
|||
if (Number.isNaN(value) || typeof value !== "number") value = 0; |
|||
if (typeof this.min === "number") value = Math.max(value, this.min); |
|||
if (typeof this.max === "number") value = Math.min(value, this.max); |
|||
return value; |
|||
let value = (this.float === true ? parseFloat : parseInt)( |
|||
this.el.querySelector('input').value, |
|||
); |
|||
if (Number.isNaN(value) || typeof value !== 'number') value = 0; |
|||
if (typeof this.min === 'number') value = Math.max(value, this.min); |
|||
if (typeof this.max === 'number') value = Math.min(value, this.max); |
|||
return value; |
|||
} |
|||
function optionNumberSet(value) { |
|||
this.el.querySelector('input').value = value; |
|||
} |
|||
function optionNumberSet(value) { this.el.querySelector("input").value = value; } |
|||
|
|||
const allOptions = []; |
|||
function inflateOptions(optionsSchema) { |
|||
const booleanOption = document.querySelector("#boolean_option.templ"); |
|||
const enumOption = document.querySelector("#enum_option.templ"); |
|||
const textOption = document.querySelector("#text_option.templ"); |
|||
const numberOption = document.querySelector("#number_option.templ"); |
|||
const colorOption = document.querySelector("#color_option.templ"); |
|||
const booleanOption = document.querySelector('#boolean_option.templ'); |
|||
const enumOption = document.querySelector('#enum_option.templ'); |
|||
const textOption = document.querySelector('#text_option.templ'); |
|||
const numberOption = document.querySelector('#number_option.templ'); |
|||
const colorOption = document.querySelector('#color_option.templ'); |
|||
|
|||
function copyOver(element) { |
|||
while (element.children.length > 0) document.body.append(element.children[0]); |
|||
} |
|||
function copyOver(element) { |
|||
while (element.children.length > 0) |
|||
document.body.append(element.children[0]); |
|||
} |
|||
|
|||
optionsSchema.forEach(option => { |
|||
let el; |
|||
option.get = optionGenericGet.bind(option); |
|||
option.set = optionGenericSet.bind(option); |
|||
optionsSchema.forEach(option => { |
|||
let el; |
|||
option.get = optionGenericGet.bind(option); |
|||
option.set = optionGenericSet.bind(option); |
|||
|
|||
switch (option.type) { |
|||
case "boolean": |
|||
el = booleanOption.cloneNode(true); |
|||
option.get = optionBoolGet.bind(option); |
|||
option.set = optionBoolSet.bind(option); |
|||
break; |
|||
switch (option.type) { |
|||
case 'boolean': |
|||
el = booleanOption.cloneNode(true); |
|||
option.get = optionBoolGet.bind(option); |
|||
option.set = optionBoolSet.bind(option); |
|||
break; |
|||
|
|||
case "enum": |
|||
el = enumOption.cloneNode(true); |
|||
option.enum.forEach(varriant => { |
|||
const optionEl = document.createElement("option"); |
|||
optionEl.innerText = varriant; |
|||
optionEl.value = varriant; |
|||
el.querySelector("select").appendChild(optionEl); |
|||
}); |
|||
option.get = optionEnumGet.bind(option); |
|||
option.set = optionEnumSet.bind(option); |
|||
break; |
|||
case 'enum': |
|||
el = enumOption.cloneNode(true); |
|||
option.enum.forEach(varriant => { |
|||
const optionEl = document.createElement('option'); |
|||
optionEl.innerText = varriant; |
|||
optionEl.value = varriant; |
|||
el.querySelector('select').appendChild(optionEl); |
|||
}); |
|||
option.get = optionEnumGet.bind(option); |
|||
option.set = optionEnumSet.bind(option); |
|||
break; |
|||
|
|||
case "text": |
|||
el = textOption.cloneNode(true); |
|||
break; |
|||
case 'text': |
|||
el = textOption.cloneNode(true); |
|||
break; |
|||
|
|||
case "number": |
|||
el = numberOption.cloneNode(true); |
|||
if (option.float === true) el.querySelector("input").setAttribute("step", "0.001"); |
|||
option.get = optionNumberGet.bind(option); |
|||
option.set = optionNumberSet.bind(option); |
|||
if (typeof option.min === "number") el.querySelector("input").setAttribute("min", option.min.toString()); |
|||
if (typeof option.max === "number") el.querySelector("input").setAttribute("max", option.max.toString()); |
|||
break; |
|||
case 'number': |
|||
el = numberOption.cloneNode(true); |
|||
if (option.float === true) |
|||
el.querySelector('input').setAttribute('step', '0.001'); |
|||
option.get = optionNumberGet.bind(option); |
|||
option.set = optionNumberSet.bind(option); |
|||
if (typeof option.min === 'number') |
|||
el.querySelector('input').setAttribute('min', option.min.toString()); |
|||
if (typeof option.max === 'number') |
|||
el.querySelector('input').setAttribute('max', option.max.toString()); |
|||
break; |
|||
|
|||
case "color": |
|||
el = colorOption.cloneNode(true); |
|||
break; |
|||
case 'color': |
|||
el = colorOption.cloneNode(true); |
|||
break; |
|||
|
|||
default: |
|||
throw new Error(`Unknown option type ${ option.type}`); |
|||
} |
|||
default: |
|||
throw new Error(`Unknown option type ${option.type}`); |
|||
} |
|||
|
|||
el.querySelector(".title").innerText = option.name; |
|||
el.querySelector(".desc").innerText = option.description; |
|||
[ option.el ] = el.children; |
|||
copyOver(el); |
|||
allOptions.push(option); |
|||
}); |
|||
el.querySelector('.title').innerText = option.name; |
|||
el.querySelector('.desc').innerText = option.description; |
|||
[option.el] = el.children; |
|||
copyOver(el); |
|||
allOptions.push(option); |
|||
}); |
|||
} |
|||
|
|||
function getItem(json, path) { |
|||
const mypath = path[0]; |
|||
if (path.length === 1) return json[mypath]; |
|||
if (json[mypath] != null) return getItem(json[mypath], path.slice(1)); |
|||
return null; |
|||
const mypath = path[0]; |
|||
if (path.length === 1) return json[mypath]; |
|||
if (json[mypath] != null) return getItem(json[mypath], path.slice(1)); |
|||
return null; |
|||
} |
|||
function setItem(json, path, item) { |
|||
const mypath = path[0]; |
|||
if (path.length === 1) json[mypath] = item; |
|||
else { |
|||
if (json[mypath] == null) json[mypath] = {}; |
|||
setItem(json[mypath], path.slice(1), item); |
|||
} |
|||
const mypath = path[0]; |
|||
if (path.length === 1) json[mypath] = item; |
|||
else { |
|||
if (json[mypath] == null) json[mypath] = {}; |
|||
setItem(json[mypath], path.slice(1), item); |
|||
} |
|||
} |
|||
|
|||
window.loadOptions = function(config) { |
|||
allOptions.forEach(option => { |
|||
let value = getItem(config, option.path); |
|||
if (option.nullable === true && option.type === "text" && value == null) value = null; |
|||
else if (option.nullable === true && option.type === "number" && value == null) value = -1; |
|||
else if (value == null) return; |
|||
if (option.json === true && option.type === "text") value = JSON.stringify(value); |
|||
option.set(value); |
|||
option.el.classList.remove("unbounded"); |
|||
}); |
|||
} |
|||
window.loadOptions = function (config) { |
|||
allOptions.forEach(option => { |
|||
let value = getItem(config, option.path); |
|||
if (option.nullable === true && option.type === 'text' && value == null) |
|||
value = null; |
|||
else if ( |
|||
option.nullable === true && |
|||
option.type === 'number' && |
|||
value == null |
|||
) |
|||
value = -1; |
|||
else if (value == null) return; |
|||
if (option.json === true && option.type === 'text') |
|||
value = JSON.stringify(value); |
|||
option.set(value); |
|||
option.el.classList.remove('unbounded'); |
|||
}); |
|||
}; |
|||
|
|||
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.', |
|||
); |
|||
|
|||
function saveConfig() { |
|||
const newConfig = {}; |
|||
allOptions.forEach(option => { |
|||
let newValue = option.get(); |
|||
if (option.nullable === true && ((option.type === "text" && newValue === "") || ( option.type === "number" && newValue < 0))) return; |
|||
if (option.json === true && option.type === "text") newValue = JSON.parse(newValue); |
|||
setItem(newConfig, option.path, newValue); |
|||
}); |
|||
window.wetty_save_config(newConfig); |
|||
}; |
|||
const newConfig = {}; |
|||
allOptions.forEach(option => { |
|||
let newValue = option.get(); |
|||
if ( |
|||
option.nullable === true && |
|||
((option.type === 'text' && newValue === '') || |
|||
(option.type === 'number' && newValue < 0)) |
|||
) |
|||
return; |
|||
if (option.json === true && option.type === 'text') |
|||
newValue = JSON.parse(newValue); |
|||
setItem(newConfig, option.path, newValue); |
|||
}); |
|||
window.wetty_save_config(newConfig); |
|||
} |
|||
|
|||
window.addEventListener("input", () => { |
|||
const els = document.querySelectorAll("input, select"); |
|||
for (let i = 0; i < els.length; i += 1) { |
|||
els[i].addEventListener("input", saveConfig); |
|||
} |
|||
window.addEventListener('input', () => { |
|||
const els = document.querySelectorAll('input, select'); |
|||
for (let i = 0; i < els.length; i += 1) { |
|||
els[i].addEventListener('input', saveConfig); |
|||
} |
|||
}); |
|||
|
@ -1,71 +1,71 @@ |
|||
<!DOCTYPE HTML> |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<title>Wetty XTerm Configuration</title> |
|||
<link rel="stylesheet" href="./style.css" /> |
|||
</head> |
|||
<body> |
|||
<header> |
|||
<h1>Configure</h1> |
|||
</header> |
|||
<head> |
|||
<title>Wetty XTerm Configuration</title> |
|||
<link rel="stylesheet" href="./style.css" /> |
|||
</head> |
|||
<body> |
|||
<header> |
|||
<h1>Configure</h1> |
|||
</header> |
|||
|
|||
<div class="templ" id="boolean_option"> |
|||
<div class="boolean_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="checkbox" /> |
|||
</div> |
|||
</div> |
|||
<div class="templ" id="enum_option"> |
|||
<div class="enum_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<select></select> |
|||
</div> |
|||
</div> |
|||
<div class="templ" id="text_option"> |
|||
<div class="text_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="text" /> |
|||
</div> |
|||
<div class="error_reporting"></div> |
|||
</div> |
|||
<div class="templ" id="number_option"> |
|||
<div class="number_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="number" size="10" /> |
|||
</div> |
|||
<div class="error_reporting"></div> |
|||
</div> |
|||
<div class="templ" id="color_option"> |
|||
<div class="color_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="color" /> |
|||
</div> |
|||
</div> |
|||
<div class="templ" id="boolean_option"> |
|||
<div class="boolean_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br /> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="checkbox" /> |
|||
</div> |
|||
</div> |
|||
<div class="templ" id="enum_option"> |
|||
<div class="enum_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br /> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<select></select> |
|||
</div> |
|||
</div> |
|||
<div class="templ" id="text_option"> |
|||
<div class="text_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br /> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="text" /> |
|||
</div> |
|||
<div class="error_reporting"></div> |
|||
</div> |
|||
<div class="templ" id="number_option"> |
|||
<div class="number_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br /> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="number" size="10" /> |
|||
</div> |
|||
<div class="error_reporting"></div> |
|||
</div> |
|||
<div class="templ" id="color_option"> |
|||
<div class="color_option unbounded"> |
|||
<p> |
|||
<b class="title"></b><br /> |
|||
<span class="desc"></span> |
|||
</p> |
|||
<input type="color" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<script src="./functionality.js"></script> |
|||
<script src="./functionality.js"></script> |
|||
|
|||
<h2>General Options</h2> |
|||
<script src="./xterm_general_options.js"></script> |
|||
<h2>Color Theme</h2> |
|||
<script src="./xterm_color_theme.js"></script> |
|||
<h2>Advanced XTerm Options</h2> |
|||
<script src="./xterm_advanced_options.js"></script> |
|||
<h2>General Options</h2> |
|||
<script src="./xterm_general_options.js"></script> |
|||
<h2>Color Theme</h2> |
|||
<script src="./xterm_color_theme.js"></script> |
|||
<h2>Advanced XTerm Options</h2> |
|||
<script src="./xterm_advanced_options.js"></script> |
|||
|
|||
<script src="./xterm_defaults.js"></script> |
|||
</body> |
|||
<script src="./xterm_defaults.js"></script> |
|||
</body> |
|||
</html> |
|||
|
@ -1,59 +1,78 @@ |
|||
html { background-color: black; } |
|||
html, body { overflow: hidden auto; } |
|||
html { |
|||
background-color: black; |
|||
} |
|||
html, |
|||
body { |
|||
overflow: hidden auto; |
|||
} |
|||
body { |
|||
display: flex; |
|||
flex-flow: column nowrap; |
|||
font-family: monospace; |
|||
font-size: 1rem; |
|||
color: white; |
|||
} |
|||
.templ { display: none; } |
|||
h2 { text-align: center; text-decoration: underline; } |
|||
display: flex; |
|||
flex-flow: column nowrap; |
|||
font-family: monospace; |
|||
font-size: 1rem; |
|||
color: white; |
|||
} |
|||
.templ { |
|||
display: none; |
|||
} |
|||
h2 { |
|||
text-align: center; |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
header { |
|||
display: flex; |
|||
flex-flow: row nowrap; |
|||
align-items: center; |
|||
display: flex; |
|||
flex-flow: row nowrap; |
|||
align-items: center; |
|||
} |
|||
header button { |
|||
padding: 0.5em; |
|||
font-size: 1em; |
|||
margin: 0.5em; |
|||
border-radius: 0.5em; |
|||
collapse-margin; |
|||
padding: 0.5em; |
|||
font-size: 1em; |
|||
margin: 0.5em; |
|||
border-radius: 0.5em; |
|||
} |
|||
|
|||
.boolean_option, .number_option, .color_option, .enum_option, .text_option { |
|||
display: grid; |
|||
grid-template-columns: 100fr min(30em, 50%); |
|||
grid-template-rows: auto; |
|||
align-items: center; |
|||
} |
|||
.boolean_option input, .number_option input, .color_option input, .text_option input, .enum_option select { |
|||
margin: 0 0.5em; |
|||
font-size: 1em; |
|||
background-color: hsl(0,0%,20%); |
|||
color: white; |
|||
border: 2px solid white; |
|||
.boolean_option, |
|||
.number_option, |
|||
.color_option, |
|||
.enum_option, |
|||
.text_option { |
|||
display: grid; |
|||
grid-template-columns: 100fr min(30em, 50%); |
|||
grid-template-rows: auto; |
|||
align-items: center; |
|||
} |
|||
.boolean_option input, |
|||
.number_option input, |
|||
.color_option input, |
|||
.text_option input, |
|||
.enum_option select { |
|||
margin: 0 0.5em; |
|||
font-size: 1em; |
|||
background-color: hsl(0, 0%, 20%); |
|||
color: white; |
|||
border: 2px solid white; |
|||
} |
|||
|
|||
.number_option input, .text_option input, .enum_option select { |
|||
padding: 0.4em; |
|||
.number_option input, |
|||
.text_option input, |
|||
.enum_option select { |
|||
padding: 0.4em; |
|||
} |
|||
.boolean_option input { |
|||
width: 2em; |
|||
height: 2em; |
|||
font-size: 0.75em; |
|||
justify-self: center; |
|||
width: 2em; |
|||
height: 2em; |
|||
font-size: 0.75em; |
|||
justify-self: center; |
|||
} |
|||
.color_option input { |
|||
width: 100%; |
|||
height: 100%; |
|||
background-color: lightgray; |
|||
width: 100%; |
|||
height: 100%; |
|||
background-color: lightgray; |
|||
} |
|||
|
|||
.unbounded .title::before { |
|||
content: "UNBOUND OPTION "; |
|||
color: red; |
|||
font-weight: bold; |
|||
content: 'UNBOUND OPTION '; |
|||
color: red; |
|||
font-weight: bold; |
|||
} |
|||
|
@ -1,69 +1,70 @@ |
|||
const DEFAULT_BELL_SOUND = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; |
|||
const DEFAULT_BELL_SOUND = |
|||
'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'; |
|||
window.loadOptions({ |
|||
wettyFitTerminal: true, |
|||
wettyVoid: 0, |
|||
wettyFitTerminal: true, |
|||
wettyVoid: 0, |
|||
|
|||
xterm: { |
|||
cols: 80, |
|||
rows: 24, |
|||
cursorBlink: false, |
|||
cursorStyle: 'block', |
|||
cursorWidth: 1, |
|||
bellSound: DEFAULT_BELL_SOUND, |
|||
bellStyle: 'none', |
|||
drawBoldTextInBrightColors: true, |
|||
fastScrollModifier: 'alt', |
|||
fastScrollSensitivity: 5, |
|||
fontFamily: 'courier-new, courier, monospace', |
|||
fontSize: 15, |
|||
fontWeight: 'normal', |
|||
fontWeightBold: 'bold', |
|||
lineHeight: 1.0, |
|||
linkTooltipHoverDuration: 500, |
|||
letterSpacing: 0, |
|||
logLevel: 'info', |
|||
scrollback: 1000, |
|||
scrollSensitivity: 1, |
|||
screenReaderMode: false, |
|||
macOptionIsMeta: false, |
|||
macOptionClickForcesSelection: false, |
|||
minimumContrastRatio: 1, |
|||
disableStdin: false, |
|||
allowProposedApi: true, |
|||
allowTransparency: false, |
|||
tabStopWidth: 8, |
|||
rightClickSelectsWord: false, |
|||
rendererType: 'canvas', |
|||
windowOptions: {}, |
|||
windowsMode: false, |
|||
wordSeparator: ' ()[]{}\',"`', |
|||
convertEol: false, |
|||
termName: 'xterm', |
|||
cancelEvents: false, |
|||
xterm: { |
|||
cols: 80, |
|||
rows: 24, |
|||
cursorBlink: false, |
|||
cursorStyle: 'block', |
|||
cursorWidth: 1, |
|||
bellSound: DEFAULT_BELL_SOUND, |
|||
bellStyle: 'none', |
|||
drawBoldTextInBrightColors: true, |
|||
fastScrollModifier: 'alt', |
|||
fastScrollSensitivity: 5, |
|||
fontFamily: 'courier-new, courier, monospace', |
|||
fontSize: 15, |
|||
fontWeight: 'normal', |
|||
fontWeightBold: 'bold', |
|||
lineHeight: 1.0, |
|||
linkTooltipHoverDuration: 500, |
|||
letterSpacing: 0, |
|||
logLevel: 'info', |
|||
scrollback: 1000, |
|||
scrollSensitivity: 1, |
|||
screenReaderMode: false, |
|||
macOptionIsMeta: false, |
|||
macOptionClickForcesSelection: false, |
|||
minimumContrastRatio: 1, |
|||
disableStdin: false, |
|||
allowProposedApi: true, |
|||
allowTransparency: false, |
|||
tabStopWidth: 8, |
|||
rightClickSelectsWord: false, |
|||
rendererType: 'canvas', |
|||
windowOptions: {}, |
|||
windowsMode: false, |
|||
wordSeparator: ' ()[]{}\',"`', |
|||
convertEol: false, |
|||
termName: 'xterm', |
|||
cancelEvents: false, |
|||
|
|||
theme: { |
|||
foreground: "#ffffff", |
|||
background: "#000000", |
|||
cursor: "#ffffff", |
|||
cursorAccent: "#000000", |
|||
selection: "#FFFFFF4D", |
|||
theme: { |
|||
foreground: '#ffffff', |
|||
background: '#000000', |
|||
cursor: '#ffffff', |
|||
cursorAccent: '#000000', |
|||
selection: '#FFFFFF4D', |
|||
|
|||
black: "#2e3436", |
|||
red: "#cc0000", |
|||
green: "#4e9a06", |
|||
yellow: "#c4a000", |
|||
blue: "#3465a4", |
|||
magenta: "#75507b", |
|||
cyan: "#06989a", |
|||
white: "#d3d7cf", |
|||
brightBlack: "#555753", |
|||
brightRed: "#ef2929", |
|||
brightGreen: "#8ae234", |
|||
brightYellow: "#fce94f", |
|||
brightBlue: "#729fcf", |
|||
brightMagenta: "#ad7fa8", |
|||
brightCyan: "#34e2e2", |
|||
brightWhite: "#eeeeec" |
|||
} |
|||
} |
|||
black: '#2e3436', |
|||
red: '#cc0000', |
|||
green: '#4e9a06', |
|||
yellow: '#c4a000', |
|||
blue: '#3465a4', |
|||
magenta: '#75507b', |
|||
cyan: '#06989a', |
|||
white: '#d3d7cf', |
|||
brightBlack: '#555753', |
|||
brightRed: '#ef2929', |
|||
brightGreen: '#8ae234', |
|||
brightYellow: '#fce94f', |
|||
brightBlue: '#729fcf', |
|||
brightMagenta: '#ad7fa8', |
|||
brightCyan: '#34e2e2', |
|||
brightWhite: '#eeeeec', |
|||
}, |
|||
}, |
|||
}); |
|||
|
@ -1,107 +1,136 @@ |
|||
window.inflateOptions([ |
|||
{ |
|||
type: "text", |
|||
name: "Font Family", |
|||
description: "The font family for terminal text.", |
|||
path: ["xterm", "fontFamily"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Font Size", |
|||
description: "The font size in CSS pixels for terminal text.", |
|||
path: ["xterm", "fontSize"], |
|||
min: 4, |
|||
}, |
|||
{ |
|||
type: "enum", |
|||
name: "Regular Font Weight", |
|||
description: "The font weight for non-bold text.", |
|||
path: ["xterm", "fontWeight"], |
|||
enum: ["normal", "bold", "100", "200", "300", "400", "500", "600", "700", "800", "900"], |
|||
}, |
|||
{ |
|||
type: "enum", |
|||
name: "Bold Font Weight", |
|||
description: "The font weight for bold text.", |
|||
path: ["xterm", "fontWeightBold"], |
|||
enum: ["normal", "bold", "100", "200", "300", "400", "500", "600", "700", "800", "900"], |
|||
}, |
|||
{ |
|||
type: "boolean", |
|||
name: "Fit Terminal", |
|||
description: "Automatically fits the terminal to the page, overriding terminal columns and rows.", |
|||
path: ["wettyFitTerminal"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Terminal Columns", |
|||
description: "The number of columns in the terminal. Overridden by the Fit Terminal option.", |
|||
path: ["xterm", "cols"], |
|||
nullable: true, |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Terminal Rows", |
|||
description: "The number of rows in the terminal. Overridden by the Fit Terminal option.", |
|||
path: ["xterm", "rows"], |
|||
nullable: true, |
|||
}, |
|||
{ |
|||
type: "enum", |
|||
name: "Cursor Style", |
|||
description: "The style of the cursor", |
|||
path: ["xterm", "cursorStyle"], |
|||
enum: ["block", "underline", "bar"], |
|||
}, |
|||
{ |
|||
type: "boolean", |
|||
name: "Blinking Cursor", |
|||
description: "Whether the cursor blinks", |
|||
path: ["xterm", "cursorBlink"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Bar Cursor Width", |
|||
description: "The width of the cursor in CSS pixels. Only applies when Cursor Style is set to 'bar'.", |
|||
path: ["xterm", "cursorWidth"], |
|||
}, |
|||
{ |
|||
type: "boolean", |
|||
name: "Draw Bold Text In Bright Colors", |
|||
description: "Whether to draw bold text in bright colors", |
|||
path: ["xterm", "drawBoldTextInBrightColors"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Scroll Sensitivity", |
|||
description: "The scroll speed multiplier for regular scrolling.", |
|||
path: ["xterm", "scrollSensitivity"], |
|||
float: true, |
|||
}, |
|||
{ |
|||
type: "enum", |
|||
name: "Fast Scroll Key", |
|||
description: "The modifier key to hold to multiply scroll speed.", |
|||
path: ["xterm", "fastScrollModifier"], |
|||
enum: ["none", "alt", "shift", "ctrl"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Fast Scroll Multiplier", |
|||
description: "The scroll speed multiplier used for fast scrolling.", |
|||
path: ["xterm", "fastScrollSensitivity"], |
|||
float: true, |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Scrollback Rows", |
|||
description: "The amount of scrollback rows, rows you can scroll up to after they leave the viewport, to keep.", |
|||
path: ["xterm", "scrollback"], |
|||
}, |
|||
{ |
|||
type: "number", |
|||
name: "Tab Stop Width", |
|||
description: "The size of tab stops in the terminal.", |
|||
path: ["xterm", "tabStopWidth"], |
|||
}, |
|||
{ |
|||
type: 'text', |
|||
name: 'Font Family', |
|||
description: 'The font family for terminal text.', |
|||
path: ['xterm', 'fontFamily'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Font Size', |
|||
description: 'The font size in CSS pixels for terminal text.', |
|||
path: ['xterm', 'fontSize'], |
|||
min: 4, |
|||
}, |
|||
{ |
|||
type: 'enum', |
|||
name: 'Regular Font Weight', |
|||
description: 'The font weight for non-bold text.', |
|||
path: ['xterm', 'fontWeight'], |
|||
enum: [ |
|||
'normal', |
|||
'bold', |
|||
'100', |
|||
'200', |
|||
'300', |
|||
'400', |
|||
'500', |
|||
'600', |
|||
'700', |
|||
'800', |
|||
'900', |
|||
], |
|||
}, |
|||
{ |
|||
type: 'enum', |
|||
name: 'Bold Font Weight', |
|||
description: 'The font weight for bold text.', |
|||
path: ['xterm', 'fontWeightBold'], |
|||
enum: [ |
|||
'normal', |
|||
'bold', |
|||
'100', |
|||
'200', |
|||
'300', |
|||
'400', |
|||
'500', |
|||
'600', |
|||
'700', |
|||
'800', |
|||
'900', |
|||
], |
|||
}, |
|||
{ |
|||
type: 'boolean', |
|||
name: 'Fit Terminal', |
|||
description: |
|||
'Automatically fits the terminal to the page, overriding terminal columns and rows.', |
|||
path: ['wettyFitTerminal'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Terminal Columns', |
|||
description: |
|||
'The number of columns in the terminal. Overridden by the Fit Terminal option.', |
|||
path: ['xterm', 'cols'], |
|||
nullable: true, |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Terminal Rows', |
|||
description: |
|||
'The number of rows in the terminal. Overridden by the Fit Terminal option.', |
|||
path: ['xterm', 'rows'], |
|||
nullable: true, |
|||
}, |
|||
{ |
|||
type: 'enum', |
|||
name: 'Cursor Style', |
|||
description: 'The style of the cursor', |
|||
path: ['xterm', 'cursorStyle'], |
|||
enum: ['block', 'underline', 'bar'], |
|||
}, |
|||
{ |
|||
type: 'boolean', |
|||
name: 'Blinking Cursor', |
|||
description: 'Whether the cursor blinks', |
|||
path: ['xterm', 'cursorBlink'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Bar Cursor Width', |
|||
description: |
|||
"The width of the cursor in CSS pixels. Only applies when Cursor Style is set to 'bar'.", |
|||
path: ['xterm', 'cursorWidth'], |
|||
}, |
|||
{ |
|||
type: 'boolean', |
|||
name: 'Draw Bold Text In Bright Colors', |
|||
description: 'Whether to draw bold text in bright colors', |
|||
path: ['xterm', 'drawBoldTextInBrightColors'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Scroll Sensitivity', |
|||
description: 'The scroll speed multiplier for regular scrolling.', |
|||
path: ['xterm', 'scrollSensitivity'], |
|||
float: true, |
|||
}, |
|||
{ |
|||
type: 'enum', |
|||
name: 'Fast Scroll Key', |
|||
description: 'The modifier key to hold to multiply scroll speed.', |
|||
path: ['xterm', 'fastScrollModifier'], |
|||
enum: ['none', 'alt', 'shift', 'ctrl'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Fast Scroll Multiplier', |
|||
description: 'The scroll speed multiplier used for fast scrolling.', |
|||
path: ['xterm', 'fastScrollSensitivity'], |
|||
float: true, |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Scrollback Rows', |
|||
description: |
|||
'The amount of scrollback rows, rows you can scroll up to after they leave the viewport, to keep.', |
|||
path: ['xterm', 'scrollback'], |
|||
}, |
|||
{ |
|||
type: 'number', |
|||
name: 'Tab Stop Width', |
|||
description: 'The size of tab stops in the terminal.', |
|||
path: ['xterm', 'tabStopWidth'], |
|||
}, |
|||
]); |
|||
|
@ -1,5 +1,5 @@ |
|||
caches.keys().then(cacheNames => { |
|||
cacheNames.forEach(cacheName => { |
|||
caches.keys().then((cacheNames) => { |
|||
cacheNames.forEach((cacheName) => { |
|||
caches.delete(cacheName); |
|||
}); |
|||
}); |
|||
|
Loading…
Reference in new issue