_version = $version; $this->_token = 'bricksable'; // Load plugin environment variables. $this->file = $file; $this->dir = dirname( $this->file ); $this->assets_dir = trailingslashit( $this->dir ) . 'assets'; $this->assets_url = esc_url( trailingslashit( plugins_url( '/assets/', $this->file ) ) ); $this->script_suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; register_activation_hook( $this->file, array( $this, 'install' ) ); // Load frontend JS & CSS. add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ), 10 ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 10 ); // Load admin JS & CSS. add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 10, 1 ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ), 10, 1 ); // Load API for generic admin functions. if ( is_admin() ) { $this->admin = new Bricksable_Admin_API(); } // Handle localisation. $this->load_plugin_textdomain(); add_action( 'init', array( $this, 'load_localisation' ), 0 ); } // End __construct () /** * Register post type function. * * @param string $post_type Post Type. * @param string $plural Plural Label. * @param string $single Single Label. * @param string $description Description. * @param array $options Options array. * * @return bool|string|Bricksable_Post_Type */ public function register_post_type( $post_type = '', $plural = '', $single = '', $description = '', $options = array() ) { if ( ! $post_type || ! $plural || ! $single ) { return false; } $post_type = new Bricksable_Post_Type( $post_type, $plural, $single, $description, $options ); return $post_type; } /** * Wrapper function to register a new taxonomy. * * @param string $taxonomy Taxonomy. * @param string $plural Plural Label. * @param string $single Single Label. * @param array $post_types Post types to register this taxonomy for. * @param array $taxonomy_args Taxonomy arguments. * * @return bool|string|Bricksable_Taxonomy */ public function register_taxonomy( $taxonomy = '', $plural = '', $single = '', $post_types = array(), $taxonomy_args = array() ) { if ( ! $taxonomy || ! $plural || ! $single ) { return false; } $taxonomy = new Bricksable_Taxonomy( $taxonomy, $plural, $single, $post_types, $taxonomy_args ); return $taxonomy; } /** * Load frontend CSS. * * @access public * @return void * @since 1.0.0 */ public function enqueue_styles() { wp_register_style( $this->_token . '-frontend', esc_url( $this->assets_url ) . 'css/frontend.min.css', array(), $this->_version ); wp_enqueue_style( $this->_token . '-frontend' ); } // End enqueue_styles () /** * Load frontend Javascript. * * @access public * @return void * @since 1.0.0 */ public function enqueue_scripts() { wp_register_script( $this->_token . '-frontend', esc_url( $this->assets_url ) . 'js/frontend' . $this->script_suffix . '.js', array( 'jquery' ), $this->_version, true ); wp_register_script( 'ba-tilt-image', esc_url( $this->assets_url ) . 'js/tilt-image/frontend.min.js', array(), $this->_version, true ); wp_register_script( 'ba-text-notation', esc_url( $this->assets_url ) . 'js/text-notation/frontend.min.js', array(), $this->_version, true ); wp_register_script( 'ba-lottie', esc_url( $this->assets_url ) . 'js/lottie/frontend.min.js', array(), $this->_version, true ); wp_register_script( 'ba-before-after-image', esc_url( $this->assets_url ) . 'js/before-after-image/frontend.min.js', array(), $this->_version, true ); wp_register_script( 'ba-content-toggle', esc_url( $this->assets_url ) . 'js/content-toggle/frontend.min.js', array(), $this->_version, true ); if ( function_exists( 'bricks_is_builder_iframe' ) && bricks_is_builder_iframe() ) { if ( 'on' === get_option( 'bricksable_tilt-image' ) || false === get_option( 'bricksable_tilt-image' ) ) { wp_enqueue_script( 'ba-tilt-image' ); wp_localize_script( 'ba-tilt-image', 'bricksableTiltImageData', array( 'tiltImageInstances' => array(), ) ); } if ( 'on' === get_option( 'bricksable_text-notation' ) || false === get_option( 'bricksable_text-notation' ) ) { wp_enqueue_script( 'ba-text-notation' ); wp_localize_script( 'ba-text-notation', 'BricksabletextNotationData', array( 'textNotationInstances' => array(), ) ); } if ( 'on' === get_option( 'bricksable_lottie' ) || false === get_option( 'bricksable_lottie' ) ) { wp_enqueue_script( 'ba-lottie' ); wp_localize_script( 'ba-lottie', 'bricksableLottieData', array( 'lottieInstances' => array(), ) ); } if ( 'on' === get_option( 'bricksable_before-after-image' ) || false === get_option( 'bricksable_before-after-image' ) ) { wp_enqueue_script( 'ba-before-after-image' ); wp_localize_script( 'ba-before-after-image', 'bricksableBeforeAfterImageData', array( 'BeforeAfterImageInstances' => array(), ) ); } if ( 'on' === get_option( 'bricksable_content-toggle' ) || false === get_option( 'bricksable_content-toggle' ) ) { wp_enqueue_script( 'ba-content-toggle' ); } } } // End enqueue_scripts () /** * Admin enqueue style. * * @param string $hook Hook parameter. * * @return void */ public function admin_enqueue_styles( $hook = '' ) { wp_register_style( $this->_token . '-admin', esc_url( $this->assets_url ) . 'css/admin.min.css', array(), $this->_version ); if ( 'bricks_page_bricksable_settings' === $hook ) { wp_enqueue_style( $this->_token . '-admin' ); } } // End admin_enqueue_styles () /** * Load admin Javascript. * * @access public * * @param string $hook Hook parameter. * * @return void * @since 1.0.0 */ public function admin_enqueue_scripts( $hook = '' ) { wp_register_script( $this->_token . '-admin', esc_url( $this->assets_url ) . 'js/admin' . $this->script_suffix . '.js', array( 'jquery' ), $this->_version, true ); if ( 'bricks_page_bricksable_settings' === $hook ) { wp_enqueue_script( $this->_token . '-admin' ); } } // End admin_enqueue_scripts () /** * Load plugin localisation * * @access public * @return void * @since 1.0.0 */ public function load_localisation() { load_plugin_textdomain( 'bricksable', false, dirname( plugin_basename( $this->file ) ) . '/lang/' ); } // End load_localisation () /** * Load plugin textdomain * * @access public * @return void * @since 1.0.0 */ public function load_plugin_textdomain() { $domain = 'bricksable'; $locale = apply_filters( 'plugin_locale', get_locale(), $domain ); load_textdomain( $domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo' ); load_plugin_textdomain( $domain, false, dirname( plugin_basename( $this->file ) ) . '/lang/' ); } // End load_plugin_textdomain () /** * Main Bricksable Instance * * Ensures only one instance of Bricksable is loaded or can be loaded. * * @param string $file File instance. * @param string $version Version parameter. * * @return Object Bricksable instance * @see Bricksable() * @since 1.0.0 * @static */ public static function instance( $file = '', $version = '1.0.0' ) { if ( is_null( self::$instance ) ) { self::$instance = new self( $file, $version ); } return self::$instance; } // End instance () /** * Cloning is forbidden. * * @since 1.0.0 */ public function __clone() { _doing_it_wrong( __FUNCTION__, esc_html( __( 'Cloning of Bricksable is forbidden' ) ), esc_attr( $this->_version ) ); } // End __clone () /** * Unserializing instances of this class is forbidden. * * @since 1.0.0 */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, esc_html( __( 'Unserializing instances of Bricksable is forbidden' ) ), esc_attr( $this->_version ) ); } // End __wakeup () /** * Installation. Runs on activation. * * @access public * @return void * @since 1.0.0 */ public function install() { $this->_log_version_number(); } // End install () /** * Log the plugin version number. * * @access public * @return void * @since 1.0.0 */ private function _log_version_number() { //phpcs:ignore update_option( $this->_token . '_version', $this->_version ); } // End _log_version_number () }