X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/643d726b32f530502411247a087274284e3f9c3a..66dd6f9323a2ae14494a488bc1123b345d30f2c8:/src/smartxml/core.js diff --git a/src/smartxml/core.js b/src/smartxml/core.js index 7118584..f907a20 100644 --- a/src/smartxml/core.js +++ b/src/smartxml/core.js @@ -120,12 +120,24 @@ var documentNodeTransformations = { var elementNodeTransformations = { - detach: function() { + detach: function(params) { var next; + params = _.extend({ + normalizeStrategy: 'merge' + }, params); + if(this.parent() && this.isSurroundedByTextNodes()) { - next = this.next(); - this.prev().appendText(next.getText()); - next.detach(); + if(params.normalizeStrategy === 'detach-left') { + this.prev().detach(); + } else if(params.normalizeStrategy === 'detach-right') { + this.next().detach(); + } else if(params.normalizeStrategy === 'merge') { + next = this.next(); + this.prev().appendText(next.getText()); + next.detach(); + } else { + throw new Error('unknown normalize strategy for detach'); + } } return this.__super__.detach(); }, @@ -462,7 +474,7 @@ var documentTransformations = { return insertion.ofNode; }, deleteText: function(params) { - var ptr, next, toDetach, middle, text; + var ptr, next, nextNext, toDetach, middle, text; if(params.from.node.sameNode(params.to.node)) { ptr = params.from.node; @@ -490,7 +502,11 @@ var documentTransformations = { } else { toDetach = next; next = next.next(); - toDetach.detach(); + nextNext = next ? next.next() : null; + toDetach.detach({normalizeStrategy: (next && next.sameNode(params.to.node)) ? 'merge' : 'detach-right'}); + if(next && !next.isInDocument()) { + next = nextNext; + } } } else { ptr = ptr.parent();