cruk-pattern-library
Version:
CRUK Pattern library.
198 lines (182 loc) • 4.78 kB
JavaScript
var inliner = require('sass-inline-svg');
module.exports = function(grunt) {
grunt.initConfig({
// Project configuration.
pkg: grunt.file.readJSON('package.json'),
// Compiles our Sass.
sass: {
options: {
precision: 6,
sourceComments: false,
outputStyle: 'compressed',
includePaths: [
'assets/scss',
'docs/assets/scss',
'node_modules/bootstrap-sass/assets/stylesheets',
'node_modules'
],
functions: {
svg: inliner('./assets/icons', {
optimize: true
})
}
},
dist: {
files: {
'assets/css/cruk-base.min.css': 'assets/scss/cruk-base.scss',
'docs/assets/css/docs.css': 'docs/assets/scss/docs.scss'
}
}
},
bless: {
css: {
options: {
compress: true,
logCount: true
},
files: {
'docs/assets/css/docs-ie.css': 'docs/assets/css/docs.css'
}
}
},
// Handle vendor prefixing.
postcss: {
options: {
processors: [
require('autoprefixer-core')({ browsers: ['last 2 versions', 'ie 8', 'ie 9'] })
]
},
dist: {
src: 'assets/css/*.css'
},
docs: {
src: '_site/assets/css/*.css'
}
},
// Runs CSS reporting.
parker: {
options: {
metrics: [
'TotalStylesheets',
'TotalStylesheetSize',
'TotalRules',
'TotalSelectors',
'TotalIdentifiers',
'TotalDeclarations',
'SelectorsPerRule',
'IdentifiersPerSelector',
'SpecificityPerSelector',
'TopSelectorSpecificity',
'TopSelectorSpecificitySelector',
'TotalIdSelectors',
'TotalUniqueColours',
'TotalImportantKeywords',
'TotalMediaQueries'
],
file: "assets/css/.cruk-base-stats.md",
usePackage: true
},
src: [
'assets/css/*.css'
]
},
// Build tooling.
watch: {
sass: {
files: ['assets/scss/**/*.scss', 'docs/assets/scss/docs.scss'],
tasks: ['sass', 'postcss', 'parker']
},
scripts: {
files: ['assets/js/cruk-base/*.js', 'assets/js/cruk-base.js'],
tasks: ['jshint', 'concat', 'uglify', 'copy'],
options: {
spawn: false
}
},
fonts: {
files: ['assets/fonts/*'],
tasks: ['copy']
}
},
jekyll: {
options: {
src: 'docs',
dest: '_site',
config: '_config.yml'
}
},
buildcontrol: {
options: {
dir: '_site',
commit: true,
push: true,
message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%'
},
pages: {
options: {
remote: 'git@github.com:CRUKorg/cruk-pattern-library.git',
branch: 'gh-pages'
}
}
},
jshint: {
files: ['<%= watch.scripts.files %>'],
options: {
jshintrc: true,
reporter: require('jshint-stylish')
}
},
concat: {
options: {
separator: ';'
},
dist: {
src: [
'node_modules/jquery.inputmask/dist/jquery.inputmask.bundle.js',
'node_modules/spin.js/spin.js',
'node_modules/spin.js/jquery.spin.js',
'<%= watch.scripts.files %>'
],
dest: 'assets/js/cruk-base.min.js'
}
},
uglify: {
options: {
mangle: false
},
dist: {
files: {
'<%= concat.dist.dest %>': '<%= concat.dist.dest %>'
}
}
},
copy: {
main: {
src: 'assets/js/cruk-base.min.js',
dest: 'docs/assets/js/cruk-base.min.js'
},
fonts: {
expand: true,
flatten: true,
src: 'assets/fonts/*',
dest: 'docs/assets/fonts/'
}
}
});
// Load dependencies.
grunt.loadNpmTasks('grunt-postcss');
grunt.loadNpmTasks('grunt-build-control');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-jekyll');
grunt.loadNpmTasks('grunt-parker');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-bless');
// Generate and format the CSS.
grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'copy', 'sass', 'bless', 'jekyll', 'postcss', 'parker']);
// Publish to GitHub
grunt.registerTask('publish', ['jekyll', 'postcss:docs', 'buildcontrol:pages']);
};