You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
/* |
|
* Copyright (c) 2015 |
|
* |
|
* This file is licensed under the Affero General Public License version 3 |
|
* or later. |
|
* |
|
* See the COPYING-README file. |
|
* |
|
*/ |
|
|
|
/* global Select2 */ |
|
|
|
/** |
|
* Select2 extension for toggling values in a multi-select dropdown |
|
*/ |
|
(function(Select2) { |
|
|
|
var Select2FindHighlightableChoices = Select2.class.multi.prototype.findHighlightableChoices; |
|
Select2.class.multi.prototype.findHighlightableChoices = function () { |
|
if (this.opts.toggleSelect) { |
|
return this.results.find('.select2-result-selectable:not(.select2-disabled)'); |
|
} |
|
return Select2FindHighlightableChoices.apply(this, arguments); |
|
}; |
|
|
|
var Select2TriggerSelect = Select2.class.multi.prototype.triggerSelect; |
|
Select2.class.multi.prototype.triggerSelect = function (data) { |
|
if (this.opts.toggleSelect && this.val().indexOf(this.id(data)) !== -1) { |
|
var self = this; |
|
var val = this.id(data); |
|
|
|
var selectionEls = this.container.find('.select2-search-choice').filter(function() { |
|
return (self.id($(this).data('select2-data')) === val); |
|
}); |
|
|
|
if (this.unselect(selectionEls)) { |
|
// also unselect in dropdown |
|
this.results.find('.select2-result.select2-selected').each(function () { |
|
var $this = $(this); |
|
if (self.id($this.data('select2-data')) === val) { |
|
$this.removeClass('select2-selected'); |
|
} |
|
}); |
|
this.clearSearch(); |
|
} |
|
|
|
return false; |
|
} else { |
|
return Select2TriggerSelect.apply(this, arguments); |
|
} |
|
}; |
|
|
|
})(Select2); |
|
|
|
|