Example #1
0
    fs.readFile(filePath, function(err, data) {
      if (err) throw err;
      
      // set our template id to the filename
      var templateId = path.basename(filePath, '.dust'),

      // and mirror our template path
          output_path = cwd + config.pre_dir + filePath.substring(input_path.length);
      output_path = path.normalize(output_path.substring(0, output_path.lastIndexOf('.')) + '.js');

      // compile and save
      var compiled = dust.compile(String(data), templateId);
      
      var dirname = path.dirname(output_path);
      if (!fs.existsSync(dirname)) {
        fs.mkdirSync(dirname);
      }

      fs.writeFile(output_path, compiled, function(err) {
        if (err) throw err;
        console.log('Saved ' + output_path);
      });
    });
    requirejs(['tmp/test/fixtures/scripts/render_dust/view.js'], function(view){

      var templateData = {
        data: ['item1', 'item2', 'item3']
      };

      var compiled = dust.compile(view, "view");
      dust.loadSource(compiled);

      dust.render("view", templateData, function(err, out){

        if(err){
          throw new Error(err);
        }

        var expected = grunt.file.read('test/expected/engine_expected.html');

        test.equal(out, expected, 'should render a template file with Dust');

        test.done();

      });      

    });    
Example #3
0
Executor.prototype.handleNamespacePage = function(request, response) {
  var tests = this.testgroup.tests,
  testId = request.params.testid,
  test  = tests[testId],
  harnessTemplate,
  harnessTemplateId,
  templateData;

  // Check if testid is valid and in the currently loaded testgroup
  if (!test) {
    return response.status(404).json(
      { error: 'TestId ' + testId + ' does not exist' }
    );
  }

  // Set template data, and render the Dust template
  templateData = {
    postTestResultsUrl: this.urlNamespace + '/results/' + testId,
    testSandboxUrl: this.urlNamespace + '/sandbox/' + testId,
    testId: testId
  };

  harnessTemplate = this.config.loadTemplate('default');
  harnessTemplateId = 'harness-' + testId;

  dust.loadSource(dust.compile(harnessTemplate, harnessTemplateId));

  dust.render(harnessTemplateId, templateData, function(err, out) {
    if (err) {
      response.status(500).json({
        error: 'Cannot render harness for test ' + testId
      });
    }
    response.send(out);
  });
};
Example #4
0
clustor(function () {
    var fs = require('fs');
    var http = require('http');
    var express = require('express');
    var favicon = require('serve-favicon');
    var bodyParser = require('body-parser');
    var builder = require('component-middleware');
    var agent = require('hub-agent');
    var proxy = require('proxy');
    var procevent = require('procevent')(process);
    var utils = require('utils');
    var dust = require('dustjs-linkedin');
    var build = require('build');

    var prod = utils.prod();

    var index = fs.readFileSync(__dirname + '/public/index.html', 'utf-8');

    dust.loadSource(dust.compile(index, 'index'));

    var app = express();

    app.use(favicon(__dirname + '/public/images/favicon.ico'));

    app.use('/public', express.static(__dirname + '/public'));

    app.use(proxy);

    if (prod) {
        log.info('building components during startup');
        build();
    } else {
        log.info('hot component building with express middleware');
        app.use(builder({
            path: '/public/build'
        }));
    }

    app.use(bodyParser.urlencoded({
        extended: true
    }));
    //index page with embedded oauth tokens
    app.all('/auth/oauth', function (req, res) {
        var context = {
            code: req.body.code || req.query.code,
            error: req.body.error || req.query.error,
            errorCode: req.body.error_code || req.query.error_code
        };
        //TODO: check caching headers
        dust.render('index', context, function (err, index) {
            if (err) {
                log.error(err);
                res.status(500).send({
                    error: 'error rendering requested page'
                });
                return;
            }
            res.set('Content-Type', 'text/html').status(200).send(index);
        });
    });
    //index page
    app.all('*', function (req, res) {
        //TODO: check caching headers
        res.set('Content-Type', 'text/html').status(200).send(index);
    });

    var server = http.createServer(app);
    server.listen(port);

    agent('/drones', function (err, io) {
        proxy.listen(self, io);
        procevent.emit('started');
    });

}, function (err, address) {
Example #5
0
function loadDustTemplate(name) {
    var template = fs.readFileSync("./templates/" + name + ".dust", "UTF8").toString(), compiledTemplate = DustJS.compile(template, name);

    DustJS.loadSource(compiledTemplate);
}
 compile = function(template, name){
   var compiled = dust.compile(template, name);
   dust.loadSource(compiled);
 };
Example #7
0
var Readable = require('stream').Readable
  , fs = require('fs')
  , util = require('util')
  , dust = require('dustjs-linkedin')
  , template = dust.compile(  fs.readFileSync('./files/vast.xml.dust').toString()
                            , "vast")
;
dust.loadSource(template);

util.inherits(Templater, Readable);

var iid = function() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
      return v.toString(16);
  });
}

