335 lines
11 KiB
PHP
335 lines
11 KiB
PHP
<?php namespace um\common;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Class Enqueue
|
|
*
|
|
* @package um\common
|
|
*/
|
|
class Enqueue {
|
|
|
|
/**
|
|
* @var string scripts' Standard or Minified versions.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
public static $suffix = '';
|
|
|
|
/**
|
|
* @var array URLs for easy using.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
public static $urls = array(
|
|
'js' => UM_URL . 'assets/js/',
|
|
'css' => UM_URL . 'assets/css/',
|
|
'libs' => UM_URL . 'assets/libs/',
|
|
);
|
|
|
|
/**
|
|
* @var string scripts' Standard or Minified versions.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
public static $select2_handle = 'select2';
|
|
|
|
public static $fonticons_handlers = array();
|
|
|
|
/**
|
|
* FontAwesome version.
|
|
*
|
|
* @var string
|
|
*/
|
|
public static $fa_version = '6.5.2';
|
|
|
|
/**
|
|
* Enqueue constructor.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'admin_enqueue_scripts', array( &$this, 'common_libs' ), 9 );
|
|
add_action( 'wp_enqueue_scripts', array( &$this, 'common_libs' ), 9 );
|
|
add_action( 'enqueue_block_assets', array( &$this, 'common_libs' ), 9 );
|
|
}
|
|
|
|
/**
|
|
* Get assets URL.
|
|
* @since 2.7.0
|
|
*
|
|
* @param string $type Can be "js", "css" or "libs".
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_url( $type ) {
|
|
if ( ! in_array( $type, array( 'js', 'css', 'libs' ), true ) ) {
|
|
return '';
|
|
}
|
|
|
|
return self::$urls[ $type ];
|
|
}
|
|
|
|
/**
|
|
* Get scripts minified suffix.
|
|
*
|
|
* @since 2.7.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_suffix() {
|
|
if ( empty( self::$suffix ) ) {
|
|
self::$suffix = ( ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) || ( defined( 'UM_SCRIPT_DEBUG' ) && UM_SCRIPT_DEBUG ) ) ? '' : '.min';
|
|
}
|
|
return self::$suffix;
|
|
}
|
|
|
|
/**
|
|
* Register jQuery-UI styles.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
protected function register_jquery_ui() {
|
|
wp_register_style( 'um_ui', self::get_url( 'libs' ) . 'jquery-ui/jquery-ui' . self::get_suffix() . '.css', array(), '1.13.2' );
|
|
}
|
|
|
|
/**
|
|
* Get Pickadate.JS locale.
|
|
*
|
|
* @since 2.8.0
|
|
*
|
|
* @return string
|
|
*/
|
|
private function get_pickadate_locale() {
|
|
$suffix = self::get_suffix();
|
|
$locale = get_locale();
|
|
if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . $suffix . '.js' ) || file_exists( UM_PATH . 'assets/libs/pickadate/translations/' . $locale . $suffix . '.js' ) ) {
|
|
return $locale;
|
|
}
|
|
|
|
if ( false !== strpos( $locale, 'es_' ) ) {
|
|
$locale = 'es_ES';
|
|
} elseif ( false !== strpos( $locale, 'de_' ) ) {
|
|
$locale = 'de_DE';
|
|
} else {
|
|
switch ( $locale ) {
|
|
case 'uk':
|
|
$locale = 'uk_UA';
|
|
break;
|
|
case 'ja':
|
|
$locale = 'ja_JP';
|
|
break;
|
|
case 'ka_GE':
|
|
$locale = 'ge_GEO';
|
|
break;
|
|
case 'ary':
|
|
$locale = 'ar';
|
|
break;
|
|
case 'ca':
|
|
$locale = 'ca_ES';
|
|
break;
|
|
case 'el':
|
|
$locale = 'el_GR';
|
|
break;
|
|
case 'et':
|
|
$locale = 'et_EE';
|
|
break;
|
|
case 'eu':
|
|
$locale = 'eu_ES';
|
|
break;
|
|
case 'fa_AF':
|
|
$locale = 'fa_IR';
|
|
break;
|
|
case 'fi':
|
|
$locale = 'fi_FI';
|
|
break;
|
|
case 'hr':
|
|
$locale = 'hr_HR';
|
|
break;
|
|
case 'km':
|
|
$locale = 'km_KH';
|
|
break;
|
|
case 'lv':
|
|
$locale = 'lv_LV';
|
|
break;
|
|
case 'th':
|
|
$locale = 'th_TH';
|
|
break;
|
|
case 'vi':
|
|
$locale = 'vi_VN';
|
|
break;
|
|
case 'sr_SR':
|
|
$locale = 'sr_RS_lt';
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Filters Ultimate Member Pickadate.JS locale.
|
|
*
|
|
* @since 2.8.0
|
|
* @hook um_get_pickadate_locale
|
|
*
|
|
* @param {string} $locale Pickadate.JS locale.
|
|
* @param {string} $suffix Ultimate Member scripts suffix.
|
|
*
|
|
* @return {string} Pickadate.JS locale.
|
|
*
|
|
* @example <caption>Change Ultimate Member Pickadate.JS locale.</caption>
|
|
* function custom_um_get_pickadate_locale( $locale, $suffix ) {
|
|
* $locale = 'th_TH';
|
|
* return $locale;
|
|
* }
|
|
* add_filter( 'um_get_pickadate_locale', 'custom_um_get_pickadate_locale', 10, 2 );
|
|
*/
|
|
return apply_filters( 'um_get_pickadate_locale', $locale, $suffix );
|
|
}
|
|
|
|
/**
|
|
* Select2 JS and CSS assets register function.
|
|
*
|
|
*
|
|
*/
|
|
public function register_select2() {
|
|
$suffix = self::get_suffix();
|
|
$libs_url = self::get_url( 'libs' );
|
|
|
|
/**
|
|
* Filters marker for dequeue select2.JS library.
|
|
*
|
|
* @since 2.0.0
|
|
* @hook um_dequeue_select2_scripts
|
|
*
|
|
* @param {bool} $dequeue_select2 Dequeue select2 assets marker. Set to `true` for dequeue scripts.
|
|
*
|
|
* @return {bool} Dequeue select2 assets. By default `false`.
|
|
*
|
|
* @example <caption>Dequeue select2 assets.</caption>
|
|
* function custom_um_dequeue_select2_scripts( $dequeue_select2 ) {
|
|
* $dequeue_select2 = true;
|
|
* return $dequeue_select2;
|
|
* }
|
|
* add_filter( 'um_dequeue_select2_scripts', 'custom_um_dequeue_select2_scripts' );
|
|
*/
|
|
$dequeue_select2 = apply_filters( 'um_dequeue_select2_scripts', false );
|
|
if ( class_exists( 'WooCommerce' ) || $dequeue_select2 ) {
|
|
wp_dequeue_style( 'select2' );
|
|
wp_deregister_style( 'select2' );
|
|
|
|
wp_dequeue_script( 'select2' );
|
|
wp_deregister_script( 'select2' );
|
|
}
|
|
wp_register_script( 'select2', $libs_url . 'select2/select2.full' . $suffix . '.js', array( 'jquery' ), '4.0.13', true );
|
|
// Load a localized version for Select2.
|
|
$locale = get_locale();
|
|
$base_locale = get_locale();
|
|
if ( $locale ) {
|
|
if ( ! file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) {
|
|
$locale = explode( '_', $base_locale );
|
|
$locale = $locale[0];
|
|
|
|
if ( ! file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) {
|
|
$locale = explode( '_', $base_locale );
|
|
$locale = implode( '-', $locale );
|
|
}
|
|
}
|
|
|
|
if ( file_exists( UM_PATH . 'assets/libs/select2/i18n/' . $locale . '.js' ) ) {
|
|
wp_register_script( 'um_select2_locale', $libs_url . 'select2/i18n/' . $locale . '.js', array( 'jquery', 'select2' ), '4.0.13', true );
|
|
self::$select2_handle = 'um_select2_locale';
|
|
}
|
|
}
|
|
wp_register_style( 'select2', $libs_url . 'select2/select2' . $suffix . '.css', array(), '4.0.13' );
|
|
}
|
|
|
|
/**
|
|
* Register common JS/CSS libraries.
|
|
*
|
|
* @since 2.7.0
|
|
*/
|
|
public function common_libs() {
|
|
$this->register_jquery_ui();
|
|
|
|
$suffix = self::get_suffix();
|
|
$libs_url = self::get_url( 'libs' );
|
|
$js_url = self::get_url( 'js' );
|
|
$css_url = self::get_url( 'css' );
|
|
|
|
wp_register_script( 'um_tipsy', $libs_url . 'tipsy/tipsy' . $suffix . '.js', array( 'jquery' ), '1.0.0a', true );
|
|
wp_register_style( 'um_tipsy', $libs_url . 'tipsy/tipsy' . $suffix . '.css', array(), '1.0.0a' );
|
|
|
|
wp_register_script( 'um_confirm', $libs_url . 'um-confirm/um-confirm' . $suffix . '.js', array( 'jquery' ), '1.0', true );
|
|
wp_register_style( 'um_confirm', $libs_url . 'um-confirm/um-confirm' . $suffix . '.css', array(), '1.0' );
|
|
|
|
// Raty JS for rating field-type.
|
|
wp_register_script( 'um_raty', $libs_url . 'raty/um-raty' . $suffix . '.js', array( 'jquery', 'wp-i18n' ), '2.6.0', true );
|
|
wp_set_script_translations( 'um_raty', 'ultimate-member' );
|
|
wp_register_style( 'um_raty', $libs_url . 'raty/um-raty' . $suffix . '.css', array(), '2.6.0' );
|
|
|
|
// Legacy FontIcons.
|
|
wp_register_style( 'um_fonticons_ii', $libs_url . 'legacy/fonticons/fonticons-ii' . $suffix . '.css', array(), UM_VERSION ); // Ionicons
|
|
wp_register_style( 'um_fonticons_fa', $libs_url . 'legacy/fonticons/fonticons-fa' . $suffix . '.css', array(), UM_VERSION ); // FontAwesome
|
|
$fonticons_handlers = array( 'um_fonticons_ii', 'um_fonticons_fa' );
|
|
// New FontIcons from FontAwesome.
|
|
// @todo new version
|
|
// First install set this option to true by default and use new FontAwesome icons
|
|
wp_register_style( 'um_fontawesome', $css_url . 'um-fontawesome' . $suffix . '.css', array(), self::$fa_version ); // New FontAwesome
|
|
$fonticons_handlers[] = 'um_fontawesome';
|
|
self::$fonticons_handlers = $fonticons_handlers;
|
|
|
|
// Select2 JS.
|
|
$this->register_select2();
|
|
|
|
// Date-time picker (Pickadate.JS)
|
|
wp_register_script( 'um_datetime', $libs_url . 'pickadate/picker' . $suffix . '.js', array( 'jquery' ), '3.6.2', true );
|
|
wp_register_script( 'um_datetime_date', $libs_url . 'pickadate/picker.date' . $suffix . '.js', array( 'um_datetime' ), '3.6.2', true );
|
|
wp_register_script( 'um_datetime_time', $libs_url . 'pickadate/picker.time' . $suffix . '.js', array( 'um_datetime' ), '3.6.2', true );
|
|
|
|
$common_js_deps = array( 'jquery', 'wp-util', 'wp-hooks', 'wp-i18n', 'um_tipsy', 'um_confirm', 'um_datetime_date', 'um_datetime_time' );
|
|
|
|
// Load a localized version for date/time.
|
|
$locale = $this->get_pickadate_locale();
|
|
if ( $locale ) {
|
|
if ( file_exists( WP_LANG_DIR . '/plugins/ultimate-member/assets/js/pickadate/' . $locale . $suffix . '.js' ) ) {
|
|
wp_register_script( 'um_datetime_locale', content_url() . '/languages/plugins/ultimate-member/assets/js/pickadate/' . $locale . $suffix . '.js', array( 'jquery', 'um_datetime' ), '3.6.2', true );
|
|
$common_js_deps[] = 'um_datetime_locale';
|
|
} elseif ( file_exists( UM_PATH . 'assets/libs/pickadate/translations/' . $locale . $suffix . '.js' ) ) {
|
|
wp_register_script( 'um_datetime_locale', $libs_url . 'pickadate/translations/' . $locale . $suffix . '.js', array( 'jquery', 'um_datetime' ), '3.6.2', true );
|
|
$common_js_deps[] = 'um_datetime_locale';
|
|
}
|
|
}
|
|
|
|
wp_register_style( 'um_datetime', $libs_url . 'pickadate/default' . $suffix . '.css', array(), '3.6.2' );
|
|
wp_register_style( 'um_datetime_date', $libs_url . 'pickadate/default.date' . $suffix . '.css', array( 'um_datetime' ), '3.6.2' );
|
|
wp_register_style( 'um_datetime_time', $libs_url . 'pickadate/default.time' . $suffix . '.css', array( 'um_datetime' ), '3.6.2' );
|
|
|
|
wp_register_script( 'um_common', $js_url . 'common' . $suffix . '.js', $common_js_deps, UM_VERSION, true );
|
|
$um_common_variables = array(
|
|
'locale' => get_locale(),
|
|
);
|
|
/**
|
|
* Filters data array for localize frontend common scripts.
|
|
*
|
|
* @since 2.8.0
|
|
* @hook um_common_js_variables
|
|
*
|
|
* @param {array} $variables Data to localize.
|
|
*
|
|
* @return {array} Data to localize.
|
|
*
|
|
* @example <caption>Add `my_custom_variable` to common scripts to be callable via `um_common_variables.my_custom_variable` in JS.</caption>
|
|
* function um_custom_common_js_variables( $variables ) {
|
|
* $variables['{my_custom_variable}'] = '{my_custom_variable_value}';
|
|
* return $variables;
|
|
* }
|
|
* add_filter( 'um_common_js_variables', 'um_custom_common_js_variables' );
|
|
*/
|
|
$um_common_variables = apply_filters( 'um_common_js_variables', $um_common_variables );
|
|
wp_localize_script( 'um_common', 'um_common_variables', $um_common_variables );
|
|
|
|
$common_css_deps = array_merge( array( 'um_tipsy', 'um_confirm', 'um_datetime_date', 'um_datetime_time' ), self::$fonticons_handlers );
|
|
wp_register_style( 'um_common', $css_url . 'common' . $suffix . '.css', $common_css_deps, UM_VERSION );
|
|
}
|
|
}
|