diff --git a/src/editor.js b/src/editor.js index cd7a8933d..0202c26e1 100644 --- a/src/editor.js +++ b/src/editor.js @@ -368,6 +368,12 @@ JSONEditor.AbstractEditor = Class.extend({ isEnabled: function() { return !this.disabled; }, + isRequired: function() { + if(typeof this.schema.required === "boolean") return this.schema.required; + else if(this.parent && this.parent.schema && Array.isArray(this.parent.schema.required)) return this.parent.schema.required.indexOf(this.key) > -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, getDisplayText: function(arr) { var disp = []; var used = {}; diff --git a/src/editors/select.js b/src/editors/select.js index fe047f297..061a7626a 100644 --- a/src/editors/select.js +++ b/src/editors/select.js @@ -68,12 +68,26 @@ JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({ self.enum_display[i] = ""+(display[i] || option); self.enum_values[i] = self.typecast(option); }); + + if(!this.isRequired()){ + self.enum_display.unshift(' '); + self.enum_options.unshift('undefined'); + self.enum_values.unshift(undefined); + } + } // Boolean else if(this.schema.type === "boolean") { self.enum_display = this.schema.options && this.schema.options.enum_titles || ['true','false']; self.enum_options = ['1','']; self.enum_values = [true,false]; + + if(!this.isRequired()){ + self.enum_display.unshift(' '); + self.enum_options.unshift('undefined'); + self.enum_values.unshift(undefined); + } + } // Dynamic Enum else if(this.schema.enumSource) {