From: Aleksander Ɓukasz Date: Wed, 28 May 2014 10:26:15 +0000 (+0200) Subject: editor: canvas - let every child of a detached element clean up after itself X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/15376df0aa6df3484cd942b4be2207b94172c502 editor: canvas - let every child of a detached element clean up after itself --- diff --git a/src/editor/modules/documentCanvas/canvas/canvas.js b/src/editor/modules/documentCanvas/canvas/canvas.js index 8ca71ac..05c109c 100644 --- a/src/editor/modules/documentCanvas/canvas/canvas.js +++ b/src/editor/modules/documentCanvas/canvas/canvas.js @@ -138,8 +138,10 @@ $.extend(Canvas.prototype, Backbone.Events, { }, reloadRoot: function() { + if(this.rootElement) { + this.rootElement.detach(); + } this.rootElement = this.createElement(this.wlxmlDocument.root); - this.rootWrapper.empty(); this.rootWrapper.append(this.rootElement.dom); }, diff --git a/src/editor/modules/documentCanvas/canvas/documentElement.js b/src/editor/modules/documentCanvas/canvas/documentElement.js index 99a12f5..8a5193b 100644 --- a/src/editor/modules/documentCanvas/canvas/documentElement.js +++ b/src/editor/modules/documentCanvas/canvas/documentElement.js @@ -151,13 +151,23 @@ $.extend(DocumentNodeElement.prototype, { _container: function() { return this.dom.children('[document-element-content]'); }, - detach: function() { - var parents = this.parents(); - this.dom.detach(); - if(parents[0]) { - parents[0].refreshPath(); + detach: function(isChild) { + var parents; + + if(_.isFunction(this.children)) { + this.children().forEach(function(child) { + child.detach(true); + }); + } + + if(!isChild) { + parents = this.parents(); + this.dom.detach(); + if(parents[0]) { + parents[0].refreshPath(); + } } - return this; + return this; }, before: function(params) { return manipulate(this, params, 'before'); @@ -214,8 +224,10 @@ $.extend(DocumentTextElement.prototype, { .text(this.wlxmlNode.getText() || utils.unicode.ZWS); return dom; }, - detach: function() { - this.dom.detach(); + detach: function(isChild) { + if(!isChild) { + this.dom.detach(); + } return this; }, setText: function(text) {