8 changed files with 431 additions and 936 deletions
@ -0,0 +1,94 @@ |
|||
import path from 'path'; |
|||
import config from 'config'; |
|||
import {fileURLToPath} from 'url'; |
|||
import memFs from 'mem-fs'; |
|||
import editor from 'mem-fs-editor'; |
|||
|
|||
const __filename = fileURLToPath(import.meta.url); |
|||
const __dirname = path.dirname(__filename); |
|||
|
|||
export function getConfigs() { |
|||
const isDev = process.env.NODE_ENV === 'development'; // Check README file in case you get "missing files" error.
|
|||
const developmentBlockName = process.env.BLOCK_NAME; |
|||
|
|||
return { |
|||
isDev, |
|||
developmentBlockName, |
|||
modulesPath: isDev ? '' : 'node_modules/block-dev-tool', |
|||
projectPath: isDev ? path.join('blocks', developmentBlockName) : '', |
|||
}; |
|||
} |
|||
|
|||
import fsExtra from "fs-extra"; |
|||
|
|||
export async function readJSONFile(jsonFile) { |
|||
let data = {}; |
|||
|
|||
try { |
|||
data = await fsExtra.readJson(jsonFile); |
|||
} catch (e) { |
|||
return { |
|||
error: true, errorMessage: getErrorHtml("JSON Syntax error. Please make sure the dataFile is valid.", e), |
|||
}; |
|||
} |
|||
|
|||
return data; |
|||
} |
|||
|
|||
function getErrorHtml(message = '', errorMessage = '') { |
|||
return `<div style="padding: 10px 15px; font-family: Arial, sans-serif">
|
|||
<p>${message}</p> |
|||
<pre style="padding: 10px 15px; background-color: #ffd0d0; border: 1px solid red;">${errorMessage}</pre> |
|||
</div>`; |
|||
} |
|||
|
|||
export async function getBlockConfigs(jsonFileName = 'default', |
|||
{includeConfigs, projectPath, modulesPath, dataFiles} = {}) { |
|||
let data = await readJSONFile(path.join(projectPath, 'data', `${jsonFileName}.json`)); |
|||
if (data.error) { |
|||
return data; |
|||
} |
|||
|
|||
if (includeConfigs) { |
|||
Object.assign(data, { |
|||
config: Object.assign(JSON.parse(JSON.stringify(config)), // The entire config object.
|
|||
{ |
|||
projectDir: modulesPath, activeDataFile: jsonFileName, dataFiles: dataFiles.map((name) => { |
|||
return { |
|||
name, active: jsonFileName === name, |
|||
}; |
|||
}), remToPx: config.has('remToPx') ? config.get('remToPx') : 16, |
|||
}) |
|||
}); |
|||
} |
|||
|
|||
return data; |
|||
} |
|||
|
|||
export function getBlockName(name = '') { |
|||
if (name.startsWith('@')) { |
|||
name = name.substring(1); |
|||
} |
|||
|
|||
const arr = name.split('/'); |
|||
|
|||
return { |
|||
project: arr[0], |
|||
name: arr[1], |
|||
}; |
|||
} |
|||
|
|||
export async function createFiles(data, files = [], {pathDist, generatorsPath}) { |
|||
generatorsPath = generatorsPath ?? path.join(__dirname, 'generators/block/templates'); |
|||
|
|||
const store = memFs.create(); |
|||
const filesystem = editor.create(store); |
|||
for (let file of files) { |
|||
const from = typeof file !== 'string' ? `${generatorsPath}/${file.from}` : `${generatorsPath}/${file}`; |
|||
const to = typeof file !== 'string' ? `${pathDist}/${file.to}` : `${pathDist}/${file}`; |
|||
|
|||
await filesystem.copyTplAsync(from, to, data); |
|||
} |
|||
|
|||
return filesystem.commit(); // Promise
|
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,68 @@ |
|||
<?php |
|||
|
|||
namespace AXEWEB_Blocks\Blocks\<%= ownerClass %>\<%= blockClassModel %>; |
|||
|
|||
class <%= blockClassModel %>_Component extends \Core\Component { |
|||
|
|||
public function get_content( $args = [] ): string { |
|||
$args = array_merge( Helpers\<%= blockClassModel %>_Defaults::default_args(), $args ); |
|||
$args = Helpers\<%= blockClassModel %>_API::prepare_args( $args ); |
|||
|
|||
<% if (templateFormat === 'hbs') { %>return $this->get_component_template( __DIR__ . '/templates/<%= blockFilename %>.template.hbs', $args );<% } %> |
|||
<% if (templateFormat === 'php') { %> |
|||
$output = ( include( __DIR__ . '/templates/<%= blockFilename %>.template.php' ) )( array_merge( [], $args ), self::class ); |
|||
echo apply_filters( 'the_content', wpautop( $output ) ); |
|||
<% } %> |
|||
} |
|||
|
|||
<% if (!include_acf_block && !include_native_gutenberg_block) { %> |
|||
public function register_assets() { |
|||
$this->add_style( __DIR__ . '/templates/styles/<%= blockFilename %>.min.css' ); |
|||
<% if (include_script) { %>$this->add_script( __DIR__ . '/templates/scripts/<%= blockFilename %>.js' );<% } %> |
|||
} |
|||
|
|||
<% } %><% if (include_elementor_widget) { %> function register_custom_logic(): void { |
|||
add_action( 'elementor/widgets/widgets_registered', [ $this, 'register_elementor_widget' ] ); |
|||
} |
|||
|
|||
<% } %><% if (include_elementor_widget) { %> function register_elementor_widget( $widgets_manager ) { |
|||
$widgets_manager->register_widget_type( new Helpers\<%= blockClassModel %>_Elementor_Widget() ); |
|||
} |
|||
|
|||
<% } %><% if (include_acf_block) { %> function register_acf_block() { |
|||
$this->register_block( __DIR__ . "/<%= blockFilename %>.block.json", [ |
|||
'enqueue_assets' => function () { |
|||
wp_enqueue_style( '<%= blockFilename %>', \Core\Global_Functions::get_file_url( __DIR__ . '/templates/styles/<%= blockFilename %>.min.css', true ), [], get_blocks_version() );<% if (include_script) { %> |
|||
wp_enqueue_script( '<%= blockFilename %>', \Core\Global_Functions::get_file_url( __DIR__ . '/templates/scripts/<%= blockFilename %>.js', true ), ['assets-script'], get_blocks_version() );<% } %> |
|||
}, |
|||
'default' => Helpers\<%= blockClassModel %>_Defaults::default_args(), |
|||
'supports' => [ |
|||
//'jsx' => true, |
|||
'color' => [ |
|||
'background' => true, |
|||
'text' => true, |
|||
], |
|||
'spacing' => [ |
|||
'margin' => [ 'top', 'bottom' ], |
|||
'padding' => [ 'top', 'bottom' ] |
|||
], |
|||
] |
|||
] ); |
|||
} |
|||
|
|||
<% } %><% if (include_native_gutenberg_block) { %> function register_native_gutenberg_block() { |
|||
register_block_type( __DIR__ . '/templates/gutenberg-block/block.json' );<% if (include_script) { %> |
|||
|
|||
add_action( 'wp_enqueue_scripts', function () { |
|||
$asset_file_front = include( plugin_dir_path( __FILE__ ) . '/templates/gutenberg-block/build/front.asset.php' ); |
|||
wp_enqueue_script( |
|||
'gutenberg-<%= blockFilename %>-scripts-front', |
|||
plugins_url( 'templates/gutenberg-block/build/front.js', __FILE__ ), |
|||
$asset_file_front['dependencies'], |
|||
$asset_file_front['version'], |
|||
true |
|||
); |
|||
} );<% } %> |
|||
}<% } %> |
|||
|
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
import path from "path"; |
|||
import {mkdir, copyFile} from "fs/promises"; |
|||
import {createFiles, getBlockName, getConfigs, readJSONFile} from "../../helpers.js"; |
|||
import {capitalize} from "lodash-es"; |
|||
import {fileURLToPath} from 'url'; |
|||
|
|||
const __filename = fileURLToPath(import.meta.url); |
|||
const __dirname = path.dirname(__filename); |
|||
|
|||
const {projectPath, modulesPath} = getConfigs(); |
|||
|
|||
export async function buildWordPress(blockName) { |
|||
const distPath = path.join(projectPath, 'exports', 'wordpress'); |
|||
await mkdir(distPath, {recursive: true}) |
|||
await copyFile(`${projectPath}/block.json`, `${distPath}/block.json`) |
|||
|
|||
let data = await readJSONFile(path.join(projectPath, `block.json`)); |
|||
|
|||
Object.assign(data, getBlockName(data.name)); |
|||
|
|||
// let data = await readJSONFile(path.join(projectPath, `block.json`));
|
|||
const title = capitalize(data.name); |
|||
const owner = capitalize(data.project); |
|||
|
|||
data = Object.assign(data, { |
|||
title, |
|||
blockClassModel: title.replace(/ /ig, '_'), |
|||
blockFilename: title.toLowerCase().replace(/ /ig, '-'), |
|||
blockClassName: title.toLowerCase().replace(/ /ig, '_'), |
|||
owner, |
|||
ownerClass: owner.replace(/ /ig, '_'), |
|||
ownerFilename: owner.toLowerCase().replace(/ /ig, '-'), |
|||
templateFormat: 'php', |
|||
include_acf_block: false, |
|||
include_native_gutenberg_block: false, |
|||
include_script: true, |
|||
include_elementor_widget: false, |
|||
}); |
|||
|
|||
await createFiles(data, [{ |
|||
to: `${data.blockClassModel}_Component.php`, |
|||
from: `templates/Template_Component.php` |
|||
}], { |
|||
pathDist: distPath, |
|||
generatorsPath: path.join(__dirname) |
|||
}); |
|||
} |
|||
Loading…
Reference in new issue