var random = iid;

function Templater(){
  var self = this;
  Readable.call(self);

  var channelData = { 
      iid: iid()
    , random: random // Dust will execute this lambda!
    , anticache: Date.now()
    , analyticsUrl: 'http://staging.analytics.domain.com'
    , clickTag: 'http://click-tracking.com'
    , companionAd: 'bose/v4t/assets/Q3FY13_SL2_Launch_Static_300x250.jpg'
Example #8
0
module.exports = function(content, file, conf){
	var name = conf.basePath ? conf.basePath + file.filename : file.subpathNoExt;
    return "define('" + file.getId() + "', function (require, exports, module) {\n\t" + dust.compile(content.toString(), name) + "\n});";
};
function renderDust(source, locals, cb) {
  dust.loadSource(dust.compile(source, 'tmp'));
  dust.render('tmp', locals, cb);
}
 ], function(name) {
   var file = path.join(__dirname, name + '.dust');
   var source = self.grunt.file.read(file);
   dust.loadSource(dust.compile(source, name));
 });
Example #11
0
var esprima = require("esprima");
var junify = require("junify");
var moduleExportsPattern = require("./patterns/module-exports");
var exportsPattern = require("./patterns/exports");
var moduleExportsAssignPattern = require("./patterns/module-exports-assign");
var prototypePattern = require("./patterns/prototype");
var dust = require("dustjs-linkedin");
var fs = require("fs");
var beautify = require("js-beautify");
var glob = require("glob");

var basetmpl = dust.compile(fs.readFileSync(__dirname + "/templates/base.dust", "utf8"), "base");
var classtmpl = dust.compile(fs.readFileSync(__dirname + "/templates/class.dust", "utf8"), "class");
var statictmpl = dust.compile(fs.readFileSync(__dirname + "/templates/static.dust", "utf8"), "static");
var funcDecPattern  = require("./patterns/identifiers/declaration/function.js");
var staticSinglePattern = require("./patterns/identifiers/single-static.js");
var objectPattern = require("./patterns/identifiers/m-e-object.js")

dust.loadSource(basetmpl);
dust.loadSource(classtmpl);
dust.loadSource(statictmpl);

var classIdFiles = glob.sync(__dirname + "/patterns/identifiers/class/**/*.js");
var classIdentifiers = [];
for(var i in classIdFiles){
  classIdentifiers.push(require(classIdFiles[i]));
}

