diff --git a/package.json b/package.json index 0a7e273..eb5194d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "mongodb": "~1.2.14", "handlebars": "~1.0.10", "underscore": "~1.4.4", - "less": "~1.3.3" + "less": "~1.3.3", + "when": "~2.0.1" }, "devDependencies": { "sockjs": "~0.3.5" diff --git a/preview.js b/preview.js index a1c7597..83f3bd0 100644 --- a/preview.js +++ b/preview.js @@ -1,8 +1,9 @@ var Handlebars = require('handlebars'); var _ = require('underscore'); var less = require('less'); +var when = require('when'); -module.exports = function (config) { +module.exports = function (config, mongodataInstance) { var sourceHead = '\n' + @@ -20,28 +21,52 @@ module.exports = function (config) { '\n' + '\n'; - var templateHead = Handlebars.compile(sourceHead); - var templateBody = Handlebars.compile(sourceBody); - var getPreviewHTML = function (options, content, callback) { + config.debug && console.log('getPreviewHTML',content); + var html = content; + var promises = replaceMarkers(options, html); + when.all( + promises, + function onSucces (results) { + console.log('getPreviewHTML replaceMakers results',results); + _.forEach(results, function (result) { + if (result) { + html = html.replaceAll(result.regExp, result.replacement); + } + }); + return callback(null, html); + }, + function onFailure(err) { + return callback(err); + } - var html = replaceMarkers(options, content, templateHead(options), templateBody(options)); - callback(null, html); + ) + }; - var replaceMarkers = function (options, html, styleMarkerReplacement, jsMarkerReplacement) { + var replaceMarkers = function (options, html) { - function replace(marker, replacement) { + function replace(marker, getReplacement) { + var deferred = when.defer(); var regExp = new RegExp(''); - if (html.match(regExp)) { - html = html.replace(regExp, replacement); + var result = html.match(regExp); + if (result) { + getReplacement(result, function (err, replacement) { + if (err) { + deferred.reject(err); + } else { + deferred.resolve({regExp:regExp, replacement:replacement}) + } + }) } else { - html = html.replace('', '\n'); + deferred.resolve(); } + return deferred.promise; } - console.log('martker options',options); + console.log('marker options',options); + var promises = []; /* markers: [type]_[collection]_[name]_[attribute] @@ -58,10 +83,54 @@ module.exports = function (config) { style -> contains all type='style' attributes concatenated based on 'order' */ - replace(options.collection + '_' + options.name + '_' + 'style_marker', styleMarkerReplacement); - replace(options.collection + '_' + options.name + '_' + 'behaviour_marker', jsMarkerReplacement); +// replace('script_' + options.collection + '_' + options.name + '_' + options.attribute, function (result, callback) { + promises.push( + replace('script_([A-Za-z0-9]+)_([A-Za-z0-9]+)_([A-Za-z0-9]+)', function (result, callback) { + var context = { + collection: result[0], + name: result[1], + attribute: result[2] + }; + return callback( null, + '