157 lines
4.7 KiB
JavaScript
157 lines
4.7 KiB
JavaScript
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
|
|
}
|
|
|
|
let getYamlCodeValidationErrors = (code) => {
|
|
var error = "";
|
|
try {
|
|
jsyaml.safeLoad(code);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
return error;
|
|
};
|
|
|
|
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",
|
|
},
|
|
]);
|
|
|
|
return false;
|
|
} else {
|
|
this._editor.getSession().setAnnotations([]);
|
|
|
|
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);
|
|
});
|
|
}
|
|
|
|
|
|
}
|