mirror of
https://github.com/mdbootstrap/mdb-ui-kit.git
synced 2024-11-11 04:07:55 +03:00
0835304d9f
- <module type>.js (uses subordinate require or imports) - <module type>-all.js (concat version of all subordinates) - <module type>-all.min.js minified all version. In addition, don't forget that the source es6 is also available. Docs aren't done yet or integrated.
687 lines
20 KiB
JavaScript
687 lines
20 KiB
JavaScript
module.exports = function (grunt) {
|
|
'use strict';
|
|
|
|
// Force use of Unix newlines
|
|
grunt.util.linefeed = '\n';
|
|
|
|
RegExp.quote = function (string) {
|
|
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
};
|
|
|
|
var referenceDocNotice =
|
|
'$1\n\n'
|
|
+ '[//]: # DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by grunt docs-copy-bootstrap-docs\n\n'
|
|
+ '{% callout info %}\n**Bootstrap Reference Documentation** \n'
|
|
+ 'This is a part of the reference documentation from <a href="http://getbootstrap.com">Bootstrap</a>. \n'
|
|
+ 'It is included here to demonstrate rendering with Material Design for Bootstrap default styling. \n'
|
|
+ 'See the <a href="/material-design/buttons">Material Design</a> section for more elements and customization options.\n'
|
|
+ '{% endcallout %}'
|
|
+ '\n\n$2'
|
|
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var glob = require('glob');
|
|
var isTravis = require('is-travis');
|
|
var npmShrinkwrap = require('npm-shrinkwrap');
|
|
var mq4HoverShim = require('mq4-hover-shim');
|
|
var autoprefixer = require('autoprefixer')({
|
|
browsers: [
|
|
//
|
|
// Official browser support policy:
|
|
// http://v4-alpha.getbootstrap.com/getting-started/browsers-devices/#supported-browsers
|
|
//
|
|
'Chrome >= 35', // Exact version number here is kinda arbitrary
|
|
// Rather than using Autoprefixer's native "Firefox ESR" version specifier string,
|
|
// we deliberately hardcode the number. This is to avoid unwittingly severely breaking the previous ESR in the event that:
|
|
// (a) we happen to ship a new Bootstrap release soon after the release of a new ESR,
|
|
// such that folks haven't yet had a reasonable amount of time to upgrade; and
|
|
// (b) the new ESR has unprefixed CSS properties/values whose absence would severely break webpages
|
|
// (e.g. `box-sizing`, as opposed to `background: linear-gradient(...)`).
|
|
// Since they've been unprefixed, Autoprefixer will stop prefixing them,
|
|
// thus causing them to not work in the previous ESR (where the prefixes were required).
|
|
'Firefox >= 31', // Current Firefox Extended Support Release (ESR)
|
|
// Note: Edge versions in Autoprefixer & Can I Use refer to the EdgeHTML rendering engine version,
|
|
// NOT the Edge app version shown in Edge's "About" screen.
|
|
// For example, at the time of writing, Edge 20 on an up-to-date system uses EdgeHTML 12.
|
|
// See also https://github.com/Fyrd/caniuse/issues/1928
|
|
'Edge >= 12',
|
|
'Explorer >= 9',
|
|
// Out of leniency, we prefix these 1 version further back than the official policy.
|
|
'iOS >= 8',
|
|
'Safari >= 8',
|
|
// The following remain NOT officially supported, but we're lenient and include their prefixes to avoid severely breaking in them.
|
|
'Android 2.3',
|
|
'Android >= 4',
|
|
'Opera >= 12'
|
|
]
|
|
});
|
|
|
|
var moduleGenerator = require('./grunt/module-generator.js');
|
|
var configBridge = grunt.file.readJSON('./grunt/configBridge.json', {encoding: 'utf8'});
|
|
|
|
// dynamically create js file list (we do this for several different directories)
|
|
function coreFileArray(path) {
|
|
var result = []
|
|
configBridge.core.files.forEach(
|
|
function (element, index, array) {
|
|
result[index] = (path + element)
|
|
}
|
|
);
|
|
return result;
|
|
}
|
|
|
|
function fileMap(result, fileArray, destPath, sourcPath) {
|
|
fileArray.forEach(
|
|
function (element, index, array) {
|
|
result[destPath + element] = (sourcPath + element)
|
|
}
|
|
);
|
|
}
|
|
|
|
function coreFileMap(destPath, sourcePath) {
|
|
var result = {}
|
|
fileMap(result, configBridge.core.files, destPath, sourcePath)
|
|
return result;
|
|
}
|
|
|
|
function docsFileMap() {
|
|
var result = {}
|
|
|
|
var sourcePath = 'docs/assets/js/src/'
|
|
var destPath = 'docs/assets/js/dist/'
|
|
fileMap(result, configBridge.docs.files, destPath, sourcePath)
|
|
|
|
// generate core so we have local debugging
|
|
var sourcePath = 'js/src/'
|
|
var destPath = 'docs/dist/js/demoduled/'
|
|
fileMap(result, configBridge.core.files, destPath, sourcePath)
|
|
|
|
return result;
|
|
}
|
|
|
|
Object.keys(configBridge.paths).forEach(function (key) {
|
|
configBridge.paths[key].forEach(function (val, i, arr) {
|
|
arr[i] = path.join('./docs/assets', val);
|
|
});
|
|
});
|
|
|
|
// Project configuration.
|
|
grunt.initConfig({
|
|
|
|
// Metadata.
|
|
pkg: grunt.file.readJSON('package.json'),
|
|
banner: '/*!\n' +
|
|
' * Bootstrap Material Design v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
|
|
' * Copyright 2014-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
|
|
' * Licensed under MIT (https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE)\n' +
|
|
' */\n',
|
|
|
|
// Task configuration.
|
|
clean: {
|
|
dist: 'dist',
|
|
'dist-js': 'dist/js',
|
|
docs: 'docs/dist'
|
|
},
|
|
|
|
babel: {
|
|
options: {
|
|
sourceMap: true,
|
|
presets: ['es2015'] // the following is the es2015 preset minus the commonjs requirement
|
|
},
|
|
core: {
|
|
files: coreFileMap('dist/js/demoduled/', 'js/src/')
|
|
},
|
|
docs: {
|
|
files: docsFileMap()
|
|
},
|
|
systemjs: {
|
|
options: {
|
|
plugins: ['transform-es2015-modules-systemjs']
|
|
},
|
|
files: coreFileMap('dist/js/systemjs/', 'js/src/')
|
|
},
|
|
umd: {
|
|
options: {
|
|
plugins: ['transform-es2015-modules-umd']
|
|
},
|
|
files: coreFileMap('dist/js/umd/', 'js/src/')
|
|
}
|
|
},
|
|
|
|
eslint: {
|
|
options: {
|
|
configFile: 'js/.eslintrc'
|
|
},
|
|
target: ['js/src/*.js', 'docs/assets/js/src/*.js']
|
|
},
|
|
|
|
jscs: {
|
|
options: {
|
|
config: 'js/.jscsrc'
|
|
},
|
|
grunt: {
|
|
src: ['Gruntfile.js', 'grunt/*.js']
|
|
},
|
|
core: {
|
|
src: 'js/src/*.js'
|
|
},
|
|
test: {
|
|
src: 'js/tests/unit/*.js'
|
|
},
|
|
assets: {
|
|
options: {
|
|
requireCamelCaseOrUpperCaseIdentifiers: null
|
|
},
|
|
src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
|
|
}
|
|
},
|
|
|
|
stamp: {
|
|
options: {
|
|
banner: '<%= banner %>\n'
|
|
},
|
|
core: {
|
|
files: {
|
|
src: 'dist/js/*.js'
|
|
}
|
|
}
|
|
},
|
|
|
|
concat: {
|
|
options: {
|
|
stripBanners: false,
|
|
sourceMap: true
|
|
},
|
|
systemjs: {
|
|
src: coreFileArray('dist/js/systemjs/'),
|
|
dest: 'dist/js/system-all.js'
|
|
},
|
|
commonjs: {
|
|
src: coreFileArray('dist/js/umd/'),
|
|
dest: 'dist/js/common-all.js'
|
|
}
|
|
},
|
|
uglify: {
|
|
options: {
|
|
compress: {
|
|
warnings: true
|
|
},
|
|
mangle: false,
|
|
preserveComments: /^!|@preserve|@license|@cc_on/i
|
|
},
|
|
'systemjs-all': {
|
|
src: 'dist/js/system-all.js',
|
|
dest: 'dist/js/system-all.min.js'
|
|
},
|
|
'commonjs-all': {
|
|
src: 'dist/js/common-all.js',
|
|
dest: 'dist/js/common-all.min.js'
|
|
},
|
|
// docs: {
|
|
// options: {
|
|
// compress: false
|
|
// },
|
|
// src: configBridge.paths.docsJs,
|
|
// dest: 'docs/assets/js/docs.min.js'
|
|
// }
|
|
},
|
|
|
|
qunit: {
|
|
options: {
|
|
inject: 'js/tests/unit/phantom.js'
|
|
},
|
|
files: 'js/tests/index.html'
|
|
},
|
|
|
|
// CSS build configuration
|
|
scsslint: {
|
|
options: {
|
|
bundleExec: true,
|
|
config: 'scss/.scss-lint.yml',
|
|
reporterOutput: null
|
|
},
|
|
src: ['scss/**/*.scss', '!scss/_normalize.scss']
|
|
},
|
|
|
|
postcss: {
|
|
core: {
|
|
options: {
|
|
map: true,
|
|
processors: [
|
|
mq4HoverShim.postprocessorFor({hoverSelectorPrefix: '.bs-true-hover '}),
|
|
autoprefixer
|
|
]
|
|
},
|
|
src: 'dist/css/*.css'
|
|
},
|
|
docs: {
|
|
options: {
|
|
processors: [
|
|
autoprefixer
|
|
]
|
|
},
|
|
src: 'docs/assets/css/*.css'
|
|
},
|
|
examples: {
|
|
options: {
|
|
processors: [
|
|
autoprefixer
|
|
]
|
|
},
|
|
expand: true,
|
|
cwd: 'docs/examples/',
|
|
src: ['**/*.css'],
|
|
dest: 'docs/examples/'
|
|
}
|
|
},
|
|
|
|
cssmin: {
|
|
options: {
|
|
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
|
|
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
|
|
compatibility: 'ie9',
|
|
keepSpecialComments: '*',
|
|
sourceMap: true,
|
|
advanced: false
|
|
},
|
|
core: {
|
|
files: [{
|
|
expand: true,
|
|
cwd: 'dist/css',
|
|
src: ['*.css', '!*.min.css'],
|
|
dest: 'dist/css',
|
|
ext: '.min.css'
|
|
}]
|
|
},
|
|
docs: {
|
|
src: 'docs/assets/css/docs.css',
|
|
dest: 'docs/assets/css/docs.min.css'
|
|
}
|
|
},
|
|
|
|
csscomb: {
|
|
options: {
|
|
config: 'scss/.csscomb.json'
|
|
},
|
|
dist: {
|
|
expand: true,
|
|
cwd: 'dist/css/',
|
|
src: ['*.css', '!*.min.css'],
|
|
dest: 'dist/css/'
|
|
},
|
|
examples: {
|
|
expand: true,
|
|
cwd: 'docs/examples/',
|
|
src: '**/*.css',
|
|
dest: 'docs/examples/'
|
|
},
|
|
docs: {
|
|
src: 'docs/assets/css/src/docs.css',
|
|
dest: 'docs/assets/css/src/docs.css'
|
|
}
|
|
},
|
|
|
|
copy: {
|
|
'dist-to-docs': {
|
|
expand: true,
|
|
cwd: 'dist/',
|
|
src: [
|
|
'**/*',
|
|
'!js/demoduled',
|
|
'!js/demoduled/**/*',
|
|
'!js/umd',
|
|
'!js/umd/**/*',
|
|
//'!js/systemjs',
|
|
//'!js/systemjs/**/*',
|
|
'!js/npm.js'
|
|
],
|
|
dest: 'docs/dist/'
|
|
},
|
|
'bs-docs-js-vendor': {
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/assets/js/vendor',
|
|
src: [
|
|
'**/*',
|
|
'!tether.min.js',
|
|
'!jquery.min.js'
|
|
],
|
|
dest: 'docs/assets/js/vendor/'
|
|
},
|
|
'bs-docs-plugins': {
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/_plugins',
|
|
src: [
|
|
'**/*'
|
|
],
|
|
dest: 'docs/_plugins/'
|
|
},
|
|
|
|
'bs-docs-scss': {
|
|
options: {
|
|
// https://regex101.com/r/hG8lU4/1
|
|
process: function (content, srcpath) {
|
|
return content.replace(/([\s\S]+)/mg, "// DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by grunt docs-copy-bootstrap-docs\n\n$1");
|
|
}
|
|
},
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/assets/scss',
|
|
src: [
|
|
'**/*',
|
|
'!docs.scss' // keep variable customizations
|
|
],
|
|
dest: 'docs/assets/scss/'
|
|
},
|
|
'bs-docs-components': {
|
|
options: {
|
|
// //https://regex101.com/r/cZ7aO8/2
|
|
process: function (content, srcpath) {
|
|
return content.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice);
|
|
}
|
|
},
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/components',
|
|
src: [
|
|
'**/*'
|
|
],
|
|
dest: 'docs/components/'
|
|
},
|
|
'bs-docs-content': {
|
|
options: {
|
|
// https://regex101.com/r/cZ7aO8/2
|
|
process: function (content, srcpath) {
|
|
return content
|
|
// insert docs reference
|
|
.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice)
|
|
// remove sample text 'display' as this is a particular style and is confusing
|
|
.replace(/Fancy display heading/, 'Fancy heading');
|
|
}
|
|
},
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/content',
|
|
src: [
|
|
'**/*'
|
|
],
|
|
dest: 'docs/content/'
|
|
},
|
|
'bs-docs-examples': {
|
|
options: {
|
|
// //https://regex101.com/r/cZ7aO8/2
|
|
process: function (content, srcpath) {
|
|
return content.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice);
|
|
}
|
|
},
|
|
expand: true,
|
|
cwd: '../bootstrap/docs/examples',
|
|
src: [
|
|
'**/*'
|
|
],
|
|
dest: 'docs/examples/'
|
|
}
|
|
},
|
|
|
|
connect: {
|
|
server: {
|
|
options: {
|
|
port: 3000,
|
|
base: '.'
|
|
}
|
|
}
|
|
},
|
|
|
|
jekyll: {
|
|
options: {
|
|
bundleExec: true,
|
|
config: '_config.yml',
|
|
incremental: false
|
|
},
|
|
docs: {},
|
|
github: {
|
|
options: {
|
|
//raw: 'github: true'
|
|
raw: 'baseurl: "/bootstrap-material-design"'
|
|
}
|
|
}
|
|
},
|
|
|
|
htmllint: {
|
|
options: {
|
|
ignore: [
|
|
'Element “img” is missing required attribute “src”.',
|
|
'Attribute “autocomplete” is only allowed when the input type is “color”, “date”, “datetime”, “datetime-local”, “email”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.',
|
|
'Attribute “autocomplete” not allowed on element “button” at this point.',
|
|
'Element “div” not allowed as child of element “progress” in this context. (Suppressing further errors from this subtree.)',
|
|
'Consider using the “h1” element as a top-level heading only (all “h1” elements are treated as top-level headings by many screen readers and other tools).',
|
|
'The “datetime” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.'
|
|
]
|
|
},
|
|
src: ['_gh_pages/**/*.html', 'js/tests/visual/*.html']
|
|
},
|
|
|
|
watch: {
|
|
src: {
|
|
files: '<%= jscs.core.src %>',
|
|
tasks: ['babel:core', 'babel:docs'] // only watch/gen local non-minified sources (quicker)
|
|
},
|
|
|
|
docsjs: {
|
|
files: ['docs/assets/js/src/*.js'],
|
|
tasks: ['babel:docs']
|
|
},
|
|
|
|
// FIXME: restore this after getting fundamentals done, just trying to reduce churn while developing
|
|
//sass: {
|
|
// files: 'scss/**/*.scss',
|
|
// tasks: ['dist-css', 'docs']
|
|
//},
|
|
docs: { // watch both the source and docs scss
|
|
files: ['docs/assets/scss/**/*.scss', 'scss/**/*.scss'],
|
|
tasks: ['scsslint', 'sass:docs', 'postcss:docs'] //FIXME: docs-css yanks sourcemap from local docs.css, working around just doing the minimal compile here ['docs-css'] //['dist-css', 'docs']
|
|
}
|
|
},
|
|
|
|
'saucelabs-qunit': {
|
|
all: {
|
|
options: {
|
|
build: process.env.TRAVIS_JOB_ID,
|
|
concurrency: 10,
|
|
maxRetries: 3,
|
|
maxPollRetries: 4,
|
|
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
|
|
browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
|
|
}
|
|
}
|
|
},
|
|
|
|
exec: {
|
|
npmUpdate: {
|
|
command: 'npm update'
|
|
}
|
|
//,
|
|
//'jekyll-clean': {
|
|
// command: 'jekyll clean'
|
|
//},
|
|
//'jekyll-build': {
|
|
// command: 'jekyll build'
|
|
//}
|
|
},
|
|
|
|
buildcontrol: {
|
|
options: {
|
|
dir: '_gh_pages',
|
|
commit: true,
|
|
push: true,
|
|
message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%'
|
|
},
|
|
pages: {
|
|
options: {
|
|
// FIXME: change this when we are ready!!!
|
|
//remote: 'git@github.com:FezVrasta/bootstrap-material-design.git',
|
|
remote: 'git@github.com:rosskevin/bootstrap-material-design.git',
|
|
branch: 'gh-pages'
|
|
}
|
|
}
|
|
},
|
|
|
|
compress: {
|
|
main: {
|
|
options: {
|
|
archive: 'bootstrap-material-design-<%= pkg.version %>-dist.zip',
|
|
mode: 'zip',
|
|
level: 9,
|
|
pretty: true
|
|
},
|
|
files: [
|
|
{
|
|
expand: true,
|
|
cwd: 'dist/',
|
|
src: ['**'],
|
|
dest: 'bootstrap-material-design-<%= pkg.version %>-dist'
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
|
|
// These plugins provide necessary tasks.
|
|
require('load-grunt-tasks')(grunt, {
|
|
scope: 'devDependencies',
|
|
// Exclude Sass compilers. We choose the one to load later on.
|
|
pattern: ['grunt-*', '!grunt-sass', '!grunt-contrib-sass']
|
|
});
|
|
require('time-grunt')(grunt);
|
|
|
|
// Docs HTML validation task
|
|
grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);
|
|
|
|
var runSubset = function (subset) {
|
|
return !process.env.MDB_TEST || process.env.MDB_TEST === subset;
|
|
};
|
|
var isUndefOrNonZero = function (val) {
|
|
return val === undefined || val !== '0';
|
|
};
|
|
|
|
// Test task.
|
|
var testSubtasks = [];
|
|
// Skip core tests if running a different subset of the test suite
|
|
if (runSubset('core') &&
|
|
// Skip core tests if this is a Savage build
|
|
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
|
|
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'test-scss', 'test-js', 'docs']);
|
|
}
|
|
// Skip HTML validation if running a different subset of the test suite
|
|
if (runSubset('validate-html') &&
|
|
isTravis &&
|
|
// Skip HTML5 validator when [skip validator] is in the commit message
|
|
isUndefOrNonZero(process.env.MDB_DO_VALIDATOR)) {
|
|
testSubtasks.push('validate-html');
|
|
}
|
|
// Only run Sauce Labs tests if there's a Sauce access key
|
|
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
|
|
// Skip Sauce if running a different subset of the test suite
|
|
runSubset('sauce-js-unit') &&
|
|
// Skip Sauce on Travis when [skip sauce] is in the commit message
|
|
isUndefOrNonZero(process.env.MDB_DO_SAUCE)) {
|
|
testSubtasks.push('babel:core');
|
|
testSubtasks.push('connect');
|
|
testSubtasks.push('saucelabs-qunit');
|
|
}
|
|
grunt.registerTask('test', testSubtasks);
|
|
grunt.registerTask('test-js', ['eslint', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
|
|
|
|
// JS distribution task.
|
|
grunt.registerTask('dist-js', [
|
|
'clean:dist-js',
|
|
'eslint',
|
|
'babel:umd',
|
|
'babel:systemjs',
|
|
'commonjs',
|
|
'systemjs',
|
|
'concat:commonjs',
|
|
'concat:systemjs',
|
|
'stamp',
|
|
'uglify:commonjs-all',
|
|
'uglify:systemjs-all',
|
|
'copy:dist-to-docs'
|
|
]);
|
|
|
|
grunt.registerTask('test-scss', ['scsslint']);
|
|
|
|
// CSS distribution task.
|
|
// Supported Compilers: sass (Ruby) and libsass.
|
|
(function (sassCompilerName) {
|
|
require('./grunt/bs-sass-compile/' + sassCompilerName + '.js')(grunt);
|
|
})(process.env.MDB_SASS || 'libsass');
|
|
// grunt.registerTask('sass-compile', ['sass:core', 'sass:extras', 'sass:docs']);
|
|
grunt.registerTask('sass-compile', ['sass:core', 'sass:docs']);
|
|
|
|
grunt.registerTask('dist-css', ['sass-compile', 'postcss:core', 'csscomb:dist', 'cssmin:core', 'cssmin:docs']);
|
|
|
|
// Full distribution task.
|
|
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'dist-js', 'docs']);
|
|
|
|
// Default task.
|
|
grunt.registerTask('default', ['clean:dist', 'test']);
|
|
|
|
grunt.registerTask('commonjs', 'Generate npm-js/commonjs entrypoint module.', function () {
|
|
moduleGenerator.commonJs(grunt, coreFileArray('./umd/'), 'dist/js/common.js');
|
|
});
|
|
|
|
grunt.registerTask('systemjs', 'Generate systemjs entrypoint module.', function () {
|
|
moduleGenerator.systemJs(grunt, coreFileArray('./systemjs/'), 'dist/js/system.js');
|
|
});
|
|
|
|
//------
|
|
// Docs tasks
|
|
|
|
// Independent task to be run when we are ready to sync the bootstrap repo's docs locally.
|
|
// Should be automated with no need for intervention (other than pulling the right bootstrap release locally)
|
|
grunt.registerTask('docs-copy-bootstrap-docs', [
|
|
'copy:bs-docs-js-vendor',
|
|
'copy:bs-docs-scss',
|
|
'copy:bs-docs-components',
|
|
'copy:bs-docs-content',
|
|
'copy:bs-docs-examples',
|
|
'copy:bs-docs-plugins'
|
|
]);
|
|
grunt.registerTask('docs-css', ['sass:docs', 'postcss:docs', 'postcss:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
|
|
grunt.registerTask('lint-docs-js', ['jscs:assets']);
|
|
grunt.registerTask('docs-js', [
|
|
'babel:docs',
|
|
'lineremover:docs',
|
|
'uglify:docs',
|
|
'lint-docs-js',
|
|
'copy:dist-to-docs'
|
|
]);
|
|
grunt.registerTask('docs', ['clean:docs', 'docs-css', 'docs-js']);
|
|
//------
|
|
|
|
//------
|
|
// Release and publish
|
|
grunt.registerTask('docs-github', ['jekyll:github']);
|
|
grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']);
|
|
grunt.registerTask('publish', ['prep-release', 'buildcontrol:pages']);
|
|
//------
|
|
|
|
// Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
|
|
// This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
|
|
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
|
|
grunt.registerTask('_update-shrinkwrap', function () {
|
|
var done = this.async();
|
|
npmShrinkwrap({dev: true, dirname: __dirname}, function (err) {
|
|
if (err) {
|
|
grunt.fail.warn(err);
|
|
}
|
|
var dest = 'grunt/npm-shrinkwrap.json';
|
|
fs.renameSync('npm-shrinkwrap.json', dest);
|
|
grunt.log.writeln('File ' + dest.cyan + ' updated.');
|
|
done();
|
|
});
|
|
});
|
|
|
|
//grunt.registerTask('debug', function () {
|
|
// console.log(coreFileArray('dist/js/demoduled/'));
|
|
//});
|
|
};
|