var util = require('./util');
var file2moduleName = require('./file2modulename');
var through2 = require('through2');
var path = require('path');
var fs = require('fs');
var VinylFile = require('vinyl');
// used for generating html files and bootstrapping benchmarks and examples
module.exports = function(gulp, plugins, config) {
return function() {
return gulp.src(config.src)
.pipe(util.insertSrcFolder(plugins, config.srcFolderInsertion, config.modulesFolder))
.pipe(through2.obj(function(file, enc, done) {
var fileName = file.relative;
var moduleName = file2moduleName(fileName);
var moduleNameWithoutPath = path.basename(moduleName);
var self = this;
var scripts = util.filterByFile(config.scriptsPerFolder, fileName).map(function(script) {
var scriptTag;
var scriptSrc = script.src;
if (script.copy || script.copyOnly) {
scriptSrc = path.basename(script.src);
self.push(new VinylFile({
cwd: file.cwd,
base: file.base,
path: path.join(path.dirname(file.path), scriptSrc),
contents: fs.readFileSync(script.src)
}));
};
if (script.copyOnly) {
return '';
}
if (scriptSrc) {
scriptTag = '';
} else {
scriptTag = '';
}
return scriptTag
.replace('$MODULENAME_WITHOUT_PATH$', moduleNameWithoutPath)
.replace('$MODULENAME$', moduleName)
}).join('\n');
file.contents = new Buffer(file.contents.toString().replace('$SCRIPTS$', scripts));
this.push(file);
done();
}))
.pipe(gulp.dest(config.dest));
};
};