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
|
// see https://github.com/tugberkugurlu/gulp-bootswatch-sample/
var gulp = require('gulp'),
minifycss = require('gulp-minify-css'),
concat = require('gulp-concat'),
less = require('gulp-less'),
gulpif = require('gulp-if'),
order = require('gulp-order'),
gutil = require('gulp-util'),
rename = require('gulp-rename'),
foreach = require('gulp-foreach'),
debug = require('gulp-debug'),
path =require('path'),
merge = require('merge-stream'),
del = require('del');
var bootswatch_theme = 'superhero';
gulp.task('default', ['clean'], function() {
gulp.start('fonts', 'styles');
});
gulp.task('clean', function(cb) {
del(['assets/css', 'assets/js', 'assets/less', 'assets/img', 'assets/fonts'], cb)
});
gulp.task('fonts', function() {
var fileList = [
'bower_components/bootstrap/dist/fonts/*',
'bower_components/fontawesome/fonts/*'
];
return gulp.src(fileList)
.pipe(gulp.dest('assets/fonts'));
});
gulp.task('styles', function() {
var baseContent = '@import "bower_components/bootstrap/less/bootstrap.less";@import "bower_components/bootswatch/' + bootswatch_theme + '/variables.less";@import "bower_components/bootswatch/' + bootswatch_theme + '/bootswatch.less";@import "bower_components/bootstrap/less/utilities.less";';
var isBootswatchFile = function(file) {
var suffix = 'bootswatch.less';
return file.path.indexOf(suffix, file.path.length - suffix.length) !== -1;
}
var isBootstrapFile = function(file) {
var suffix = 'bootstrap-',
fileName = path.basename(file.path);
return fileName.indexOf(suffix) == 0;
}
var fileList = [
'client/less/main.less',
'bower_components/bootswatch/**/bootswatch.less',
'bower_components/fontawesome/css/font-awesome.css'
];
return gulp.src(fileList)
.pipe(gulpif(isBootswatchFile, foreach(function(stream, file) {
var themeName = path.basename(path.dirname(file.path)),
content = replaceAll(baseContent, bootswatch_theme, themeName),
file = string_src('bootstrap-' + themeName + '.less', content);
return file;
})))
.pipe(less())
.pipe(gulp.dest('assets/css'))
.pipe(gulpif(isBootstrapFile, foreach(function(stream, file) {
var fileName = path.basename(file.path),
themeName = fileName.substring(fileName.indexOf('-') + 1, fileName.indexOf('.'));
// http://stackoverflow.com/questions/21719833/gulp-how-to-add-src-files-in-the-middle-of-a-pipe
// https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
return merge(stream, gulp.src(['assets/css/font-awesome.css', 'assets/css/main.css']))
.pipe(concat('style-' + themeName + ".css"))
.pipe(gulp.dest('assets/css'))
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest('assets/css'));
})))
});
// http://stackoverflow.com/questions/1144783/replacing-all-occurrences-of-a-string-in-javascript
function escapeRegExp(string) {
return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
function replaceAll(string, find, replace) {
return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
function string_src(filename, string) {
var src = require('stream').Readable({ objectMode: true })
src._read = function () {
this.push(new gutil.File({ cwd: "", base: "", path: filename, contents: new Buffer(string) }))
this.push(null)
}
return src
}
|