You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
4.1 KiB

module.exports = function(grunt) {
grunt.util.linefeed = '\n';
RegExp.quote = function (string) {
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
};
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
meta: {
defaultPath: 'bootflat'
},
banner: '/*\n * <%= pkg.name %> <%= pkg.version %>\n' +
' *\n' +
' * Description: <%= pkg.description %>\n' +
' *\n' +
' * Homepage: <%= pkg.homepage %>\n' +
' *\n' +
' * By @<%= pkg.author %>\n' +
' *\n' +
' * Last modify time: <%= grunt.template.today("yyyy-mm-dd") %>\n' +
' *\n' +
' * Licensed under the MIT license. Please see LICENSE for more information.\n' +
' *\n' +
' * Copyright 2013 FLATHEMES.\n' +
' *\n' +
' */\n',
clean: {
dist: ['<%= meta.defaultPath %>/css/']
},
uglify: {
options: {
banner: '<%= banner %>',
sourceMap: true,
sourceMapIncludeSources: true
},
dist: {
files: {
'js/site.min.js': [
'js/jquery-1.10.1.min.js',
'js/bootstrap.min.js',
'<%= meta.defaultPath %>/js/icheck.min.js',
'<%= meta.defaultPath %>/js/jquery.fs.stepper.min.js',
'<%= meta.defaultPath %>/js/jquery.fs.selecter.min.js',
'js/application.js'
]
}
}
},
csscomb: {
options: {
config: '<%= meta.defaultPath %>/scss/.csscomb.json'
},
dist: {
files: {
'<%= meta.defaultPath %>/css/<%= pkg.name %>.css': 'bootflat/css/<%= pkg.name %>.css'
}
}
},
cssmin: {
options: {
keepSpecialComments: 0,
banner: '<%= banner %>',
},
dist: {
files: {
'css/site.min.css': [
'css/bootstrap.min.css',
'<%= meta.defaultPath %>/css/<%= pkg.name %>.css',
'css/site.css'
],
'<%= meta.defaultPath %>/css/<%= pkg.name %>.min.css': '<%= meta.defaultPath %>/css/<%= pkg.name %>.css'
}
}
},
sass: {
dist: {
files: {
'<%= meta.defaultPath %>/css/<%= pkg.name %>.css': '<%= meta.defaultPath %>/scss/<%= pkg.name %>.scss'
},
options: {
banner: '<%= banner %>',
style: 'expanded',
sourcemap: 'true'
}
}
},
csslint: {
options: {
csslintrc: '<%= meta.defaultPath %>/scss/.csslintrc'
},
src: [
'<%= meta.defaultPath %>/css/<%= pkg.name %>.css'
]
},
validation: {
options: {
charset: 'utf-8',
doctype: 'HTML5',
failHard: true,
reset: true,
relaxerror: [
'Bad value apple-mobile-web-app-title for attribute name on element meta: Keyword apple-mobile-web-app-title is not registered.',
'Bad value apple-mobile-web-app-status-bar-style for attribute name on element meta: Keyword apple-mobile-web-app-status-bar-style is not registered.',
'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
'Attribute ontouchstart not allowed on element body at this point.'
]
},
files: {
src: '*.html'
}
},
sed: {
versionNumber: {
pattern: (function () {
var old = grunt.option('oldver');
return old ? RegExp.quote(old) : old;
})(),
replacement: grunt.option('newver'),
recursive: true
}
}
});
require('load-grunt-tasks')(grunt);
require('time-grunt')(grunt);
grunt.registerTask('task-css', ['sass', 'csscomb', 'cssmin']);
grunt.registerTask('task-js', ['uglify']);
grunt.registerTask('task', ['clean', 'task-css', 'task-js']);
grunt.registerTask('build', ['task']);
grunt.registerTask('default', ['task']);
grunt.registerTask('test', ['task', 'csslint', 'validation']);
// Version numbering task.
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
// This can be overzealous, so its changes should always be manually reviewed!
grunt.registerTask('change-version-number', 'sed');
};