diff node_modules/static/index.js @ 69:333afcfd3f3a

added node_modules to project and fixed path to chronometer also added deps to installer script
author tzara <rc-web@kiben.net>
date Sat, 26 Oct 2013 14:12:50 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/node_modules/static/index.js	Sat Oct 26 14:12:50 2013 +0100
@@ -0,0 +1,194 @@
+var handlebars = require('handlebars'),
+  async = require('async'),
+  cheerio = require('cheerio'),
+  marked = require('marked'),
+  path = require('path'),
+  fs = require('fs'),
+  _ = require('underscore'),
+  highlight = require('highlight.js');
+
+var config = {
+  addIdsToHeadings: true,
+  gfm: true, //github flavored markdown
+  highlight: function(code, lang) {
+    return highlight.highlight('javascript', code).value;
+  }
+};
+
+var jqueryPath = './lib/jquery.js',
+    asyncTolkens = {},
+    markdownCallbacks = [];
+
+var transforms = {};
+
+function addTransform(name, callback) {
+  transforms[name] = callback;
+}
+
+addTransform('html', function(buffer, complete, context, data) {
+  return complete(buffer.toString());
+});
+
+addTransform('md', function(buffer, complete, context, data) {
+  var html = marked(buffer.toString(), {
+    gfm: config.gfm,
+    highlight: config.highlight
+  });
+  async.series(_.map(markdownCallbacks, function(callback) {
+    return function(next) {
+      callback(html, function(modifiedHTML) {
+        html = modifiedHTML;
+        next();
+      });
+    }
+  }), function() {
+    complete(html);
+  });    
+});
+
+addTransform('hbs', function(buffer, complete, context, data) {
+  var output = handlebars.compile(buffer.toString(), {
+    data: true
+  })(context, {
+    data: data
+  });
+  var filteredAsyncTolkens = {};
+  _.each(asyncTolkens, function(tolkenData, tolken) {
+    if (data.file === tolkenData.file) {
+      filteredAsyncTolkens[tolken] = tolkenData;
+    }
+  });
+  if (!_.keys(filteredAsyncTolkens).length) {
+    complete(output);
+  } else {
+    async.series(_.map(filteredAsyncTolkens, function(tolkenData, tolken) {
+      return function(next) {
+        var args = tolkenData.args;
+        args.push(function(callbackOutput) {
+          output = output.replace(tolken, callbackOutput.toString());
+          next();
+        });
+        tolkenData.callback.apply(tolkenData.callback, args);
+      };
+    }), function() {
+      complete(output);
+    });
+  }
+});
+
+function $(html, callback) {
+  callback(cheerio.load(html));
+}
+
+function modifyDocumentFragment(html, callback, next) {
+  $(html, function($) {
+    callback($);
+    next($.html());
+  });
+}
+
+function removeOuterBodyTag(html) {
+  return html.replace(/^\s*\<body\>/, '').replace(/\<\/body\>\s*$/, '');
+}
+
+handlebars.registerAsyncHelper = function(name, callback) {
+  handlebars.registerHelper(name, function() {
+    var tolken = String(new Date().getTime() + Math.random());
+    var args = _.toArray(arguments),
+        data = args[args.length - 1].data;
+    asyncTolkens[tolken] = {
+      file: data.file,
+      args: args,
+      callback: callback
+    };
+    return tolken;
+  });
+};
+
+handlebars.registerHelper('require', function(file, options) {
+  var filePath = path.join(path.dirname(options.data.file), file);
+  require(filePath)(module.exports);
+  return '';
+});
+
+handlebars.registerAsyncHelper('include', function(file, options, callback) {
+  var filePath = path.join(path.dirname(options.data.file), file);
+  transform(filePath, function(fileData) {
+    var selector = options.hash.select;
+    if (selector) {
+      $(fileData.toString(), function($) {
+        var generatedHTML = '';
+        $(selector).each(function() {
+          // make more like a regular dom object
+          this.attributes = this[0].attribs;
+          this.id = this[0].attribs.id;
+          this.tagName = this[0].name;
+          this.innerHTML = this.html();
+          generatedHTML += options.fn(this);
+        });
+        callback(generatedHTML);
+      });
+    } else {
+      callback(fileData.toString());
+    }
+  }, options.hash, options.data);
+});
+
+function transform(source, callback, options) {
+  fs.readFile(source, function(err, data) {
+    if (err) {
+      console.trace();
+      throw err;
+    }
+    var extensions = source.split('/').pop().split('.');
+    var callbacks = _.filter(extensions, function(extension) {
+      return extension in transforms;
+    }).map(function(extension) {
+      return function(next) {
+        transforms[extension](data, next, options || {}, {
+          file: source
+        });
+      };
+    });
+    async.series(callbacks, callback);
+  });
+}
+
+function onMarkdown(callback) {
+  markdownCallbacks.push(callback);
+}
+
+onMarkdown(function(html, next) {
+  if (config.addIdsToHeadings) {
+    modifyDocumentFragment(html, function($) {
+      if (config.addIdsToHeadings) {
+        addIdsToHeadings($);
+      }
+    }, next);
+  } else {
+    next(html);
+  }
+});
+
+function addIdsToHeadings($) {
+  $('h1,h2,h3,h4,h5,h6').each(function() {
+    var text = $(this).html().split('<').shift();
+    var id = text.replace(/(^\s+|\s+$)/g, '').replace(/[\s]+/g, '-').replace(/([a-z])([A-Z])/g, function() {
+      return arguments[1] + '-' + arguments[2].toLowerCase();
+    }).toLowerCase();
+    if (id.match(/^\s+$/) || !id) {
+      return;
+    }
+    $(this).attr('id', id);
+  });
+}
+
+module.exports = {
+  config: config,
+  transform: transform,
+  handlebars: handlebars,
+  $: $,
+  modifyDocumentFragment: modifyDocumentFragment,
+  onMarkdown: onMarkdown,
+  addTransform: addTransform
+};
\ No newline at end of file