acf-build #6

Merged
roman merged 4 commits from acf-build into master 3 years ago
  1. 4
      .editorconfig
  2. 5
      layouts/scripts/frame/frame.js
  3. 4
      package-lock.json
  4. 2
      package.json
  5. 182
      platforms/php/build.php
  6. 52
      platforms/wordpress/templates/Template_Component.php
  7. 28
      platforms/wordpress/wordpress-adapter.js

4
.editorconfig

@ -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

5
layouts/scripts/frame/frame.js

@ -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;

4
package-lock.json

@ -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",

2
package.json

@ -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",

182
platforms/php/build.php

@ -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 );
} }

52
platforms/wordpress/templates/Template_Component.php

@ -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();

28
platforms/wordpress/wordpress-adapter.js

@ -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`,

Loading…
Cancel
Save