File "controls.php"

Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/plugins/sneeit-framework/includes/controls/controls.php
File size: 32.89 KB
MIME-type: text/x-php
Charset: utf-8

<?php
if (!class_exists('Sneeit_Controls')) :

define('SNEEIT_CONTROL_EDITOR_ID', 'sneeitframeworkcontroleditorid');

class Sneeit_Controls {	
	
	public $value = '';
	
	/**
	 * @access public
	 * @var string
	 */
	public $key = ''; // use this to check in data list, when id and name can be customize
	public $id = '';
	public $name = '';
	public $attr = array();

	/**
	 * @access public
	 * @var string
	 */
	public $type = 'text';
	
	/**
	 * @access public
	 * @var string
	 */
	public $title = '';
	public $label = '';

	/**
	 * @access public
	 * @var string
	 */
	public $description = '';
	
	/**
	 * @access public
	 * @var array
	 */
	public $choices = array();
	
	
	/**
	 * @access public
	 * @var mixed
	 */
	public $default = null;
	
	/**
	 * Show Heading above
	 * as separator of fieldset
	 * 
	 * @access public
	 * @var mixed
	 */
	public $heading = '';
	
	/**
	 * Save all args
	 * 
	 * @access public
	 * @var mixed
	 */
	public $args = array();
	
	
	/**
	 * Constructor.
	 *
	 * Supplied $args override class property defaults.
	 *
	 * @since 3.1.0
	 *
	 * @param string               $id      Control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 */
	public function __construct( $field_key, $args = array(), $value = null, $is_repeater_pattern = false) {
		$keys = array_keys( get_object_vars( $this ) );
		foreach ( $keys as $key ) {
			if ( isset( $args[ $key ] ) ) {
				$this->$key = $args[ $key ];
			}
		}
		
		$this->type = strtolower($this->type);
		
		$this->key = $field_key;
		
		
		$this->args = $args;
		
		// save value				
		if ($value !== null) {
			$this->value = $value;
		} else if ($this->default !== null && $this->value == null) {
			$this->value = $this->default;
		}
		
		// save id
		if (!isset($args['id'])) {
			$this->id = esc_attr(str_replace( array( '[', ']' ), array( '-', '' ), $this->key));
		}
		if (!isset($args['name'])) {
			$this->name = esc_attr(str_replace( array( '[', ']' ), array( '-', '' ), $this->key));
		}
		
		if ('content' == $this->type && 'content' == $this->id) {
			return;
		}
		
		// validate title
		if (!$this->title) {
			if ($this->label) {
				$this->title = $this->label;
			} else {
				$this->title = sneeit_slug_to_title($this->key);
			}
		}
		$this->args['title'] = $this->title;
		$this->args['default'] = $this->default;
		$this->args['value'] = $this->value;
			
		if (!$is_repeater_pattern) {
			$this->init_script();
		}
		
		if ('repeater' == $this->type && isset($this->args['fields']) && !$is_repeater_pattern) {
			$this->repeatable_render();
		} else {			
			$this->render();
		}
	}
	
	public function init_script() {
?><script type="text/javascript"><?php
	?>if (typeof(Sneeit_Controls_Defines) == 'undefined') {<?php
		?>Sneeit_Controls_Defines = new Object();<?php
	?>}<?php
	?>Sneeit_Controls_Defines['<?php echo $this->key; ?>'] = <?php echo json_encode($this->args); ?><?php
?></script><?php	
	}
	
