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 Change Ultimate Member Pickadate.JS locale. * 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 Dequeue select2 assets. * 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 Add `my_custom_variable` to common scripts to be callable via `um_common_variables.my_custom_variable` in JS. * 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 ); } }