diff options
Diffstat (limited to 'web/gulpfile.js')
-rw-r--r-- | web/gulpfile.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/web/gulpfile.js b/web/gulpfile.js new file mode 100644 index 00000000..f14bcc3b --- /dev/null +++ b/web/gulpfile.js @@ -0,0 +1,99 @@ +var gulp = require("gulp"); + +var concat = require('gulp-concat'); +var gutil = require('gulp-util'); +var jshint = require("gulp-jshint"); +var less = require("gulp-less"); +var livereload = require("gulp-livereload"); +var minifyCSS = require('gulp-minify-css'); +var react = require("gulp-react"); +var sourcemaps = require('gulp-sourcemaps'); +var uglify = require('gulp-uglify'); + + +var path = { + dist: "../libmproxy/web/", + js: { + vendor: [ + 'vendor/jquery/jquery.js', + 'vendor/lodash/lodash.js', + 'vendor/react/react-with-addons.js', + 'vendor/react-router/react-router.js', + ], + app: [ + 'js/router.jsx', + 'js/certinstall.jsx', + 'js/mitmproxy.js', + ], + }, + css: { + vendor: ["css/vendor.less"], + app: ["css/app.less"] + }, + fonts: ["src/vendor/fontawesome/fontawesome-webfont.*"], + html: ["src/*.html", "!src/benchmark.html", "!src/test.html"] +}; +gulp.task("fonts", function () { + return gulp.src(path.fonts) + .pipe(gulp.dest(path.dist + "static/fonts")); +}); + +function styles(files, dev) { + return (gulp.src(files, {base: "src", cwd: "src"}) + .pipe(dev ? sourcemaps.init() : gutil.noop()) + .pipe(less()) + .pipe(dev ? sourcemaps.write(".", {sourceRoot: "/static"}) : gutil.noop()) + // No sourcemaps support yet :-/ + // https://github.com/jonathanepollack/gulp-minify-css/issues/34 + .pipe(!dev ? minifyCSS() : gutil.noop()) + .pipe(gulp.dest(path.dist + "static")) + .pipe(livereload({ auto: false }))); +} +gulp.task("styles-app-dev", styles.bind(undefined, path.css.app, true)); +gulp.task("styles-app-prod", styles.bind(undefined, path.css.app, false)); +gulp.task("styles-vendor-dev", styles.bind(undefined, path.css.vendor, true)); +gulp.task("styles-vendor-prod", styles.bind(undefined, path.css.vendor, false)); +gulp.task("styles-dev", ["styles-app-dev", "styles-vendor-dev"]); +gulp.task("styles-prod", ["styles-app-prod", "styles-vendor-prod"]); + +function scripts(files, filename, dev) { + return gulp.src(files, {base: "src", cwd: "src"}) + .pipe(dev ? sourcemaps.init() : gutil.noop()) + .pipe(react()) + .pipe(concat(filename)) + .pipe(!dev ? uglify() : gutil.noop()) + .pipe(dev ? sourcemaps.write(".", {sourceRoot: "/static"}) : gutil.noop()) + .pipe(gulp.dest(path.dist + "static/js")) + .pipe(livereload({ auto: false })); +} +gulp.task("scripts-app-dev", scripts.bind(undefined, path.js.app, "app.js", true)); +gulp.task("scripts-app-prod", scripts.bind(undefined, path.js.app, "app.js", false)); +gulp.task("scripts-vendor-dev", scripts.bind(undefined, path.js.vendor, "vendor.js", true)); +gulp.task("scripts-vendor-prod", scripts.bind(undefined, path.js.vendor, "vendor.js", false)); +gulp.task("scripts-dev", ["scripts-app-dev", "scripts-vendor-dev"]); +gulp.task("scripts-prod", ["scripts-app-prod", "scripts-vendor-prod"]); + +gulp.task("jshint", function () { + return gulp.src(["src/js/**"]) + .pipe(react()) + .pipe(jshint()) + .pipe(jshint.reporter("jshint-stylish")) +}); + +gulp.task("html", function () { + return gulp.src(path.html) + .pipe(gulp.dest(path.dist + "static")) + .pipe(livereload({ auto: false })); +}); + +common = ["fonts", "html", "jshint"]; +gulp.task("dev", common.concat(["styles-dev", "scripts-dev"])); +gulp.task("prod", common.concat(["styles-prod", "scripts-prod"])); + +gulp.task("default", ["dev"], function () { + livereload.listen({auto: true}); + gulp.watch(["src/vendor/**"], ["scripts-vendor-dev", "styles-vendor-dev"]); + gulp.watch(["src/js/**"], ["scripts-app-dev", "jshint"]); + gulp.watch(["src/css/**"], ["styles-app-dev"]); + gulp.watch(["src/*.html"], ["html"]); +});
\ No newline at end of file |