material-design-lite/gulpfile.js

231 lines
6.4 KiB
JavaScript
Raw Normal View History

/**
*
2015-02-16 06:06:43 -08:00
* Material Design Lite
2015-01-06 05:36:47 -08:00
* Copyright 2015 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
2014-10-22 06:14:09 -07:00
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*
*/
2014-04-17 05:02:38 -07:00
'use strict';
2014-06-19 05:14:21 -07:00
// Include Gulp & Tools We'll Use
2014-04-17 05:02:38 -07:00
var gulp = require('gulp');
2014-06-07 10:38:49 -07:00
var $ = require('gulp-load-plugins')();
var del = require('del');
2014-06-18 18:37:49 -07:00
var runSequence = require('run-sequence');
var browserSync = require('browser-sync');
var reload = browserSync.reload;
2015-01-29 07:26:23 -08:00
var fs = require('fs');
var path = require('path');
2015-02-04 02:14:57 -08:00
var pkg = require('./package.json');
var banner = ['/**',
' * <%= pkg.name %> - <%= pkg.description %>',
' * @version v<%= pkg.version %>',
' * @link <%= pkg.homepage %>',
' * @license <%= pkg.license.type %>',
2015-02-04 02:14:57 -08:00
' */',
''].join('\n');
var AUTOPREFIXER_BROWSERS = [
'ie >= 10',
'ie_mob >= 10',
'ff >= 30',
'chrome >= 34',
'safari >= 7',
'opera >= 23',
'ios >= 7',
'android >= 4.4',
'bb >= 10'
];
2014-04-17 05:02:38 -07:00
2014-06-19 05:14:21 -07:00
// Lint JavaScript
2015-02-04 02:14:57 -08:00
gulp.task('jshint', function () {
return gulp.src('src/**/*.js')
.pipe(reload({stream: true, once: true}))
2015-02-10 05:20:01 -08:00
.pipe($.jshint())
.pipe($.jshint.reporter('jshint-stylish'))
.pipe($.if(!browserSync.active, $.jshint.reporter('fail')));
2014-06-19 05:14:21 -07:00
});
2014-06-19 05:14:21 -07:00
// Optimize Images
2015-02-04 02:14:57 -08:00
// TODO: Update image paths in final CSS to match root/images
gulp.task('images', function () {
return gulp.src('src/**/*.{svg,png,jpg}')
2015-02-24 01:11:04 -08:00
.pipe($.flatten())
2014-06-20 08:20:44 -07:00
.pipe($.cache($.imagemin({
progressive: true,
interlaced: true
})))
2015-02-04 02:14:57 -08:00
.pipe(gulp.dest('./images'))
2014-06-20 08:20:44 -07:00
.pipe($.size({title: 'images'}));
2014-06-19 05:14:21 -07:00
});
// Copy fonts
gulp.task('fonts', function () {
return gulp.src([
'fonts/*'
]).pipe(gulp.dest('.tmp/fonts'));
});
2015-02-04 02:14:57 -08:00
// Compile and Automatically Prefix Stylesheets (dev)
gulp.task('styles:dev', ['fonts'], function () {
2015-02-04 02:14:57 -08:00
return gulp.src([
'src/**/**/*.scss'
])
.pipe($.changed('.tmp/styles', {extension: '.css'}))
.pipe($.sass({
precision: 10,
onError: console.error.bind(console, 'Sass error:')
}))
.pipe($.autoprefixer(AUTOPREFIXER_BROWSERS))
2015-02-05 04:39:43 -08:00
.pipe(gulp.dest('.tmp/styles'))
2015-02-04 02:14:57 -08:00
.pipe($.size({title: 'styles'}));
2014-07-08 07:53:00 -07:00
});
// Compile and Automatically Prefix Stylesheet Templates (production)
gulp.task('styletemplates', function () {
// For best performance, don't add Sass partials to `gulp.src`
return gulp.src([
'src/template.scss'
])
// Generate Source Maps
.pipe ($.sourcemaps.init())
.pipe($.sass({
precision: 10,
onError: console.error.bind(console, 'Sass error:')
}))
.pipe($.autoprefixer(AUTOPREFIXER_BROWSERS))
.pipe(gulp.dest('.tmp'))
// Concatenate Styles
.pipe($.concat('material.css.template'))
.pipe($.header(banner, {pkg: pkg}))
.pipe(gulp.dest('./css'))
// Minify Styles
.pipe($.if('*.css', $.csso()))
.pipe($.concat('material.min.css.template'))
.pipe(gulp.dest('./css'))
.pipe($.size({title: 'styles'}));
});
2015-02-04 02:14:57 -08:00
// Compile and Automatically Prefix Stylesheets (production)
gulp.task('styles', ['styletemplates'], function () {
// For best performance, don't add Sass partials to `gulp.src`
return gulp.src([
2015-02-04 02:14:57 -08:00
'src/styleguide.scss'
])
2015-02-24 06:21:47 -08:00
// Generate Source Maps
.pipe ($.sourcemaps.init())
2014-11-25 03:22:05 -08:00
.pipe($.sass({
precision: 10,
onError: console.error.bind(console, 'Sass error:')
}))
.pipe($.autoprefixer(AUTOPREFIXER_BROWSERS))
2014-09-03 03:47:19 -07:00
.pipe(gulp.dest('.tmp'))
2015-02-04 02:14:57 -08:00
// Concatenate Styles
.pipe($.concat('material.css'))
.pipe($.header(banner, {pkg: pkg}))
.pipe(gulp.dest('./css'))
// Minify Styles
.pipe($.if('*.css', $.csso()))
2015-02-04 02:14:57 -08:00
.pipe($.concat('material.min.css'))
//.pipe($.header(banner, {pkg: pkg}))
2015-02-24 06:21:47 -08:00
.pipe($.sourcemaps.write('./'))
2015-02-04 02:14:57 -08:00
.pipe(gulp.dest('./css'))
.pipe($.size({title: 'styles'}));
2014-06-18 18:37:49 -07:00
});
2014-06-18 12:58:06 -07:00
// Concatenate And Minify JavaScript
2015-02-04 02:14:57 -08:00
gulp.task('scripts', function () {
var sources = [
// Component handler
2015-02-04 02:14:57 -08:00
'src/wskComponentHandler.js',
// Polyfills/dependencies
2015-02-04 02:14:57 -08:00
'src/third_party/**/*.js',
// Base components
2015-02-04 02:14:57 -08:00
'src/animation/animation.js',
'src/button/button.js',
'src/checkbox/checkbox.js',
'src/column-layout/column-layout.js',
'src/icon-toggle/icon-toggle.js',
'src/menu/menu.js',
2015-02-04 02:14:57 -08:00
'src/radio/radio.js',
'src/slider/slider.js',
'src/spinner/spinner.js',
'src/switch/switch.js',
'src/tabs/tabs.js',
'src/textfield/textfield.js',
'src/tooltip/tooltip.js',
// Complex components (which reuse base components)
2015-02-04 02:14:57 -08:00
'src/layout/layout.js',
// And finally, the ripples
2015-02-04 02:14:57 -08:00
'src/ripple/ripple.js'
];
return gulp.src(sources)
2015-02-04 02:14:57 -08:00
.pipe($.sourcemaps.init())
// Concatenate Scripts
.pipe($.concat('material.js'))
.pipe($.header(banner, {pkg: pkg}))
.pipe(gulp.dest('./js'))
// Minify Scripts
.pipe($.uglify({preserveComments: 'some', sourceRoot: '.', sourceMapIncludeSources: true}))
.pipe($.concat('material.min.js'))
// Write Source Maps
.pipe($.sourcemaps.write('./'))
.pipe(gulp.dest('./js'))
.pipe($.size({title: 'scripts'}));
});
// Run Unit Tests
gulp.task('mocha', function () {
2015-02-16 01:15:59 -08:00
return gulp.src('./test/index.html')
.pipe($.mochaPhantomjs({reporter: 'list'}))
});
2014-06-19 05:14:21 -07:00
// Clean Output Directory
2015-02-04 02:14:57 -08:00
gulp.task('clean', del.bind(null, ['.tmp', 'css/*', 'js/*', '!dist/.git'], {dot: true}));
2014-04-17 05:02:38 -07:00
2014-06-19 05:14:21 -07:00
// Watch Files For Changes & Reload
2015-02-04 02:14:57 -08:00
gulp.task('serve', ['styles:dev'], function () {
browserSync({
2014-06-25 15:14:19 -07:00
notify: false,
// Customize the BrowserSync console logging prefix
logPrefix: 'WSK',
2015-02-05 04:39:43 -08:00
server: ['.tmp', 'src', '.tmp/styles']
2014-06-20 08:20:44 -07:00
});
2014-04-17 05:02:38 -07:00
2015-02-04 02:14:57 -08:00
gulp.watch(['src/**/**/**/*.html'], reload);
gulp.watch(['src/**/**/*.{scss,css}'], ['styles:dev', reload]);
gulp.watch(['src/**/*.js'], ['jshint']);
2014-04-17 05:02:38 -07:00
});
2014-06-07 10:38:49 -07:00
// Build and serve the output from the dist build
2015-02-04 02:14:57 -08:00
gulp.task('serve:dist', ['default'], function () {
2014-06-30 13:23:24 -07:00
browserSync({
notify: false,
logPrefix: 'WSK',
2015-02-04 02:14:57 -08:00
server: './',
baseDir: 'src'
});
});
2014-06-19 16:36:01 -07:00
// Build Production Files, the Default Task
2015-02-20 18:41:44 -08:00
gulp.task('default', ['clean','mocha'], function (cb) {
2015-01-29 07:26:23 -08:00
runSequence(
'styles',
2015-02-04 02:14:57 -08:00
['jshint', 'scripts', 'images'],
2015-01-29 07:26:23 -08:00
cb);
2014-06-07 10:38:49 -07:00
});
2015-02-16 01:15:59 -08:00
gulp.task('test', ['jshint', 'mocha']);