136 lines
2.9 KiB
PHP
136 lines
2.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Component
|
|
* @package Simple Lightbox
|
|
* @subpackage Base
|
|
* @author Archetyped
|
|
*/
|
|
class SLB_Component extends SLB_Base_Object {
|
|
/* Properties */
|
|
|
|
/**
|
|
* Pretty name
|
|
* @var string
|
|
*/
|
|
protected $name = '';
|
|
|
|
protected $props_required = array();
|
|
|
|
private $props_required_base = array( 'id' );
|
|
|
|
/* Get/Set */
|
|
|
|
/**
|
|
* Set name
|
|
* @param string $name Name
|
|
* @return Current instance
|
|
*/
|
|
public function set_name( $name ) {
|
|
if ( is_string( $name ) ) {
|
|
$name = trim( $name );
|
|
if ( ! empty( $name ) ) {
|
|
$this->name = $name;
|
|
}
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
public function get_name() {
|
|
return $this->name;
|
|
}
|
|
|
|
public function set_scripts( $scripts ) {
|
|
$this->add_files( 'scripts', $scripts );
|
|
}
|
|
|
|
public function set_styles( $styles ) {
|
|
$this->add_files( 'styles', $styles );
|
|
}
|
|
|
|
/* Assets */
|
|
|
|
/**
|
|
* Get formatted handle for file
|
|
* @param string $base_handle Base handle to format
|
|
* @return string Formatted handle
|
|
*/
|
|
public function get_handle( $base_handle ) {
|
|
return $this->add_prefix( array( 'asset', $this->get_id(), $base_handle ), '-' );
|
|
}
|
|
|
|
/**
|
|
* Enqueue files in client
|
|
* @param string $type (optional) Type of file to load (singular) (Default: All client file types)
|
|
*/
|
|
public function enqueue_client_files( $type = null ) {
|
|
if ( empty( $type ) ) {
|
|
$type = array( 'script', 'style' );
|
|
}
|
|
if ( ! is_array( $type ) ) {
|
|
$type = array( $type );
|
|
}
|
|
foreach ( $type as $t ) {
|
|
$m = (object) array(
|
|
'get' => $this->m( 'get_' . $t . 's' ),
|
|
'enqueue' => 'wp_enqueue_' . $t,
|
|
);
|
|
$v = $this->util->get_plugin_version();
|
|
$files = call_user_func( $m->get );
|
|
$param_final = ( 'script' === $t ) ? true : 'all';
|
|
foreach ( $files as $f ) {
|
|
$f = (object) $f;
|
|
// Format handle
|
|
$handle = $this->get_handle( $f->handle );
|
|
|
|
// Format dependencies
|
|
$deps = array();
|
|
foreach ( $f->deps as $dep ) {
|
|
if ( $this->util->has_wrapper( $dep ) ) {
|
|
$dep = $this->get_handle( $this->util->remove_wrapper( $dep ) );
|
|
}
|
|
$deps[] = $dep;
|
|
}
|
|
call_user_func( $m->enqueue, $handle, $f->uri, $deps, $v, $param_final );
|
|
}
|
|
unset( $files, $f, $param_final, $handle, $deps, $dep );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Enqueue scripts
|
|
*/
|
|
public function enqueue_scripts() {
|
|
$this->enqueue_client_files( 'script' );
|
|
}
|
|
|
|
/**
|
|
* Enqueue styles
|
|
*/
|
|
public function enqueue_styles() {
|
|
$this->enqueue_client_files( 'style' );
|
|
}
|
|
|
|
/* Helpers */
|
|
|
|
/**
|
|
* Validate instance
|
|
* @see `Base_Object::is_valid()`
|
|
* @return bool Valid (TRUE) / Invalid (FALSE)
|
|
*/
|
|
public function is_valid() {
|
|
$ret = parent::is_valid();
|
|
if ( $ret ) {
|
|
// Check required component properties
|
|
$props = array_merge( $this->props_required_base, $this->props_required );
|
|
foreach ( $props as $prop ) {
|
|
if ( ! isset( $this->{$prop} ) || empty( $this->{$prop} ) ) {
|
|
$ret = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
}
|