/* jshint node:true */
var shell = require( 'shelljs' );
module.exports = function( grunt ) {
// Project configuration.
grunt.initConfig(
{
pkg: grunt.file.readJSON( 'package.json' ),
concat: {
options: {
separator: ';'
},
core: {
src: [
'ReduxCore/assets/js/vendor/cookie.js',
'ReduxCore/assets/js/vendor/jquery.typewatch.js',
'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
'ReduxCore/assets/js/vendor/jquery.alphanum.js',
'ReduxCore/assets/js/redux.js'
],
dest: 'ReduxCore/assets/js/redux.min.js'
},
vendor: {
src: [
'ReduxCore/assets/js/vendor/cookie.js',
'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
'ReduxCore/assets/js/vendor/jquery.typewatch.js',
'ReduxCore/assets/js/vendor/jquery.alphanum.js'
],
dest: 'ReduxCore/assets/js/vendor.min.js'
}
},
'gh-pages': {
options: {
base: 'docs',
message: 'Update docs and files to distribute'
},
dev: {
src: ['docs/**/*', 'bin/CNAME']
},
travis: {
options: {
repo: 'https://' + process.env.GH_TOKEN + '@github.com/ReduxFramework/docs.reduxframework.com.git',
user: {
name: 'Travis',
email: 'travis@travis-ci.org'
},
silent: false
},
src: ['**/*']
}
},
uglify: {
fields: {
files: [
{
expand: true,
cwd: 'ReduxCore/inc/fields',
src: ['**/*.js', '!**/*.min.js', '!ace_editor/vendor/*.js', '!ace_editor/vendor/snippets/*.js', '!slider/vendor/nouislider/*.*', '!spinner/vendor/*.*'],
ext: '.min.js',
dest: 'ReduxCore/inc/fields'
}
]
},
extensions: {
files: [
{
expand: true,
cwd: 'ReduxCore/inc/extensions',
src: ['**/*.js', '!**/*.min.js'],
ext: '.min.js',
dest: 'ReduxCore/inc/extensions'
}
]
},
core: {
files: {
'ReduxCore/assets/js/redux.min.js': [
'ReduxCore/assets/js/redux.min.js'
],
'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.min.js': [
'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.js'
],
'ReduxCore/assets/js/vendor/redux.select2.sortable.min.js': [
'ReduxCore/assets/js/vendor/redux.select2.sortable.js'
],
'ReduxCore/assets/js/media/media.min.js': [
'ReduxCore/assets/js/media/media.js'
]
}
},
vendor: {
files: {
'ReduxCore/assets/js/vendor.min.js': [
'ReduxCore/assets/js/vendor.min.js'
]
}
}
},
qunit: {
files: ['test/qunit/**/*.html']
},
// JavaScript linting with JSHint.
jshint: {
options: {
jshintrc: '.jshintrc'
},
files: [
//'Gruntfile.js',
//'ReduxCore/assets/js/import_export/import_export.js',
'ReduxCore/assets/js/media/media.js',
'ReduxCore/inc/fields/ace_editor/field_ace_editor.js',
'ReduxCore/inc/fields/background/field_background.js',
'ReduxCore/inc/fields/border/field_border.js',
'ReduxCore/inc/fields/button_set/field_button_set.js',
'ReduxCore/inc/fields/checkbox/field_checkbox.js',
'ReduxCore/inc/fields/color/field_color.js',
'ReduxCore/inc/fields/color_rgba/field_color_rgba.js',
'ReduxCore/inc/fields/date/field_date.js',
'ReduxCore/inc/fields/dimensions/field_dimensions.js',
'ReduxCore/inc/fields/editor/field_editor.js',
'ReduxCore/inc/fields/gallery/field_gallery.js',
'ReduxCore/inc/fields/image_select/field_image_select.js',
'ReduxCore/inc/fields/multi_text/field_multitext.js',
'ReduxCore/inc/fields/palette/field_palette.js',
'ReduxCore/inc/fields/select/field_select.js',
'ReduxCore/inc/fields/select_image/field_select_image.js',
'ReduxCore/inc/fields/slider/field_slider.js',
'ReduxCore/inc/fields/slides/field_slides.js',
'ReduxCore/inc/fields/sortable/field_sortable.js',
'ReduxCore/inc/fields/sorter/field_sorter.js',
'ReduxCore/inc/fields/spacing/field_spacing.js',
'ReduxCore/inc/fields/spinner/field_spinner.js',
'ReduxCore/inc/fields/switch/field_switch.js',
'ReduxCore/inc/fields/typography/field_typography.js',
//'ReduxCore/inc/extensions/customizer/extension_customizer.js',
'ReduxCore/inc/extensions/import_export/import_export/field_import_export.js',
'ReduxCore/inc/extensions/options_object/options_object/field_options_object.js',
'ReduxCore/assets/js/redux.js'
]
},
// Watch changes for files.
watch: {
ui: {
files: ['<%= jshint.files %>'],
tasks: ['jshint']
},
php: {
files: ['ReduxCore/**/*.php'],
tasks: ['phplint:core']
},
css: {
files: ['ReduxCore/**/*.less'],
tasks: ['less:development']
}
},
// Add textdomain.
addtextdomain: {
options: {
textdomain: 'redux-framework', // Project text domain.
updateDomains: ['redux', 'redux-framework-demo', 'v'] // List of text domains to replace.
},
target: {
files: {
src: ['*.php', '**/*.php', '!node_modules/**', '!tests/**', '!sample/**']
}
}
},
// Generate POT files.
makepot: {
redux: {
options: {
type: 'wp-plugin',
domainPath: 'ReduxCore/languages',
potFilename: 'redux-framework.pot',
include: [],
exclude: [
'sample/.*'
],
potHeaders: {
poedit: true,
'report-msgid-bugs-to': 'https://github.com/ReduxFramework/ReduxFramework/issues',
'language-team': 'LANGUAGE <support@reduxframework.com>'
}
}
}
},
// Check textdomain errors.
checktextdomain: {
options: {
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'
]
},
redux: {
cwd: 'ReduxCore/',
options: {
text_domain: 'redux-framework',
},
src: ['**/*.php'],
expand: true
},
sample: {
cwd: 'sample',
options: {
text_domain: 'redux-framework-demo',
},
src: ['**/*.php'],
expand: true
}
},
// Exec shell commands.
shell: {
options: {
stdout: true,
stderr: true
},
// Limited to Maintainers so
// txpush: {
// command: 'tx push -s' // push the resources
// },
txpull: {
command: 'tx pull -a --minimum-perc=25' // pull the .po files
}
},
// Generate MO files.
potomo: {
dist: {
options: {
poDel: true
},
files: [{
expand: true,
cwd: 'ReduxCore/languages/',
src: ['*.po'],
dest: 'ReduxCore/languages/',
ext: '.mo',
nonull: true
}]
}
},
phpdocumentor: {
options: {
directory: 'ReduxCore/',
target: 'docs/'
},
generate: {}
},
phplint: {
options: {
swapPath: './'
},
core: ["ReduxCore/**/*.php"],
plugin: ["class-redux-plugin.php", "index.php", "redux-framework.php"]
},
sass: {
fields: {
options: {
sourcemap: 'none',
style: 'compressed',
noCache: true,
},
files: [{
expand: true, // Enable dynamic expansion.
cwd: 'ReduxCore/inc/fields', // Src matches are relative to this path.
src: ['**/*.scss'], // Actual pattern(s) to match.
dest: 'ReduxCore/inc/fields', // Destination path prefix.
ext: '.css' // Dest filepaths will have this extension.
}]
},
extensions: {
options: {
sourcemap: 'none',
style: 'compressed',
noCache: true,
},
files: [{
expand: true, // Enable dynamic expansion.
cwd: 'ReduxCore/inc/extensions', // Src matches are relative to this path.
src: ['**/*.scss'], // Actual pattern(s) to match.
dest: 'ReduxCore/inc/extensions', // Destination path prefix.
ext: '.css' // Dest filepaths will have this extension.
}]
},
vendor: {
options: {
sourcemap: 'none',
style: 'compressed',
noCache: true
},
files: {
"ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css": [
"ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss"
],
"ReduxCore/assets/css/vendor/elusive-icons/elusive-icons.css": [
"ReduxCore/assets/css/vendor/elusive-icons/scss/elusive-icons.scss"
],
}
},
admin: {
options: {
sourcemap: 'none',
style: 'compressed',
noCache: true
},
files: {
"ReduxCore/assets/css/color-picker/color-picker.css": [
"ReduxCore/assets/css/color-picker/color-picker.scss"
],
"ReduxCore/assets/css/media/media.css": [
"ReduxCore/assets/css/media/media.scss"
],
"ReduxCore/assets/css/redux-admin.css": [
"ReduxCore/assets/css/redux-admin.scss"
],
"ReduxCore/assets/css/rtl.css": [
"ReduxCore/assets/css/rtl.scss"
]
}
},
welcome: {
options: {
sourcemap: 'none',
style: 'compressed',
noCache: true
},
files: {
"ReduxCore/inc/welcome/css/redux-welcome.css": [
"ReduxCore/inc/welcome/css/redux-welcome.scss"
]
}
}
},
cssmin: {
fields: {
files: {
'ReduxCore/assets/css/redux-fields.css': [
'ReduxCore/inc/fields/**/*.css',
"ReduxCore/assets/css/color-picker/color-picker.css",
"ReduxCore/assets/css/media/media.css"
]
}
},
}
}
);
// Load NPM tasks to be used here
grunt.loadNpmTasks( 'grunt-shell' );
grunt.loadNpmTasks( 'grunt-potomo' );
grunt.loadNpmTasks( 'grunt-wp-i18n' );
grunt.loadNpmTasks( 'grunt-checktextdomain' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-sass' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-concat' );
grunt.loadNpmTasks( 'grunt-phpdocumentor' );
grunt.loadNpmTasks( 'grunt-gh-pages' );
grunt.loadNpmTasks( "grunt-phplint" );
//grunt.loadNpmTasks( 'grunt-recess' );
grunt.registerTask(
'langUpdate', [
'addtextdomain',
'makepot',
'shell:txpull',
'potomo'
]
);
// Default task(s).
grunt.registerTask(
'default', [
'jshint',
'concat:core',
'uglify:core',
'concat:vendor',
'uglify:vendor',
'uglify:fields',
'uglify:extensions',
"sass:admin",
"sass:fields",
"sass:extensions",
"sass:vendor",
'cssmin'
]
);
grunt.registerTask( 'travis', ['jshint', 'lintPHP'] );
// this would be run by typing "grunt test" on the command line
grunt.registerTask( 'testJS', ['jshint', 'concat:core', 'concat:vendor'] );
grunt.registerTask( 'watchUI', ['watch:ui'] );
grunt.registerTask( 'watchPHP', ['watch:php', 'phplint:core', 'phplint:plugin'] );
grunt.registerTask( "lintPHP", ["phplint:plugin", "phplint:core"] );
grunt.registerTask( "compileSCSS", ["sass:admin", "sass:fields", "sass:extensions", "sass:vendor", "sass:welcome"] );
grunt.registerTask(
'compileJS',
['jshint', 'concat:core', 'uglify:core', 'concat:vendor', 'uglify:vendor', 'uglify:fields', 'uglify:extensions']
);
grunt.registerTask( 'compileTestJS', ['jshint', 'concat:core', 'concat:vendor'] );
grunt.registerTask( 'compileCSS', ['cssmin'] );
};