X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/29a87f7c5b2ddddf7c5c738c4747ffd6f6bb35bb..ab3a2987b2eaca2555a206ac8d4f73903aa9870f:/src/smartxml/core.js?ds=sidebyside diff --git a/src/smartxml/core.js b/src/smartxml/core.js index 419b175..007468f 100644 --- a/src/smartxml/core.js +++ b/src/smartxml/core.js @@ -13,12 +13,21 @@ var INSERTION = function(implementation) { nodeParent, returned; options = options || {}; - if(!(this.document.containsNode(this)) || !insertion.isNew) { + if(!(this.document.containsNode(this)) || !insertion.insertsNew) { nodeParent = insertion.ofNode.parent(); } + if(!insertion.insertsNew && insertion.ofNode.isSurroundedByTextNodes()) { + var prev = insertion.ofNode.prev(), + next = insertion.ofNode.next(); + prev.setText(prev.getText()+next.getText()); + next.detach(); + } returned = implementation.call(this, insertion.ofNode); if(!options.silent && returned.sameNode(insertion.ofNode)) { - this.triggerChangeEvent(insertion.insertsNew ? 'nodeAdded' : 'nodeMoved', {node: insertion.ofNode}, nodeParent, nodeWasContained); + if(!insertion.insertsNew) { + this.triggerChangeEvent('nodeDetached', {node: insertion.ofNode, parent: nodeParent, move: true}); + } + this.triggerChangeEvent('nodeAdded', {node: insertion.ofNode, move: !insertion.insertsNew}, nodeParent, nodeWasContained); } return returned; }; @@ -310,12 +319,12 @@ var textNodeTransformations = { var newElement = this.document.createDocumentNode({tagName: parentElement.getTagName(), attrs: attrs}); parentElement.after(newElement); + succeedingChildren.reverse().forEach(function(child) { + newElement.prepend(child); + }); if(suffix.length > 0) { - newElement.append({text: suffix}); + newElement.prepend({text: suffix}); } - succeedingChildren.forEach(function(child) { - newElement.append(child); - }); return {first: parentElement, second: newElement}; },