storefront/Gruntfile.js
Tiago Noronha 432c899080
Merge pull request #779 from woocommerce/update/771
Remove columns wrapper and add legacy support
2018-03-27 16:44:13 +01:00

465 lines
13 KiB
JavaScript

/* jshint node:true */
module.exports = function( grunt ) {
'use strict';
grunt.initConfig({
// Autoprefixer.
postcss: {
options: {
processors: [
require( 'autoprefixer' )({
browsers: [
'> 0.1%',
'ie 8',
'ie 9'
]
})
]
},
dist: {
src: [
'style.css',
'assets/css/admin/*.css',
'assets/css/admin/welcome-screen/welcome.css',
'assets/css/admin/customizer/customizer.css',
'assets/css/woocommerce/extensions/*.css',
'assets/css/woocommerce/woocommerce.css',
'assets/css/woocommerce/woocommerce-legacy.css',
'assets/css/jetpack/jetpack.css',
'assets/css/base/*.css'
]
}
},
// JavaScript linting with JSHint.
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: [
'Gruntfile.js',
'assets/js/*.js',
'!assets/js/*.min.js',
'assets/js/admin/*.js',
'!assets/js/admin/*.min.js',
'assets/js/woocommerce/*.js',
'!assets/js/woocommerce/*.min.js'
]
},
// Sass linting with Stylelint.
stylelint: {
options: {
configFile: '.stylelintrc'
},
all: [
'assets/css/**/*.scss',
'!assets/css/sass/vendors/**/*.scss'
]
},
// Minify .js files.
uglify: {
options: {
preserveComments: 'some'
},
main: {
files: [{
expand: true,
cwd: 'assets/js/',
src: [
'*.js',
'!*.min.js'
],
dest: 'assets/js/',
ext: '.min.js'
}]
},
vendor: {
files: [{
expand: true,
cwd: 'assets/js/vendor/',
src: [
'*.js',
'!*.min.js'
],
dest: 'assets/js/vendor/',
ext: '.min.js'
}]
},
woocommerce: {
files: [{
expand: true,
cwd: 'assets/js/woocommerce/',
src: [
'*.js',
'!*.min.js'
],
dest: 'assets/js/woocommerce/',
ext: '.min.js'
}]
},
admin: {
files: [{
expand: true,
cwd: 'assets/js/admin/',
src: [
'*.js',
'!*.min.js'
],
dest: 'assets/js/admin/',
ext: '.min.js'
}]
}
},
// Compile all .scss files.
sass: {
dist: {
options: {
require: 'susy',
sourcemap: 'none',
includePaths: require( 'node-bourbon' ).includePaths
},
files: [{
'style.css': 'style.scss',
'assets/css/admin/admin.css': 'assets/css/admin/admin.scss',
'assets/css/admin/plugin-install.css': 'assets/css/admin/plugin-install.scss',
'assets/css/admin/welcome-screen/welcome.css': 'assets/css/admin/welcome-screen/welcome.scss',
'assets/css/admin/customizer/customizer.css': 'assets/css/admin/customizer/customizer.scss',
'assets/css/woocommerce/extensions/bookings.css': 'assets/css/woocommerce/extensions/bookings.scss',
'assets/css/woocommerce/extensions/brands.css': 'assets/css/woocommerce/extensions/brands.scss',
'assets/css/woocommerce/extensions/wishlists.css': 'assets/css/woocommerce/extensions/wishlists.scss',
'assets/css/woocommerce/extensions/ajax-layered-nav.css': 'assets/css/woocommerce/extensions/ajax-layered-nav.scss',
'assets/css/woocommerce/extensions/variation-swatches.css': 'assets/css/woocommerce/extensions/variation-swatches.scss',
'assets/css/woocommerce/extensions/composite-products.css': 'assets/css/woocommerce/extensions/composite-products.scss',
'assets/css/woocommerce/extensions/photography.css': 'assets/css/woocommerce/extensions/photography.scss',
'assets/css/woocommerce/extensions/product-reviews-pro.css': 'assets/css/woocommerce/extensions/product-reviews-pro.scss',
'assets/css/woocommerce/extensions/smart-coupons.css': 'assets/css/woocommerce/extensions/smart-coupons.scss',
'assets/css/woocommerce/extensions/deposits.css': 'assets/css/woocommerce/extensions/deposits.scss',
'assets/css/woocommerce/extensions/bundles.css': 'assets/css/woocommerce/extensions/bundles.scss',
'assets/css/woocommerce/extensions/ship-multiple-addresses.css': 'assets/css/woocommerce/extensions/ship-multiple-addresses.scss',
'assets/css/woocommerce/extensions/advanced-product-labels.css': 'assets/css/woocommerce/extensions/advanced-product-labels.scss',
'assets/css/woocommerce/extensions/mix-and-match.css': 'assets/css/woocommerce/extensions/mix-and-match.scss',
'assets/css/woocommerce/extensions/memberships.css': 'assets/css/woocommerce/extensions/memberships.scss',
'assets/css/woocommerce/extensions/quick-view.css': 'assets/css/woocommerce/extensions/quick-view.scss',
'assets/css/woocommerce/woocommerce.css': 'assets/css/woocommerce/woocommerce.scss',
'assets/css/woocommerce/woocommerce-legacy.css': 'assets/css/woocommerce/woocommerce-legacy.scss',
'assets/css/jetpack/jetpack.css': 'assets/css/jetpack/jetpack.scss',
'assets/css/base/icons.css': 'assets/css/base/icons.scss'
}]
}
},
// Minify all .css files.
cssmin: {
main: {
files: {
'style.css': ['style.css']
}
},
admin: {
expand: true,
cwd: 'assets/css/admin/',
src: ['*.css'],
dest: 'assets/css/admin/',
ext: '.css'
},
welcome: {
expand: true,
cwd: 'assets/css/admin/welcome-screen/',
src: ['*.css'],
dest: 'assets/css/admin/welcome-screen/',
ext: '.css'
},
customizer: {
expand: true,
cwd: 'assets/css/admin/customizer/',
src: ['*.css'],
dest: 'assets/css/admin/customizer/',
ext: '.css'
},
jetpack: {
expand: true,
cwd: 'assets/css/jetpack/',
src: ['*.css'],
dest: 'assets/css/jetpack/',
ext: '.css'
},
woocommerce: {
expand: true,
cwd: 'assets/css/woocommerce/',
src: ['*.css'],
dest: 'assets/css/woocommerce/',
ext: '.css'
}
},
// Watch changes for assets.
watch: {
css: {
files: [
'style.scss',
'assets/css/admin/welcome-screen/*.scss',
'assets/css/woocommerce/*.scss',
'assets/css/jetpack/*.scss',
'assets/css/base/*.scss',
'assets/css/components/*.scss',
'assets/css/sass/utils/*.scss',
'assets/css/sass/vendors/*.scss'
],
tasks: [
'sass',
'css'
]
},
js: {
files: [
// main js
'assets/js/*js',
'!assets/js/*.min.js',
// customizer js
'assets/js/customizer/*js',
'!assets/js/customizer/*.min.js',
// WooCommerce js
'assets/js/woocommerce/*js',
'!assets/js/woocommerce/*.min.js',
// Welcome screen js
'assets/js/admin/welcome-screen/*js',
'!assets/js/admin/welcome-screen/*.min.js'
],
tasks: ['jshint', 'uglify']
}
},
// Generate POT files.
makepot: {
options: {
type: 'wp-theme',
domainPath: 'languages',
potHeaders: {
'report-msgid-bugs-to': 'https://github.com/woothemes/storefront/issues',
'language-team': 'LANGUAGE <EMAIL@ADDRESS>'
}
},
frontend: {
options: {
potFilename: 'storefront.pot',
exclude: [
'storefront/.*' // Exclude deploy directory
]
}
}
},
// Check textdomain errors.
checktextdomain: {
options:{
text_domain: 'storefront',
keywords: [
'__:1,2d',
'_e:1,2d',
'_x:1,2c,3d',
'esc_html__:1,2d',
'esc_html_e:1,2d',
'esc_html_x:1,2c,3d',
'esc_attr__:1,2d',
'esc_attr_e:1,2d',
'esc_attr_x:1,2c,3d',
'_ex:1,2c,3d',
'_n:1,2,4d',
'_nx:1,2,4c,5d',
'_n_noop:1,2,3d',
'_nx_noop:1,2,3c,4d'
]
},
files: {
src: [
'**/*.php', // Include all files
'!node_modules/**' // Exclude node_modules/
],
expand: true
}
},
// Creates deploy-able theme
copy: {
deploy: {
src: [
'**',
'!.*',
'!*.md',
'!.*/**',
'.htaccess',
'!Gruntfile.js',
'!package.json',
'!node_modules/**',
'!.DS_Store',
'!npm-debug.log',
'!composer.json',
'!assets/css/sass/**',
'!assets/css/**/*.scss'
],
dest: 'storefront',
expand: true,
dot: true
}
},
// RTLCSS
rtlcss: {
main: {
options: {
plugins: [
{
name: 'swap-fontawesome-directional-icons',
priority: 10,
directives: {
control: {},
value: []
},
processors: [
{
expr: /content/im,
action: function( prop, value ) {
if ( value === '"\\f190"' ) { // arrow-circle-o-left
value = '"\\f18e"';
} else if ( value === '"\\f18e"' ) { // arrow-circle-o-right
value = '"\\f190"';
} else if ( value === '"\\f191"' ) { // caret-square-o-left
value = '"\\f152"';
} else if ( value === '"\\f152"' ) { // caret-square-o-right
value = '"\\f191"';
} else if ( value === '"\\f100"' ) { // angle-double-left
value = '"\\f101"';
} else if ( value === '"\\f101"' ) { // angle-double-right
value = '"\\f100"';
} else if ( value === '"\\f104"' ) { // angle-left
value = '"\\f105"';
} else if ( value === '"\\f105"' ) { // angle-right
value = '"\\f104"';
} else if ( value === '"\\f0a8"' ) { // arrow-circle-left
value = '"\\f0a9"';
} else if ( value === '"\\f0a9"' ) { // arrow-circle-right
value = '"\\f0a8"';
} else if ( value === '"\\f060"' ) { // arrow-left
value = '"\\f061"';
} else if ( value === '"\\f061"' ) { // arrow-right
value = '"\\f060"';
} else if ( value === '"\\f0d9"' ) { // caret-left
value = '"\\f0da"';
} else if ( value === '"\\f0da"' ) { // caret-right
value = '"\\f0d9"';
} else if ( value === '"\\f137"' ) { // chevron-circle-left
value = '"\\f138"';
} else if ( value === '"\\f138"' ) { // chevron-circle-right
value = '"\\f137"';
} else if ( value === '"\\f053"' ) { // chevron-left
value = '"\\f054"';
} else if ( value === '"\\f054"' ) { // chevron-right
value = '"\\f053"';
} else if ( value === '"\\f0a5"' ) { // hand-o-left
value = '"\\f0a4"';
} else if ( value === '"\\f0a4"' ) { // hand-o-right
value = '"\\f0a5"';
} else if ( value === '"\\f177"' ) { // long-arrow-left
value = '"\\f178"';
} else if ( value === '"\\f178"' ) { // long-arrow-right
value = '"\\f177"';
} else if ( value === '"\\f191"' ) { // toggle-left
value = '"\\f152"';
} else if ( value === '"\\f152"' ) { // toggle-right
value = '"\\f191"';
}
return { prop: prop, value: value };
}
}
]
}
]
},
expand: true,
ext: '-rtl.css',
src: [
'style.css',
'assets/css/woocommerce/extensions/bookings.css',
'assets/css/woocommerce/extensions/brands.css',
'assets/css/woocommerce/extensions/wishlists.css',
'assets/css/woocommerce/extensions/ajax-layered-nav.css',
'assets/css/woocommerce/extensions/variation-swatches.css',
'assets/css/woocommerce/extensions/composite-products.css',
'assets/css/woocommerce/extensions/photography.css',
'assets/css/woocommerce/extensions/product-reviews-pro.css',
'assets/css/woocommerce/extensions/smart-coupons.css',
'assets/css/woocommerce/extensions/deposits.css',
'assets/css/woocommerce/extensions/bundles.css',
'assets/css/woocommerce/extensions/ship-multiple-addresses.css',
'assets/css/woocommerce/extensions/advanced-product-labels.css',
'assets/css/woocommerce/extensions/mix-and-match.css',
'assets/css/woocommerce/extensions/memberships.css',
'assets/css/woocommerce/extensions/quick-view.css',
'assets/css/woocommerce/woocommerce.css',
'assets/css/woocommerce/woocommerce-legacy.css',
'assets/css/admin/welcome-screen/welcome.css',
'assets/css/jetpack/jetpack.css',
'assets/css/base/icons.css'
]
}
},
compress: {
zip: {
options: {
archive: './storefront.zip',
mode: 'zip'
},
files: [
{ src: './storefront/**' }
]
}
}
});
// Load NPM tasks to be used here
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-sass' );
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-wp-i18n' );
grunt.loadNpmTasks( 'grunt-checktextdomain' );
grunt.loadNpmTasks( 'grunt-contrib-copy' );
grunt.loadNpmTasks( 'grunt-rtlcss' );
grunt.loadNpmTasks( 'grunt-postcss' );
grunt.loadNpmTasks( 'grunt-contrib-compress' );
grunt.loadNpmTasks( 'grunt-stylelint' );
// Register tasks
grunt.registerTask( 'default', [
'css',
'jshint',
'uglify'
]);
grunt.registerTask( 'css', [
'stylelint',
'sass',
'postcss',
'cssmin',
'rtlcss'
]);
grunt.registerTask( 'dev', [
'default',
'makepot'
]);
grunt.registerTask( 'deploy', [
'copy',
'compress'
]);
};