var Handlebars = require('handlebars');
var _ = require('underscore');
var less = require('less');
module.exports = function (config) {
var sourceHead =
'\n' +
'{{#if debug}}' +
'\n' +
'\n' +
'{{else}}' +
'\n' +
'{{/if}}';
var sourceBody =
'\n' +
'\n' +
'\n' +
'\n' +
'\n';
var templateHead = Handlebars.compile(sourceHead);
var templateBody = Handlebars.compile(sourceBody);
var getCSS = function (callback) {
contentInstance.getAllOrderedObjects('Stylesheet', function (err, dataObjects) {
if (err) {
return callback(err);
}
var stylesheets = _.map(dataObjects, function(dataObject) {
return "\n/* -- " + dataObject.get('title') + ' -- */\n\n' +
dataObject.get('body');
}).join('\n');
function lessCompilationError(stylesheets, err, callback){
stylesheets = "/*\n -- The following ERROR(s) occurred during less compilation:\n\n" +
err.message +
"\n\n -- you can add ?debug to the preview url to enable browser side less compilation." +
"\n\n0: this is line 0 */\n" +
stylesheets;
return callback(null, stylesheets);
}
try {
less.render(stylesheets, function (err, css) {
if (err) {
return lessCompilationError(stylesheets, err, callback);
}
return callback(err, css);
});
} catch (err){
return lessCompilationError(stylesheets, err, callback);
}
});
};
var getJS = function (callback) {
contentInstance.getAllOrderedObjects('Behaviour', function (err, dataObjects) {
if (err) {
return callback(err);
}
var scripts = _.map(dataObjects, function(dataObject) {
return dataObject.get('body');
}).join('\n');
callback(null, scripts);
});
};
var getPreviewHTML = function (options, content, callback) {
var html = replaceMarkers(content, templateHead(options), templateBody(options));
callback(null, html);
};
var replaceMarkers = function (html, styleMarkerReplacement, jsMarkerReplacement) {
function replace(marker, replacement) {
var regExp = new RegExp('');
if (html.match(regExp)){
html = html.replace(regExp, replacement);
} else {
html = html.replace('', '\n');
}
}
replace('ipe_style_marker', styleMarkerReplacement);
replace('ipe_js_marker', jsMarkerReplacement);
return html;
};
return {
getCSS: getCSS,
getJS: getJS,
getPreviewHTML: getPreviewHTML,
_replaceMarkers: replaceMarkers
};
};