(function($) { Drupal.behaviors.chosen = { attach: function(context, settings) { settings.chosen = settings.chosen || Drupal.settings.chosen; // Prepare selector and add unwantend selectors. var selector = settings.chosen.selector; // Function to prepare all the options together for the chosen() call. var getElementOptions = function (element) { var options = $.extend({}, settings.chosen.options); // The width default option is considered the minimum width, so this // must be evaluated for every option. if ($(element).width() < settings.chosen.minimum_width) { options.width = settings.chosen.minimum_width + 'px'; } else { options.width = $(element).width() + 'px'; } // Some field widgets have cardinality, so we must respect that. // @see chosen_pre_render_select() if ($(element).attr('multiple') && $(element).data('cardinality')) { options.max_selected_options = $(element).data('cardinality'); } return options; }; // Process elements that have opted-in for Chosen. // @todo Remove support for the deprecated chosen-widget class. $('select.chosen-enable, select.chosen-widget', context).once('chosen', function() { options = getElementOptions(this); $(this).chosen(options); }); $(selector, context) // Disabled on: // - Field UI // - WYSIWYG elements // - Tabledrag weights // - Elements that have opted-out of Chosen // - Elements already processed by Chosen .not('#field-ui-field-overview-form select, #field-ui-display-overview-form select, .wysiwyg, .draggable select[name$="[weight]"], .draggable select[name$="[position]"], .chosen-disable, .chosen-processed') .filter(function() { // Filter out select widgets that do not meet the minimum number of // options. var minOptions = $(this).attr('multiple') ? settings.chosen.minimum_multiple : settings.chosen.minimum_single; if (!minOptions) { // Zero value means no minimum. return true; } else { return $(this).find('option').length >= minOptions; } }) .once('chosen', function() { options = getElementOptions(this); $(this).chosen(options); }); } }; })(jQuery);