diff --git a/addons/web_editor/static/src/js/editor/snippets.options.js b/addons/web_editor/static/src/js/editor/snippets.options.js index 346fc3d8f91..67df263f60f 100644 --- a/addons/web_editor/static/src/js/editor/snippets.options.js +++ b/addons/web_editor/static/src/js/editor/snippets.options.js @@ -275,15 +275,36 @@ var SnippetOption = Widget.extend({ */ _setActive: function () { var self = this; - this.$el.find('[data-toggle-class], [data-select-class]') - .addBack('[data-toggle-class], [data-select-class]') + this.$el.find('[data-toggle-class]') + .addBack('[data-toggle-class]') .removeClass('active') .filter(function () { - var $elem = $(this); - var className = $elem.data('toggleClass') || $elem.data('selectClass'); - return self.$target.hasClass(className); + var className = $(this).data('toggleClass'); + return !className || self.$target.hasClass(className); }) .addClass('active'); + + _processSelectClassElements(this.$el); + _.each(this.$el.find('.dropdown-menu'), function (group) { + _processSelectClassElements($(group).children()); + }); + + function _processSelectClassElements($elements) { + var maxNbClasses = -1; + $elements.filter('[data-select-class]') + .removeClass('active') + .filter(function () { + var className = $(this).data('selectClass'); + var nbClasses = className ? className.split(' ').length : 0; + if (nbClasses >= maxNbClasses && (!className || self.$target.hasClass(className))) { + maxNbClasses = nbClasses; + return true; + } + return false; + }) + .last() + .addClass('active'); + } }, //--------------------------------------------------------------------------