tstor/assets/js/config.js

158 lines
4.7 KiB
JavaScript
Raw Normal View History

2021-01-02 19:09:05 +00:00
Distribyted.config = {
_editor: null,
_infoDiv: document.getElementById("distribyted-reload-info-text"),
_loadingInfoDom: document.getElementById("distribyted-reload-info-loading"),
_valid: function () {
if (this._editor == null) {
return false
}
2021-01-02 19:09:05 +00:00
let getYamlCodeValidationErrors = (code) => {
var error = "";
try {
jsyaml.safeLoad(code);
} catch (e) {
error = e;
}
return error;
};
2021-01-02 19:09:05 +00:00
let code = this._editor.getValue();
let error = getYamlCodeValidationErrors(code);
if (error) {
this._editor.getSession().setAnnotations([
{
row: error.mark.line,
column: error.mark.column,
text: error.reason,
type: "error",
},
]);
2021-01-02 19:09:05 +00:00
return false;
} else {
this._editor.getSession().setAnnotations([]);
2021-01-02 19:09:05 +00:00
return true;
}
},
save: function () {
fetch("/api/config", {
method: "POST",
body: this._editor.getValue(),
})
.then(function (response) {
if (response.ok) {
Distribyted.message.info("Configuration saved");
} else {
Distribyted.message.error(
"Error saving configuration file. Response: " + response.status
);
}
})
.catch(function (error) {
Distribyted.message.error("Error saving configuration file: " + error.message);
});
},
reload: function () {
this.cleanInfo();
fetch("/api/reload", {
method: "POST",
})
.then(function (response) {
if (response.ok) {
return response.json();
} else {
Distribyted.config.showInfo("Error reloading server. Response: " + response.status, "ko");
}
})
.then(function (json) {
Distribyted.config.showInfo(json.message, "ok");
})
.catch(function (error) {
Distribyted.message.error("Error reloading server: " + error.message);
});
},
cleanInfo: function () {
this._loadingInfoDom.style.display = "block";
this._infoDiv.innerText = ""
},
showInfo: function (message, flag) {
const li = document.createElement("li");
li.innerText = message;
li.className = "list-group-item";
if (flag == "ok") {
li.className += " list-group-item-success";
} else if (flag == "ko") {
li.className += " list-group-item-danger";
}
if (flag) {
this._loadingInfoDom.style.display = "none";
}
this._infoDiv.appendChild(li);
},
loadView: function () {
this._editor = ace.edit("editor");
this._editor.getSession().setMode("ace/mode/yaml");
this._editor.setShowPrintMargin(false);
this._editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: false,
autoScrollEditorIntoView: true,
fontSize: "16px",
maxLines: 100,
wrap: true,
});
this._editor.commands.addCommand({
name: "save",
bindKey: { win: "Ctrl-S", mac: "Command-S" },
exec: function (editor) {
if (Distribyted.config._valid()) {
Distribyted.config.save();
} else {
Distribyted.message.error("Check file format errors before saving");
}
},
readOnly: false,
});
this._editor.on("change", () => {
Distribyted.config._valid();
});
fetch("/api/config")
.then(function (response) {
if (response.ok) {
return response.text();
} else {
Distribyted.message.error(
"Error getting data from server. Response: " + response.status
);
}
})
.then(function (yaml) {
Distribyted.config._editor.setValue(yaml);
})
.catch(function (error) {
Distribyted.message.error("Error getting yaml from server: " + error.message);
});
var stream = new EventSource("/api/events");
stream.addEventListener("event", function (e) {
Distribyted.config.showInfo(e.data);
});
}
2021-01-02 19:09:05 +00:00
}