Addid basic templating to start building UI from here

This commit is contained in:
Richard Ramos 2018-05-10 11:25:31 -04:00 committed by Pascal Precht
parent 0eaafb77f1
commit d1dd890407
No known key found for this signature in database
GPG Key ID: 0EE28D8D6FD85D7D
4 changed files with 52 additions and 28 deletions

View File

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

View File

@ -1,4 +1,8 @@
const Handlebars = require('handlebars');
const fs = require('../../core/fs');
const utils = require('../../utils/utils');
class ScaffoldingReact {
constructor(embark, options){
this.embark = embark;
@ -6,9 +10,27 @@ class ScaffoldingReact {
}
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;

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 formatReplyMsg = (message) => commandName + ": " + message;
const errorMessage = (message) => new Error(commandName + ": " + message);
class Scaffolding {
constructor(embark, options){
@ -12,15 +12,6 @@ class Scaffolding {
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){
return this.embark.config.contractsConfig.contracts[contractName] !== undefined;
}
@ -34,26 +25,25 @@ class Scaffolding {
} else {
let plugins = this.embark.plugins.getPluginsFor(this.framework);
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;
}
try {
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);
try {
let uiFramework = new frameworkPlugin(this.embark, this.options);
uiFramework.build(contract);
let result = uiFramework.build(contract);
this.embark.logger.info(result);
} catch(err){
return err;
throw errorMessage(err);
}
return formatReplyMsg("done!");
}
}