[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).
This commit is contained in:
Dharmraj Jhala
2017-06-02 10:26:24 +02:00
committed by qsm-odoo
parent 29ac4004cf
commit a33ec972ab
2 changed files with 10 additions and 4 deletions
@@ -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;
@@ -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) {