+ detach: function(params) {
+ var next, prev;
+
+ params = params || {};
+
+ if(!params.normalizeStrategy) {
+ params.normalizeStrategy = 'merge';
+ }
+
+ if(this.parent() && this.isSurroundedByTextNodes()) {
+ 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();
+ prev = this.prev();
+ params.ret = {
+ mergedTo: prev,
+ previousLen: prev.getText().length
+ };
+ prev.appendText(next.getText());
+ next.detach();
+ } else {
+ throw new Error('unknown normalize strategy for detach');
+ }