77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
/**
|
|
* @file
|
|
* JavaScript behaviors for Chosen integration.
|
|
*/
|
|
|
|
(function ($, Drupal) {
|
|
|
|
'use strict';
|
|
|
|
// @see https://harvesthq.github.io/chosen/options.html
|
|
Drupal.webform = Drupal.webform || {};
|
|
Drupal.webform.chosen = Drupal.webform.chosen || {};
|
|
Drupal.webform.chosen.options = Drupal.webform.chosen.options || {};
|
|
|
|
/**
|
|
* Initialize Chosen support.
|
|
*
|
|
* @type {Drupal~behavior}
|
|
*/
|
|
Drupal.behaviors.webformChosen = {
|
|
attach: function (context) {
|
|
if (!$.fn.chosen) {
|
|
return;
|
|
}
|
|
|
|
// Add HTML5 required attribute support.
|
|
// Checking for $oldChosen to prevent duplicate workarounds from
|
|
// being applied.
|
|
// @see https://github.com/harvesthq/chosen/issues/515
|
|
if (!$.fn.oldChosen) {
|
|
$.fn.oldChosen = $.fn.chosen;
|
|
$.fn.chosen = function (options) {
|
|
var select = $(this);
|
|
var is_creating_chosen = !!options;
|
|
if (is_creating_chosen && select.css('position') === 'absolute') {
|
|
select.removeAttr('style');
|
|
}
|
|
var ret = select.oldChosen(options);
|
|
if (is_creating_chosen && select.css('display') === 'none') {
|
|
select.attr('style', 'display:visible; position:absolute; width:0px; height: 0px; clip:rect(0,0,0,0)');
|
|
select.attr('tabindex', -1);
|
|
}
|
|
return ret;
|
|
};
|
|
}
|
|
|
|
$(context)
|
|
.find('select.js-webform-chosen, .js-webform-chosen select')
|
|
.once('webform-chosen')
|
|
.each(function () {
|
|
var $select = $(this);
|
|
// Check for .chosen-enable to prevent the chosen.module and
|
|
// webform.module from both initializing the chosen select element.
|
|
if ($select.hasClass('chosen-enable')) {
|
|
return;
|
|
}
|
|
|
|
var options = $.extend({width: '100%'}, Drupal.webform.chosen.options);
|
|
if ($select.data('placeholder')) {
|
|
if ($select.prop('multiple')) {
|
|
options.placeholder_text_multiple = $select.data('placeholder');
|
|
}
|
|
else {
|
|
// Clear option value so that placeholder is displayed.
|
|
$select.find('option[value=""]').html('');
|
|
// Allow single option to be deselected.
|
|
options.allow_single_deselect = true;
|
|
}
|
|
}
|
|
|
|
$select.chosen(options);
|
|
});
|
|
}
|
|
};
|
|
|
|
})(jQuery, Drupal);
|