# ghostkit/2.25.0/classes/class-breakpoints.php

Block Animations, Motion &amp; Scroll Effects – Ghost Kit, version 2.25.0. 416 lines.

- Page: https://pluginprobe.com/plugins/ghostkit/2.25.0/code/classes/class-breakpoints.php
- Raw: https://pluginprobe.com/plugins/ghostkit/2.25.0/raw/classes/class-breakpoints.php
- Modified: 2023-01-04T15:48:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ghostkit/2.25.0/code/classes/class-breakpoints.php#L10-L20`.

```php
<?php
/**
 * Breakpoints
 *
 * @package ghostkit
 */

if ( ! function_exists( 'is_plugin_active' ) ) {
    require_once ABSPATH . 'wp-admin/includes/plugin.php';
}

// phpcs:ignore
$pro_version = false;

if ( is_plugin_active( 'ghostkit-pro/class-ghost-kit-pro.php' ) ) {
    // phpcs:ignore
    $pro_data    = get_plugin_data( ABSPATH . 'wp-content/plugins/ghostkit-pro/class-ghost-kit-pro.php' );
    // phpcs:ignore
    $pro_version = isset( $pro_data['Version'] ) ? $pro_data['Version'] : false;
}

if ( $pro_version && version_compare( $pro_version, '1.6.2', '<=' ) ) {
    require_once $this->plugin_path . 'classes/class-breakpoints-fallback.php';
}

if ( ! class_exists( 'GhostKit_Breakpoints' ) ) {
    /**
     * GhostKit_Breakpoints class
     */
    // phpcs:ignore
    class GhostKit_Breakpoints {
        /**
         * Extra Small Default Breakpoint.
         *
         * @var int
         */
        protected static $default_xs = 576;

        /**
         * Mobile Default Breakpoint.
         *
         * @var int
         */
        protected static $default_sm = 768;

        /**
         * Tablet Breakpoint.
         *
         * @var int
         */
        protected static $default_md = 992;

        /**
         * Desktop Breakpoint.
         *
         * @var int
         */
        protected static $default_lg = 1200;

        /**
         * Database saved hash option Name.
         *
         * @var string
         */
        protected $database_saved_hash_option_name = 'ghostkit_saved_breakpoints_hash';

        /**
         * Plugin name.
         *
         * @var string
         */
        protected $plugin_name = 'ghostkit';

        /**
         * Plugin version.
         *
         * @var string
         */
        protected $plugin_version = '2.25.0';

        /**
         * Scss Configurations.
         *
         * @var array
         */
        protected $scss_configs = array(
            'gutenberg/style.scss',
            'gutenberg/editor.scss',
            'gutenberg/blocks/*/styles/style.scss',
        );

        /**
         * Compile Scss Configurations.
         *
         * @var array
         */
        protected $compile_scss_configs;

        /**
         * Background breakpoints processing.
         *
         * @var object
         */
        protected $breakpoints_background_process;

        /**
         * GhostKit_Breakpoints constructor.
         */
        public function __construct() {
            if ( ! class_exists( 'GhostKit_Breakpoints_Background' ) ) {
                // breakpoints background.
                require_once __DIR__ . '/class-breakpoints-background.php';
            }

            $this->compile_scss_configs           = $this->get_compile_scss_configs();
            $this->breakpoints_background_process = new GhostKit_Breakpoints_Background();

            add_filter( 'style_loader_src', array( $this, 'change_style_src_to_compile' ), 10, 1 );
            add_action( 'gkt_before_assets_register', array( $this, 'maybe_compile_scss_files' ) );
        }

        /**
         * Get plugin path.
         *
         * @return string
         */
        public function get_plugin_path() {
            return ghostkit()->plugin_path;
        }

        /**
         * Get plugin url.
         *
         * @return string
         */
        public function get_plugin_url() {
            return ghostkit()->plugin_url;
        }

        /**
         * Get compile scss configurations.
         *
         * @return array
         */
        protected function get_compile_scss_configs() {
            $plugin_path          = $this->get_plugin_path();
            $upload_dir           = wp_upload_dir();
            $compile_scss_configs = array();
            $scss_paths           = apply_filters( 'gkt_scss_paths', $plugin_path );
            $scss_configs         = apply_filters( 'gkt_scss_configs', $this->scss_configs );

            foreach ( $scss_configs as $scss_config ) {
                if ( is_array( $scss_paths ) ) {
                    foreach ( $scss_paths as $path ) {
                        $compile_scss_configs = $this->get_parsed_scss_files( $compile_scss_configs, $path, $upload_dir, $scss_config );
                    }
                } else {
                    $compile_scss_configs = $this->get_parsed_scss_files( $compile_scss_configs, $scss_paths, $upload_dir, $scss_config );
                }
            }

            return $compile_scss_configs;
        }

        /**
         * Get parsed array of scss files
         *
         * @param array  $compile_scss_configs - Array of config width scss files.
         * @param string $scss_path - Path to scss files.
         * @param string $upload_dir - Uploas WP dir.
         * @param string $scss_config - File search mask.
         * @return array
         */
        protected function get_parsed_scss_files( &$compile_scss_configs, $scss_path, $upload_dir, $scss_config ) {
            foreach ( glob( $scss_path . $scss_config ) as $template ) {
                $output_file = str_replace( $scss_path, $upload_dir['basedir'] . '/' . $this->plugin_name . '/', $template );
                $output_file = str_replace( '.scss', '.min.css', $output_file );

                $compile_scss_configs[] = array(
                    'input_file'  => $template,
                    'output_file' => $output_file,
                );
            }
            return $compile_scss_configs;
        }

        /**
         * Change style src to compile css files.
         *
         * @param string $src - Url to style.
         * @return string
         */
        public function change_style_src_to_compile( $src ) {
            $plugin_url               = $this->get_plugin_url();
            $breakpoints              = self::get_breakpoints();
            $breakpoints_hash         = $this->get_breakpoints_hash( $breakpoints );
            $default_breakpoints_hash = $this->get_default_breakpoints_hash();

            if ( $breakpoints_hash !== $default_breakpoints_hash ) {
                $is_plugin_file = strstr( $src, $plugin_url );

                if ( $is_plugin_file ) {
                    $configs       = $this->compile_scss_configs;
                    $relative_uri  = str_replace( $plugin_url, '', $is_plugin_file );
                    $relative_path = str_replace( '?ver=' . $this->plugin_version, '', $relative_uri );
                    $upload_dir    = wp_upload_dir();
                    $output_file   = $upload_dir['basedir'] . '/' . $this->plugin_name . '/' . $relative_path;

                    foreach ( $configs as $config ) {
                        if (
                            $config['output_file'] === $output_file &&
                            file_exists( $output_file )
                        ) {
                            $src = $upload_dir['baseurl'] . '/' . $this->plugin_name . '/' . $relative_uri;
                        }
                    }
                }
            }

            return $src;
        }

        /**
         * Get Breakpoints.
         */
        public static function get_breakpoints() {
            $xs = self::get_breakpoint_xs();
            $xs = ( ! empty( $xs ) && $xs ) ? $xs : self::$default_xs;

            $sm = self::get_breakpoint_sm();
            $sm = ( ! empty( $sm ) && $sm ) ? $sm : self::$default_sm;

            $md = self::get_breakpoint_md();
            $md = ( ! empty( $md ) && $md ) ? $md : self::$default_md;

            $lg = self::get_breakpoint_lg();
            $lg = ( ! empty( $lg ) && $lg ) ? $lg : self::$default_lg;

            return array(
                'xs' => $xs,
                'sm' => $sm,
                'md' => $md,
                'lg' => $lg,
            );
        }

        /**
         * Get default breakpoints.
         *
         * @return array
         */
        public static function get_default_breakpoints() {
            return array(
                'xs' => self::get_default_breakpoint_xs(),
                'sm' => self::get_default_breakpoint_sm(),
                'md' => self::get_default_breakpoint_md(),
                'lg' => self::get_default_breakpoint_lg(),
            );
        }

        /**
         * Get breakpoints Hash
         *
         * @param array $breakpoints - Breakpoints.
         * @return string
         */
        protected function get_breakpoints_hash( $breakpoints ) {
            return md5(
                wp_json_encode(
                    array_merge(
                        $breakpoints,
                        array(
                            $this->plugin_version,
                        )
                    )
                )
            );
        }

        /**
         * Get default breakpoints Hash.
         *
         * @return string
         */
        protected function get_default_breakpoints_hash() {
            return $this->get_breakpoints_hash(
                array(
                    'xs' => self::$default_xs,
                    'sm' => self::$default_sm,
                    'md' => self::$default_md,
                    'lg' => self::$default_lg,
                )
            );
        }

        /**
         * Styles may need to be compiled if breakpoints have been changed.
         *
         * @return void
         */
        public function maybe_compile_scss_files() {
            $breakpoints              = self::get_breakpoints();
            $breakpoints_hash         = $this->get_breakpoints_hash( $breakpoints );
            $default_breakpoints_hash = $this->get_default_breakpoints_hash();
            $saved_breakpoints_hash   = get_option( $this->database_saved_hash_option_name );

            if (
                $breakpoints_hash !== $saved_breakpoints_hash &&
                $breakpoints_hash !== $default_breakpoints_hash
            ) {
                $compile_scss_configs = $this->compile_scss_configs;

                $breakpoints = self::get_breakpoints();

                $variables = array(
                    'media-xs' => $breakpoints['xs'] . 'px',
                    'media-sm' => $breakpoints['sm'] . 'px',
                    'media-md' => $breakpoints['md'] . 'px',
                    'media-lg' => $breakpoints['lg'] . 'px',
                );

                foreach ( $compile_scss_configs as $compile_scss_config ) {
                    $scss_config_arguments = array_merge(
                        $compile_scss_config,
                        array(
                            'variables'   => $variables,
                        )
                    );
                    if ( ! file_exists( $compile_scss_config['output_file'] ) ) {
                        new GhostKit_Scss_Compiler( $scss_config_arguments );
                    } else {
                        $this->breakpoints_background_process->push_to_queue( $scss_config_arguments );
                    }
                }

                $this->breakpoints_background_process->save()->dispatch();

                update_option( $this->database_saved_hash_option_name, $breakpoints_hash );
            }
        }

        /**
         * Get Default Extra Small Breakpoint.
         *
         * @return int
         */
        public static function get_default_breakpoint_xs() {
            return apply_filters( 'gkt_default_breakpoint_xs', self::$default_xs );
        }

        /**
         * Get Extra Small Breakpoint.
         *
         * @return int
         */
        public static function get_breakpoint_xs() {
            return apply_filters( 'gkt_breakpoint_xs', self::get_default_breakpoint_xs() );
        }

        /**
         * Get Default Mobile Breakpoint.
         *
         * @return int
         */
        public static function get_default_breakpoint_sm() {
            return apply_filters( 'gkt_default_breakpoint_sm', self::$default_sm );
        }

        /**
         * Get Mobile Breakpoint.
         *
         * @return int
         */
        public static function get_breakpoint_sm() {
            return apply_filters( 'gkt_breakpoint_sm', self::get_default_breakpoint_sm() );
        }

        /**
         * Get Default Tablet Breakpoint.
         *
         * @return int
         */
        public static function get_default_breakpoint_md() {
            return apply_filters( 'gkt_default_breakpoint_md', self::$default_md );
        }

        /**
         * Get Tablet Breakpoint.
         *
         * @return int
         */
        public static function get_breakpoint_md() {
            return apply_filters( 'gkt_breakpoint_md', self::get_default_breakpoint_md() );
        }

        /**
         * Get Default Desktop Breakpoint.
         *
         * @return int
         */
        public static function get_default_breakpoint_lg() {
            return apply_filters( 'gkt_default_breakpoint_lg', self::$default_lg );
        }

        /**
         * Get Desktop Breakpoint.
         *
         * @return int
         */
        public static function get_breakpoint_lg() {
            return apply_filters( 'gkt_breakpoint_lg', self::get_default_breakpoint_lg() );
        }
    }
    new GhostKit_Breakpoints();
}

```
