aboutsummaryrefslogtreecommitdiffstats
path: root/web/gulpfile.js
blob: 55a99b154a78640fadf65edda98fdc2f873853be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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 plumber = require("gulp-plumber");
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',
            'vendor/react-bootstrap/react-bootstrap.js'
        ],
        app: [
            'js/datastructures.es6.js',
            'js/footer.react.js',
            'js/header.react.js',
            'js/mitmproxy.react.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(plumber())
        .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(plumber())
        .pipe(dev ? sourcemaps.init() : gutil.noop())
        .pipe(react({harmony: true}))
        .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(plumber())
        .pipe(react({harmony: true}))
        .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"]);
});