plantuml-server/src/main/webapp/components/modals/settings/settings.js

55 lines
2.3 KiB
JavaScript

/**************
* Settings JS *
***************/
function initSettings() {
const themeElement = document.getElementById("theme");
const diagramPreviewTypeElement = document.getElementById("diagramPreviewType");
const editorWatcherTimeoutElement = document.getElementById("editorWatcherTimeout");
function openSettings() {
setVisibility(document.getElementById("settings"), true, true);
// fill settings form
themeElement.value = document.appConfig.theme;
diagramPreviewTypeElement.value = document.appConfig.diagramPreviewType;
editorWatcherTimeoutElement.value = document.appConfig.editorWatcherTimeout;
setEditorValue(document.settingsEditor, JSON.stringify(document.appConfig.editorCreateOptions, null, " "));
}
function saveSettings() {
const appConfig = Object.assign({}, document.appConfig);
appConfig.theme = themeElement.value;
appConfig.editorWatcherTimeout = editorWatcherTimeoutElement.value;
appConfig.diagramPreviewType = diagramPreviewTypeElement.value;
appConfig.editorCreateOptions = JSON.parse(document.settingsEditor.getValue());
updateConfig(appConfig);
closeModal("settings");
}
function onThemeChanged(event) {
const theme = event.target.value;
const editorCreateOptionsString = document.settingsEditor.getValue();
const replaceTheme = (theme === "dark") ? "vs" : "vs-dark";
const substituteTheme = (theme === "dark") ? "vs-dark" : "vs";
const regex = new RegExp('("theme"\\s*:\\s*)"' + replaceTheme + '"', "gm");
setEditorValue(document.settingsEditor, editorCreateOptionsString.replace(regex, '$1"' + substituteTheme + '"'));
}
// create app config monaco editor
document.settingsEditor = monaco.editor.create(document.getElementById("settings-monaco-editor"), {
language: "json", ...document.appConfig.editorCreateOptions
});
// add listeners
themeElement.addEventListener("change", onThemeChanged);
document.getElementById("settings-ok-btn").addEventListener("click", saveSettings);
// support Ctrl+, to open the settings
window.addEventListener("keydown", function(e) {
if (e.key === "," && (isMac ? e.metaKey : e.ctrlKey)) {
e.preventDefault();
if (!isModalOpen("settings")) {
openSettings();
}
}
}, false);
// register model listeners
registerModalListener("settings", openSettings);
}