//范例
var base = 'src/'; ///项目根目录
var dist = 'dist/';// 输出目录
/// 压缩html的选项
var minHtmlOption = {
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeComments: true,
removeEmptyAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
minifyJS: true,
//minifyCSS: true
};

function getNowDate() {
var date = new Date();
var seperator1 = "";
var seperator2 = ":";
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
+ "-" + date.getHours() + '' + date.getMinutes()
+ '' + date.getSeconds();
return currentdate;
}
var gulp = require('gulp');
var gutil = require('gulp-util');

// 引入组件
var htmlmin = require('gulp-htmlmin'), //html压缩
cleancss = require('gulp-clean-css'),//css压缩
jshint = require('gulp-jshint'),//js检测
jsuglify = require('gulp-uglify'),//js压缩
concat = require('gulp-concat'),//文件合并
rename = require('gulp-rename'),//文件更名
notify = require('gulp-notify'),//提示信息
less = require('gulp-less'),// 处理 less
obfuscate = require('gulp-obfuscate'), // js 混淆加密


ngAnnotate = require('gulp-ng-annotate'),// 处理angularjs 依赖注入的插件
stripDebug = require('gulp-strip-debug'),//清除 js 里的 console与 debugger

imagemin = require('gulp-imagemin'),//压缩图片
clean = require('gulp-clean'),//清空文件夹
rev = require('gulp-rev'),//更改版本号
useref = require('gulp-useref'), // 合并当前页面里的 css 与 script
revReplace = require('gulp-rev-replace'), //替换文件路径
revCollector = require('gulp-rev-collector'),//gulp-rev插件,用于html模板更改引用路径
gulpSequence = require('gulp-sequence'); // gulp 事务处理,执行顺序用的
zip = require('gulp-zip');


// 检查js
gulp.task('lint', function () {
return gulp.src([base + '/js/*.js', base + '/js/controller/**/*.js'])
.pipe(jshint())
.pipe(jshint.reporter('default'))

});


//清空文件夹,避免资源冗余
gulp.task('clean', function () {
return gulp.src(dist, {read: false}).pipe(clean());
});


gulp.task('obfuscateJS', function () {
return gulp.src(dist + '/js/controller/*.js')
//.pipe(jsuglify()) //压缩js
//.pipe(obfuscate({ replaceMethod: obfuscate.ZALGO })) //加密混淆
.pipe(obfuscate()) //加密混淆
.pipe(gulp.dest(dist + '/js/controller'))

});


///处理bootstrap less
gulp.task('bootstrapLess', function () {
gulp.src('node_modules/bootstrap/less/bootstrap.less')
.pipe(less()) //该任务调用的模块
.pipe(gulp.dest('public_html/js/plugs/bootstrap/css')) //
.pipe(notify({message: 'bootstrap生成成功!'}));
});


// 默认任务
gulp.task('default', function () {
gulp.start('run-sequence')

});

gulp.task('msg', function () {
return gulp
.src('')
.pipe(notify({message: 'SAAF平台构建完成'}));
})


/**************** **********************************************************************************************************************/

///////// 运行顺序 ********************** 主要运行这个就可以产出整个项目
/// , 'clean-js-rev'
gulp.task('run-sequence',
gulpSequence('clean', ['copy-css', 'copy-fonts', 'copy-images', 'copy-plugin', 'copy-help', 'copy-importTemplate','copy-js', 'copy-directive-html',
'copy-layout-html', 'copy-layout-js', 'copy-app-html', 'copy-app-js', 'copy-index-html','copy-designerModel'],
'indexRevCss', 'indexRev', 'IndexHtmlMin', 'msg')
);
gulp.task('copy-designerModel', function () {
return gulp.src([base + '/app/sam/templates/processDesigner/designerModel/**/*'])
.pipe(gulp.dest(dist + '/app/sam/templates/processDesigner/designerModel'))
});

/// 复制CSS
gulp.task('copy-css', function () {
return gulp.src([base + '/css/app_*.css'])
.pipe(cleancss()) //压缩css
.pipe(gulp.dest(dist + '/css'))
});

gulp.task('copy-plugin', function () {
return gulp.src([base + '/plugin/**/*'])
.pipe(gulp.dest(dist + '/plugin'))
});
gulp.task('copy-help', function () {
return gulp.src([base + '/help/**/*'])
.pipe(gulp.dest(dist + '/help'))
});
gulp.task('copy-importTemplate', function () {
return gulp.src([base + '/importTemplate/**/*'])
.pipe(gulp.dest(dist + '/importTemplate'))
});
gulp.task('copy-js', function () {
return gulp.src([base + '/js/**/*.js'])
.pipe(stripDebug()) // //除去js代码中的console和debugger输出
.pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入  *****
//.pipe(obfuscate()) //加密混淆
.pipe(jsuglify()) //压缩js
.on('error', function(err) {
gutil.log(gutil.colors.red('[Error]'), err.toString());
})
.pipe(gulp.dest(dist + '/js'))
});

