Browse Source

Added WordPress adaptation.

pull/1/head
Roman Axelrod 3 years ago
parent
commit
2917cb7332
  1. 43
      build.cjs
  2. 6
      generators/block/index.cjs
  3. 5
      generators/block/templates/package.json
  4. 4
      package.json
  5. 103
      platforms/php/build.php
  6. 11
      platforms/php/composer.json
  7. 80
      platforms/php/composer.lock

43
build.cjs

@ -0,0 +1,43 @@
#!/usr/bin/env node
const {exec} = require('child_process');
const config = require('config');
const Generator = require("yeoman-generator");
const isDev = process.env.NODE_ENV === 'development'; // Check README file in case you get "missing files" error.
const modulePath = isDev ? '' : 'node_modules/create-block-dev-tool/';
const blockName = config.has('blockName') ? config.get('blockName') : 'development';
module.exports = class extends Generator {
async prompting() {
this.data = await this.prompt([
{
type: "list",
name: "platfrom",
message: "Choose Platform",
choices: ['WordPress', 'Hubspot', 'JavaScript', 'PHP'],
default: 'WordPress'
}
])
}
writing() {
new Promise((resolve => {
if (['WordPress', 'PHP'].includes(this.data.platfrom)) {
exec(`cd adapters/php && composer install && php build.php '${blockName}' '${modulePath}'`, function (error, stdout, stderr) {
console.log(stdout);
resolve();
});
} else if (this.data.platform === 'Hubspot') {
console.log('Coming soon...');
resolve();
} else {
resolve();
}
}))
.then(() => {
console.log('--------------------\nDone!');
});
}
}

6
generators/block/index.cjs

@ -34,6 +34,12 @@ module.exports = class extends Generator {
message: "Provide declaration of 1rem:",
default: 16
},
{
type: 'input',
name: 'devToolSource',
message: 'DevTool Version/Source (master)',
default: 'git+https://roman-axe-web@bitbucket.org/axeweb/create-block-dev-tool.git#master'
}
]);
}

5
generators/block/templates/package.json

@ -2,9 +2,10 @@
"name": "<%= blockFilename %>",
"version": "1.0.0",
"scripts": {
"start": "component-dev"
"start": "component-dev",
"build": "component-build"
},
"devDependencies": {
"create-block-dev-tool": "git+https://roman-axe-web@bitbucket.org/axeweb/create-block-dev-tool.git#master"
"create-block-dev-tool": "<%= devToolSource %>"
}
}

4
package.json

@ -6,6 +6,7 @@
"dev": "NODE_ENV=development node server.js",
"generate-block": "yo ./generators/block/index.cjs",
"build": "rollup --config rollup.config.js",
"build-platform": "NODE_ENV=development yo ./build.cjs",
"dev-js": "rollup --config rollup.config.js --watch"
},
"license": "ISC",
@ -48,6 +49,7 @@
"styled-components": "^5.3.5"
},
"bin": {
"component-dev": "./server.js"
"component-dev": "./server.js",
"component-build": "yo ./build.cjs"
}
}

103
platforms/php/build.php

@ -0,0 +1,103 @@
<?php
// Composer - Autoloader
require_once __DIR__ . '/vendor/autoload.php';
use JetBrains\PhpStorm\NoReturn;
use LightnCandy\Flags;
use LightnCandy\LightnCandy;
trait Custom_Handlebars {
public array $custom_handlebars = [];
public function register_default_handlebar_helpers() {
$this->add_handlebar( 'esc_url', function ( $context ) {
if ( function_exists( 'esc_url' ) ) {
return esc_url( $context );
}
return $context;
} );
$this->add_handlebar( 'esc_attr', function ( $context ) {
if ( function_exists( 'esc_attr' ) ) {
return esc_attr( $context );
}
return $context;
} );
$this->add_handlebar( 'esc_html', function ( $context ) {
if ( function_exists( 'esc_html' ) ) {
return esc_html( $context );
}
return $context;
} );
$this->add_handlebar( 'wp_kses_post', function ( $context ) {
if ( function_exists( 'wp_kses_post' ) ) {
return wp_kses_post( $context );
}
return $context;
} );
}
public function add_handlebar( $key, $func ) {
$this->custom_handlebars[ $key ] = $func;
}
}
class Component_Builder {
use Custom_Handlebars;
public string $component_name = '';
private string $module_path = '';
function __construct( $component_name, $module_path ) {
$this->module_path = $module_path;
$this->component_name = $component_name;
$this->register_default_handlebar_helpers();
}
#[NoReturn]
function build() {
$file_name = $this->get_handlebars_template( __DIR__ . '/' . $this->module_path . '/../../src/' . $this->component_name . '.template.hbs' );
echo "Generated '$file_name'.";
}
private function get_handlebars_template( $path = '' ): string {
$template = file_get_contents( $path );
$phpStr = LightnCandy::compile( $template,
[
'flags' => Flags::FLAG_NOESCAPE | Flags::FLAG_PARENT | Flags::FLAG_SPVARS | Flags::FLAG_ELSE | Flags::FLAG_JSLENGTH | Flags::FLAG_JSTRUE,
'helpers' => $this->custom_handlebars ?? [],
]
);
/**
* NOTE:
* 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.
*/
return self::create_cache_file( $path, $phpStr );
}
private static function create_cache_file( string $file_path, string $content ): string {
$file_path_parts = explode( ".", $file_path );
array_pop( $file_path_parts ); // remove ".hbs" format.
$file_path_parts[] = 'php';
$file_path = join( '.', $file_path_parts );
$t = file_put_contents( $file_path, '<?php ' . $content . ' ?>' );
if ( $t === false ) {
die( "Error: Can't generate HBS template to PHP file. Cache folder is not accessible." );
}
return $file_path;
}
}
( new Component_Builder( $argv[1], $argv[2] ) )->build();

11
platforms/php/composer.json

@ -0,0 +1,11 @@
{
"config": {
"platform": {
"php": "8.0.0"
}
},
"require": {
"php": ">=8.0",
"zordius/lightncandy": "^1.2.6"
}
}

80
platforms/php/composer.lock

@ -0,0 +1,80 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "1d9b4e7a02be366b48383c185193727f",
"packages": [
{
"name": "zordius/lightncandy",
"version": "v1.2.6",
"source": {
"type": "git",
"url": "https://github.com/zordius/lightncandy.git",
"reference": "b451f73e8b5c73e62e365997ba3c993a0376b72a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zordius/lightncandy/zipball/b451f73e8b5c73e62e365997ba3c993a0376b72a",
"reference": "b451f73e8b5c73e62e365997ba3c993a0376b72a",
"shasum": ""
},
"require": {
"php": ">=7.1.0"
},
"require-dev": {
"phpunit/phpunit": ">=7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.5-dev"
}
},
"autoload": {
"psr-4": {
"LightnCandy\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Zordius Chen",
"email": "zordius@gmail.com"
}
],
"description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).",
"homepage": "https://github.com/zordius/lightncandy",
"keywords": [
"handlebars",
"logicless",
"mustache",
"php",
"template"
],
"support": {
"issues": "https://github.com/zordius/lightncandy/issues",
"source": "https://github.com/zordius/lightncandy/tree/v1.2.6"
},
"time": "2021-07-11T04:52:41+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=8.0"
},
"platform-dev": [],
"platform-overrides": {
"php": "8.0.0"
},
"plugin-api-version": "2.1.0"
}
Loading…
Cancel
Save