[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:
@@ -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');
|
||||
}
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user