gulp.task('copy-html', function () {
return gulp.src([base + '/**/*.html', '!' + base + '/js/plugs/**/*.html'])
.pipe(htmlmin(minHtmlOption)) //压缩html
.pipe(gulp.dest(dist))
});
gulp.task('copy-directive-html', function () {
return gulp.src([base + '/js/**/*.html'])
.pipe(htmlmin(minHtmlOption)) //压缩html
.pipe(gulp.dest(dist + '/js'))
});
gulp.task('copy-layout-html', function () {
return gulp.src([base + '/layout/**/*.html'])
.pipe(htmlmin(minHtmlOption)) //压缩html
.pipe(gulp.dest(dist + '/layout'))
});
gulp.task('copy-layout-js', function () {
return gulp.src([base + '/layout/**/*.js'])
.pipe(stripDebug()) // //除去js代码中的console和debugger输出
.pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入  *****
//.pipe(obfuscate()) //加密混淆
.pipe(jsuglify()) //压缩js
.on('error', function(err) {
gutil.log(gutil.colors.red('[Error]'), err.toString());
})
.pipe(gulp.dest(dist + '/layout'))
});

gulp.task('copy-app-html', function () {
return gulp.src([base + '/app/**/*.html'])
.pipe(htmlmin(minHtmlOption)) //压缩html
.pipe(gulp.dest(dist + '/app'))
});
gulp.task('copy-app-js', function () {
return gulp.src([base + '/app/**/*.js'])
.pipe(stripDebug()) // //除去js代码中的console和debugger输出
.pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入  *****
//.pipe(obfuscate()) //加密混淆
.pipe(jsuglify()) //压缩js
.on('error', function(err) {
gutil.log(gutil.colors.red('[Error]'), err.toString());
})
.pipe(gulp.dest(dist + '/app'))
});

gulp.task('copy-index-html', function () {
return gulp.src([base + '/index.html'])
.pipe(gulp.dest(dist))
});
gulp.task('copy-fonts', function () {
return gulp.src(base + '/fonts/**/*')
.pipe(gulp.dest(dist + '/fonts'))
});

gulp.task('copy-images', function () {
return gulp.src(base + '/img/**/*')
.pipe(imagemin())
.pipe(gulp.dest(dist + '/img'));
});

//打压缩包 zip
gulp.task('zip', function () {
return gulp.src(dist + '/**/*')
//.pipe(zip(dist + '.zip'))
.pipe(zip('aoyou-' + getNowDate() + '.zip'))
.pipe(gulp.dest('output'));
});

gulp.task('removeZip', function () {
return gulp.src('output/*.*', {read: false}).pipe(clean());
});

gulp.task('zipAction', function () {
gulp.start('removeZip');
gulp.start('zip')
});

// *********************************************************************** 处理首页


// 合并html页面内引用的静态资源文件
gulp.task('indexMerge', function () {
return gulp
.src(base + 'index.html')
.pipe(useref()) //合并页面资源
//.pipe(stripDebug()) // //除去js代码中的console和debugger输出
.pipe(gulp.dest(dist + '/'))
})

//首页css 加版本
gulp.task('indexRevCss', function () {
return gulp
.src(dist + '/css/*.css') //处理 css
.pipe(rev())
.pipe(cleancss()) //压缩css
.pipe(gulp.dest(dist + '/css')) //输出目录
.pipe(rev.manifest()) //设置版本号
.pipe(gulp.dest(dist + '/rev/css')); //版本号输出目录
});

//首页 JS 加版本
gulp.task('indexRevJS', function () {
return gulp
.src(dist + '/js/haike.js') //处理js
.pipe(rev())
.pipe(stripDebug()) ////除去js代码中的console和debugger输出
.pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入  *****
.pipe(jsuglify()) //压缩js 暂不压缩,合并后的JS压缩有报错
.on('error', function(err) {
gutil.log(gutil.colors.red('[Error]'), err.toString());
})
.pipe(gulp.dest(dist + '/js/')) //输出目录
.pipe(rev.manifest()) //设置版本号
.pipe(gulp.dest(dist + '/rev/index/js')); //版本号输出目录
});

gulp.task('indexRemoveCD', function () {
return gulp
.src([dist + '/js/saaf-base.js', dist + '/js/ie8html.js']) //处理js
.pipe(stripDebug()) ////除去js代码中的console和debugger输出
.pipe(gulp.dest(dist + '/js/')); //输出目录

})

//通过hash来精确定位到html模板中需要更改的部分,然后将修改成功的文件生成到指定目录
gulp.task('indexRev', function () {
return gulp
.src([dist + '/rev/**/*.json', dist + '/index.html'])
.pipe(revCollector())
.pipe(gulp.dest(dist + '/'));
})

///压缩首页
gulp.task('IndexHtmlMin', function () {
return gulp.src(dist + '/index.html')
.pipe(htmlmin(minHtmlOption)) //压缩html
.pipe(gulp.dest(dist));
});


// *********************************************************************** 处理首页 结束