X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/34ca0e947bbf0afdc520c025daabbe1221d69628..ecf245195f18fa05ff987a10f8e26d53ba8f36ed:/modules/documentCanvas/canvas/documentElement.js?ds=inline
diff --git a/modules/documentCanvas/canvas/documentElement.js b/modules/documentCanvas/canvas/documentElement.js
index 0e2cb3d..bef9fdd 100644
--- a/modules/documentCanvas/canvas/documentElement.js
+++ b/modules/documentCanvas/canvas/documentElement.js
@@ -59,7 +59,7 @@ var manipulate = function(e, params, action) {
if(params instanceof DocumentElement) {
dom = params.dom()
} else {
- dom = DocumentNodeElement.createDOM(params);
+ dom = DocumentElement.createDOM(params);
}
e.dom()[action](dom);
return documentElementFromHTMLElement(dom);
@@ -132,18 +132,21 @@ $.extend(DocumentNodeElement.prototype, {
}
});
+DocumentElement.createDOM = function(params) {
+ var ElementType = params.text !== undefined ? DocumentTextElement : DocumentNodeElement;
+ return ElementType.createDOM(params);
+};
+
DocumentNodeElement.createDOM = function(params) {
- var dom;
- if(params.text) {
- dom = $(document.createTextNode(params.text));
- } else {
- dom = $('
').attr('wlxml-tag', params.tag);
- if(params.klass)
- dom.attr('wlxml-class', params.klass);
- }
+ var dom = $('
').attr('wlxml-tag', params.tag);
+ if(params.klass)
+ dom.attr('wlxml-class', params.klass);
return dom;
};
+DocumentTextElement.createDOM = function(params) {
+ return $(document.createTextNode(params.text));
+};
DocumentNodeElement.create = function(params, canvas) {
return documentElementFromHTMLElement(DocumentNodeElement.createDOM(params)[0]);
@@ -199,9 +202,26 @@ $.extend(DocumentTextElement.prototype, {
}
},
unwrap: function() {
- if(this.parent().children().length === 1) {
- var parent = this.parent();
- parent.after(this);
+ var parent = this.parent();
+ if(parent.children().length === 1) {
+ var grandParent = parent.parent();
+ if(grandParent) {
+ var grandParentChildren = grandParent.children(),
+ idx = grandParent.childIndex(parent),
+ prev = idx - 1 > -1 ? grandParentChildren[idx-1] : null,
+ next = idx + 1 < grandParentChildren.length ? grandParentChildren[idx+1] : null;
+ if(prev && next) {
+ prev.setText(prev.getText() + this.getText() + next.getText());
+ next.detach();
+ } else if (prev || next) {
+ var target = prev ? prev : next;
+ target.setText(target.getText() + this.getText());
+ } else {
+ parent.after(this);
+ }
+ } else {
+ parent.after(this);
+ }
parent.detach();
}
},