[FIX] web_editor: review _setActive system for select-class

- Handle the case where one select-class is a subset of another
  select-class of the same group e.g.

  <... data-select-class="hello"/>
  <... data-select-class="hello world"/>

- Handle empty values <... data-select-class=""/>

Note: both cases worked but were not displaying the active checkbox
correctly in the editor UI.
This commit is contained in:
qsm-odoo
2018-10-19 09:06:16 +00:00
parent dea1372215
commit c2b8d2a301
@@ -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');
}
},
//--------------------------------------------------------------------------