Merge pull request 'acf-build' (#6) from acf-build into master
Reviewed-on: AXE-WEB/block-dev-tool#6
This commit is contained in:
@@ -18,6 +18,10 @@ indent_size = 2
|
|||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.php]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
// Blocks Initialization.
|
||||||
|
function initBlock(blockName = '', selector = '', cb) {
|
||||||
|
document.querySelectorAll(selector).forEach((el) => cb(el));
|
||||||
|
}
|
||||||
|
|
||||||
// Scrollbars / Frame resizes notifications.
|
// Scrollbars / Frame resizes notifications.
|
||||||
(function () {
|
(function () {
|
||||||
let height;
|
let height;
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@axe-web/block-dev-tool",
|
"name": "@axe-web/block-dev-tool",
|
||||||
"version": "1.0.21",
|
"version": "1.0.22",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@axe-web/block-dev-tool",
|
"name": "@axe-web/block-dev-tool",
|
||||||
"version": "1.0.21",
|
"version": "1.0.22",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@braintree/sanitize-url": "^6.0.0",
|
"@braintree/sanitize-url": "^6.0.0",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@axe-web/block-dev-tool",
|
"name": "@axe-web/block-dev-tool",
|
||||||
"version": "1.0.21",
|
"version": "1.0.22",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "AXE-WEB",
|
"name": "AXE-WEB",
|
||||||
"email": "office@axe-web.com",
|
"email": "office@axe-web.com",
|
||||||
|
|||||||
+81
-79
@@ -9,125 +9,127 @@ use LightnCandy\LightnCandy;
|
|||||||
use Brick\VarExporter\VarExporter;
|
use Brick\VarExporter\VarExporter;
|
||||||
|
|
||||||
trait Custom_Handlebars {
|
trait Custom_Handlebars {
|
||||||
public array $custom_handlebars = [];
|
public array $custom_handlebars = [];
|
||||||
|
|
||||||
public function register_default_handlebar_helpers() {
|
public function register_default_handlebar_helpers() {
|
||||||
$this->add_handlebar( 'esc_url', function ( $context ) {
|
$this->add_handlebar( 'esc_url', function ( $context ) {
|
||||||
if ( function_exists( 'esc_url' ) ) {
|
if ( function_exists( 'esc_url' ) ) {
|
||||||
return esc_url( $context );
|
return esc_url( $context );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $context;
|
return $context;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
$this->add_handlebar( 'esc_attr', function ( $context ) {
|
$this->add_handlebar( 'esc_attr', function ( $context ) {
|
||||||
if ( function_exists( 'esc_attr' ) ) {
|
if ( function_exists( 'esc_attr' ) ) {
|
||||||
return esc_attr( $context );
|
return esc_attr( $context );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $context;
|
return $context;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
$this->add_handlebar( 'esc_html', function ( $context ) {
|
$this->add_handlebar( 'esc_html', function ( $context ) {
|
||||||
if ( function_exists( 'esc_html' ) ) {
|
if ( function_exists( 'esc_html' ) ) {
|
||||||
return esc_html( $context );
|
return esc_html( $context );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $context;
|
return $context;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
$this->add_handlebar( 'safe_html', function ( $context ) {
|
$this->add_handlebar( 'safe_html', function ( $context ) {
|
||||||
if ( function_exists( 'wp_kses_post' ) ) {
|
if ( function_exists( 'wp_kses_post' ) ) {
|
||||||
return wp_kses_post( $context );
|
return wp_kses_post( $context );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $context;
|
return $context;
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add_handlebar( $key, $func ) {
|
public function add_handlebar( $key, $func ) {
|
||||||
$this->custom_handlebars[ $key ] = $func;
|
$this->custom_handlebars[ $key ] = $func;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Component_Builder {
|
class Component_Builder {
|
||||||
use Custom_Handlebars;
|
use Custom_Handlebars;
|
||||||
|
|
||||||
public string $component_name = '';
|
public string $component_name = '';
|
||||||
public string $module_path = '';
|
public string $module_path = '';
|
||||||
public string $project_path = '';
|
public string $project_path = '';
|
||||||
|
|
||||||
function __construct( $component_name, $module_path, $project_path ) {
|
function __construct( $component_name, $module_path, $project_path ) {
|
||||||
$this->module_path = $module_path;
|
$this->module_path = $module_path;
|
||||||
$this->project_path = $project_path;
|
$this->project_path = $project_path;
|
||||||
$this->component_name = $component_name;
|
$this->component_name = $component_name;
|
||||||
$this->register_default_handlebar_helpers();
|
$this->register_default_handlebar_helpers();
|
||||||
}
|
}
|
||||||
|
|
||||||
function build(): void {
|
function build(): void {
|
||||||
$root_path = __DIR__ . '/' . $this->module_path . '/../../' . $this->project_path;
|
$root_path = __DIR__ . '/' . $this->module_path . '/../../' . $this->project_path;
|
||||||
|
|
||||||
$this->buildTemplatePhpFile( $root_path );
|
$this->buildTemplatePhpFile( $root_path );
|
||||||
}
|
}
|
||||||
|
|
||||||
private function buildTemplatePhpFile( $root_path ) {
|
private function buildTemplatePhpFile( $root_path ) {
|
||||||
$file_name = $this->get_handlebars_template( "$root_path/src/$this->component_name.template.hbs" );
|
$file_name = $this->get_handlebars_template( "$root_path/src/$this->component_name.template.hbs" );
|
||||||
|
|
||||||
$output_folder = $root_path . '/exports/wordpress/templates';
|
$output_folder = $root_path . '/exports/wordpress/templates';
|
||||||
rename( $file_name, "$output_folder/$this->component_name.template.php" );
|
rename( $file_name, "$output_folder/$this->component_name.template.php" );
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_handlebars_template( $path = '' ): string {
|
private function get_handlebars_template( $path = '' ): string {
|
||||||
$template = file_get_contents( $path );
|
$template = file_get_contents( $path );
|
||||||
$phpStr = LightnCandy::compile( $template,
|
$phpStr = LightnCandy::compile( $template,
|
||||||
[
|
[
|
||||||
'flags' => Flags::FLAG_NOESCAPE | Flags::FLAG_PARENT | Flags::FLAG_SPVARS | Flags::FLAG_ELSE | Flags::FLAG_JSLENGTH | Flags::FLAG_JSTRUE,
|
'flags' => Flags::FLAG_NOESCAPE | Flags::FLAG_PARENT | Flags::FLAG_SPVARS | Flags::FLAG_ELSE | Flags::FLAG_JSLENGTH | Flags::FLAG_JSTRUE,
|
||||||
'helpers' => $this->custom_handlebars ?? [],
|
'helpers' => $this->custom_handlebars ?? [],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NOTE:
|
* NOTE:
|
||||||
* PHP 8.0.0 has problems with the LightCandy lib.
|
* PHP 8.0.0 has problems with the LightCandy lib.
|
||||||
* If you're running the exact php8.0.0 version, try to downgrade to LightCandy@1.2.5.
|
* If you're running the exact php8.0.0 version, try to downgrade to LightCandy@1.2.5.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return self::create_cache_file( $path, $phpStr );
|
return self::create_cache_file( $path, $phpStr );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function create_cache_file( string $file_path, string $content ): string {
|
private static function create_cache_file( string $file_path, string $content ): string {
|
||||||
$file_path_parts = explode( ".", $file_path );
|
$file_path_parts = explode( ".", $file_path );
|
||||||
array_pop( $file_path_parts ); // remove ".hbs" format.
|
array_pop( $file_path_parts ); // remove ".hbs" format.
|
||||||
$file_path_parts[] = 'php';
|
$file_path_parts[] = 'php';
|
||||||
$file_path = join( '.', $file_path_parts );
|
$file_path = join( '.', $file_path_parts );
|
||||||
|
|
||||||
$comment = "
|
$comment = "
|
||||||
/**
|
/**
|
||||||
* FILE INFO:
|
* FILE INFO:
|
||||||
* This file was generated by LightCandy::compile function.
|
* This file was generated by LightCandy::compile function.
|
||||||
* The original source is the .HBS(handlebars) file that is located next to this generated PHP file.
|
* The original source is the .HBS(handlebars) file that is located next to this generated PHP file.
|
||||||
|
*
|
||||||
|
* Compiled at " . date( 'Y-m-d h:i:s' ) . "
|
||||||
*/
|
*/
|
||||||
|
|
||||||
";
|
";
|
||||||
|
|
||||||
$t = file_put_contents( $file_path, '<?php ' . $comment . $content . ' ?>' );
|
$t = file_put_contents( $file_path, '<?php ' . $comment . $content . ' ?>' );
|
||||||
if ( $t === false ) {
|
if ( $t === false ) {
|
||||||
die( "Error: Can't generate HBS template to PHP file. Cache folder is not accessible." );
|
die( "Error: Can't generate HBS template to PHP file. Cache folder is not accessible." );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $file_path;
|
return $file_path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function build( $args = [] ) {
|
function build( $args = [] ) {
|
||||||
( new Component_Builder( $args['blockName'], $args['backPath'], $args['projectPath'] ) )->build();
|
( new Component_Builder( $args['blockName'], $args['backPath'], $args['projectPath'] ) )->build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws ExportException
|
* @throws ExportException
|
||||||
*/
|
*/
|
||||||
function jsonToPhp( $args = [] ): ?string {
|
function jsonToPhp( $args = [] ): ?string {
|
||||||
$json = $args['json'] ?? [];
|
$json = $args['json'] ?? [];
|
||||||
|
|
||||||
return VarExporter::export( $json );
|
return VarExporter::export( $json );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,17 @@
|
|||||||
|
|
||||||
namespace AXEWEB_Blocks\Blocks\<%= ownerClass %>\<%= blockClassModel %>;
|
namespace AXEWEB_Blocks\Blocks\<%= ownerClass %>\<%= blockClassModel %>;
|
||||||
|
|
||||||
include_once __DIR__ . "/helpers/<%= blockClassModel %>_Defaults.php";
|
|
||||||
include_once __DIR__ . "/helpers/<%= blockClassModel %>_API.php";
|
|
||||||
|
|
||||||
class <%= blockClassModel %>_Component extends \Core\Component {
|
class <%= blockClassModel %>_Component extends \Core\Component {
|
||||||
|
|
||||||
public function get_content( $args = [] ): string {
|
public function get_content( $args = [] ): string {
|
||||||
$args = array_merge( Helpers\<%= blockClassModel %>_Defaults::default_args(), $args );
|
$default_args = apply_filters( 'axeweb_blocks/<%= ownerFilename %>/<%= blockFilename %>::default_args', [] ); // Not really practical.
|
||||||
$args = Helpers\<%= blockClassModel %>_API::prepare_args( $args );
|
|
||||||
|
|
||||||
$output = ( include( __DIR__ . '/templates/<%= blockFilename %>.template.php' ) )( array_merge( [], $args ), self::class );
|
$args = apply_filters( 'axeweb_blocks/<%= ownerFilename %>/<%= blockFilename %>::prepare_args', array_merge( $default_args, $args ) );
|
||||||
//return apply_filters( 'the_content', $output );
|
|
||||||
return $output;
|
$output = ( include( __DIR__ . '/templates/<%= blockFilename %>.template.php' ) )( $args, self::class );
|
||||||
|
|
||||||
|
return apply_filters( 'axeweb_blocks/<%= ownerFilename %>/<%= blockFilename %>::content', $output );
|
||||||
}
|
}
|
||||||
|
|
||||||
<% if (!include_acf_block && !include_native_gutenberg_block) { %>function register_assets(): void {
|
<% if (!include_acf_block && !include_native_gutenberg_block) { %>function register_assets(): void {
|
||||||
$version = get_plugin_data( __DIR__ . "/../../scytale-custom-blocks.php" )['Version']; // In Plugins
|
$version = get_plugin_data( __DIR__ . "/../../scytale-custom-blocks.php" )['Version']; // In Plugins
|
||||||
// $version = \Core\Global_Functions::get_current_version_number(); // In Theme
|
// $version = \Core\Global_Functions::get_current_version_number(); // In Theme
|
||||||
@@ -26,7 +23,6 @@ class <%= blockClassModel %>_Component extends \Core\Component {
|
|||||||
|
|
||||||
wp_enqueue_script( 'script-block-<%= blockFilename %>' );
|
wp_enqueue_script( 'script-block-<%= blockFilename %>' );
|
||||||
}<% } %>
|
}<% } %>
|
||||||
|
|
||||||
<% if (include_elementor_widget) { %>function register_custom_logic(): void {
|
<% if (include_elementor_widget) { %>function register_custom_logic(): void {
|
||||||
add_action( 'elementor/widgets/widgets_registered', [ $this, 'register_elementor_widget' ] );
|
add_action( 'elementor/widgets/widgets_registered', [ $this, 'register_elementor_widget' ] );
|
||||||
}
|
}
|
||||||
@@ -36,26 +32,21 @@ class <%= blockClassModel %>_Component extends \Core\Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
<% } %><% if (include_acf_block) { %> function register_acf_block() {
|
<% } %><% if (include_acf_block) { %> function register_acf_block() {
|
||||||
$this->register_block( __DIR__ . "/<%= blockFilename %>.block.json", [
|
$this->register_block( __DIR__ . "/<%= blockFilename %>.block.json", [
|
||||||
'enqueue_assets' => function () {
|
'style_assets' => [
|
||||||
wp_enqueue_style( 'block-<%= blockFilename %>', plugins_url( 'templates/styles/<%= blockFilename %>.min.css', __FILE__ ), ['assets-style'], get_blocks_version() );<% if (include_script) { %>
|
[
|
||||||
wp_enqueue_script( 'block-<%= blockFilename %>', plugins_url( 'templates/scripts/<%= blockFilename %>.min.js', __FILE__ ), ['assets-script'], get_blocks_version(), true );<% } %>
|
'name' => '<%= blockFilename %>',
|
||||||
},
|
'url' => plugins_url( 'templates/styles/<%= blockFilename %>.min.css', __FILE__ ),
|
||||||
'default' => Helpers\<%= blockClassModel %>_Defaults::default_args(),
|
]
|
||||||
'supports' => [
|
],
|
||||||
//'jsx' => true,
|
'script_assets' => [
|
||||||
'color' => [
|
[
|
||||||
'background' => true,
|
'name' => '<%= blockFilename %>',
|
||||||
'text' => true,
|
'url' => plugins_url( 'templates/scripts/<%= blockFilename %>.min.js', __FILE__ ),
|
||||||
],
|
]
|
||||||
'spacing' => [
|
]
|
||||||
'margin' => [ 'top', 'bottom' ],
|
] );
|
||||||
'padding' => [ 'top', 'bottom' ]
|
}
|
||||||
],
|
|
||||||
]
|
|
||||||
] );
|
|
||||||
}
|
|
||||||
|
|
||||||
<% } %><% if (include_native_gutenberg_block) { %> function register_native_gutenberg_block() {
|
<% } %><% if (include_native_gutenberg_block) { %> function register_native_gutenberg_block() {
|
||||||
register_block_type( __DIR__ . '/templates/gutenberg-block/block.json' );<% if (include_script) { %>
|
register_block_type( __DIR__ . '/templates/gutenberg-block/block.json' );<% if (include_script) { %>
|
||||||
|
|
||||||
@@ -70,7 +61,6 @@ class <%= blockClassModel %>_Component extends \Core\Component {
|
|||||||
);
|
);
|
||||||
} );<% } %>
|
} );<% } %>
|
||||||
}<% } %>
|
}<% } %>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<%= blockClassModel %>_Component::get_instance();
|
<%= blockClassModel %>_Component::get_instance();
|
||||||
|
|||||||
@@ -67,13 +67,13 @@ export async function buildWordPress(blockName, isBlock = false, isElementor = f
|
|||||||
json: await readJSONFile(path.join(projectPath, 'data', 'default.json'), "utf8"),
|
json: await readJSONFile(path.join(projectPath, 'data', 'default.json'), "utf8"),
|
||||||
});
|
});
|
||||||
|
|
||||||
await createFiles(Object.assign({}, data, {defaultData: phpDataObject}), [{
|
// await createFiles(Object.assign({}, data, {defaultData: phpDataObject}), [{
|
||||||
from: `templates/helpers/Template_Defaults.php`,
|
// from: `templates/helpers/Template_Defaults.php`,
|
||||||
to: `helpers/${data.blockClassModel}_Defaults.php`,
|
// to: `helpers/${data.blockClassModel}_Defaults.php`,
|
||||||
}], {
|
// }], {
|
||||||
pathDist: distPath,
|
// pathDist: distPath,
|
||||||
generatorsPath: path.join(__dirname),
|
// generatorsPath: path.join(__dirname),
|
||||||
});
|
// });
|
||||||
|
|
||||||
if (isElementor) {
|
if (isElementor) {
|
||||||
await createFiles(data, [{
|
await createFiles(data, [{
|
||||||
@@ -94,13 +94,13 @@ export async function buildWordPress(blockName, isBlock = false, isElementor = f
|
|||||||
generatorsPath: path.join(__dirname)
|
generatorsPath: path.join(__dirname)
|
||||||
});
|
});
|
||||||
|
|
||||||
await createFiles(data, [{
|
// await createFiles(data, [{
|
||||||
from: `templates/helpers/Template_API.php`,
|
// from: `templates/helpers/Template_API.php`,
|
||||||
to: `helpers/${data.blockClassModel}_API.php`,
|
// to: `helpers/${data.blockClassModel}_API.php`,
|
||||||
}], {
|
// }], {
|
||||||
pathDist: distPath,
|
// pathDist: distPath,
|
||||||
generatorsPath: path.join(__dirname)
|
// generatorsPath: path.join(__dirname)
|
||||||
});
|
// });
|
||||||
} else {
|
} else {
|
||||||
await createFiles(data, [{
|
await createFiles(data, [{
|
||||||
from: `templates/Template_Basic_Component.php`,
|
from: `templates/Template_Basic_Component.php`,
|
||||||
|
|||||||
Reference in New Issue
Block a user