	public function repeatable_render() {
		?><div class="sneeit-control-repeater-wrapper" <?php
		?>data-key="<?php echo esc_attr($this->key);?>"><?php
			?><div class="sneeit-control-repeater-header"><?php
				?><div class="sneeit-control-repeater-header-title"><?php 
					echo $this->title;				
				?></div><?php

				if ( ! empty( $this->description ) ) : 
				?><div class="sneeit-control-repeater-header-description"><?php 
					echo $this->description; 
				?></div><?php
				endif; 
			?></div><?php
			?><div class="sneeit-control-repeater-container"><?php
?><script type="text/javascript"><?php
	?>if (typeof(Sneeit_Controls_Defines) == 'undefined') {<?php
		?>Sneeit_Controls_Defines = new Object();<?php
	?>}<?php
	?>Sneeit_Controls_Defines['<?php echo $this->key; ?>'].pattern = <?php 
		ob_start();
		
		foreach ($this->args['fields'] as $control_id => $control_args) {
			new Sneeit_Controls($control_id, $control_args, '', true);
		}

		$data = ob_get_clean();
		echo json_encode($data); 
	?><?php
?></script><?php				
				
				?><div class="sneeit-control-repeater-container-value" <?php
				?>data-key="<?php echo esc_attr($this->key);?>"><?php
//					echo json_encode($this->value);
				?></div><?php
				
				?><div class="sneeit-control-repeater-container-items" <?php
				?>data-key="<?php echo esc_attr($this->key);?>"><?php
					// will be generated by JavaScript
				?></div><?php
				
				?><div class="sneeit-control-repeater-container-buttons" <?php
				?>data-key="<?php echo esc_attr($this->key);?>"><?php
					?><a href="javascript:void(0)" <?php
					?>class="button button-secondary button-sneeit-control-repeater-add" <?php
					?>data-key="<?php echo esc_attr($this->key);?>" <?php
					?>><?php
						esc_html_e('+ ADD NEW', 'sneeit');
					?></a><?php
				?></div><?php
			?></div><?php
		?></div><?php
	}
	
	/**
	 * Renders the control wrapper and call render_content
	 *
	 * @since 3.1.0
	 */
	public function render() {
		$id    = 'sneeit-control-' . $this->id;
		$class = 'sneeit-control sneeit-control-' . $this->type;
		
		if (isset($this->args['show']) || isset($this->args['hide'])) {
			$class .= ' sneeit-control-dependency';			
		}
		
		?><div id="<?php echo esc_attr( $id ); ?>" <?php
		?>data-key="<?php echo esc_attr( $this->key ); ?>" <?php
		?>data-type="<?php echo esc_attr( $this->type ); ?>" <?php
		?>class="<?php echo esc_attr( $class ); ?>"><?php 
			$this->render_content(); 
		?></div><?php
	}
	
