Files
ultimatemember/admin/core/lib/ReduxFramework/Gruntfile.js
T
ultimatemember 125c622521 first sync
2014-12-15 22:38:07 +02:00

392 lines
18 KiB
JavaScript

/* 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/qtip/jquery.qtip.js',
'ReduxCore/assets/js/vendor/jquery.typewatch.js',
'ReduxCore/assets/js/vendor/jquery.serializeForm.min.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/qtip/jquery.qtip.js',
'ReduxCore/assets/js/vendor/jquery.serializeForm.min.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: {
core: {
options: {
//banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
//'<%= grunt.template.today("yyyy-mm-dd") %> */\n',
},
files: {
'ReduxCore/assets/js/redux.min.js': ['ReduxCore/assets/js/redux.min.js'],
'ReduxCore/assets/js/vendor/select2.sortable.min.js': ['ReduxCore/assets/js/vendor/select2.sortable.js'],
'ReduxCore/assets/js/import_export/import_export.min.js': ['ReduxCore/assets/js/import_export/import_export.js'],
'ReduxCore/assets/js/media/media.min.js': ['ReduxCore/assets/js/media/media.js'],
'ReduxCore/inc/fields/ace_editor/field_ace_editor.min.js': ['ReduxCore/inc/fields/ace_editor/field_ace_editor.js'],
'ReduxCore/inc/fields/background/field_background.min.js': ['ReduxCore/inc/fields/background/field_background.js'],
'ReduxCore/inc/fields/border/field_border.min.js': ['ReduxCore/inc/fields/border/field_border.js'],
'ReduxCore/inc/fields/button_set/field_button_set.min.js': ['ReduxCore/inc/fields/button_set/field_button_set.js'],
'ReduxCore/inc/fields/checkbox/field_checkbox.min.js': ['ReduxCore/inc/fields/checkbox/field_checkbox.js'],
'ReduxCore/inc/fields/color/field_color.min.js': ['ReduxCore/inc/fields/color/field_color.js'],
'ReduxCore/inc/fields/color_rgba/field_color_rgba.min.js': ['ReduxCore/inc/fields/color_rgba/field_color_rgba.js'],
'ReduxCore/inc/fields/color_gradient/field_color_gradient.min.js': ['ReduxCore/inc/fields/color_gradient/field_color_gradient.js'],
'ReduxCore/inc/fields/date/field_date.min.js': ['ReduxCore/inc/fields/date/field_date.js'],
'ReduxCore/inc/fields/dimensions/field_dimensions.min.js': ['ReduxCore/inc/fields/dimensions/field_dimensions.js'],
'ReduxCore/inc/fields/editor/field_editor.min.js': ['ReduxCore/inc/fields/editor/field_editor.js'],
'ReduxCore/inc/fields/gallery/field_gallery.min.js': ['ReduxCore/inc/fields/gallery/field_gallery.js'],
'ReduxCore/inc/fields/image_select/field_image_select.min.js': ['ReduxCore/inc/fields/image_select/field_image_select.js'],
'ReduxCore/inc/fields/link_color/field_link_color.min.js': ['ReduxCore/inc/fields/link_color/field_link_color.js'],
'ReduxCore/inc/fields/multi_text/field_multi_text.min.js': ['ReduxCore/inc/fields/multi_text/field_multi_text.js'],
'ReduxCore/inc/fields/select/field_select.min.js': ['ReduxCore/inc/fields/select/field_select.js'],
'ReduxCore/inc/fields/select_image/field_select_image.min.js': ['ReduxCore/inc/fields/select_image/field_select_image.js'],
'ReduxCore/inc/fields/slider/field_slider.min.js': ['ReduxCore/inc/fields/slider/field_slider.js'],
'ReduxCore/inc/fields/slides/field_slides.min.js': ['ReduxCore/inc/fields/slides/field_slides.js'],
'ReduxCore/inc/fields/sortable/field_sortable.min.js': ['ReduxCore/inc/fields/sortable/field_sortable.js'],
'ReduxCore/inc/fields/sorter/field_sorter.min.js': ['ReduxCore/inc/fields/sorter/field_sorter.js'],
'ReduxCore/inc/fields/spacing/field_spacing.min.js': ['ReduxCore/inc/fields/spacing/field_spacing.js'],
'ReduxCore/inc/fields/spinner/field_spinner.min.js': ['ReduxCore/inc/fields/spinner/field_spinner.js'],
'ReduxCore/inc/fields/switch/field_switch.min.js': ['ReduxCore/inc/fields/switch/field_switch.js'],
'ReduxCore/inc/fields/typography/field_typography.min.js': ['ReduxCore/inc/fields/typography/field_typography.js']
}
},
extensions: {
files: [{
expand: true,
cwd: 'ReduxCore/extensions',
src: '**/*.js',
ext: '.min.js',
dest: 'ReduxCore/extensions'
}]
},
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/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/fields/**/*.js',
// 'ReduxCore/extensions/**/*.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"]
},
less: {
development: {
options: {
paths: 'ReduxCore/'
},
files: [{
expand: true, // Enable dynamic expansion.
cwd: 'ReduxCore/inc/fields', // Src matches are relative to this path.
src: ['**/*.less'], // Actual pattern(s) to match.
dest: 'ReduxCore/inc/fields', // Destination path prefix.
ext: '.css' // Dest filepaths will have this extension.
}]
},
extensions: {
files: [{
expand: true, // Enable dynamic expansion.
cwd: 'ReduxCore/extensions/', // Src matches are relative to this path.
src: ['**/*.less'], // Actual pattern(s) to match.
dest: 'ReduxCore/extensions/', // Destination path prefix.
ext: '.css' // Dest filepaths will have this extension.
}]
},
production: {
options: {
compress: true,
cleancss: true,
ieCompat: true,
relativeUrls: true,
paths: 'ReduxCore/'
},
files: {
"ReduxCore/assets/css/redux.css": ["ReduxCore/inc/fields/**/*.less", "ReduxCore/extensions/**/*.less", "ReduxCore/assets/css/admin.less", "ReduxCore/assets/css/import_export/*.less", "ReduxCore/assets/css/color-picker/*.less"],
"ReduxCore/assets/css/admin.css": ["ReduxCore/assets/css/admin.less"],
"ReduxCore/assets/css/color-picker/color-picker.css": ["ReduxCore/assets/css/color-picker/*.less"],
"ReduxCore/assets/css/import_export/import_export.css": ["ReduxCore/assets/css/import_export/*.less"],
"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.less"]
}
},
dist: {
options: {
compress: true,
cleancss: true,
ieCompat: true,
relativeUrls: true,
report: 'gzip',
paths: 'ReduxCore/'
},
files: {
"ReduxCore/assets/css/redux.css": ["ReduxCore/inc/fields/**/*.less", "ReduxCore/extensions/**/*.less", "ReduxCore/assets/css/admin.less", "ReduxCore/assets/css/import_export/*.less", "ReduxCore/assets/css/color-picker/*.less"],
"ReduxCore/assets/css/admin.css": ["ReduxCore/assets/css/admin.less"]
}
}
},
recess: {
dist: {
src: ['ReduxCore/assets/css/admin.less']
}
}
}
);
// 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-less' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
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', "less:production", "less:development", "less:extensions"]
);
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( "lintLESS", ["recess:dist"] );
grunt.registerTask( "compileCSS", ["less:production", "less:development", "less:extensions"] );
grunt.registerTask( 'compileJS', ['jshint', 'concat:core', 'uglify:core', 'concat:vendor', 'uglify:vendor'] );
grunt.registerTask( 'compileTestJS', ['jshint', 'concat:core', 'concat:vendor'] );
};