Repository URL to install this package:
<?php
/**
* Vue.js based Interface Builder module
*
* Version: 1.0.8
*/
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
if ( ! class_exists( 'CX_Vue_UI' ) ) {
/**
* Class Cherry Interface Builder.
*
* @since 1.0.0
*/
class CX_Vue_UI {
/**
* Module directory path.
*
* @since 1.0.0
* @access protected
* @var srting.
*/
protected $path;
/**
* Module directory URL.
*
* @since 1.0.0
* @access protected
* @var srting.
*/
protected $url;
/**
* Module version
*
* @var string
*/
protected $version = '1.0.8';
/**
* [$assets_enqueued description]
* @var boolean
*/
protected $assets_enqueued = false;
/**
* CX_Vue_UI constructor.
*
* @since 1.0.0
* @access public
* @return void
*/
public function __construct( array $args = array() ) {
$this->path = ! empty( $args['path'] ) ? $args['path'] : false;
$this->url = ! empty( $args['url'] ) ? $args['url'] : false;
if ( ! $this->path || ! $this->url ) {
wp_die(
'CX_Vue_UI not initialized. Module URL and Path should be passed into constructor',
'CX_Vue_UI Error'
);
}
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
}
/**
* Enqueue builder assets
*
* @return void
*/
public function enqueue_assets() {
if ( $this->assets_enqueued ) {
return;
}
wp_enqueue_media();
$suffix = '.min';
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
$suffix = '';
}
wp_register_script(
'cx-vue',
$this->url . 'assets/js/vue' . $suffix . '.js',
array(),
'2.6.10',
true
);
wp_enqueue_script(
'cx-vue-ui',
$this->url . 'assets/js/cx-vue-ui.js',
array( 'cx-vue' ),
$this->version,
true
);
add_action( 'admin_footer', array( $this, 'print_templates' ), 0 );
$this->assets_enqueued = true;
}
/**
* Returns registered components list
*
* @return array
*/
public function components_list() {
return apply_filters( 'cx-vue-ui/components-list', array(
// Layout elements
'title',
'collapse',
'component-wrapper',
'button',
'repeater',
'repeater-item',
'popup',
'list-table',
'list-table-heading',
'list-table-item',
'tabs',
'tabs-panel',
'pagination',
'notice',
// Form elements
'input',
'textarea',
'switcher',
'iconpicker',
'select',
'f-select',
'checkbox',
'radio',
'colorpicker',
'wp-media',
'dimensions',
) );
}
/**
* Print components templates
*
* @return void
*/
public function print_templates() {
$path = $this->path . 'components/*.php';
$whitelisted = $this->components_list();
foreach ( glob( $path ) as $file ) {
$slug = basename( $file, '.php' );
if ( ! in_array( $slug, $whitelisted ) ) {
continue;
}
ob_start();
include $file;
$template = ob_get_clean();
printf(
'<script type="text/x-template" id="%2$s">%1$s</script>',
$template,
'cx-vui-' . $slug
);
}
}
}
}