diff --git a/Gruntfile.js b/Gruntfile.js index 7c212ab2759..54875f0527a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -369,6 +369,18 @@ module.exports = function( grunt ) { dest: '<%= dirs.php %>/blocks/', options: { process: ( content ) => content.replace( /'woo-gutenberg-products-block'/g, "'woocommerce'" ) + .replace( + /plugins_url\( 'build\/([\w-]*)\.js', WGPB_PLUGIN_FILE \)/g, + "WC()->plugin_url() . '/assets/js/blocks/$1.js'" + ) + .replace( + /plugins_url\( 'build\/([\w-]*)\.css', WGPB_PLUGIN_FILE \)/g, + "WC()->plugin_url() . '/assets/css/blocks/$1.css'" + ) + .replace( /WGPB_ABSPATH/g, 'WC_ABSPATH' ) + .replace( /WGPB_PLUGIN_FILE/g, 'WC_PLUGIN_FILE' ) + .replace( /WGPB_VERSION/g, 'WC_VERSION' ) + .replace( /WGPB_Block_Library/g, 'WC_Block_Library' ) } } } diff --git a/includes/blocks/class-wc-block-featured-product.php b/includes/blocks/class-wc-block-featured-product.php index 1c6390c824c..adfa41acbe8 100644 --- a/includes/blocks/class-wc-block-featured-product.php +++ b/includes/blocks/class-wc-block-featured-product.php @@ -3,6 +3,7 @@ * Display the featured product block in the content. * * @package WooCommerce\Blocks + * @version 3.6.0 */ if ( ! defined( 'ABSPATH' ) ) { diff --git a/includes/blocks/class-wc-block-library.php b/includes/blocks/class-wc-block-library.php new file mode 100644 index 00000000000..62c33f3e02a --- /dev/null +++ b/includes/blocks/class-wc-block-library.php @@ -0,0 +1,226 @@ +plugin_url() . '/assets/css/blocks/editor.css', array( 'wp-edit-blocks' ) ); + self::register_style( 'wc-block-style', WC()->plugin_url() . '/assets/css/blocks/style.css', array() ); + + // Shared libraries and components across all blocks. + self::register_script( 'wc-vendors', WC()->plugin_url() . '/assets/js/blocks/vendors.js', array(), false ); + + $block_dependencies = array( + 'wp-api-fetch', + 'wp-blocks', + 'wp-components', + 'wp-compose', + 'wp-data', + 'wp-element', + 'wp-editor', + 'wp-i18n', + 'wp-url', + 'lodash', + 'wc-vendors', + ); + + self::register_script( 'wc-handpicked-products', WC()->plugin_url() . '/assets/js/blocks/handpicked-products.js', $block_dependencies ); + self::register_script( 'wc-product-best-sellers', WC()->plugin_url() . '/assets/js/blocks/product-best-sellers.js', $block_dependencies ); + self::register_script( 'wc-product-category', WC()->plugin_url() . '/assets/js/blocks/product-category.js', $block_dependencies ); + self::register_script( 'wc-product-new', WC()->plugin_url() . '/assets/js/blocks/product-new.js', $block_dependencies ); + self::register_script( 'wc-product-on-sale', WC()->plugin_url() . '/assets/js/blocks/product-on-sale.js', $block_dependencies ); + self::register_script( 'wc-product-top-rated', WC()->plugin_url() . '/assets/js/blocks/product-top-rated.js', $block_dependencies ); + self::register_script( 'wc-products-attribute', WC()->plugin_url() . '/assets/js/blocks/products-attribute.js', $block_dependencies ); + self::register_script( 'wc-featured-product', WC()->plugin_url() . '/assets/js/blocks/featured-product.js', $block_dependencies ); + } + + /** + * Register blocks, hooking up assets and render functions as needed. + */ + public static function register_blocks() { + require_once dirname( __FILE__ ) . '/class-wc-block-featured-product.php'; + + register_block_type( + 'woocommerce/handpicked-products', + array( + 'editor_script' => 'wc-handpicked-products', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/product-best-sellers', + array( + 'editor_script' => 'wc-product-best-sellers', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/product-category', + array( + 'editor_script' => 'wc-product-category', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/product-new', + array( + 'editor_script' => 'wc-product-new', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/product-on-sale', + array( + 'editor_script' => 'wc-product-on-sale', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/product-top-rated', + array( + 'editor_script' => 'wc-product-top-rated', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/products-by-attribute', + array( + 'editor_script' => 'wc-products-attribute', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + register_block_type( + 'woocommerce/featured-product', + array( + 'render_callback' => array( 'WC_Block_Featured_Product', 'render' ), + 'editor_script' => 'wc-featured-product', + 'editor_style' => 'wc-block-editor', + 'style' => 'wc-block-style', + ) + ); + } + + /** + * Adds a WooCommerce category to the block inserter. + * + * @param array $categories Array of categories. + * @return array Array of block categories. + */ + public static function add_block_category( $categories ) { + return array_merge( + $categories, + array( + array( + 'slug' => 'woocommerce', + 'title' => __( 'WooCommerce', 'woocommerce' ), + 'icon' => 'woocommerce', + ), + ) + ); + } + + /** + * Output the wcSettings global before printing any script tags. + */ + public static function print_script_settings() { + // Global settings used in each block. + $block_settings = array( + 'min_columns' => wc_get_theme_support( 'product_grid::min_columns', 1 ), + 'max_columns' => wc_get_theme_support( 'product_grid::max_columns', 6 ), + 'default_columns' => wc_get_default_products_per_row(), + 'min_rows' => wc_get_theme_support( 'product_grid::min_rows', 1 ), + 'max_rows' => wc_get_theme_support( 'product_grid::max_rows', 6 ), + 'default_rows' => wc_get_default_product_rows_per_page(), + 'placeholderImgSrc' => wc_placeholder_img_src(), + 'min_height' => wc_get_theme_support( 'featured_block::min_height', 500 ), + 'default_height' => wc_get_theme_support( 'featured_block::default_height', 500 ), + ); + ?> + +