diff --git a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.html b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.html index f17e38bdbdc4..51d419b16671 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.html +++ b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.html @@ -1,9 +1,12 @@ {{conf.name}} - + (Default: {{conf.defVal == undefined ? 'null' : conf.defVal}}) + + (Custom setting) +
diff --git a/src/plugins/kibana/public/settings/sections/advanced/index.html b/src/plugins/kibana/public/settings/sections/advanced/index.html index 6417250d2213..8609653e4886 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/index.html +++ b/src/plugins/kibana/public/settings/sections/advanced/index.html @@ -3,8 +3,7 @@

Caution: You can break stuff here

Be careful in here, these settings are for very advanced users only. Tweaks you make here can break large portions of Kibana. - Some of these settings may be undocumented, unsupported or experimental. Blanking a field will cause Kibana to use its internal - defaults which may be unacceptable given other configuration directives. + Some of these settings may be undocumented, unsupported or experimental. If a field has a default value, blanking the field will reset it to its default which may be unacceptable given other configuration directives. Deleting a custom setting will permanently remove it from Kibana's config.
diff --git a/src/plugins/kibana/public/settings/sections/advanced/index.js b/src/plugins/kibana/public/settings/sections/advanced/index.js index 40e1c7fa7981..4f3ec0f5a15e 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/index.js +++ b/src/plugins/kibana/public/settings/sections/advanced/index.js @@ -20,6 +20,7 @@ define(function (require) { ESC: 27 }; + var IMMUTABLE_CONFIG_VALS = ['buildNum']; var NAMED_EDITORS = ['json', 'array', 'boolean', 'select']; var NORMAL_EDITOR = ['number', 'string', 'null', 'undefined']; @@ -32,30 +33,51 @@ define(function (require) { return !(conf.json || conf.array || conf.bool || conf.normal); } + function notDefaultConfig(configName) { + return !(configName in configDefaults); + } + + function notImmutableConfig(configName) { + return !_.contains(IMMUTABLE_CONFIG_VALS, configName); + } + + function toEditableConfig(def, name, value) { + var isCustom = !def; + if (isCustom) def = {}; + + var conf = { + name, + value, + isCustom, + defVal: def.value, + type: getValType(def, value), + description: def.description, + options: def.options + }; + + var editor = getEditorType(conf); + conf.json = editor === 'json'; + conf.select = editor === 'select'; + conf.bool = editor === 'boolean'; + conf.array = editor === 'array'; + conf.normal = editor === 'normal'; + conf.tooComplex = !editor; + + return conf; + } + function readConfigVals() { var configVals = config._vals(); - $scope.configs = _.map(configDefaults, function (def, name) { - var val = configVals[name]; - var conf = { - name: name, - defVal: def.value, - type: getValType(def, val), - description: def.description, - options: def.options, - value: val, - }; + var customConfig = Object.keys(configVals) + .filter(notDefaultConfig) + .filter(notImmutableConfig) + .map(name => toEditableConfig(false, name, configVals[name])); - var editor = getEditorType(conf); - conf.json = editor === 'json'; - conf.select = editor === 'select'; - conf.bool = editor === 'boolean'; - conf.array = editor === 'array'; - conf.normal = editor === 'normal'; - conf.tooComplex = !editor; - - return conf; - }); + $scope.configs = _(configDefaults) + .map((def, name) => toEditableConfig(def, name, configVals[name])) + .concat(customConfig) + .value(); } readConfigVals();