BP3D_DIR . 'public/js/model-viewer.latest.min.js', 'o3dviewerSrc' => BP3D_DIR . 'public/js/o3dv.min.js', 'selectors' => [ 'gallery' => $this->get_default_selector($settings('gallery', $settings('product_gallery_selector')), '.woocommerce-product-gallery'), 'gallery_trigger' => $this->get_default_selector($settings('gallery_trigger'), '.woocommerce-product-gallery__trigger'), ] ]); } /** * WordPress versions a block's `file:` styles with block.json's "version", which never changed, * so browsers kept the old view.css/index.css. Version them by build time instead. */ public function styleVersion($metadata) { if (is_array($metadata) && 'b3dviewer/modelviewer' === ($metadata['name'] ?? '')) { $mtime = max((int) @filemtime(BP3D_PATH . 'build/blocks/3d-viewer/view.css'), (int) @filemtime(BP3D_PATH . 'build/blocks/3d-viewer/index.css')); $metadata['version'] = BP3D_VERSION . ($mtime ? '-' . $mtime : ''); } return $metadata; } /** * Register block types from build directory. */ public function init() { if (file_exists(BP3D_PATH . 'build/blocks/3d-viewer/block.json')) { register_block_type(BP3D_PATH . 'build/blocks/3d-viewer'); } if (file_exists(BP3D_PATH . '3d-viewer-block/build/block.json')) { register_block_type(BP3D_PATH . '3d-viewer-block/build'); } } /** * Enqueue block editor assets with localized data. */ public function enqueueEditorAssets() { wp_localize_script('b3dviewer-modelviewer-editor-script', 'bp3dBlock', [ 'admin_url' => admin_url(), 'allowedMimeTypes' => Utils::getAllowedMimeTypes(), 'supportedMimes' => Utils::SUPPORTED_MIME_TYPES ]); wp_enqueue_script_module('bp3d-lib-model-viewer'); } public function enqueueBlockAssets() { wp_register_script('bp3d-lib-model-viewer', BP3D_DIR . 'public/js/model-viewer.latest.min.js', [], BP3D_VERSION, true); wp_register_script('bp3d-lib-o3dviewer', BP3D_DIR . 'public/js/o3dv.min.js', [], BP3D_VERSION, true); wp_register_script_module('bp3d-lib-model-viewer', BP3D_DIR . 'public/js/model-viewer.latest.min.js', [], BP3D_VERSION); if (is_admin()) { wp_enqueue_script('bp3d-lib-model-viewer'); } } public function get_default_selector($selector, $default) { if ($selector) { return $selector; } return $default; } }