materialize-css
Version:
Builds Materialize distribution packages
605 lines (561 loc) • 16.6 kB
JavaScript
module.exports = function(grunt) {
// configure the tasks
grunt.initConfig({
// Copy
copy: {
dist: { cwd: 'fonts', src: [ '**' ], dest: 'dist/fonts', expand: true },
},
// Jasmine
jasmine: {
components: {
src: [
'bin/materialize.js'
],
options: {
vendor: [
'node_modules/jquery/dist/jquery.min.js',
'node_modules/jasmine-jquery/lib/jasmine-jquery.js'
],
styles: 'bin/materialize.css',
specs: 'tests/spec/**/*Spec.js',
helpers: 'tests/spec/helper.js',
keepRunner : true,
//helpers: 'test/spec/*.js'
}
}
},
// Sass
sass: { // Task
expanded: { // Target
options: { // Target options
outputStyle: 'expanded',
sourcemap: false,
},
files: {
'dist/css/materialize.css': 'sass/materialize.scss',
}
},
min: {
options: {
outputStyle: 'compressed',
sourcemap: false
},
files: {
'dist/css/materialize.min.css': 'sass/materialize.scss',
}
},
// Compile ghpages css
gh: {
options: {
outputStyle: 'compressed',
sourcemap: false
},
files: {
'css/ghpages-materialize.css': 'sass/ghpages-materialize.scss',
}
},
// Compile bin css
bin: {
options: {
outputStyle: 'expanded',
sourcemap: false
},
files: {
'bin/materialize.css': 'sass/materialize.scss',
}
}
},
// PostCss Autoprefixer
postcss: {
options: {
processors: [
require('autoprefixer')({
browsers: [
'last 2 versions',
'Chrome >= 30',
'Firefox >= 30',
'ie >= 10',
'Safari >= 8']
})
]
},
expended: {
src: 'dist/css/materialize.css'
},
min: {
src: 'dist/css/materialize.min.css'
},
gh: {
src: 'css/ghpages-materialize.css'
},
bin: {
src: 'bin/materialize.css'
}
},
// Browser Sync integration
browserSync: {
bsFiles: ["bin/*.js", "bin/*.css", "!**/node_modules/**/*"],
options: {
server: {
baseDir: "./" // make server from root dir
},
port: 8000,
ui: {
port: 8080,
weinre: {
port: 9090
}
},
open: false
}
},
// Concat
concat: {
options: {
separator: ';'
},
dist: {
// the files to concatenate
src: [
"js/initial.js",
"js/jquery.easing.1.3.js",
"js/animation.js",
"js/velocity.min.js",
"js/hammer.min.js",
"js/jquery.hammer.js",
"js/global.js",
"js/collapsible.js",
"js/dropdown.js",
"js/modal.js",
"js/materialbox.js",
"js/parallax.js",
"js/tabs.js",
"js/tooltip.js",
"js/waves.js",
"js/toasts.js",
"js/sideNav.js",
"js/scrollspy.js",
"js/forms.js",
"js/slider.js",
"js/cards.js",
"js/chips.js",
"js/pushpin.js",
"js/buttons.js",
"js/transitions.js",
"js/scrollFire.js",
"js/date_picker/picker.js",
"js/date_picker/picker.date.js",
"js/character_counter.js",
"js/carousel.js",
],
// the location of the resulting JS file
dest: 'dist/js/materialize.js'
},
temp: {
// the files to concatenate
src: [
"js/initial.js",
"js/jquery.easing.1.3.js",
"js/animation.js",
"js/velocity.min.js",
"js/hammer.min.js",
"js/jquery.hammer.js",
"js/global.js",
"js/collapsible.js",
"js/dropdown.js",
"js/modal.js",
"js/materialbox.js",
"js/parallax.js",
"js/tabs.js",
"js/tooltip.js",
"js/waves.js",
"js/toasts.js",
"js/sideNav.js",
"js/scrollspy.js",
"js/forms.js",
"js/slider.js",
"js/cards.js",
"js/chips.js",
"js/pushpin.js",
"js/buttons.js",
"js/transitions.js",
"js/scrollFire.js",
"js/date_picker/picker.js",
"js/date_picker/picker.date.js",
"js/character_counter.js",
"js/carousel.js",
],
// the location of the resulting JS file
dest: 'temp/js/materialize.js'
},
},
// Uglify
uglify: {
options: {
// Use these options when debugging
// mangle: false,
// compress: false,
// beautify: true
},
dist: {
files: {
'dist/js/materialize.min.js': ['dist/js/materialize.js']
}
},
bin: {
files: {
'bin/materialize.js': ['temp/js/materialize.js']
}
},
extras: {
files: {
'extras/noUiSlider/nouislider.min.js': ['extras/noUiSlider/nouislider.js']
}
}
},
// Compress
compress: {
main: {
options: {
archive: 'bin/materialize.zip',
level: 6
},
files:[
{ expand: true, cwd: 'dist/', src: ['**/*'], dest: 'materialize/'},
{ expand: true, cwd: './', src: ['LICENSE', 'README.md'], dest: 'materialize/'},
]
},
src: {
options: {
archive: 'bin/materialize-src.zip',
level: 6
},
files:[
{expand: true, cwd: 'fonts/', src: ['**/*'], dest: 'materialize-src/fonts/'},
{expand: true, cwd: 'sass/', src: ['materialize.scss'], dest: 'materialize-src/sass/'},
{expand: true, cwd: 'sass/', src: ['components/**/*'], dest: 'materialize-src/sass/'},
{expand: true, cwd: 'js/', src: [
"initial.js",
"jquery.easing.1.3.js",
"animation.js",
"velocity.min.js",
"hammer.min.js",
"jquery.hammer.js",
"global.js",
"collapsible.js",
"dropdown.js",
"modal.js",
"materialbox.js",
"parallax.js",
"tabs.js",
"tooltip.js",
"waves.js",
"toasts.js",
"sideNav.js",
"scrollspy.js",
"forms.js",
"slider.js",
"cards.js",
"chips.js",
"pushpin.js",
"buttons.js",
"transitions.js",
"scrollFire.js",
"date_picker/picker.js",
"date_picker/picker.date.js",
"character_counter.js",
"carousel.js",
], dest: 'materialize-src/js/'},
{expand: true, cwd: 'dist/js/', src: ['**/*'], dest: 'materialize-src/js/bin/'},
{expand: true, cwd: './', src: ['LICENSE', 'README.md'], dest: 'materialize-src/'}
]
},
starter_template: {
options: {
archive: 'templates/starter-template.zip',
level: 6
},
files:[
{ expand: true, cwd: 'dist/', src: ['**/*'], dest: 'starter-template/'},
{ expand: true, cwd: 'templates/starter-template/', src: ['index.html', 'LICENSE'], dest: 'starter-template/'},
{ expand: true, cwd: 'templates/starter-template/css', src: ['style.css'], dest: 'starter-template/css'},
{ expand: true, cwd: 'templates/starter-template/js', src: ['init.js'], dest: 'starter-template/js'}
]
},
parallax_template: {
options: {
archive: 'templates/parallax-template.zip',
level: 6
},
files:[
{ expand: true, cwd: 'dist/', src: ['**/*'], dest: 'parallax-template/'},
{ expand: true, cwd: 'templates/parallax-template/', src: ['index.html', 'LICENSE', 'background1.jpg', 'background2.jpg', 'background3.jpg'], dest: 'parallax-template/'},
{ expand: true, cwd: 'templates/parallax-template/css', src: ['style.css'], dest: 'parallax-template/css'},
{ expand: true, cwd: 'templates/parallax-template/js', src: ['init.js'], dest: 'parallax-template/js'}
]
}
},
// Clean
clean: {
temp: {
src: [ 'temp/' ]
},
},
// Jade
jade: {
compile: {
options: {
pretty: true,
data: {
debug: false
}
},
files: {
"index.html": "jade/index.jade",
"icons.html": "jade/icons.jade",
"about.html": "jade/about.jade",
"sass.html": "jade/sass.jade",
"getting-started.html": "jade/getting-started.jade",
"mobile.html": "jade/mobile.jade",
"showcase.html": "jade/showcase.jade",
"parallax.html": "jade/parallax.jade",
"parallax-demo.html": "jade/parallax-demo.jade",
"typography.html": "jade/typography.jade",
"color.html": "jade/color.jade",
"shadow.html": "jade/shadow.jade",
"grid.html": "jade/grid.jade",
"media-css.html": "jade/media-css.jade",
"table.html": "jade/table.jade",
"helpers.html": "jade/helpers.jade",
"forms.html": "jade/forms.jade",
"buttons.html": "jade/buttons.jade",
"navbar.html": "jade/navbar.jade",
"cards.html": "jade/cards.jade",
"preloader.html": "jade/preloader.jade",
"collections.html": "jade/collections.jade",
"badges.html": "jade/badges.jade",
"footer.html": "jade/footer.jade",
"dialogs.html": "jade/dialogs.jade",
"modals.html": "jade/modals.jade",
"dropdown.html": "jade/dropdown.jade",
"tabs.html": "jade/tabs.jade",
"side-nav.html": "jade/sideNav.jade",
"pushpin.html": "jade/pushpin.jade",
"waves.html": "jade/waves.jade",
"media.html": "jade/media.jade",
"collapsible.html": "jade/collapsible.jade",
"chips.html": "jade/chips.jade",
"scrollfire.html": "jade/scrollFire.jade",
"scrollspy.html": "jade/scrollspy.jade",
"transitions.html": "jade/transitions.jade",
"fullscreen-slider-demo.html": "jade/fullscreen-slider-demo.jade",
"pagination.html": "jade/pagination.jade",
"breadcrumbs.html": "jade/breadcrumbs.jade",
"carousel.html": "jade/carousel.jade",
"pushpin-demo.html": "jade/pushpin-demo.jade",
"css-transitions.html": "jade/css-transitions.jade",
"404.html": "jade/404.jade",
}
}
},
// Watch Files
watch: {
jade: {
files: ['jade/**/*'],
tasks: ['jade_compile'],
options: {
interrupt: false,
spawn: false,
},
},
js: {
files: [ "js/**/*", "!js/init.js"],
tasks: ['js_compile'],
options: {
interrupt: false,
spawn: false,
},
},
sass: {
files: ['sass/**/*'],
tasks: ['sass_compile'],
options: {
interrupt: false,
spawn: false,
},
}
},
// Concurrent
concurrent: {
options: {
logConcurrentOutput: true,
limit: 10,
},
monitor: {
tasks: ["watch:jade", "watch:js", "watch:sass", "notify:watching", 'server']
},
},
// Notifications
notify: {
watching: {
options: {
enabled: true,
message: 'Watching Files!',
title: "Materialize", // defaults to the name in package.json, or will use project directory's name
success: true, // whether successful grunt executions should be notified automatically
duration: 1 // the duration of notification in seconds, for `notify-send only
}
},
sass_compile: {
options: {
enabled: true,
message: 'Sass Compiled!',
title: "Materialize",
success: true,
duration: 1
}
},
js_compile: {
options: {
enabled: true,
message: 'JS Compiled!',
title: "Materialize",
success: true,
duration: 1
}
},
jade_compile: {
options: {
enabled: true,
message: 'Jade Compiled!',
title: "Materialize",
success: true,
duration: 1
}
},
server: {
options: {
enabled: true,
message: 'Server Running!',
title: "Materialize",
success: true,
duration: 1
}
}
},
// Text Replace
replace: {
version: { // Does not edit README.md
src: [
'bower.json',
'package.json',
'package.js',
'jade/**/*.html'
],
overwrite: true,
replacements: [{
from: grunt.option( "oldver" ),
to: grunt.option( "newver" )
}]
},
readme: { // Changes README.md
src: [
'README.md'
],
overwrite: true,
replacements: [{
from: 'Current Version : v'+grunt.option( "oldver" ),
to: 'Current Version : v'+grunt.option( "newver" )
}]
},
},
// Create Version Header for files
usebanner: {
release: {
options: {
position: 'top',
banner: "/*!\n * Materialize v"+ grunt.option( "newver" ) +" (http://materializecss.com)\n * Copyright 2014-2015 Materialize\n * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)\n */",
linebreak: true
},
files: {
src: [ 'dist/css/*.css', 'dist/js/*.js']
}
}
},
// Rename files
rename: {
rename_src: {
src: 'bin/materialize-src'+'.zip',
dest: 'bin/materialize-src-v'+grunt.option( "newver" )+'.zip',
options: {
ignore: true
}
},
rename_compiled: {
src: 'bin/materialize'+'.zip',
dest: 'bin/materialize-v'+grunt.option( "newver" )+'.zip',
options: {
ignore: true
}
},
},
// Removes console logs
removelogging: {
source: {
src: ["js/**/*.js", "!js/velocity.min.js"],
options: {
// see below for options. this is optional.
}
}
},
});
// load the tasks
// grunt.loadNpmTasks('grunt-gitinfo');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-concurrent');
grunt.loadNpmTasks('grunt-notify');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-banner');
grunt.loadNpmTasks('grunt-rename');
grunt.loadNpmTasks('grunt-remove-logging');
grunt.loadNpmTasks('grunt-browser-sync');
grunt.loadNpmTasks('grunt-contrib-jasmine');
grunt.loadNpmTasks('grunt-postcss');
// define the tasks
grunt.registerTask(
'release',[
'lint',
'copy',
'sass:expanded',
'sass:min',
'postcss:expended',
'postcss:min',
'concat:dist',
'uglify:dist',
'uglify:extras',
'usebanner:release',
'compress:main',
'compress:src',
'compress:starter_template',
'compress:parallax_template',
'replace:version',
'replace:readme',
'rename:rename_src',
'rename:rename_compiled'
]
);
grunt.registerTask('jade_compile', ['jade', 'notify:jade_compile']);
grunt.registerTask('js_compile', ['concat:temp', 'uglify:bin', 'notify:js_compile', 'clean:temp']);
grunt.registerTask('sass_compile', ['sass:gh', 'sass:bin', 'postcss:gh', 'postcss:bin', 'notify:sass_compile']);
grunt.registerTask('server', ['browserSync', 'notify:server']);
grunt.registerTask('lint', ['removelogging:source']);
grunt.registerTask('monitor', ["concurrent:monitor"]);
grunt.registerTask('travis', ['jasmine']);
};