| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /**
- * @file
- * Attaches behaviors for the Chosen module.
- */
- (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 (settings.chosen.minimum_width > 0) {
- 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);
|