diff --git a/HISTORY.md b/HISTORY.md index 24d70b7..e032a55 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -3,6 +3,11 @@ https://github.com/josdejong/jsoneditor +## not yet released, version 5.5.2 + +- Fixed #294: Fields reset their caret location on every key press in Firefox. + + ## 2016-04-16, version 5.5.1 - Fixed enum select boxes not being rendered/removed when setting or removing diff --git a/src/js/Node.js b/src/js/Node.js index 3dbb37f..67f22ab 100644 --- a/src/js/Node.js +++ b/src/js/Node.js @@ -1915,48 +1915,22 @@ Node.prototype.updateDom = function (options) { domField.className = 'jsoneditor-readonly'; } - var field; + var fieldText; if (this.index != undefined) { - field = this.index; + fieldText = this.index; } else if (this.field != undefined) { - field = this.field; + fieldText = this.field; } else if (this._hasChilds()) { - field = this.type; + fieldText = this.type; } else { - field = ''; + fieldText = ''; } - domField.innerHTML = this._escapeHTML(field); - } + domField.innerHTML = this._escapeHTML(fieldText); - //Locating the schema of the node and checking for any enum type - if(this.editor && this.editor.options) { - //Search for the schema element of the current node and store it in the schema attribute. - //Hereafter, wherever you have access in the node you will have also access in its own schema. - this.schema = this._getJsonObject(this.editor.options.schema, 'name', field)[0]; - if(!this.schema) { - this.schema = this._getJsonObject(this.editor.options.schema, field)[0]; - } - //Search for any enumeration type in the schema of the current node. - //Enum types can be also be part of a composite type. - if(this.schema){ - if(this.schema.hasOwnProperty('enum')){ - this.enum = new Object(); - this.enum.enum = this.schema.enum; - } else if(this.schema.hasOwnProperty('oneOf')){ - this.enum = this._getJsonObject(this.schema.oneOf, 'enum')[0]; - } else if(this.schema.hasOwnProperty('anyOf')){ - this.enum = this._getJsonObject(this.schema.anyOf, 'enum')[0]; - } else if(this.schema.hasOwnProperty('allOf')){ - this.enum = this._getJsonObject(this.schema.allOf, 'enum')[0]; - } else { - delete this.enum; - } - } else { - delete this.enum; - } + this._updateSchema(); } // apply value to DOM @@ -2002,6 +1976,43 @@ Node.prototype.updateDom = function (options) { } }; +/** + * Locate the JSON schema of the node and check for any enum type + * @private + */ +Node.prototype._updateSchema = function () { + //Locating the schema of the node and checking for any enum type + if(this.editor && this.editor.options) { + var field = (this.index != undefined) ? this.index : this.field; + + //Search for the schema element of the current node and store it in the schema attribute. + //Hereafter, wherever you have access in the node you will have also access in its own schema. + this.schema = this._getJsonObject(this.editor.options.schema, 'name', field)[0]; + if(!this.schema) { + this.schema = this._getJsonObject(this.editor.options.schema, field)[0]; + } + + //Search for any enumeration type in the schema of the current node. + //Enum types can be also be part of a composite type. + if(this.schema){ + if(this.schema.hasOwnProperty('enum')){ + this.enum = {}; + this.enum.enum = this.schema.enum; + } else if(this.schema.hasOwnProperty('oneOf')){ + this.enum = this._getJsonObject(this.schema.oneOf, 'enum')[0]; + } else if(this.schema.hasOwnProperty('anyOf')){ + this.enum = this._getJsonObject(this.schema.anyOf, 'enum')[0]; + } else if(this.schema.hasOwnProperty('allOf')){ + this.enum = this._getJsonObject(this.schema.allOf, 'enum')[0]; + } else { + delete this.enum; + } + } else { + delete this.enum; + } + } +}; + /** * Get all sub-elements of the given object with the specified key and value. * @private @@ -2293,7 +2304,9 @@ Node.prototype.onEvent = function (event) { case 'input': this._getDomField(true); - this.updateDom(); + this._updateSchema(); + this._updateDomField(); + this._updateDomValue(); break; case 'keydown':