You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.6 KiB

( function ( $, rwmb ) {
'use strict';
function setInitialRequiredProp() {
var $this = $( this ),
required = $this.prop( 'required' );
if ( required ) {
$this.data( 'initial-required', required );
}
}
function unsetRequiredProp() {
$( this ).prop( 'required', false );
}
function setRequiredProp() {
var $this = $( this );
if ( $this.data( 'initial-required' ) ) {
$this.prop( 'required', true );
}
}
function toggleTree() {
var $this = $( this ),
val = $this.val(),
$tree = $this.siblings( '.rwmb-select-tree' ),
$selected = $tree.filter( "[data-parent-id='" + val + "']" ),
$notSelected = $tree.not( $selected );
$selected.removeClass( 'hidden' ).find( 'select' ).each( setRequiredProp );
$notSelected.addClass( 'hidden' ).find( 'select' ).each( unsetRequiredProp ).prop( 'selectedIndex', 0 );
}
function instantiateSelect2() {
var $this = $( this ),
options = $this.data( 'options' );
$this
.removeClass( 'select2-hidden-accessible' ).removeAttr( 'data-select2-id' )
.children().removeAttr( 'data-select2-id' ).end()
.siblings( '.select2-container' ).remove().end()
.select2( options );
toggleTree.call( this );
}
function init( e ) {
var $select = $( e.target ).find( '.rwmb-select-tree > select' );
$select.each ( setInitialRequiredProp );
$select.each( function() {
const $this = $( this ),
options = $this.data( 'options' );
$this.select2( options );
} );
}
rwmb.$document
.on( 'mb_ready', init )
.on( 'change', '.rwmb-select-tree > select', toggleTree )
.on( 'clone', '.rwmb-select-tree > select', instantiateSelect2 );
} )( jQuery, rwmb );