X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/34ca0e947bbf0afdc520c025daabbe1221d69628..ecf245195f18fa05ff987a10f8e26d53ba8f36ed:/modules/documentCanvas/canvas/documentElement.js 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(); } },