	/**
	 * Render the control's content.
	 *
	 * Allows the content to be overriden without having to rewrite the wrapper in $this->render().
	 *
	 * Supports basic input types `text`, `checkbox`, `textarea`, `radio`, `select` and `dropdown-pages`.
	 * Additional input types such as `email`, `url`, `number`, `hidden` and `date` are supported implicitly.
	 *
	 * Control content can alternately be rendered in JS. See {@see WP_Customize_Control::print_template()}.
	 *
	 * @since 3.1.0
	 */
	protected function render_content() {
		// don't keep space here, some designs need display inline-block for elements
		// so space between them will effect designs
		
		if ($this->heading) :
			?><div class="sneeit-control-separator"><span><?php echo $this->heading; ?></span></div><?php
		endif;
		
		?><div class="sneeit-control-info"><?php
			?><div class="sneeit-control-title"><?php 
				echo $this->title;
				if ($this->default !== null && !in_array($this->type, array(
					'sidebar', 'sidebars', 'category', 'categories', 'tag', 'tags', 'user', 'users', 'selects'
				)) ) :
				?> <a href="javascript:void(0)" class="sneeit-control-reset-button noselect" <?php
				?>data-key="<?php echo esc_attr($this->key); ?>" <?php
				?>data-type="<?php echo esc_attr($this->type); ?>" <?php
				?>><?php
					esc_html_e('Reset', 'sneeit');
				?></a><?php
				endif;
			?></div><?php
			
			if ( ! empty( $this->description ) ) : 
			?><div class="sneeit-control-description"><?php 
				echo $this->description; 
			?></div><?php
			endif; 
		?></div><?php
			
		?><div class="sneeit-control-input"><?php				
			$control_value_holder_class = esc_attr('sneeit-control-'.$this->type.'-value sneeit-control-value');
			$control_attr = '';
			if (!empty($this->attr)) {
				foreach ($this->attr as $key => $value) {
					$control_attr.=$key.'="'.esc_attr($value).'" ';
				}
			}
			/* ********************* */
			/* OUT PUT CONTROLS HERE */			
			switch( $this->type ) {
								
				/* CATEGORY / TAG / USER */
				case 'category':
				case 'tag':
				case 'user':
					?><label><?php
						?><i class="fa fa-spin fa-spinner loading-icon"></i><?php
						?><select <?php
							echo $control_attr;
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?> ajax" <?php
							?>data-value="<?php echo esc_attr($this->value);?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>"><?php
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '">' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;
				
				/* CATOGORIES / TAGS / USERS */
				case 'categories':
				case 'tags':
				case 'users':
					?><label><?php
						?><i class="fa fa-spin fa-spinner loading-icon"></i><?php
						?><select <?php
							echo $control_attr;
							?>multiple="" <?php
							?>data-placeholder="<?php esc_attr_e('Type and Enter', 'sneeit');?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?> ajax" <?php
							?>data-value="<?php echo esc_attr($this->value);?>" <?php							
							?>id="<?php echo esc_attr( $this->id ); ?>"><?php
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '">' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;
				
				
				
				/* CHECKBOX */
				case 'checkbox':
					?><label><?php
						?><input <?php
							echo $control_attr;
							?>type="checkbox" <?php							
							?>class="<?php echo $control_value_holder_class;?>" <?php							
							?>name="<?php echo esc_attr($this->name); ?>" <?php
							?>id="<?php echo esc_attr($this->id); ?>" <?php
							checked( 'on', $this->value ); ?> /> <?php 	
							echo esc_html( $this->title ); 
					?></label><?php
					break;

				/* RADIO */
				case 'radio':
					foreach ( $this->choices as $value => $label ) :
						?><label><?php
							?><input <?php
								echo $control_attr;
								?>type="radio" <?php
								?>value="<?php echo esc_attr( $value ); ?>" <?php							
								?>class="<?php echo $control_value_holder_class;?>" <?php
								?>name="<?php echo esc_attr( $this->name ); ?>" <?php
								?>id="<?php echo esc_attr( $this->id ); ?>" <?php
								checked( $this->value, $value ); ?> /> <?php 
								echo esc_html( $label ); 
						?></label><?php
					endforeach;
					break;

				/* SELECT & SELECTS */
				case 'select':
					?><label><?php
						?><select <?php
							echo $control_attr;
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>"><?php					
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '"' . 
									selected( $this->value, $value, false ) . '>' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;
					
				case 'selects':
					?><label><?php
						if (!$this->value) {
							$this->value = '';
						}
						?><select <?php
							echo $control_attr;
							?>multiple="" <?php
							?>data-placeholder="<?php esc_attr_e('Type and Enter', 'sneeit');?>" <?php
							?>data-value="<?php echo esc_attr( $this->value ); ?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>"><?php					
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '">' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;

				/* TEXTAREA / CONTENT */
				case 'content':

					
					?><textarea <?php
						echo $control_attr;
						?>rows="5" cols="5"<?php
						?>class="<?php echo $control_value_holder_class;?> html-field wp-editor-area" <?php
						?>name="<?php echo esc_attr( $this->name ); ?>" <?php
						?>id="<?php echo esc_attr( $this->id ); ?>"><?php 						
						echo esc_textarea( $this->value );
					?></textarea><?php			
					break;
				
				case 'textarea':
					?><label><?php								
						?><textarea <?php
							echo $control_attr;
							?>rows="5" cols="5"<?php
							?>class="<?php echo $control_value_holder_class;?> html-field wp-editor-area" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>"><?php 						
							echo esc_textarea( $this->value );
						?></textarea><?php
					?></label><?php
					break;

				/* COLOR */
				case 'color':
					?><label><?php
						?><input <?php
							echo $control_attr;
							?>type="text" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							if ($this->default): 
							?>data-default-color="<?php echo esc_attr(($this->default));?>" <?php
							endif;
							?>/><?php
					?></label><?php
					break;

				/* MEDIA */
				case 'media':
					?><label><?php
						?><span class="sneeit-control-media-input-left"><?php
							?><input <?php
								echo $control_attr;
								?>type="url" <?php
								?>name="<?php echo esc_attr( $this->name ); ?>" <?php
								?>id="<?php echo esc_attr( $this->id ); ?>" <?php
								?>value="<?php echo esc_attr( $this->value ); ?>" <?php
								?>class="<?php echo $control_value_holder_class;?>"/><?php
						?></span><?php
						?><span class="sneeit-control-media-input-right"><?php
							?><a href="javascript:void(0)" <?php
								?>data-key="<?php echo esc_attr( $this->key ); ?>" <?php
								?>class="sneeit-control-media-upload-button button button-secondary"><?php
									esc_html_e('Upload File', 'sneeit');
							?></a><?php
						?></span><?php
					?></label><?php
					break;

				/* IMAGE */
				case 'image':
					?><label><?php
						?><span class="sneeit-control-image-input-left"><?php
							?><span class="sneeit-control-image-preview" data-key="<?php echo esc_attr( $this->key ); ?>"><?php
							if ($this->value) :
								?><img src="<?php echo esc_attr($this->value);?>"/><?php
							else:
								?><i class="fa fa-plus"></i><?php
							endif;
							?></span><?php
						?></span><?php
						?><span class="sneeit-control-image-input-right"><?php					
							?><input <?php
								echo $control_attr;
								?>type="url" <?php
								?>name="<?php echo esc_attr( $this->name ); ?>" <?php
								?>id="<?php echo esc_attr( $this->id ); ?>" <?php
								?>value="<?php echo esc_attr( $this->value ); ?>" <?php
								?>class="<?php echo $control_value_holder_class;?>"/><?php
							?><span class="sneeit-control-image-buttons"><?php
								?><a href="javascript:void(0)" <?php
									disabled($this->value, '');
									?>data-key="<?php echo esc_attr( $this->key ); ?>" <?php
									?>class="sneeit-control-image-remove-button button button-secondary"><?php
									esc_html_e('Remove', 'sneeit');
								?></a><?php
								?><a href="javascript:void(0)" <?php
									?>data-key="<?php echo esc_attr( $this->key ); ?>" <?php
									?>class="sneeit-control-image-upload-button button button-secondary"><?php
									esc_html_e('Upload', 'sneeit');
								?></a><?php
							?></span><?php
						?></span><?php
					?></label><?php
					break;

				/* RANGE */
				case 'range':
					?><label><?php
						?><span class="sneeit-control-range-input-left"><?php
							?><span class="sneeit-control-range-slider" data-key="<?php echo esc_attr( $this->key ); ?>"><?php
							?></span><?php
						?></span><?php

						?><span class="sneeit-control-range-input-right"><?php
							?><input <?php
							echo $control_attr;
							?>type="hidden" readonly="" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php

							if (isset($this->args['min'])):
							?>min="<?php echo esc_attr($this->args['min']);?>"<?php
							endif;

							if (isset($this->args['max'])):
							?>max="<?php echo esc_attr($this->args['max']);?>"<?php
							endif;

							if (isset($this->args['step'])):
							?>step="<?php echo esc_attr($this->args['step']);?>"<?php
							endif;

							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>" /><?php
							?><span class="sneeit-control-range-value-number" <?php
							?>data-key="<?php echo esc_attr( $this->key ); ?>"><?php 
								echo esc_attr( $this->value ); 
							?></span><?php
						?></span><?php	
					?></label><?php
					break;

				/* SIDEBAR & SIDEBARS */
				case 'sidebars':
					if (!$this->value) {
						$this->value = '';
					}
					?><label><?php
						?><select <?php
							echo $control_attr;
							?>multiple="" <?php
							?>data-placeholder="<?php esc_attr_e('Type and Enter', 'sneeit');?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php		
							?>data-value="<?php echo esc_attr( $this->value ); ?>"><?php
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '">' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;
					
				case 'sidebar':				
					if (!$this->value) {
						$this->value = '';
					}
					?><label><?php
						?><select <?php
							echo $control_attr;
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php		
							?>data-value="<?php echo esc_attr( $this->value ); ?>"><?php
							foreach ( $this->choices as $value => $label ) {
								echo '<option value="' . esc_attr( $value ) . '">' . $label . '</option>';
							}
						?></select><?php
					?></label><?php
					break;

				/* VISUAL PICKER */
				case 'visual':
					?><label><?php									
						?><input <?php
							echo $control_attr;
							?>type="hidden" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>" /><?php
							foreach ($this->choices as $value => $html) :
								?><a href="javscript:void(0)" <?php
								?>data-value="<?php echo esc_attr($value); ?>" <?php
								?>data-key="<?php echo esc_attr($this->key); ?>" <?php
								?>class="sneeit-control-visual-picker<?php
								if ($value == $this->value) :
									echo ' active';
								else:
									echo ' inactive';
								endif;
								?>"><?php
								echo $html;
								?></a><?php
							endforeach;
					?></label><?php
					break;

				/* FONT FAMILY & font*/
				case 'font-family':
				case 'font':
					global $Sneeit_Safe_Fonts;
					global $Sneeit_Google_Fonts;
					global $Sneeit_Upload_Fonts;
					global $Sneeit_Font_Sizes;
					
					if (null === $Sneeit_Upload_Fonts) {
						sneeit_get_uploaded_fonts();
					}

					$font_family = $this->value;

					if ('font' == $this->type) {
						$the_value = $this->value;
						$the_value = explode(' ', $the_value);
						$font_style = '';
						$font_weight = '';
						$font_size = '';
						$font_family = '';

						// parse value to elements
						foreach ($the_value as $key => $value) {
							switch ($key) {
								case 0:
									$font_style = $value;
									break;

								case 1:
									$font_weight = $value;
									break;

								case 2:
									$font_size = $value;
									break;

								default:
									if ($font_family) {
										$font_family .= ' ';
									}
									$font_family .= $value;
									$font_family = str_replace('\'', '', $font_family);
									$font_family = str_replace('"', '', $font_family);
									break;
							}
						}

						// valid font size
						$font_size = (int) str_replace('px', '', $font_size);
						global $Sneeit_Font_Sizes;
						if (!in_array($font_size, $Sneeit_Font_Sizes)) {
							foreach ($Sneeit_Font_Sizes as $index => $size) :
								if ($font_size < $size) {
									array_splice($Sneeit_Font_Sizes, $index, 0, $font_size);
									break;
								}
							endforeach;
						}
					}

					?><div class="sneeit-control-font-ui" data-key="<?php echo $this->key; ?>"><?php
						?><div class="font-family collapsed"><?php
							?><div class="font-family-value"><?php
								?><input readonly="true" class="value noselect" <?php
								?>value="<?php echo esc_attr($font_family); ?>" <?php
								?>style="<?php
								echo 'font-family: '.esc_attr($font_family).';';
								if ('font' == $this->type) {
									if ('italic' == $font_style) {
										echo 'font-style: italic;';
									}
									if ('bold' == $font_weight) {
										echo 'font-weight: bold;';
									}
								}

								?>" <?php
								?>/><?php
								?><a href="javascript:void(0)" class="drop"><?php
									?><i class="fa fa-chevron-down icon-down icon"></i><?php
									?><i class="fa fa-chevron-up icon-up icon"></i><?php
								?></a><?php
							?></div><?php

							?><div class="font-family-list scrollbar"><?php
								foreach ($Sneeit_Safe_Fonts as $font_name => $font_property) : 
								?><a class="safe-font font-family-item <?php 
									if ($font_name == $font_family) {
										echo 'active';
									} else {
										echo 'inactive';
									}
								?>" data-font_name="<?php echo esc_attr($font_name); ?>"><?php
									echo '<span class="value">'.$font_name .'</span>';
								?></a><?php 
								endforeach; 

								?><span class="spliter"></span><?php 
								foreach ($Sneeit_Google_Fonts as $font_name => $font_property) : 
								?><a class="google-font font-family-item <?php 
									if ($font_name == $font_family) {
										echo 'active';
									} else {
										echo 'inactive';
									}
								?>" data-font_name="<?php echo esc_attr($font_name); ?>"><?php
									echo '<span class="value">'.$font_name .'</span>';
								?></a><?php 
								endforeach; 

								if (is_array($Sneeit_Upload_Fonts) && count($Sneeit_Upload_Fonts)):
									?><span class="spliter"></span><?php 
									foreach ($Sneeit_Upload_Fonts as $font_name => $font_property) : 
										?><a class="upload-font font-family-item <?php 
									if ($font_name == $font_family) {
										echo 'active';
									} else {
										echo 'inactive';
									}
								?>" data-font_name="<?php echo esc_attr($font_name); ?>"><?php
											echo '<span class="value">'.$font_name .'</span>';
										?></a><?php 
									endforeach; 
								endif; 
							?></div><?php /* end of font-family-list*/

						?></div><?php



						if ('font' == $this->type) :
							?><div class="font-design"><?php
								?><a class="noselect font-style-value <?php 
									if ('italic' == $font_style) {
										echo 'active';
									} else {
										echo 'inactive';
									}
								?>"><?php
									?><span class="value">I</span><?php
								?></a><?php

								?><a class="noselect font-weight-value <?php 
									if ('bold' == $font_weight) {
										echo 'active';								
									} else {
										echo 'inactive';
									} 
								?>"><?php
									?><span class="value">B</span><?php
								?></a><?php

								?><select class="font-size-value"><?php					
									foreach ($Sneeit_Font_Sizes as $size) :
										?><option value="<?php echo $size; ?>px"<?php 
										selected($font_size, $size); ?>><?php 
											echo $size . 'px';
										?></option><?php
									endforeach;
								?></select><?php
							?></div><?php
						endif;

					?></div><?php /* end of control-font*/
					?><label><?php
						?><input type="hidden" <?php
							echo $control_attr;
							?>id="<?php echo $this->id; ?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php					
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>"/>
					</label>
					<?php
					break;
					
					
				/* box-model: PADDING / MARGIN / BORDER / POSITION */
				case 'box-padding':
				case 'box-margin':
				case 'box-position':
				case 'box-padding-px':
				case 'box-margin-px':
				case 'box-position-px':
					$the_value = explode(' ', $this->value);
					$force_unit = false;
					
					$top = $the_value[0];
					$right = $the_value[1];
					$bottom = $the_value[2];
					$left = $the_value[3];					
					
					$top_value = str_replace(array('px', '%'), '', $top);
					$top_unit = str_replace($top_value, '', $top);
					
					$right_value = str_replace(array('px', '%'), '', $right);
					$right_unit = str_replace($right_value, '', $right);
					
					$bottom_value = str_replace(array('px', '%'), '', $bottom);
					$bottom_unit = str_replace($bottom_value, '', $bottom);
					
					$left_value = str_replace(array('px', '%'), '', $left);
					$left_unit = str_replace($left_value, '', $left);
					
					if (in_array($this->type, array(
							'box-padding-px',
							'box-margin-px',
							'box-position-px')
						)) {
						$top_unit = $right_unit = $bottom_unit = $left_unit = 'px';
						$force_unit = true;
					}


					?><div class="sneeit-control-<?php echo esc_attr($this->type); ?>-ui sneeit-control-box-model-ui" data-key="<?php echo esc_attr($this->key); ?>"><?php
						?><div class="sneeit-control-box-model-ui-cell cell-top-left"><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-top"><?php
							?><input class="sneeit-control-box-model-top-value" value="<?php
								echo esc_attr($top_value);
							?>"/><?php
							?><input class="sneeit-control-box-model-top-unit" value="<?php
								echo esc_attr($top_unit);
							?>"<?php if ($force_unit) {echo ' readonly="true"';} ?>/><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-top-right"><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-left"><?php
							?><input class="sneeit-control-box-model-left-value" value="<?php
								echo esc_attr($left_value);
							?>"/><?php
							?><input class="sneeit-control-box-model-left-unit" value="<?php
								echo esc_attr($left_unit);
							?>"<?php if ($force_unit) {echo ' readonly="true"';} ?>/><?php														
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-middle-center"><?php
							?><div class="sneeit-control-box-model-ui-cell-middle-center-inner"><?php
							?></div><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-right"><?php							
							?><input class="sneeit-control-box-model-right-value" value="<?php
								echo esc_attr($right_value);
							?>"/><?php
							?><input class="sneeit-control-box-model-right-unit" value="<?php
								echo esc_attr($right_unit);
							?>"<?php if ($force_unit) {echo ' readonly="true"';} ?>/><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-bottom-left"><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-bottom"><?php
							?><input class="sneeit-control-box-model-bottom-value" value="<?php
								echo esc_attr($bottom_value);
							?>"/><?php
							?><input class="sneeit-control-box-model-bottom-unit" value="<?php
								echo esc_attr($bottom_unit);
							?>"<?php if ($force_unit) {echo ' readonly="true"';} ?>/><?php
						?></div><?php
						?><div class="sneeit-control-box-model-ui-cell cell-bottom-right"><?php
						?></div><?php												
					?></div><?php /* end of control-box-model*/
					
					?><label><?php
						?><input type="hidden" <?php
							echo $control_attr;
							?>id="<?php echo $this->id; ?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php					
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>"/>
					</label>
					<?php
					break;
										
/*******************************************/
/*
  ________   _______   ____  _____ _______ 
 |  ____\ \ / /  __ \ / __ \|  __ \__   __|
 | |__   \ V /| |__) | |  | | |__) | | |   
 |  __|   > < |  ___/| |  | |  _  /  | |   
 | |____ / . \| |    | |__| | | \ \  | |   
 |______/_/ \_\_|     \____/|_|  \_\ |_|   
                                           
 */					
/********************************************/
				case 'export':					
					?><a href="<?php echo esc_attr(admin_url( 'customize.php' ) . '?'.SNEEIT_KEY_SNEEIT_EXPORT.'=' . wp_create_nonce( SNEEIT_KEY_SNEEIT_EXPORT )); ?>" class="button"><?php 
						_e('Export', 'sneeit');
					?></a><?php		
					break;
				
/*******************************************/
/*
   _____ __  __ _____   ____  _____ _______ 
 |_   _|  \/  |  __ \ / __ \|  __ \__   __|
   | | | \  / | |__) | |  | | |__) | | |   
   | | | |\/| |  ___/| |  | |  _  /  | |   
  _| |_| |  | | |    | |__| | | \ \  | |   
 |_____|_|  |_|_|     \____/|_|  \_\ |_|   
                                           
 */					
/********************************************/
				case 'import':
					?><input name="<?php echo esc_attr(SNEEIT_KEY_SNEEIT_IMPORT); ?>-file" type="file"/> <?php
					?><div class="<?php echo esc_attr(SNEEIT_KEY_SNEEIT_IMPORT); ?>-msg" style="display:none"><?php 
						_e('Importing ...', 'sneeit');
					?></div><?php
					?><a href="javascript:void(0)" class="button <?php echo esc_attr(SNEEIT_KEY_SNEEIT_IMPORT); ?>-submit"><?php 
						_e('Import', 'sneeit');
					?></a><?php
					
					if (get_transient(SNEEIT_KEY_SNEEIT_IMPORT)) {
						?><script><?php 
							?>alert("<?php echo esc_attr(get_transient(SNEEIT_KEY_SNEEIT_IMPORT)); ?>");<?php
						?></script><?php
							delete_transient(SNEEIT_KEY_SNEEIT_IMPORT);
					}					
					break;
				
/********************************************/
/*
  _____  ______ ______     _    _ _   _______ 
 |  __ \|  ____|  ____/\  | |  | | | |__   __|
 | |  | | |__  | |__ /  \ | |  | | |    | |   
 | |  | |  __| |  __/ /\ \| |  | | |    | |   
 | |__| | |____| | / ____ \ |__| | |____| |   
 |_____/|______|_|/_/    \_\____/|______|_|   
                                              
 */				
/*********************************************/					
				default:					
					?><label><?php
						?><input <?php
							echo $control_attr;
							?>type="<?php echo esc_attr( $this->type ); ?>" <?php
							?>name="<?php echo esc_attr( $this->name ); ?>" <?php
							?>id="<?php echo esc_attr( $this->id ); ?>" <?php
							?>class="<?php echo $control_value_holder_class;?>" <?php
							?>value="<?php echo esc_attr( $this->value ); ?>" /><?php
					?></label><?php
					break;
			} /* end of SWITCH types */
		?></div><!-- .sneeit-control-input --><?php
	}
} /* end of class define */

