UNPKG

suh-dgeni-ngdocs

Version:

A package to generate ng-docs similar to what is used on AngularJS website.

247 lines (226 loc) 7.34 kB
var bower = require('bower'), gulp = require('gulp'), utility = require('util'), util = require('../util'), cssmin = require('gulp-cssmin'), shelljs = require('shelljs'), _ = require('lodash'), rename = require('gulp-rename'), insert = require('gulp-insert'), path = require('canonical-path'), concat = require('gulp-concat-util'), uglify = require('gulp-uglify'); var Installer = function(conf){ var c = ['jquery','angular','angular-animate', 'angular-resource','angular-touch','angular-cookies', 'angular-route','angular-sanitize','angular-aria', 'bootstrap', 'open-sans-fontface','google-code-prettify', 'font-awesome', 'lunr.js','marked']; this.config = { outputFolder:conf.outputFolder, cssFolder:path.join(conf.outputFolder,'css'), jsFolder:path.join(conf.outputFolder,'js'), fontsFolder:path.join(conf.outputFolder,'fonts'), fontFolder:path.join(conf.outputFolder,'font'), imagesFolder:path.join(conf.outputFolder,'images'), localFolder:path.resolve(__dirname,'../../client'), userJs:conf.defaultDeployment?(conf.defaultDeployment.scripts ||[]):[], userFonts:conf.defaultDeployment?(conf.defaultDeployment.fonts ||[]):[], userCss:conf.defaultDeployment?(conf.defaultDeployment.stylesheets ||[]):[], userMisc:conf.defaultDeployment?(conf.defaultDeployment.misc ||[]):[], userIncludeJs:conf.includeJs?(conf.includeJs||[]):[], userIncludeCss:conf.includeCss?(conf.includeCss||[]):[] }; this.config.packages = (conf && conf.packages)? [].concat(conf.packages,c):c; }; Installer.prototype = { install:function(callback){ console.log('Copying stylesheets '); gulp.src(path.join(this.config.localFolder,'css/*.css')) .pipe(gulp.dest(this.config.cssFolder)); gulp.src(this.config.userCss) .pipe(gulp.dest(this.config.cssFolder)); console.log('Copying scripts'); gulp.src(path.join(this.config.localFolder,'js/*.js')) .pipe(concat('docs.min.js')) .pipe(gulp.dest(this.config.jsFolder)); gulp.src(path.join(this.config.localFolder,'lib/*.js')) .pipe(gulp.dest(this.config.jsFolder)); gulp.src(path.join(this.config.localFolder,'libCss/*.css')) .pipe(gulp.dest(this.config.cssFolder)); gulp.src(this.config.userJs) .pipe(gulp.dest(this.config.jsFolder)); gulp.src(this.config.userIncludeJs) .pipe(gulp.dest(this.config.jsFolder)); gulp.src(this.config.userIncludeCss) .pipe(gulp.dest(this.config.cssFolder)); gulp.src(this.config.userFonts) .pipe(gulp.dest(this.config.fontsFolder)); gulp.src([path.join(this.config.localFolder,'js/crafty/*.js'), path.join(this.config.localFolder,'js/crafty/**/*.js')]) .pipe(concat('crafty.min.js')) .pipe(uglify()) .pipe(gulp.dest(this.config.jsFolder)); gulp.src(path.join(this.config.localFolder,'images/*.*')) .pipe(gulp.dest(this.config.imagesFolder)); gulp.src(path.join(this.config.localFolder,'fonts/**/*.*')) .pipe(gulp.dest(this.config.fontsFolder)) .pipe(gulp.dest(path.join(this.config.cssFolder,'fonts'))); gulp.src(path.join(this.config.localFolder,'font/**/*.*')) .pipe(gulp.dest(this.config.fontsFolder)) .pipe(gulp.dest(path.join(this.config.cssFolder,'font'))); _(this.config.userMisc) .forEach(function(e){ if (_.isObject(e)){ gulp.src(e.src) .pipe(gulp.dest(path.resolve(this.config.outputFolder,e.dest))); }else if (_.isString(e)){ var d = './'; if (/\.js$/.test(e)){ d = 'js'; }else if (/\.css$/.test(e)){ d = 'css'; }else if (/(\.eot|\.svg|\.ttf|\.woff|\.woff)$/.test(e)){ d = 'fonts'; } gulp.src(e) .pipe(gulp.dest(path.resolve(this.config.outputFolder,d))); } }) .commit(); // bower.commands.install(this.config.packages,{save:true}) // .on('end',util.proxy(this.onPackagesInstalled,this,callback)); }, onPackagesInstalled:function(){ console.log('Bower packages installed successfully.'); var installed = arguments.length === 2?arguments[1]:arguments[0], callback = arguments.length === 2?arguments[0]:undefined; if (callback){ callback(installed); } this.list((callback && callback.list)?callback.list:installed); }, list:function(callback,f){ console.log('Retreiving details of bower packages.'); bower.commands.list(undefined,{ cwd:path.resolve(__dirname,'../..'), paths:true, json:true },{json:true,paths:true}).on('end',util.proxy(this.onPackagesListed,this,callback)); }, onPackagesListed:function(){ var e,f,files,js,css,fonts,fff,p,dps = [], dpsKeys = ['jquery']; e = (arguments.length == 2)?arguments[1]:arguments[0]; f = (arguments.length == 2)?arguments[0]:undefined; p = _(e.dependencies) .transform(function(obj,n,key){ var item = { path:n.canonicalDir, main:!_.isArray(n.pkgMeta.main)?(path.join(n.canonicalDir,n.pkgMeta.main)):_(n.pkgMeta.main).map(function(elem) { return path.join(n.canonicalDir,elem) }).value(), dependencies:_(n.pkgMeta.dependencies).keys().value() }; obj[key] = item; }) .tap(function(eee){ dps.push(eee.jquery); eee.jquery = undefined; delete eee.jquery; }) .commit() .forEach(function(v,kkk){ if (!v){ return; } if (v.dependencies.length > 0){ _.forEach(v.dependencies,function(kk){ if (dpsKeys.indexOf(kk) === -1){ dps.push(v[kk]); dpsKeys.push(kk); } }); } dps.push(v); dpsKeys.push(kkk); }) .value(); files = _(dps) .pluck('main') .flatten() .value(); css = _(files) .filter(function(file){ return /\.css$/.test(file); }) .value(); js = _(files) .filter(function(file){ return /\.js$/.test(file); }) .value(); fonts = _(files) .filter(function(file){ return /(\.eot|\.svg|\.ttf|\.woff|\.woff)$/.test(file) || /(fonts\/\*)$|(fonts\/.*$)/.test(file) || /(font\/\*)$|(font\/.*$)/.test(file); }) .value(); // fff = _(fonts) // .map(function(j){ // var k = { // full:j, // }; // var e = path.dirname(j)+'/'; // if (/\/css\/font\//.test(e)){ // k.path = '/css/font/'+e.split(/\/css\/font\//)[1]; // }else if (/\/css\/fonts\//.test(e)){ // k.path = '/css/font/'+e.split(/\/css\/fonts\//)[1]; // }else if (/\/font\//.test(e)){ // k.path = '/font/'+e.split(/\/font\//)[1]; // }else if (/\/fonts\//.test(e)){ // k.path = '/fonts/'+e.split(/\/fonts\//)[1]; // }else{ // k.path = '/'; // } // return k; // }) // .value(); this.files = { css:css, js:js, fonts:fonts }; gulp.src(this.files.css) .pipe(insert.append('\n')) .pipe(cssmin()) .pipe(rename({ extname: '.min.css' })) .pipe(gulp.dest(this.config.cssFolder)); gulp.src(this.files.js) .pipe(uglify()) .pipe(rename({ extname: '.min.js' })) .pipe(gulp.dest(this.config.jsFolder)); var self = this; // _.forEach(fff,function(e){ // gulp.src(e.full) // .pipe(gulp.dest(self.config.outputFolder+e.path)); // }); gulp.src(this.files.fonts) .pipe(gulp.dest(this.config.fontsFolder)) .pipe(gulp.dest(this.config.cssFolder+'/fonts')) .pipe(gulp.dest(this.config.outputFolder+'/font')); if (f){ f(); } }, }; module.exports = function(conf){ return new Installer(conf); }; module.exports.Installer = Installer;