var prototypeIdFiles = glob.sync(__dirname + "/patterns/identifiers/prototypes/**/*.js");
var prototypeIdentifiers = [];
Example #12
0
exports.plugin = function(Account, LostPassword, httpServer, emailer, loader) {

	if(!emailer) return;

	//register the dust tpl ~ fugly >.>
	eval(dust.compile(fs.readFileSync(loader.params("http.lostPasswordEmailTpl"), "utf8"), "lostPasswordEmailTpl"));


	httpServer.get("/lost_password", function(req, res) {
		res.render("lost_password");
	});

	httpServer.post("/lost_password", function(req, res) {
		var on = reqOutcome(req, res, "lost_password");

		step(
			function() {
				Account.findOne({ email: req.body.email }, this);
			},
			on.success(function(account) {
				if(!account) return on(new Error("account does not exist"));
				this.account = account;

				var lostPassword = new LostPassword({ account: account._id });

				lostPassword.save(this);
			}),
			on.success(function(lostPassword) {
				var next = this;

				dust.render("lostPasswordEmailTpl", { email: "email", token: lostPassword._id }, this);

			}),
			on.success(function(tpl) {
				var next = this;
				emailer.send({
					to: this.account.email,
					subject: "Reset Password",
					htmlBody: tpl
				}, function(err) {
					if(err) return on(new Error("Unable to send password recovery email"));
					next();
				})
			}),
			on.success(function() {
				res.render("lost_password_sent", {
					email: this.account.email
				});
			})
		);
	});

	function lostPasswordExists(req, res, next) {
		var on = reqOutcome(req, res, "lost_password");

		step(
			function() {
				LostPassword.findOne({ _id: req.query.token || req.body.token }, this);
			},
			on.success(function(lostPassword) {
				if(!lostPassword) {
					return on(new Error("The reset password token does not exist."));
				} else 
				if(lostPassword.expiresAt.getTime() < Date.now()) {
					lostPassword.remove();
					return on(new Error("The reset password link has expired."));
				}

				req.lostPassword = lostPassword;
				this();
			}),
			next
		);
	}

	httpServer.get("/reset_password", lostPasswordExists, function(req, res) {
		res.render("reset_password", {
			token: req.query.token
		});
	});

	httpServer.post("/reset_password", lostPasswordExists, function(req, res) {
		var on = reqOutcome(req, res, "reset_password");

		step(
			function() {
				if(req.body.password.length < 6) {
					console.log(vine.error(new Error("password must be at least 6 characters")).data)

					return on(new Error("password must be at least 6 characters"));
				}

				if(req.body.password != req.body.password2) {
					return on(new Error("passwords don't match"));
				}

				this();
			},
			function() {
				Account.findOne({ _id: req.lostPassword.account }, this);
			},
			on.success(function(account) {
				if(!account) return on(new Error("account doesn't exist"));
				account.password = req.body.password;
				account.save(this);
			}),
			on.success(function(account) {
				res.render("login", vine.message("Please re-login with your new password").data);
				req.lostPassword.remove();
			})
		);
	});
}
Example #13
0
exports.plugin = function(auth, httpServer, emailer, Referral, loader) {

	var domain = loader.params("domain"),
	serviceName = loader.params("serviceName"),
	Account = auth.Account;

	eval(dust.compile(fs.readFileSync(loader.params("http.inviteEmailTpl"), "utf8"), "inviteEmailTpl"));

	Account.prototype.inviteAccount = function(email, next) {
		var on = outcome.error(next),
		InvitedAccount = this.model("referrals"),
		self = this;

		step(
			function() {
				console.log("find email %s", email);
				Account.findOne({ email: email }, this);
			},
			on.success(function(account) {
				if(account) return new Error(sprintf("%s already has an account", email));
				console.log("account doesn't exist, finding referral");

				Referral.findOne({ key: email }, this);
			}),
			on.success(function(referral) {
				if(referral) return new Error(sprintf("%s has already been invited by someone else", email));

				console.log("referral doesn't exist, parsing invite template");
				this.referral = referral = new Referral({ key: email, invitedBy: self._id });
				referral.save(this);
			}),
			on.success(function(referral) {
				dust.render("inviteEmailTpl", { url: "http://" + domain + "/referrals/" + referral._id + "?src=email" }, this);
			}),
			on.success(function(tpl) {
				var next = this;

				Referral.emit("sent", this.referral, email);

				emailer.send({
					to: email,
					subject: "You've been invited to check out " + serviceName,
					htmlBody: tpl
				}, function(err) {
					if(err) console.error(err)
					next();
				});
			}),
			next
		);
	}

	function checkReferral(req, res, next) {
		Referral.findOne({ _id: req.params.referral }, function(err, referral) {
			req.referral = referral;
			if(!referral) return res.redirect("/");
			next();
		});
	}

	httpServer.get("/referrals/:referral", checkReferral, function(req, res, next) {

		res.render("referral_signup", {
			referralId: req.params.referral,
			src: req.query.src
		});
		
	});

	httpServer.post("/referrals/:referral", checkReferral, function(req, res, next) {

		Account.signup(req.body, function(err, account) {
			if(err) return res.render("referral_signup", vine.error(err).data);
			req.referral.addAccount(account);
			res.redirect("/login");
		});
		
	});


	httpServer.get("/invite", auth.middleware.authCheckpoint, function(req, res) {
		res.render("invite", {
			account: req.account._id
		});
	});


	httpServer.post("/invite", auth.middleware.authCheckpoint, function(req, res) {

		var emails = String(req.body.emails).split(/[\n,]+/g),
		result = vine.api();

		step(
			function() {
				seq(emails).seqEach(function(email) {
					var next = this;
					req.account.inviteAccount(email, function(err) {
						if(err) {
							console.error(err);
							emails.splice(email.indexOf(email), 1);
							result.error(err);
							return;
						}

						result.success(sprintf("%s has been invited", email));
					})
				}).seq(this);
			},
			function() {
				res.render("invite", result.data);
			}
		);

		res.render("invite", {
			account: req.account._id
		});
	});

}
Example #14
0
 var end = function() {
   this.queue(wrap(filename, dust.compile(input, filename)));
   this.queue(null);
 };
                                Template.findOne({ name: data.message.template, company: data.message.company, tenant: data.message.tenant }, function (errPickTemplate, resPickTemp) {


                                    if (!errPickTemplate) {

                                        if (resPickTemp && resPickTemp.content && resPickTemp.content.content) {

                                            var compileid = uuid.v4();

                                            var compiled = dust.compile(resPickTemp.content.content, compileid);
                                            dust.loadSource(compiled);
                                            dust.render(compileid, data.message.Parameters, function (errRendered, outRendered) {
                                                if (errRendered) {
                                                    logger.error("Error in rendering " + errRendered);
                                                }
                                                else {

                                                    var renderedTemplate = "";
                                                    var juiceOptions = {
                                                        applyStyleTags: true
                                                    }

                                                    if (resPickTemp.styles.length > 0) {
                                                        for (var i = 0; i < resPickTemp.styles.length; i++) {
                                                            if (i == 0) {
                                                                renderedTemplate = outRendered;
                                                            }

                                                            //console.log(resPickTemp.styles[i].content);
                                                            logger.info("Rendering is success " + resPickTemp.styles[i].content);

                                                            renderedTemplate = juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions);
                                                            if (i == (resPickTemp.styles.length - 1)) {

                                                                if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                                    mailOptions.html = renderedTemplate;
                                                                } else {
                                                                    mailOptions.text = renderedTemplate;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    else {
                                                        console.log("Rendering Done");

                                                        if (resPickTemp.filetype.toLowerCase() == 'html') {
                                                            mailOptions.html = outRendered;
                                                        } else {
                                                            mailOptions.text = outRendered;
                                                        }

                                                        //SendMail(mailOptions, data);
                                                    }

                                                    if (resPickTemp.content.subject) {

                                                        var compilesubid = uuid.v4();
                                                        var compiledsub = dust.compile(resPickTemp.content.subject, compilesubid);
                                                        dust.loadSource(compiledsub);
                                                        dust.render(compilesubid, data.message.Parameters, function (errsubRendered, outsubRendered) {
                                                            mailOptions.subject = outsubRendered;
                                                            SendMail(mailOptions, data);
                                                        });

                                                    } else {

                                                        SendMail(mailOptions, data);
                                                    }
                                                }
                                            });
                                        } else {
                                            logger.error("No template found");
                                            data.ack.acknowledge();
                                        }
                                    } else {
                                        logger.error("Pick template failed ", errPickTemplate);
                                        data.ack.acknowledge();
                                    }
                                });
Example #16
0
var jsont = utility.async(function*(alias, filename) {
  var src = yield readFile(filename, 'utf8');
  var compiled = dust.compile(src, alias);
  dust.loadSource(compiled);
  return dustRender(alias, original);
});
Example #17
0
var fs = require('fs');
var dust = require('dustjs-linkedin');
var express = require('express');
var app = express();
// var request = require('request');

/**
 * compiling on the server, avoid in production!
 */

var appRoot = process.cwd();
var src = fs.readFileSync(appRoot + '/app/views/hello-world.dust', 'utf8');
var compiled = dust.compile(src, 'say-hello-world');
// var compiled = dust.compile("Say hello {world}", 'say-hello-world');
dust.loadSource(compiled);
dust.render('say-hello-world', { world: "Venus" }, function(err, out) {
  // `out` contains the rendered output.
  console.log(out);
});


var templateName = 'hello-world';

// Pre-2.7
fs.readFile(appRoot +'/app/lib/' + templateName + '.js', { encoding: 'utf8' }, function(err, data) {
  dust.loadSource(data);
  dust.render(templateName, { world: "Pluto" }, function(err, out) {
    console.log(out);
  });
});
Example #18
0
 fs.readdirSync(template_dir).forEach(function (file) {
     if (file.match(/\.dust$/)) {
         var template = fs.readFileSync(path.join(template_dir, file), 'utf-8');
         compiled += dust.compile(template, file.replace(/\.dust$/, ''));
     }
 });
Example #19
0
export async function renderTypes(model, templateDir, outputSpec, options, languageSettings) {
  const dusts = {}; // dusts[base of filename] = boolean

  function fail(msg) {
    throw new Error(msg);
  }

  function checkBasename(templateName) {
    if (!(templateName in languageSettings.basenames)) {
      fail(`No basename found in 'configuration while running template '${templateName}'`);
    }
  }

  function checkExtension(templateName) {
    if (!(templateName in languageSettings.extensions)) {
      fail(`No extension found in configuration while running template '${templateName}'`);
    }
  }

  if (undefined === languageSettings) {
    fail('No config.json was found');
  }

  if (!modelLooksReasonable(model)) {
    fail('No type information was received');
  }

  dust.loadSource(dust.compile('{@contextDump/}', 'model'));
  if (options.base) {
    loadDustTemplates(options.templates, dusts);
  }

  loadDustTemplates(templateDir, dusts);
  dusts.model = 1;

  // Run any renames
  if (languageSettings.renames) {
    for (const t of model.allTypes) {
      if (languageSettings.renames[t.packedName]) {
        t.packedName = languageSettings.renames[t.packedName];
      }
    }
  }

  // Add important items to a global dust context in addition to the passed in model
  const globals = {};
  globals.languageSettings = languageSettings;
  globals.suppressJs = options.s;
  globals.typePrefix = languageSettings.typePrefix;
  globals.baseClass = languageSettings.baseClass;
  globals.namespace = languageSettings.namespace;
  Object.assign(model, globals);

  // Depending on what templates exist, run them over the matching items in the model.
  // We'll work from a list of jobs.
  const jobs = [];

  // templates we know about
  const singleFiles = ['header', 'impl', 'enums', 'typedefs', 'importAll'];
  const multiFiles = {
    classHeader: model.classes,
    class: model.classes,
    enum: model.enums,
  };

  // don't mention JSON if suppressed
  if (!(options.s)) {
    addRenderOneFileJob('model', globals, model, jobs, path.join(outputSpec, 'model.json'));
  }

  // here are the single templates, we generate many things from the template name
  for (const t of singleFiles) {
    if (dusts[t]) {
      checkBasename(t);
      checkExtension(t);
      // generate filename.  for now, the dot is included in extensions! TODO
      const fname = languageSettings.basenames[t] + languageSettings.extensions[t];
      addRenderOneFileJob(t, globals, model, jobs, path.join(outputSpec, fname));
    }
  }

  // here are the multi templates
  function makeJob(extension) {
    return c => path.join(outputSpec, model.typePrefix + c.packedName + extension);
  }

  for (const t in multiFiles) {
    if (dusts[t]) {
      checkExtension(t);
      addRenderMultipleFilesJob(t, globals, model, multiFiles[t],
        languageSettings, jobs, makeJob(languageSettings.extensions[t]));
    }
  }

  return await Promise.all(jobs);
}
Example #20
0
function compileAndLoad(data, name) {
    loadSource(dust.compile(data, name));
}
var dust = require('dustjs-linkedin'),
    path = require('path'),
    fs = require('fs');

var dir = path.join(__dirname, '..', 'views', 'templates');

var writer = fs.createWriteStream(path.join(__dirname, '..', 'public', 'javascripts', 'compiled_templates.js')),
    files = fs.readdirSync(dir);

for (var i = 0; i < files.length; i++) {
    var str = fs.readFileSync(path.join(dir, files[i]), 'utf8'),
        name = path.basename(files[i], '.html');

    writer.write(dust.compile(str, name));
}

writer.end();
Example #22
0
 compile: function (sourcePath, templateName) {
     var source = libfs.readFileSync(sourcePath, 'utf8');
     // compiling as string
     return dust.compile(source, templateName);
 }
Example #23
0
function loadTemplate(name) {
  var template = fs.readFileSync(path.join(__dirname, '../templates', `${name}.dust`)).toString();
  var compiledTemplate = dust.compile(template, name);
  dust.loadSource(compiledTemplate);
}
        Template.findOne({name:message.template,company:message.company,tenant:message.tenant},function (errPickTemplate,resPickTemp) {


            if(!errPickTemplate){

                if(resPickTemp){

                    var compileid = uuid.v4();

                    var compiled = dust.compile(resPickTemp.content.content, compileid);
                    dust.loadSource(compiled);
                    dust.render(compileid, message.Parameters, function(errRendered, outRendered) {
                        if(errRendered)
                        {
                            logger.error("Error in rendering "+ errRendered);
                        }
                        else
                        {

                            var renderedTemplate="";
                            var juiceOptions={
                                applyStyleTags  :true
                            }

                            if(resPickTemp.styles.length>0)
                            {
                                for(var i=0;i<resPickTemp.styles.length;i++)
                                {
                                    if (i == 0)
                                    {
                                        renderedTemplate = outRendered;
                                    }

                                    //console.log(resPickTemp.styles[i].content);
                                    logger.info("Rendering is success "+ resPickTemp.styles[i].content);

                                    renderedTemplate=juice.inlineContent(renderedTemplate, resPickTemp.styles[i].content, juiceOptions);
                                    if(i==(resPickTemp.styles.length-1))
                                    {


                                        mailOptions.text = renderedTemplate;

                                        SendRequest(company,tenant,mailOptions,function(done){

                                            if(!done)
                                                ack.reject(true);
                                            else
                                                ack.acknowledge();

                                        });
                                    }
                                }
                            }
                            else
                            {
                                console.log("Rendering Done");
                                mailOptions.text = outRendered;
                                SendRequest(company,tenant,mailOptions,function(done){

                                    if(!done)
                                        ack.reject(true);
                                    else
                                        ack.acknowledge();

                                });
                            }
                        }

                    });

                }else{

                    logger.error("No template found");
                    ack.reject(true);
                }

            }else{


                logger.error("Pick template failed ",errPickTemplate);
                ack.reject(true);

            }

        });
Example #25
0
var mongoose = require( 'mongoose' );
var dust = require( 'dustjs-linkedin' );
var fs = require( 'fs' );

dust.loadSource( dust.compile( fs.readFileSync( 'templates/messages/github_commit.dust', 'ascii' ), 'github_commit' ) );

var FeedGithub = function() {
    var self = this;

    self.GetURLs = function( obj ) {
        if ( !obj )
        {
            return {
            };
        }

        if ( obj instanceof models.Room )
        {
            return {
                'feed_github': '/api/1.0/Room/' + obj._id + '/Feed/Github'
            };
        }

        return {};
    };
    
    self.bind = function( app ) {
        app.post( '/api/1.0/Room/:roomId/Feed/Github', function( request, response ) {
            models.Room.findById( request.params.roomId, function( error, room ) {
                if ( error )
                {