-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.babel.js
138 lines (124 loc) · 3.6 KB
/
gulpfile.babel.js
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import gulp from 'gulp';
import pug from 'gulp-pug';
import compass from 'gulp-compass';
import minifyHTML from 'gulp-minify-html';
import svgmin from 'gulp-svgmin';
import cleanCSS from 'gulp-clean-css';
import rename from 'gulp-rename';
import gfi from 'gulp-file-insert';
import babel from 'gulp-babel';
import uglify from 'gulp-uglify';
import del from 'del';
import svgstore from 'gulp-svgstore';
import path from 'path';
import scan from 'gulp-scan';
import replace from 'gulp-replace';
import cheerio from 'gulp-cheerio';
//Provide some default values, then look them up
var menuHeight = '28';
var mobileBreak = '800';
export const setConfig = () => {
return gulp.src('src/scss/_bits.scss')
.pipe(scan({ term: /menu-bar-height:.*\n/, fn: function (match, file) {
menuHeight = /(\d+)/.exec(match)[0];
}}))
.pipe(scan({ term: /narrow:.*\n/, fn: function (match, file) {
mobileBreak = /(\d+)/.exec(match)[0];
}}));
}
export const compileMarkup = () => {
return gulp.src('src/pug/menu.pug')
.pipe(pug({
doctype: "html"
}))
.pipe(gulp.dest('tmp'));
}
export const compileSCSS = () => {
return gulp.src('src/scss/mm.scss')
.pipe(compass({
sass: 'src/scss/',
css: 'dist/',
require: ['breakpoint'],
}));
}
export const minifyMarkup = () => {
var opts = {
conditionals: true,
quotes: true,
empty: true
};
return gulp.src('tmp/menu.html')
.pipe(minifyHTML(opts))
.pipe(gulp.dest('tmp/'));
};
export const minifyCSS = () => {
return gulp.src('dist/mm.css')
.pipe(cleanCSS({processImport: false}))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest('tmp'));
};
export const minifySVG = () => {
return gulp
.src('images/*.svg')
.pipe(svgmin(function(file) {
var prefix = path.basename(file.relative, path.extname(file.relative));
return {
plugins: [{
cleanupIDs: {
prefix: prefix + '-',
minify: true
}
}]
}
}))
.pipe(svgstore({inlineSvg: true}))
.pipe(cheerio({
run: function ($) {
$('svg').attr('class', 'lmm-svg');
},
parserOptions: { xmlMode: true }
}))
.pipe(gulp.dest('tmp/'));
};
export const injectHTML = () => {
return gulp.src('src/js/lmm.dev.js')
.pipe(replace('MENUBARHEIGHT', menuHeight))
.pipe(replace('MOBILEBREAK', mobileBreak))
.pipe(gfi({
"{$lmm}": "tmp/menu.html",
"{$svg}": "tmp/images.svg"
}))
.pipe(gulp.dest('tmp'));
};
export const injectCSS = () =>{
return gulp.src('tmp/lmm.dev.js')
.pipe(gfi({
"{$cssmin}": "tmp/mm.min.css",
}))
.pipe(rename({extname:".js", basename: "lmm"}))
.pipe(gulp.dest('dist/'));
};
export const minifyJS = () => {
return gulp.src('dist/lmm.js')
.pipe(uglify({compress:false}))
.pipe(rename({suffix:".min"}))
.pipe(gulp.dest('dist/'));
};
export const compile = () => {
return gulp.src('dist/lmm.js')
.pipe(babel())
.pipe(gulp.dest('dist/'));
}
export const clean = () => {
return del('tmp');
}
export const build = gulp.series(setConfig,
gulp.parallel(compileMarkup, compileSCSS),
gulp.parallel(minifyMarkup, minifyCSS, minifySVG),
injectHTML,
injectCSS,
compile,
minifyJS,
clean);
build.description = "Compile and build the megamenu";
export default build;