95 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Elementor;
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Elementor select2 control.
 | |
|  *
 | |
|  * A base control for creating select2 control. Displays a select box control
 | |
|  * based on select2 jQuery plugin @see https://select2.github.io/ .
 | |
|  * It accepts an array in which the `key` is the value and the `value` is the
 | |
|  * option name. Set `multiple` to `true` to allow multiple value selection.
 | |
|  *
 | |
|  * @since 1.0.0
 | |
|  */
 | |
| class Control_Select2 extends Base_Data_Control {
 | |
| 
 | |
| 	/**
 | |
| 	 * Get select2 control type.
 | |
| 	 *
 | |
| 	 * Retrieve the control type, in this case `select2`.
 | |
| 	 *
 | |
| 	 * @since 1.0.0
 | |
| 	 * @access public
 | |
| 	 *
 | |
| 	 * @return string Control type.
 | |
| 	 */
 | |
| 	public function get_type() {
 | |
| 		return 'select2';
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get select2 control default settings.
 | |
| 	 *
 | |
| 	 * Retrieve the default settings of the select2 control. Used to return the
 | |
| 	 * default settings while initializing the select2 control.
 | |
| 	 *
 | |
| 	 * @since 1.8.0
 | |
| 	 * @access protected
 | |
| 	 *
 | |
| 	 * @return array Control default settings.
 | |
| 	 */
 | |
| 	protected function get_default_settings() {
 | |
| 		return [
 | |
| 			'options' => [],
 | |
| 			'multiple' => false,
 | |
| 			// Select2 library options
 | |
| 			'select2options' => [],
 | |
| 			// the lockedOptions array can be passed option keys. The passed option keys will be non-deletable.
 | |
| 			'lockedOptions' => [],
 | |
| 		];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Render select2 control output in the editor.
 | |
| 	 *
 | |
| 	 * Used to generate the control HTML in the editor using Underscore JS
 | |
| 	 * template. The variables for the class are available using `data` JS
 | |
| 	 * object.
 | |
| 	 *
 | |
| 	 * @since 1.0.0
 | |
| 	 * @access public
 | |
| 	 */
 | |
| 	public function content_template() {
 | |
| 		?>
 | |
| 		<div class="elementor-control-field">
 | |
| 			<# if ( data.label ) {#>
 | |
| 				<label for="<?php $this->print_control_uid(); ?>" class="elementor-control-title">{{{ data.label }}}</label>
 | |
| 			<# } #>
 | |
| 			<div class="elementor-control-input-wrapper elementor-control-unit-5">
 | |
| 				<# var multiple = ( data.multiple ) ? 'multiple' : ''; #>
 | |
| 				<select id="<?php $this->print_control_uid(); ?>" class="elementor-select2" type="select2" {{ multiple }} data-setting="{{ data.name }}">
 | |
| 					<# _.each( data.options, function( option_title, option_value ) {
 | |
| 						var value = data.controlValue;
 | |
| 						if ( typeof value == 'string' ) {
 | |
| 							var selected = ( option_value === value ) ? 'selected' : '';
 | |
| 						} else if ( null !== value ) {
 | |
| 							var value = _.values( value );
 | |
| 							var selected = ( -1 !== value.indexOf( option_value ) ) ? 'selected' : '';
 | |
| 						}
 | |
| 						#>
 | |
| 					<option {{ selected }} value="{{ _.escape( option_value ) }}">{{{ _.escape( option_title ) }}}</option>
 | |
| 					<# } ); #>
 | |
| 				</select>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 		<# if ( data.description ) { #>
 | |
| 			<div class="elementor-control-field-description">{{{ data.description }}}</div>
 | |
| 		<# } #>
 | |
| 		<?php
 | |
| 	}
 | |
| }
 |