* @license GPL-2.0+ * @link http://www.contentviewspro.com/ * @copyright 2014 PT Guy */ if ( !class_exists( 'PT_CV_Asset' ) ) { /** * @name PT_CV_Asset * @todo Register, enqueue, localize asset functions */ class PT_CV_Asset { // Prefix for handle of all assets static $prefix = PT_CV_PREFIX; // Array of style & script static $assets = array(); /** * version of assets * if an asset doesn't have configed version, it will get plugin version as asset version */ static $version = array( 'bootstrap' => '3.3.5', 'select2' => '3.4.5', 'select2-bootstrap' => '3.4.5', ); /** * Register assets to enqueue later */ static function register() { self::$assets[ 'style' ] = self::style(); self::$assets[ 'script' ] = self::script(); } /** * Enqueue registered assets * * @param string $name Asset slug name * @param string $type Asset type (css/js) * @param array $data Asset data (url, depends, version...) * @param string $prefix Prefix string for asset */ static function enqueue( $name, $type = 'script', $data = '', $prefix = '' ) { // If asset is registered, get handle information $data if ( array_key_exists( $name, self::$assets[ $type ] ) ) { $data = self::$assets[ $type ][ $name ]; } // Do action self::action( $name, (array) $data, $type, 'enqueue', $prefix ); } /** * Styles list * * @return array */ static function style() { return array( 'bootstrap' => array( 'src' => plugins_url( 'public/assets/css/bootstrap.custom.min.css', PT_CV_FILE ), ), 'select2' => array( 'src' => plugins_url( 'assets/select2/select2.min.css', PT_CV_FILE ), ), 'select2-bootstrap' => array( 'src' => plugins_url( 'assets/select2/select2-bootstrap.min.css', PT_CV_FILE ), ), ); } /** * Scripts list * * @return array */ static function script() { return array( 'bootstrap' => array( 'src' => plugins_url( 'public/assets/js/bootstrap.custom.min.js', PT_CV_FILE ), 'deps' => array( 'jquery' ), ), 'select2' => array( 'src' => plugins_url( 'assets/select2/select2.min.js', PT_CV_FILE ), 'deps' => array( 'jquery' ), ), ); } /** * Get version of handle * * @param string $name Asset slug name * @param array $data Asset data (url, depends, version...) * * @return string */ static function get_version( $name, $data ) { if ( isset( $data[ 'ver' ] ) ) { return $data[ 'ver' ]; } if ( array_key_exists( $name, self::$version ) ) { return self::$version[ $name ]; } return PT_CV_Functions::plugin_info( PT_CV_FILE, 'Version' ); } /** * Register / Enqueue a style / script * * @param string $name Asset slug name * @param string $data Asset information * @param string $type Asset type (css/js) * @param string $action Action to executing: enqueue / register * @param string $prefix Prefix string for asset */ static function action( $name, $data, $type, $action, $prefix ) { $prefix_ = !empty( $prefix ) ? $prefix : self::$prefix; $handle = $prefix_ . $name . '-' . $type; $src = isset( $data[ 'src' ] ) ? $data[ 'src' ] : ''; $deps = isset( $data[ 'deps' ] ) ? $data[ 'deps' ] : ''; $ver = self::get_version( $name, $data ); if ( $type == 'style' ) { $last_param = isset( $data[ 'media' ] ) ? $data[ 'media' ] : 'all'; } else { // Auto enqueue script in footer $last_param = isset( $data[ 'in_footer' ] ) ? $data[ 'in_footer' ] : self::load_script_in_footer(); } $function = "wp_{$action}_{$type}"; if ( function_exists( $function ) ) { $function( $handle, $src, $deps, $ver, $last_param ); } } /** * Localize script * * @param string $name Asset slug name * @param string $object_name The name of the variable which will contain the data * @param string $translation_array Array of translation strings * @param string $prefix Prefix string for asset */ static function localize_script( $name, $object_name, $translation_array, $prefix = '' ) { $type = 'script'; $prefix_ = !empty( $prefix ) ? $prefix : self::$prefix; foreach ( (array) $name as $nm ) { $handle = $prefix_ . $nm . '-' . $type; wp_localize_script( $handle, $object_name, $translation_array ); } } /** * Include asset files directly in page * * @param string $name Asset slug name * @param string $scr The link to asset file * @param string $type Asset type (css/js) * @param string $prefix Prefix string for asset */ static function include_inline( $name, $src, $type, $prefix = '' ) { $prefix_ = !empty( $prefix ) ? $prefix : self::$prefix; $handle = $prefix_ . $name . '-' . $type; switch ( $type ) { case 'js': printf( "", $src ); break; case 'css': printf( "", esc_attr( $handle ), esc_url( $src ) ); break; } } /** * Check if load script at footer (by default) or header (when there was JS error/issue caused by another script) * @since 1.7.9 * @return type */ private static function load_script_in_footer() { return is_admin() ? true : !get_option( PT_CV_SOLVE_SCRIPT_ERROR ); } } } // Call to run PT_CV_Asset::register();