From 15376df0aa6df3484cd942b4be2207b94172c502 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Wed, 28 May 2014 12:26:15 +0200 Subject: [PATCH 1/1] editor: canvas - let every child of a detached element clean up after itself --- .../modules/documentCanvas/canvas/canvas.js | 4 ++- .../documentCanvas/canvas/documentElement.js | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) 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) { -- 2.20.1