From a33ec972abf1cadbae2a6a04f759617c82f2a95e Mon Sep 17 00:00:00 2001 From: Dharmraj Jhala Date: Thu, 1 Jun 2017 17:36:13 +0200 Subject: [PATCH] [FIX] web_editor, website: allow to detect indirect clones When cloning a snippet section thanks to the editor, the associated snippet options' `on_clone` methods are called. Now these methods receive a new argument `options`. The option this commit introduces is the `isCurrent` one. It allows the method to know if the snippet section it is associated to is the one that was cloned or if it is a child of the one that was cloned. This is useful to solve a known bug when cloning elements which have bootstrap columns: - When one column is cloned we want it to lose its col-*-offset-* classes so that the offset is not duplicated (only the column). - When a container with column children is cloned we do not want these column' offsets to be removed (we want the whole cloned container to be the same). --- addons/web_editor/static/src/js/snippets.editor.js | 4 +++- .../website/static/src/js/website.snippets.editor.js | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/web_editor/static/src/js/snippets.editor.js b/addons/web_editor/static/src/js/snippets.editor.js index 42f2103f95f..59f523126d9 100644 --- a/addons/web_editor/static/src/js/snippets.editor.js +++ b/addons/web_editor/static/src/js/snippets.editor.js @@ -1010,7 +1010,9 @@ data.Editor = Class.extend({ this.$target.after($clone); this.buildingBlock.call_for_all_snippets($clone, function (editor, $snippet) { for (var i in editor.styles) { - editor.styles[i].on_clone($snippet); + editor.styles[i].on_clone($snippet, { + isCurrent: ($snippet.is($clone)), + }); } }); return false; diff --git a/addons/website/static/src/js/website.snippets.editor.js b/addons/website/static/src/js/website.snippets.editor.js index 083ed195905..8c872928be4 100644 --- a/addons/website/static/src/js/website.snippets.editor.js +++ b/addons/website/static/src/js/website.snippets.editor.js @@ -265,9 +265,13 @@ options.registry["margin-x"] = options.registry.marginAndResize.extend({ return this.grid; }, - on_clone: function ($clone) { - var _class = $clone.attr("class").replace(/\s*(col-lg-offset-|col-md-offset-)([0-9-]+)/g, ''); - $clone.attr("class", _class); + on_clone: function ($clone, options) { + // Below condition is added to remove offset of target element only + // and not its children to avoid design alteration of a container / block. + if (options.isCurrent) { + var _class = $clone.attr("class").replace(/\s*(col-lg-offset-|col-md-offset-)([0-9-]+)/g, ''); + $clone.attr("class", _class); + } return false; }, on_resize: function (compass, beginClass, current) {