1/** 2 * jQuery Select2 Multi checkboxes 3 * - allow to select multi values via normal dropdown control 4 * 5 * author : wasikuss 6 * repo : https://github.com/wasikuss/select2-multi-checkboxes 7 * inspired by : https://github.com/select2/select2/issues/411 8 * License : MIT 9 */ 10(function($) { 11 var S2MultiCheckboxes = function(options, element) { 12 var self = this; 13 self.options = options; 14 self.$element = $(element); 15 var values = self.$element.val(); 16 self.$element.removeAttr('multiple'); 17 self.select2 = self.$element.select2({ 18 allowClear: true, 19 minimumResultsForSearch: options.minimumResultsForSearch, 20 placeholder: options.placeholder, 21 closeOnSelect: false, 22 templateSelection: function() { 23 return self.options.templateSelection(self.$element.val() || [], $('option', self.$element).length); 24 }, 25 templateResult: function(result) { 26 if (result.loading !== undefined) 27 return result.text; 28 return $('<div>').text(result.text).addClass(self.options.wrapClass); 29 }, 30 matcher: function(params, data) { 31 var original_matcher = $.fn.select2.defaults.defaults.matcher; 32 var result = original_matcher(params, data); 33 if (result && self.options.searchMatchOptGroups && data.children && result.children && data.children.length != result.children.length) { 34 result.children = data.children; 35 } 36 return result; 37 } 38 }).data('select2'); 39 self.select2.$results.off("mouseup").on("mouseup", ".select2-results__option[aria-selected]", (function(self) { 40 return function(evt) { 41 var $this = $(this); 42 43 const Utils = $.fn.select2.amd.require('select2/utils') 44 var data = Utils.GetData(this, 'data'); 45 46 if ($this.attr('aria-selected') === 'true') { 47 self.trigger('unselect', { 48 originalEvent: evt, 49 data: data 50 }); 51 return; 52 } 53 54 self.trigger('select', { 55 originalEvent: evt, 56 data: data 57 }); 58 } 59 })(self.select2)); 60 self.$element.attr('multiple', 'multiple').val(values).trigger('change.select2'); 61 } 62 63 $.fn.extend({ 64 select2MultiCheckboxes: function() { 65 var options = $.extend({ 66 placeholder: 'Choose elements', 67 templateSelection: function(selected, total) { 68 return selected.length + ' > ' + total + ' total'; 69 }, 70 wrapClass: 'wrap', 71 minimumResultsForSearch: -1, 72 searchMatchOptGroups: true 73 }, arguments[0]); 74 75 this.each(function() { 76 new S2MultiCheckboxes(options, this); 77 }); 78 } 79 }); 80})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.