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
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');
|
|
};
|
|
|