208 lines
6.8 KiB
JavaScript
208 lines
6.8 KiB
JavaScript
/*global wc_enhanced_select_params */
|
|
jQuery( function( $ ) {
|
|
|
|
function getEnhancedSelectFormatString() {
|
|
var formatString = {
|
|
formatMatches: function( matches ) {
|
|
if ( 1 === matches ) {
|
|
return wc_enhanced_select_params.i18n_matches_1;
|
|
}
|
|
|
|
return wc_enhanced_select_params.i18n_matches_n.replace( '%qty%', matches );
|
|
},
|
|
formatNoMatches: function() {
|
|
return wc_enhanced_select_params.i18n_no_matches;
|
|
},
|
|
formatAjaxError: function( jqXHR, textStatus, errorThrown ) {
|
|
return wc_enhanced_select_params.i18n_ajax_error;
|
|
},
|
|
formatInputTooShort: function( input, min ) {
|
|
var number = min - input.length;
|
|
|
|
if ( 1 === number ) {
|
|
return wc_enhanced_select_params.i18n_input_too_short_1;
|
|
}
|
|
|
|
return wc_enhanced_select_params.i18n_input_too_short_n.replace( '%qty%', number );
|
|
},
|
|
formatInputTooLong: function( input, max ) {
|
|
var number = input.length - max;
|
|
|
|
if ( 1 === number ) {
|
|
return wc_enhanced_select_params.i18n_input_too_long_1;
|
|
}
|
|
|
|
return wc_enhanced_select_params.i18n_input_too_long_n.replace( '%qty%', number );
|
|
},
|
|
formatSelectionTooBig: function( limit ) {
|
|
if ( 1 === limit ) {
|
|
return wc_enhanced_select_params.i18n_selection_too_long_1;
|
|
}
|
|
|
|
return wc_enhanced_select_params.i18n_selection_too_long_n.replace( '%qty%', limit );
|
|
},
|
|
formatLoadMore: function( pageNumber ) {
|
|
return wc_enhanced_select_params.i18n_load_more;
|
|
},
|
|
formatSearching: function() {
|
|
return wc_enhanced_select_params.i18n_searching;
|
|
}
|
|
};
|
|
|
|
return formatString;
|
|
}
|
|
|
|
$( document.body )
|
|
|
|
.on( 'wc-enhanced-select-init', function() {
|
|
|
|
// Regular select boxes
|
|
$( ':input.wc-enhanced-select, :input.chosen_select' ).filter( ':not(.enhanced)' ).each( function() {
|
|
var select2_args = $.extend({
|
|
minimumResultsForSearch: 10,
|
|
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
|
placeholder: $( this ).data( 'placeholder' )
|
|
}, getEnhancedSelectFormatString() );
|
|
|
|
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
|
});
|
|
|
|
$( ':input.wc-enhanced-select-nostd, :input.chosen_select_nostd' ).filter( ':not(.enhanced)' ).each( function() {
|
|
var select2_args = $.extend({
|
|
minimumResultsForSearch: 10,
|
|
allowClear: true,
|
|
placeholder: $( this ).data( 'placeholder' )
|
|
}, getEnhancedSelectFormatString() );
|
|
|
|
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
|
});
|
|
|
|
// Ajax product search box
|
|
$( ':input.wc-product-search' ).filter( ':not(.enhanced)' ).each( function() {
|
|
var select2_args = {
|
|
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
|
placeholder: $( this ).data( 'placeholder' ),
|
|
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
|
escapeMarkup: function( m ) {
|
|
return m;
|
|
},
|
|
ajax: {
|
|
url: wc_enhanced_select_params.ajax_url,
|
|
dataType: 'json',
|
|
quietMillis: 250,
|
|
data: function( term, page ) {
|
|
return {
|
|
term: term,
|
|
action: $( this ).data( 'action' ) || 'woocommerce_json_search_products_and_variations',
|
|
security: wc_enhanced_select_params.search_products_nonce
|
|
};
|
|
},
|
|
results: function( data, page ) {
|
|
var terms = [];
|
|
if ( data ) {
|
|
$.each( data, function( id, text ) {
|
|
terms.push( { id: id, text: text } );
|
|
});
|
|
}
|
|
return { results: terms };
|
|
},
|
|
cache: true
|
|
}
|
|
};
|
|
|
|
if ( $( this ).data( 'multiple' ) === true ) {
|
|
select2_args.multiple = true;
|
|
select2_args.initSelection = function( element, callback ) {
|
|
var data = $.parseJSON( element.attr( 'data-selected' ) );
|
|
var selected = [];
|
|
|
|
$( element.val().split( "," ) ).each( function( i, val ) {
|
|
selected.push( { id: val, text: data[ val ] } );
|
|
});
|
|
return callback( selected );
|
|
};
|
|
select2_args.formatSelection = function( data ) {
|
|
return '<div class="selected-option" data-id="' + data.id + '">' + data.text + '</div>';
|
|
};
|
|
} else {
|
|
select2_args.multiple = false;
|
|
select2_args.initSelection = function( element, callback ) {
|
|
var data = {id: element.val(), text: element.attr( 'data-selected' )};
|
|
return callback( data );
|
|
};
|
|
}
|
|
|
|
select2_args = $.extend( select2_args, getEnhancedSelectFormatString() );
|
|
|
|
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
|
});
|
|
|
|
// Ajax customer search boxes
|
|
$( ':input.wc-customer-search' ).filter( ':not(.enhanced)' ).each( function() {
|
|
var select2_args = {
|
|
allowClear: $( this ).data( 'allow_clear' ) ? true : false,
|
|
placeholder: $( this ).data( 'placeholder' ),
|
|
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
|
escapeMarkup: function( m ) {
|
|
return m;
|
|
},
|
|
ajax: {
|
|
url: wc_enhanced_select_params.ajax_url,
|
|
dataType: 'json',
|
|
quietMillis: 250,
|
|
data: function( term, page ) {
|
|
return {
|
|
term: term,
|
|
action: 'woocommerce_json_search_customers',
|
|
security: wc_enhanced_select_params.search_customers_nonce
|
|
};
|
|
},
|
|
results: function( data, page ) {
|
|
var terms = [];
|
|
if ( data ) {
|
|
$.each( data, function( id, text ) {
|
|
terms.push( { id: id, text: text } );
|
|
});
|
|
}
|
|
return { results: terms };
|
|
},
|
|
cache: true
|
|
}
|
|
};
|
|
if ( $( this ).data( 'multiple' ) === true ) {
|
|
select2_args.multiple = true;
|
|
select2_args.initSelection = function( element, callback ) {
|
|
var data = $.parseJSON( element.attr( 'data-selected' ) );
|
|
var selected = [];
|
|
|
|
$( element.val().split( ',' ) ).each( function( i, val ) {
|
|
selected.push( { id: val, text: data[ val ] } );
|
|
});
|
|
return callback( selected );
|
|
};
|
|
select2_args.formatSelection = function( data ) {
|
|
return '<div class="selected-option" data-id="' + data.id + '">' + data.text + '</div>';
|
|
};
|
|
} else {
|
|
select2_args.multiple = false;
|
|
select2_args.initSelection = function( element, callback ) {
|
|
var data = {id: element.val(), text: element.attr( 'data-selected' )};
|
|
return callback( data );
|
|
};
|
|
}
|
|
|
|
select2_args = $.extend( select2_args, getEnhancedSelectFormatString() );
|
|
|
|
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
|
});
|
|
})
|
|
|
|
// WooCommerce Backbone Modal
|
|
.on( 'wc_backbone_modal_before_remove', function() {
|
|
$( ':input.wc-enhanced-select, :input.wc-product-search, :input.wc-customer-search' ).select2( 'close' );
|
|
})
|
|
|
|
.trigger( 'wc-enhanced-select-init' );
|
|
|
|
});
|