diff --git a/core/field_multilineinput.js b/core/field_multilineinput.js index 4b5ccd741..d87c3e3ad 100644 --- a/core/field_multilineinput.js +++ b/core/field_multilineinput.js @@ -69,6 +69,33 @@ Blockly.FieldMultilineInput.fromJson = function(options) { return new Blockly.FieldMultilineInput(text, undefined, options); }; +/** + * Serializes this field's value to XML. Should only be called by Blockly.Xml. + * @param {!Element} fieldElement The element to populate with info about the + * field's state. + * @return {!Element} The element containing info about the field's state. + * @package + */ +Blockly.FieldMultilineInput.prototype.toXml = function(fieldElement) { + // Replace '\n' characters with html-escaped equivalent ' '. This is + // needed so the plain-text representation of the xml produced by + // `Blockly.Xml.domToText` will appear on a single line (this is a limitation + // of the plain-text format). + fieldElement.textContent = this.getValue().replace(/\n/g, ' '); + return fieldElement; +}; + +/** + * Sets the field's value based on the given XML element. Should only be + * called by Blockly.Xml. + * @param {!Element} fieldElement The element containing info about the + * field's state. + * @package + */ +Blockly.FieldMultilineInput.prototype.fromXml = function(fieldElement) { + this.setValue(fieldElement.textContent.replace(/ /g, '\n')); +}; + /** * Create the block UI for this field. * @package diff --git a/core/xml.js b/core/xml.js index 45b3e0ca6..81f49fa1b 100644 --- a/core/xml.js +++ b/core/xml.js @@ -311,17 +311,6 @@ Blockly.Xml.cloneShadow_ = function(shadow, opt_noId) { */ Blockly.Xml.domToText = function(dom) { var text = Blockly.utils.xml.domToText(dom); - // Replace line breaks in text content with ' ' to make them single line. - // E.g. hello\nworld -> hello world - // Do not replace line breaks between tags. - // E.g. ...\n is unchanged. - // Can't use global flag on regexp since backtracking is needed. - var regexp = /(<[^/](?:[^>]*[^/])?>[^<]*)\n([^<]*<\/)/; - var oldText; - do { - oldText = text; - text = text.replace(regexp, '$1 $2'); - } while (text != oldText); // Unpack self-closing tags. These tags fail when embedded in HTML. // -> return text.replace(/<(\w+)([^<]*)\/>/g, '<$1$2>');