Addid basic templating to start building UI from here

This commit is contained in:
Richard Ramos 2018-05-10 11:25:31 -04:00
parent fde198dece
commit 3aac1e4e2f
5 changed files with 54 additions and 29 deletions

View File

@ -269,13 +269,13 @@ class Embark {
async.waterfall([ async.waterfall([
function generateUI(callback){ function generateUI(callback){
engine.events.on('outputDone', function () { engine.events.on('contractsDeployed', function () {
let scaffold = new scaffoldPlugin(engine, options); let scaffold = new scaffoldPlugin(engine, options);
let result = scaffold.generate(options.contract); let result = scaffold.generate(options.contract);
engine.logger.info(result); engine.logger.info(result);
callback(); callback();
}); });
self.build(options, engine, true); self.build(options, engine, false);
} }
], function (err, _result) { ], function (err, _result) {
if (err) { if (err) {

View File

@ -1,14 +1,36 @@
const Handlebars = require('handlebars');
const fs = require('../../core/fs');
const utils = require('../../utils/utils');
class ScaffoldingReact { class ScaffoldingReact {
constructor(embark, options){ constructor(embark, options){
this.embark = embark; this.embark = embark;
this.options = options; this.options = options;
} }
build(contract){ build(contract){
const filename = contract.className.toLowerCase() + '.html';
const filePath = './app/' + filename;
if (fs.existsSync(filePath)){
throw new Error("file '" + filePath + "' already exists");
}
const templatePath = fs.embarkPath('lib/modules/scaffolding-react/templates/index.tpl');
const source = fs.readFileSync(templatePath).toString();
const template = Handlebars.compile(source);
let data = {
'title': contract.className
};
// Write template
const result = template(data);
fs.writeFileSync(filePath, result);
return "File '" + filePath + "' created successfully";
} }
} }
module.exports = ScaffoldingReact; module.exports = ScaffoldingReact;

View File

@ -0,0 +1,12 @@
<!doctype html>
<html lang="en" dir="ltr">
<head>
<title>{{title}}</title>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
</body>
</html>

View File

@ -2,7 +2,7 @@ const fs = require('fs');
const commandName = "generate-ui"; const commandName = "generate-ui";
const formatReplyMsg = (message) => commandName + ": " + message; const errorMessage = (message) => new Error(commandName + ": " + message);
class Scaffolding { class Scaffolding {
constructor(embark, options){ constructor(embark, options){
@ -12,15 +12,6 @@ class Scaffolding {
this.frameworkPlugin = null; this.frameworkPlugin = null;
} }
createDirectories(contractName){
const dir = './app/' + contractName;
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
} else {
throw formatReplyMsg("directory ./app/" + contractName + " already exists");
}
}
isContract(contractName){ isContract(contractName){
return this.embark.config.contractsConfig.contracts[contractName] !== undefined; return this.embark.config.contractsConfig.contracts[contractName] !== undefined;
} }
@ -34,26 +25,25 @@ class Scaffolding {
} else { } else {
let plugins = this.embark.plugins.getPluginsFor(this.framework); let plugins = this.embark.plugins.getPluginsFor(this.framework);
if(plugins.length !== 1){ if(plugins.length !== 1){
return formatReplyMsg("Could not find plugin for framework '" + this.framework + "'"); throw errorMessage("Could not find plugin for framework '" + this.framework + "'");
} }
frameworkPlugin = plugins[0].pluginModule; frameworkPlugin = plugins[0].pluginModule;
} }
try {
if(!this.isContract(contractName)){ if(!this.isContract(contractName)){
return formatReplyMsg("contract '" + contractName + "' does not exist"); return errorMessage("contract '" + contractName + "' does not exist");
}
const contract = this.embark.config.contractsConfig.contracts[contractName];
this.createDirectories(contractName);
let uiFramework = new frameworkPlugin(this.embark, this.options);
uiFramework.build(contract);
} catch(err){
return err;
} }
return formatReplyMsg("done!"); const contract = this.embark.config.contractsConfig.contracts[contractName];
try {
let uiFramework = new frameworkPlugin(this.embark, this.options);
let result = uiFramework.build(contract);
this.embark.logger.info(result);
} catch(err){
throw errorMessage(err);
}
} }
} }

View File

@ -24,11 +24,11 @@
"async": "^2.0.1", "async": "^2.0.1",
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-loader": "^7.1.2", "babel-loader": "^7.1.2",
"babel-plugin-webpack-aliases": "^1.1.3",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"babel-preset-es2016": "^6.24.1", "babel-preset-es2016": "^6.24.1",
"babel-preset-es2017": "6.24.1", "babel-preset-es2017": "6.24.1",
"babel-preset-react": "^6.24.1", "babel-preset-react": "^6.24.1",
"babel-plugin-webpack-aliases": "^1.1.3",
"blessed": "^0.1.81", "blessed": "^0.1.81",
"chokidar": "^1.6.0", "chokidar": "^1.6.0",
"colors": "^1.1.2", "colors": "^1.1.2",
@ -41,6 +41,7 @@
"follow-redirects": "^1.2.4", "follow-redirects": "^1.2.4",
"fs-extra": "^2.0.0", "fs-extra": "^2.0.0",
"globule": "^1.1.0", "globule": "^1.1.0",
"handlebars": "^4.0.11",
"http-shutdown": "^1.2.0", "http-shutdown": "^1.2.0",
"ipfs-api": "17.2.4", "ipfs-api": "17.2.4",
"merge": "^1.2.0", "merge": "^1.2.0",