“use strict”;
var gulp = require(“gulp”); var util = require(“gulp-util”); var data = require(“gulp-data”); var noop = require(“gulp-noop”); var rename = require(“gulp-rename”); var header = require(“gulp-header”); var jshint = require(“gulp-jshint”); var uglify = require(“gulp-uglify”); var concat = require(“gulp-concat-util”); var pkg = require(“./package.json”); var nl = require(“os”).EOL;
/* ** CONFIG & PATHS */
var config = {
header : "/*! jQuery & Zepto Lazy <%= info %> - <%= pkg.homepage %> - MIT&GPL-2.0 license - Copyright 2012-<%= year %> <%= pkg.author.name %> */", main : pkg.main, plugins : [ "plugins/jquery.lazy.*.js", "!plugins/jquery.lazy.*.min.js" ]
};
/* ** PIPES */
var pipes = {};
// check files with jshint pipes.validateFiles = function(files) {
return gulp.src(files, {base: "./"}) .pipe(jshint()) .pipe(jshint.reporter("jshint-stylish"));
};
// check all files pipes.validate = function() {
return pipes.validateFiles([config.main].concat(config.plugins));
};
// build main project file pipes.buildMain = function() {
return pipes.validateFiles(config.main) .pipe(uglify()) .pipe(header(config.header + nl, { pkg : pkg, info : "v" + pkg.version, year : new Date().getFullYear() })) .pipe(rename(function(path) { path.extname = ".min" + path.extname; })) .pipe(gulp.dest("./"));
};
// build plugin files pipes.buildPlugins = function() {
return pipes.validateFiles(config.plugins) .pipe(data(function(file) { var string = String(file.contents).split("\n")[1]; var matches = string.match(/\s-\s([a-z ]+)\s-\sv([0-9.]+)/i); return { info: "- " + matches[1] + " v" + matches[2] }; })) .pipe(uglify()) .pipe(header(config.header + nl, { pkg : pkg, year : new Date().getFullYear() })) .pipe(rename(function(path) { path.extname = ".min" + path.extname; })) .pipe(gulp.dest("./"));
};
// concat plugin files pipes.concatPlugins = function() {
return gulp.src(config.plugins) .pipe(concat(config.main.replace(".js", ".plugins.js"), { sep: nl + nl })) .pipe(gulp.dest("./")) .pipe(uglify()) .pipe(header(config.header + nl, { pkg : pkg, info : "- All Plugins v" + pkg.version, year : new Date().getFullYear() })) .pipe(rename(function(path) { path.extname = ".min" + path.extname; })) .pipe(gulp.dest("./"));
};
/* ** TASKS */
// check & build everything gulp.task(“build”, [“build-main”, “build-plugins”, “concat-plugins”]);
// check & build main project file gulp.task(“build-main”, pipes.buildMain);
// check & build single plugin files gulp.task(“build-plugins”, pipes.buildPlugins);
// build concatenated plugins file gulp.task(“concat-plugins”, pipes.concatPlugins);
// check all files gulp.task(“validate”, pipes.validate);
// check, build & watch live changes gulp.task(“watch”, [“build”], function() {
// watch main file gulp.watch(config.main, function() { var task = pipes.buildMain(); util.log("updated", "'" + util.colors.red("main file") + "'"); return task; }); // watch plugins gulp.watch(config.plugins, function() { var task = pipes.buildPlugins(); util.log("updated", "'" + util.colors.red("plugins") + "'"); pipes.concatPlugins(); util.log("updated", "'" + util.colors.red("concatenated plugins file") + "'"); return task; });
});