' +
'
';
let defaultValueHint = "";
if (value.modified) {
defaultValueHint = "";
if (value.default !== null) {
let defVal = utils.escapeHtml(JSON.stringify(value.default));
switch (defVal) {
case "true": {
defVal = "enabled";
break;
}
case "false": {
defVal = "disabled";
break;
}
case '""':
case "[]": {
defVal = "empty";
break;
}
// No default
}
defaultValueHint = "
Default Value: " + defVal + "
";
}
}
let extraAttributes = "";
if (value.flags.env_var) {
extraAttributes = " disabled";
}
switch (value.type) {
case "IPv4 address":
case "IPv6 address":
case "string": {
box +=
'
Value (string) ' +
'
' +
' " +
defaultValueHint +
addAllowedValues(value.allowed) +
"
";
break;
}
case "boolean": {
box +=
'
Enabled ' +
defaultValueHint +
" " +
"
";
break;
}
case "double": {
box +=
'
Value ' +
'
' +
' " +
defaultValueHint +
"
";
break;
}
case "integer": {
box +=
'
Value (integer) ' +
'
' +
' " +
defaultValueHint +
"
";
break;
}
case "unsigned integer": {
box +=
'
Value (unsigned integer) ' +
'
' +
' " +
defaultValueHint +
"
";
break;
}
case "unsigned integer (16 bit)": {
box +=
'
Value (unsigned 16bit integer) ' +
'
' +
' " +
defaultValueHint +
"
";
break;
}
case "string array": {
box +=
'
Values (one item per line) ' +
'
' +
' " +
defaultValueHint +
addAllowedValues(value.allowed) +
"
";
break;
}
case "enum (unsigned integer)": // fallthrough
case "enum (string)": {
box +=
'
Selected Option ' +
'
' +
'";
value.allowed.forEach(function (option) {
box +=
'" +
option.item +
" ";
});
box +=
" " +
defaultValueHint +
"
" +
'
' +
addAllowedValues(value.allowed) +
"
";
break;
}
case "password (write-only string)": {
box +=
'
Value (string) ' +
'
' +
' " +
defaultValueHint +
addAllowedValues(value.allowed) +
"
";
break;
}
default: {
box += "TYPE " + value.type + " NOT DEFINED";
}
}
box += "
";
var topKey = key.split(".")[0];
var elem = $("#advanced-content-" + topKey + "-flex");
elem.append(box);
}
function createDynamicConfigTabs() {
$.ajax({
url: "/api/config?detailed=true",
})
.done(function (data) {
// Create the content for the advanced dynamic config topics
Object.keys(data.topics).forEach(function (n) {
var topic = data.topics[n];
$("#advanced-content").append(
'
"
);
});
Object.keys(data.config).forEach(function (topic) {
var value = data.config[topic];
generateRow(topic, topic, value, data);
});
$("#advanced-overlay").hide();
$("#advanced-content").append(
'
"
);
$("button[id='save']").on("click", function () {
saveSettings();
});
applyCheckboxRadioStyle();
applyOnlyChanged();
})
.fail(function (data) {
apiFailure(data);
});
}
function initOnlyChanged() {
const elem = $("#only-changed");
// Restore settings level from local storage (if available) or default to "false"
if (localStorage.getItem("only-changed") === null) {
localStorage.setItem("only-changed", "false");
}
elem.prop("checked", localStorage.getItem("only-changed") === "true");
elem.bootstrapToggle({
on: "Modified settings",
off: "All settings",
onstyle: "primary",
offstyle: "success",
size: "small",
width: "180px",
});
elem.on("change", function () {
localStorage.setItem("only-changed", $(this).prop("checked") ? "true" : "false");
applyOnlyChanged();
});
elem.bootstrapToggle(localStorage.getItem("only-changed") === "true" ? "on" : "off");
elem.trigger("change");
}
function applyOnlyChanged() {
if (localStorage.getItem("only-changed") === "true") {
// Hide all boxes that have a data-key attribute
$(".box-title[data-key]").not("[data-modified='true']").closest(".box").hide();
} else {
// Show all boxes that have a data-key attribute
$(".box-title[data-key]").closest(".box").show();
}
}
$(document).ready(function () {
createDynamicConfigTabs();
initOnlyChanged();
});