diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index c5e9b08143..817333bb72 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -147,6 +147,7 @@ { "name": "security", "label": "Security", + "restart": false, "settings": [ { "name": "http_username", diff --git a/domain-server/resources/web/settings/index.shtml b/domain-server/resources/web/settings/index.shtml index 1812c52dad..9d38539b42 100644 --- a/domain-server/resources/web/settings/index.shtml +++ b/domain-server/resources/web/settings/index.shtml @@ -26,7 +26,7 @@ - + @@ -77,7 +77,7 @@ diff --git a/domain-server/resources/web/settings/js/settings.js b/domain-server/resources/web/settings/js/settings.js index 39628ebb11..dd577701a5 100644 --- a/domain-server/resources/web/settings/js/settings.js +++ b/domain-server/resources/web/settings/js/settings.js @@ -1328,6 +1328,18 @@ function makeTableCategoryInput(setting, numVisibleColumns) { return html; } +function getDescriptionForKey(key) { + for (var i in Settings.data.descriptions) { + if (Settings.data.descriptions[i].name === key) { + return Settings.data.descriptions[i]; + } + } +} + +var SAVE_BUTTON_LABEL_SAVE = "Save"; +var SAVE_BUTTON_LABEL_RESTART = "Save and restart"; +var reasonsForRestart = []; + function badgeSidebarForDifferences(changedElement) { // figure out which group this input is in var panelParentID = changedElement.closest('.panel').attr('id'); @@ -1350,13 +1362,24 @@ function badgeSidebarForDifferences(changedElement) { } var badgeValue = 0 + var description = getDescriptionForKey(panelParentID); // badge for any settings we have that are not the same or are not present in initialValues for (var setting in panelJSON) { if ((!_.has(initialPanelJSON, setting) && panelJSON[setting] !== "") || (!_.isEqual(panelJSON[setting], initialPanelJSON[setting]) && (panelJSON[setting] !== "" || _.has(initialPanelJSON, setting)))) { - badgeValue += 1 + badgeValue += 1; + + // add a reason to restart + if (description && description.restart != false) { + reasonsForRestart.push(setting); + } + } else { + // remove a reason to restart + if (description && description.restart != false) { + reasonsForRestart = $.grep(reasonsForRestart, function(v) { return v != setting; }); + } } } @@ -1365,6 +1388,7 @@ function badgeSidebarForDifferences(changedElement) { badgeValue = "" } + $(".save-button").html(reasonsForRestart.length > 0 ? SAVE_BUTTON_LABEL_RESTART : SAVE_BUTTON_LABEL_SAVE); $("a[href='#" + panelParentID + "'] .badge").html(badgeValue); }