// http://stackoverflow.com/questions/21519322/use-wordpress-wp-editor-in-dynamic-ajax-html
add_action( 'admin_print_footer_scripts', 'sneeit_controls_enqueue', 1); // use 51 to load after wp editor
function sneeit_controls_enqueue() {

	wp_editor('', SNEEIT_CONTROL_EDITOR_ID);
	
	wp_enqueue_script( 'wp-color-picker' );
	wp_enqueue_style( 'wp-color-picker' );
	wp_enqueue_script('jquery-ui-slider');
	wp_enqueue_style( 'sneeit-plugin-chosen');
	wp_enqueue_script( 'sneeit-plugin-chosen');
	wp_enqueue_script('sneeit-web-fonts');
	wp_enqueue_script('sneeit-lib');
	wp_enqueue_style('sneeit-controls', SNEEIT_PLUGIN_URL_CSS .'controls.css', array(), SNEEIT_PLUGIN_VERSION);
	wp_add_inline_style('sneeit-controls', '
	#wp-'.SNEEIT_CONTROL_EDITOR_ID.'-wrap {display: none!important;}
	');
	
	wp_enqueue_script('sneeit-controls', SNEEIT_PLUGIN_URL_JS . 'controls.js', array(
		'jquery',
		'editor',
		'quicktags',
		'sneeit-lib',
		'wp-color-picker',
		'jquery-ui-slider',
		'sneeit-web-fonts'
	), SNEEIT_PLUGIN_VERSION);
	wp_localize_script('sneeit-controls', 'Sneeit_Controls', array(
		'text' => array(
			'input_your_value' => esc_html__('Input Your Value', 'sneeit'),
			'ajax_error_message' => esc_html__('Can Not Load Data for Some Fields', 'sneeit'),
			'empty_import' => esc_html__('Please choose a file to import', 'sneeit'),
		),
		'ajaxurl' => admin_url( 'admin-ajax.php' ),
		'sneeit_controls_editor_id' => SNEEIT_CONTROL_EDITOR_ID,
		'export_key' => SNEEIT_KEY_SNEEIT_EXPORT,
		'import_key' => SNEEIT_KEY_SNEEIT_IMPORT,	
		'import_nonce' => esc_attr(wp_create_nonce( SNEEIT_KEY_SNEEIT_IMPORT)),		
		'import_action' => esc_attr(admin_url( 'customize.php' )),		
	));
	
	
	
	global $wp_registered_sidebars;
	unset($wp_registered_sidebars['wp_inactive_widgets']);
	wp_localize_script('sneeit-controls', 'Sneeit_Controls_Sidebars', $wp_registered_sidebars);
	
	global $Sneeit_Safe_Fonts;
	global $Sneeit_Google_Fonts;
	global $Sneeit_Upload_Fonts;
	global $Sneeit_Font_Sizes;


	wp_localize_script('sneeit-controls', 'Sneeit_Controls_Fonts', array(
		'safe' => $Sneeit_Safe_Fonts,
		'google' => $Sneeit_Google_Fonts,
		'upload' => $Sneeit_Upload_Fonts
	));	
}

endif;