2017-03-16 15:29:07 +00:00
/ * *
* @ file
2018-11-23 12:29:20 +00:00
* JavaScript behaviors for Select2 integration .
2017-03-16 15:29:07 +00:00
* /
( function ( $ , Drupal ) {
'use strict' ;
2018-11-23 12:29:20 +00:00
// @see https://select2.github.io/options.html
Drupal . webform = Drupal . webform || { } ;
Drupal . webform . select2 = Drupal . webform . select2 || { } ;
Drupal . webform . select2 . options = Drupal . webform . select2 . options || { } ;
2017-03-16 15:29:07 +00:00
/ * *
* Initialize Select2 support .
*
* @ type { Drupal ~ behavior }
* /
Drupal . behaviors . webformSelect2 = {
attach : function ( context ) {
2018-11-23 12:29:20 +00:00
if ( ! $ . fn . select2 ) {
return ;
}
2017-03-16 15:29:07 +00:00
$ ( context )
. find ( 'select.js-webform-select2, .js-webform-select2 select' )
. once ( 'webform-select2' )
// http://stackoverflow.com/questions/14313001/select2-not-calculating-resolved-width-correctly-if-select-is-hidden
. css ( 'width' , '100%' )
2018-11-23 12:29:20 +00:00
. each ( function ( ) {
var $select = $ ( this ) ;
var options = $ . extend ( { } , Drupal . webform . select2 . options ) ;
if ( $select . data ( 'placeholder' ) ) {
options . placeholder = $select . data ( 'placeholder' ) ;
if ( ! $select . prop ( 'multiple' ) ) {
// Allow single option to be deselected.
options . allowClear = true ;
}
}
$select . select2 ( options ) ;
} ) ;
2017-03-16 15:29:07 +00:00
}
} ;
2018-11-23 12:29:20 +00:00
/ * *
* ISSUE :
* Hiding / showing element via # states API cause select2 dropdown to appear in the wrong position .
*
* WORKAROUND :
* Close ( aka hide ) select2 dropdown when # states API hides or shows an element .
*
* Steps to reproduce :
* - Add custom 'Submit button(s)'
* - Hide submit button
* - Save
* - Open 'Submit button(s)' dialog
*
* Dropdown body is positioned incorrectly when dropdownParent isn ' t statically positioned .
* @ see https : //github.com/select2/select2/issues/3303
* /
$ ( function ( ) {
if ( $ . fn . select2 ) {
$ ( document ) . on ( 'state:visible state:visible-slide' , function ( e ) {
$ ( 'select.select2-hidden-accessible' ) . select2 ( 'close' ) ;
} ) ;
}
} ) ;
2017-03-16 15:29:07 +00:00
} ) ( jQuery , Drupal ) ;