Ejemplo n.º 1
0
    getTemplateForNode: function(node)
    {
        if (!node) {
            throw new Error("No node specified!");
        }

        var template = commonHelpers.getTemplateModuleForNode(node);
        if(!template)
            return false;
        try {
        	return template.getTemplate(this.helpers);
        } catch(e) {
        	console.warn("Error getting template", e);
        }
    },
Ejemplo n.º 2
0
exports.execute = function (params, appPath, options) {

    var projectdata = {
        name: "",
        description: "",
        version: "",
        author: ""
    };
    projectdata = options.projectInfo || projectdata;
    var templater = require('trinte-' + projectdata.engine);
    var readFile = fs.readFileSync;
    var scrPath = appPath + '/app';
    var cvwPath = scrPath + '/views';
    var nvwPath = scrPath + '/views';
    var fileCheck;

    if (!options.model || options.model === "") {
        console.log("You must specifiy a model name to generate the views against!");
        return;
    }

    var modelName = options.model.singularize();
    var namespace = options.namespace ? '/' + options.namespace : null;

    if (namespace) {
        nvwPath += namespace;

        if (!fs.existsSync(nvwPath)) {
            wrench.mkdirSyncRecursive(nvwPath);
        }
        if (!fs.existsSync(nvwPath + '/_layout.' + projectdata.engine)) {
            var coreView = templater.getTemplatesDir() + '/';
            var vloc = {
                title: '',
                pack: projectdata.name,
                description: projectdata.description,
                version: projectdata.version,
                author: projectdata.author,
                open: "<?",
                close: "?>"
            };
            coreView += /admin|backend/i.test(namespace) ? 'backend' : 'frontend';

            fs.writeFileSync(nvwPath + '/_layout.' + projectdata.engine, ejs.render(readFile(coreView + '/_layout.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            fs.writeFileSync(nvwPath + '/login.' + projectdata.engine, ejs.render(readFile(coreView + '/login.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            fs.writeFileSync(nvwPath + '/_messages.' + projectdata.engine, ejs.render(readFile(coreView + '/_messages.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            fs.writeFileSync(nvwPath + '/_footer.' + projectdata.engine, ejs.render(readFile(coreView + '/_footer.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            fs.writeFileSync(nvwPath + '/_header.' + projectdata.engine, ejs.render(readFile(coreView + '/_header.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            wrench.copyDirSyncRecursive(templater.getTemplatesDir() + '/errors', nvwPath + '/errors');
            fs.writeFileSync(nvwPath + '/_layout.' + projectdata.engine, ejs.render(readFile(nvwPath + '/_layout.' + projectdata.engine, 'utf8'), vloc, {delimiter: '?'}), 'utf8');
            try {
                wrench.rmdirSyncRecursive(nvwPath + '/app');
            } catch (err) {

            }
        }
    }

    /**
     * Create the model based on a singular (e.g. people becomes person, users becomes user)
     */

    if (modelName !== options.model) {
        console.log("Using model name as singular not plural: " + modelName);
    }

    // Capitalize
    modelName = modelName.capitalize();
    var modelFile = scrPath + "/models/" + modelName + '.js';
    var controllerName = modelName.pluralize();
    var viewFolder = nvwPath + "/" + controllerName.toLowerCase();
    var side = /admin|backend/i.test(namespace) ? 'backend' : 'frontend';
    var viewIndexTemplate = templater.getTemplate('index', side);
    var viewEditTemplate = templater.getTemplate('edit', side);
    var viewShowTemplate = templater.getTemplate('show', side);
    var viewFormTemplate = templater.getTemplate('form', side);
    var viewNewTemplate = templater.getTemplate('new', side);

    // Check if the model exists
    fileCheck = fs.existsSync(modelFile);
    if (!fileCheck) {
        console.log("The views generator report!");
        console.log("The model you have specified doesn't exist!");
        console.log("You need to create the model first.");
        console.log("e.g. -g model " + modelName);
        return;
    }

    // Check if the view exists
    fileCheck = fs.existsSync(viewFolder);
    if (fileCheck) {
        if (params[0] !== "force") {
            console.log("The views folder already exists for this model!");
            console.log("Add an additional paramater of 'force' to over write the views.");
            console.log("e.g. -g view " + modelName + " force");
            return;
        }
    } else {
        wrench.mkdirSyncRecursive(viewFolder, 755);
    }

    // Read the template
    var tmpIndex = readFile(viewIndexTemplate, 'utf8');
    var tmpForm = readFile(viewFormTemplate, 'utf8');
    var tmpEdit = readFile(viewEditTemplate, 'utf8');
    var tmpShow = readFile(viewShowTemplate, 'utf8');
    var tmpNew = readFile(viewNewTemplate, 'utf8');

    var fields = [];
    params.forEach(function (param) {
        var wf = param.split(':');
        if (wf[0] !== 'force' && wf[0] !== modelName) {
            fields.push({
                param_name: wf[0].capitalize(),
                param_val: wf[0],
                param_type: (wf[1] || 'string').toString().toLowerCase()
            });
        }
    });

    if (!fields.length) {
        fields.push({
            param_name: "Name",
            param_val: "name",
            param_type: "string"
        });
    }

    var locals = {
        fields: fields,
        modelName: modelName,
        controllerName: controllerName,
        namespace: options.namespace
    };

    // Render the views
    var retIndex = ejs.render(tmpIndex, locals, {delimiter: '?'});
    var retEdit = ejs.render(tmpEdit, locals, {delimiter: '?'});
    var retNew = ejs.render(tmpNew, locals, {delimiter: '?'});
    var retShow = ejs.render(tmpShow, locals, {delimiter: '?'});
    var retForm = ejs.render(tmpForm, locals, {delimiter: '?'});

    // Write the file
    fs.writeFileSync(viewFolder + "/index.ejs", retIndex, 'utf8');
    fs.writeFileSync(viewFolder + "/edit.ejs", retEdit, 'utf8');
    fs.writeFileSync(viewFolder + "/show.ejs", retShow, 'utf8');
    fs.writeFileSync(viewFolder + "/form.ejs", retForm, 'utf8');
    fs.writeFileSync(viewFolder + "/new.ejs", retNew, 'utf8');

    if (options.anyside && options.namespace) {

        // view filenames
        var AnyviewIndexTemplate = __dirname + '/templates/create-view.template.client.index.ejs';
        var AnyviewShowTemplate = __dirname + '/templates/create-view.template.client.show.ejs';

        // Read the template
        var AnytmpIndex = readFile(AnyviewIndexTemplate, 'utf8');
        var AnytmpShow = readFile(AnyviewShowTemplate, 'utf8');

        // Render the views
        var AnyretIndex = ejs.render(AnytmpIndex, locals, {delimiter: '?'});
        var AnyretShow = ejs.render(AnytmpShow, locals, {delimiter: '?'});

        // Write the file
        fs.writeFileSync(cvwPath + "/" + controllerName.toLowerCase() + "/index.ejs", AnyretIndex, 'utf8');
        fs.writeFileSync(cvwPath + "/" + controllerName.toLowerCase() + "/show.ejs", AnyretShow, 'utf8');

        console.log('Views ' + modelName + ' created in app/views/' + modelName.toLowerCase());
    }
    if (!namespace) {
        namespace = "";
    }
    console.log('Views ' + modelName + ' created in app/views' + namespace + '/' + modelName.toLowerCase());

};