If node of the merged-in text existed in a document before (it's not a
new node) it needs to be removed.
var documentNodeTransformations = {
detach: function() {
var documentNodeTransformations = {
detach: function() {
- var parent = this.parent();
+ var parent = this.parent(),
+ existed = this.document.containsNode(this);
- this.triggerChangeEvent('nodeDetached', {parent: parent});
+ if(existed) {
+ this.triggerChangeEvent('nodeDetached', {parent: parent});
+ }
var next = this.next();
if(next && next.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
next.setText(node.getText() + next.getText());
var next = this.next();
if(next && next.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
next.setText(node.getText() + next.getText());
return next;
}
this._$.after(node.nativeNode);
return next;
}
this._$.after(node.nativeNode);
var prev = this.prev();
if(prev && prev.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
prev.setText(prev.getText() + node.getText());
var prev = this.prev();
if(prev && prev.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
prev.setText(prev.getText() + node.getText());
return prev;
}
this._$.before(node.nativeNode);
return prev;
}
this._$.before(node.nativeNode);
var last = _.last(this.contents());
if(last && last.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
last.setText(last.getText() + node.getText());
var last = _.last(this.contents());
if(last && last.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
last.setText(last.getText() + node.getText());
return last;
} else {
this._$.append(node.nativeNode);
return last;
} else {
this._$.append(node.nativeNode);
var first = this.contents()[0];
if(first && first.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
first.setText(node.getText() + first.getText());
var first = this.contents()[0];
if(first && first.nodeType === Node.TEXT_NODE && node.nodeType === Node.TEXT_NODE) {
first.setText(node.getText() + first.getText());
return first;
} else {
this._$.prepend(node.nativeNode);
return first;
} else {
this._$.prepend(node.nativeNode);
before: INSERTION(function(node) {
if(node.nodeType === Node.TEXT_NODE) {
this.prependText(node.getText());
before: INSERTION(function(node) {
if(node.nodeType === Node.TEXT_NODE) {
this.prependText(node.getText());
return this;
} else {
return this.__super__.before(node, {silent:true});
return this;
} else {
return this.__super__.before(node, {silent:true});
after: INSERTION(function(node) {
if(node.nodeType === Node.TEXT_NODE) {
this.appendText(node.getText());
after: INSERTION(function(node) {
if(node.nodeType === Node.TEXT_NODE) {
this.appendText(node.getText());
return this;
} else {
return this.__super__.after(node, {silent:true});
return this;
} else {
return this.__super__.after(node, {silent:true});