| 
									
										
										
										
											2013-07-28 12:33:41 +08:00
										 |  |  | /* jshint node: true */ | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-07 08:51:59 +08:00
										 |  |  | module.exports = function (grunt) { | 
					
						
							| 
									
										
										
										
											2013-09-19 00:50:02 +08:00
										 |  |  |   'use strict'; | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 19:07:57 +08:00
										 |  |  |   // Force use of Unix newlines
 | 
					
						
							|  |  |  |   grunt.util.linefeed = '\n'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-02 09:15:25 +08:00
										 |  |  |   RegExp.quote = require('regexp-quote') | 
					
						
							| 
									
										
										
										
											2013-08-21 17:46:45 +08:00
										 |  |  |   var btoa = require('btoa') | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // Project configuration.
 | 
					
						
							|  |  |  |   grunt.initConfig({ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Metadata.
 | 
					
						
							|  |  |  |     pkg: grunt.file.readJSON('package.json'), | 
					
						
							| 
									
										
										
										
											2013-09-11 10:21:44 +08:00
										 |  |  |     banner: '/*!\n' + | 
					
						
							| 
									
										
										
										
											2013-11-30 23:11:41 +08:00
										 |  |  |               ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + | 
					
						
							| 
									
										
										
										
											2013-10-02 20:33:17 +08:00
										 |  |  |               ' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + | 
					
						
							|  |  |  |               ' * Licensed under <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' + | 
					
						
							| 
									
										
										
										
											2013-10-25 01:32:41 +08:00
										 |  |  |               ' */\n\n', | 
					
						
							| 
									
										
										
										
											2013-09-30 06:37:22 +08:00
										 |  |  |     jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n', | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Task configuration.
 | 
					
						
							|  |  |  |     clean: { | 
					
						
							|  |  |  |       dist: ['dist'] | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     jshint: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         jshintrc: 'js/.jshintrc' | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       gruntfile: { | 
					
						
							|  |  |  |         src: 'Gruntfile.js' | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       src: { | 
					
						
							|  |  |  |         src: ['js/*.js'] | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       test: { | 
					
						
							|  |  |  |         src: ['js/tests/unit/*.js'] | 
					
						
							| 
									
										
										
										
											2013-09-19 02:37:55 +08:00
										 |  |  |       }, | 
					
						
							|  |  |  |       assets: { | 
					
						
							|  |  |  |         src: ['docs-assets/js/application.js', 'docs-assets/js/customizer.js'] | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-07 08:51:38 +08:00
										 |  |  |     jscs: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         config: 'js/.jscs.json', | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       gruntfile: { | 
					
						
							|  |  |  |         src: ['Gruntfile.js'] | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       src: { | 
					
						
							|  |  |  |         src: ['js/*.js'] | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       test: { | 
					
						
							|  |  |  |         src: ['js/tests/unit/*.js'] | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-08 19:01:18 +08:00
										 |  |  |     csslint: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         csslintrc: '.csslintrc' | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       src: ['dist/css/bootstrap.css', 'dist/css/bootstrap-theme.css'] | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     concat: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         banner: '<%= banner %><%= jqueryCheck %>', | 
					
						
							|  |  |  |         stripBanners: false | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       bootstrap: { | 
					
						
							|  |  |  |         src: [ | 
					
						
							|  |  |  |           'js/transition.js', | 
					
						
							|  |  |  |           'js/alert.js', | 
					
						
							|  |  |  |           'js/button.js', | 
					
						
							|  |  |  |           'js/carousel.js', | 
					
						
							|  |  |  |           'js/collapse.js', | 
					
						
							|  |  |  |           'js/dropdown.js', | 
					
						
							|  |  |  |           'js/modal.js', | 
					
						
							|  |  |  |           'js/tooltip.js', | 
					
						
							|  |  |  |           'js/popover.js', | 
					
						
							|  |  |  |           'js/scrollspy.js', | 
					
						
							|  |  |  |           'js/tab.js', | 
					
						
							|  |  |  |           'js/affix.js' | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         dest: 'dist/js/<%= pkg.name %>.js' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     uglify: { | 
					
						
							|  |  |  |       options: { | 
					
						
							| 
									
										
										
										
											2013-09-18 14:04:09 +08:00
										 |  |  |         banner: '<%= banner %>', | 
					
						
							|  |  |  |         report: 'min' | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       }, | 
					
						
							|  |  |  |       bootstrap: { | 
					
						
							|  |  |  |         src: ['<%= concat.bootstrap.dest %>'], | 
					
						
							|  |  |  |         dest: 'dist/js/<%= pkg.name %>.min.js' | 
					
						
							| 
									
										
										
										
											2013-09-19 22:41:14 +08:00
										 |  |  |       }, | 
					
						
							|  |  |  |       customize: { | 
					
						
							|  |  |  |         src: [ | 
					
						
							|  |  |  |           'docs-assets/js/less.js', | 
					
						
							|  |  |  |           'docs-assets/js/jszip.js', | 
					
						
							|  |  |  |           'docs-assets/js/uglify.js', | 
					
						
							|  |  |  |           'docs-assets/js/filesaver.js', | 
					
						
							|  |  |  |           'docs-assets/js/customizer.js' | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         dest: 'docs-assets/js/customize.js' | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |     less: { | 
					
						
							|  |  |  |       compile: { | 
					
						
							| 
									
										
										
										
											2013-12-10 08:06:35 +08:00
										 |  |  |         options: { | 
					
						
							|  |  |  |           strictMath: true | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         files: { | 
					
						
							|  |  |  |           'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less', | 
					
						
							|  |  |  |           'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less' | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2013-12-09 16:12:11 +08:00
										 |  |  |       minify: { | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |           cleancss: true, | 
					
						
							|  |  |  |           report: 'min' | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         files: { | 
					
						
							|  |  |  |           'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', | 
					
						
							|  |  |  |           'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     usebanner: { | 
					
						
							|  |  |  |       dist: { | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |         options: { | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |           position: 'top', | 
					
						
							|  |  |  |           banner: '<%= banner %>' | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         files: { | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |           src: [ | 
					
						
							|  |  |  |             'dist/css/<%= pkg.name %>.css', | 
					
						
							| 
									
										
										
										
											2013-12-09 16:12:11 +08:00
										 |  |  |             'dist/css/<%= pkg.name %>.min.css', | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |             'dist/css/<%= pkg.name %>-theme.css', | 
					
						
							| 
									
										
										
										
											2013-12-09 16:12:11 +08:00
										 |  |  |             'dist/css/<%= pkg.name %>-theme.min.css', | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |           ] | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |     csscomb: { | 
					
						
							|  |  |  |       sort: { | 
					
						
							| 
									
										
										
										
											2013-08-18 09:59:50 +08:00
										 |  |  |         options: { | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |           sortOrder: '.csscomb.json' | 
					
						
							| 
									
										
										
										
											2013-08-18 09:59:50 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         files: { | 
					
						
							| 
									
										
										
										
											2013-12-09 15:48:07 +08:00
										 |  |  |           'dist/css/<%= pkg.name %>.css': ['dist/css/<%= pkg.name %>.css'], | 
					
						
							|  |  |  |           'dist/css/<%= pkg.name %>-theme.css': ['dist/css/<%= pkg.name %>-theme.css'], | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-18 15:36:51 +08:00
										 |  |  |     copy: { | 
					
						
							|  |  |  |       fonts: { | 
					
						
							|  |  |  |         expand: true, | 
					
						
							| 
									
										
										
										
											2013-09-19 00:50:02 +08:00
										 |  |  |         src: ['fonts/*'], | 
					
						
							| 
									
										
										
										
											2013-08-18 15:36:51 +08:00
										 |  |  |         dest: 'dist/' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     qunit: { | 
					
						
							|  |  |  |       options: { | 
					
						
							|  |  |  |         inject: 'js/tests/unit/phantom.js' | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       files: ['js/tests/*.html'] | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     connect: { | 
					
						
							|  |  |  |       server: { | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |           port: 3000, | 
					
						
							|  |  |  |           base: '.' | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-13 06:01:06 +08:00
										 |  |  |     jekyll: { | 
					
						
							|  |  |  |       docs: {} | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     validation: { | 
					
						
							|  |  |  |       options: { | 
					
						
							| 
									
										
										
										
											2013-10-24 14:25:17 +08:00
										 |  |  |         reset: true, | 
					
						
							|  |  |  |         relaxerror: [ | 
					
						
							| 
									
										
										
										
											2013-09-19 00:50:02 +08:00
										 |  |  |           'Bad value X-UA-Compatible for attribute http-equiv on element meta.', | 
					
						
							|  |  |  |           'Element img is missing required attribute src.' | 
					
						
							| 
									
										
										
										
											2013-10-24 14:25:17 +08:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2013-08-13 06:01:06 +08:00
										 |  |  |       }, | 
					
						
							|  |  |  |       files: { | 
					
						
							| 
									
										
										
										
											2013-09-19 00:50:02 +08:00
										 |  |  |         src: ['_gh_pages/**/*.html'] | 
					
						
							| 
									
										
										
										
											2013-08-13 06:01:06 +08:00
										 |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     watch: { | 
					
						
							|  |  |  |       src: { | 
					
						
							|  |  |  |         files: '<%= jshint.src.src %>', | 
					
						
							|  |  |  |         tasks: ['jshint:src', 'qunit'] | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       test: { | 
					
						
							|  |  |  |         files: '<%= jshint.test.src %>', | 
					
						
							|  |  |  |         tasks: ['jshint:test', 'qunit'] | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |       less: { | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |         files: 'less/*.less', | 
					
						
							| 
									
										
										
										
											2013-12-09 11:09:27 +08:00
										 |  |  |         tasks: ['less'] | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-11-02 09:15:25 +08:00
										 |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sed: { | 
					
						
							|  |  |  |       versionNumber: { | 
					
						
							|  |  |  |         pattern: (function () { | 
					
						
							|  |  |  |           var old = grunt.option('oldver') | 
					
						
							|  |  |  |           return old ? RegExp.quote(old) : old | 
					
						
							|  |  |  |         })(), | 
					
						
							|  |  |  |         replacement: grunt.option('newver'), | 
					
						
							|  |  |  |         recursive: true | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-12-04 10:42:31 +08:00
										 |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     'saucelabs-qunit': { | 
					
						
							|  |  |  |       all: { | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |           build: process.env.TRAVIS_JOB_ID, | 
					
						
							|  |  |  |           concurrency: 3, | 
					
						
							|  |  |  |           urls: ['http://127.0.0.1:3000/js/tests/index.html'], | 
					
						
							|  |  |  |           browsers: [ | 
					
						
							|  |  |  |             // See https://saucelabs.com/docs/platforms/webdriver
 | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'safari', | 
					
						
							| 
									
										
										
										
											2013-12-13 13:58:44 +08:00
										 |  |  |               version: '7', | 
					
						
							|  |  |  |               platform: 'OS X 10.9' | 
					
						
							| 
									
										
										
										
											2013-12-04 10:42:31 +08:00
										 |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'chrome', | 
					
						
							| 
									
										
										
										
											2013-12-13 13:58:44 +08:00
										 |  |  |               version: '31', | 
					
						
							|  |  |  |               platform: 'OS X 10.9' | 
					
						
							| 
									
										
										
										
											2013-12-04 10:42:31 +08:00
										 |  |  |             }, | 
					
						
							|  |  |  |             /* FIXME: currently fails 1 tooltip test | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'firefox', | 
					
						
							|  |  |  |               version: '25', | 
					
						
							|  |  |  |               platform: 'OS X 10.6' | 
					
						
							|  |  |  |             },*/ | 
					
						
							|  |  |  |             // Mac Opera not currently supported by Sauce Labs
 | 
					
						
							|  |  |  |             /* FIXME: currently fails 1 tooltip test | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'internet explorer', | 
					
						
							|  |  |  |               version: '11', | 
					
						
							|  |  |  |               platform: 'Windows 8.1' | 
					
						
							|  |  |  |             },*/ | 
					
						
							|  |  |  |             /* | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'internet explorer', | 
					
						
							|  |  |  |               version: '10', | 
					
						
							|  |  |  |               platform: 'Windows 8' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'internet explorer', | 
					
						
							|  |  |  |               version: '9', | 
					
						
							|  |  |  |               platform: 'Windows 7' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'internet explorer', | 
					
						
							|  |  |  |               version: '8', | 
					
						
							|  |  |  |               platform: 'Windows 7' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             {// unofficial
 | 
					
						
							|  |  |  |               browserName: 'internet explorer', | 
					
						
							|  |  |  |               version: '7', | 
					
						
							|  |  |  |               platform: 'Windows XP' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             */ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'chrome', | 
					
						
							|  |  |  |               version: '31', | 
					
						
							|  |  |  |               platform: 'Windows 8.1' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'firefox', | 
					
						
							|  |  |  |               version: '25', | 
					
						
							|  |  |  |               platform: 'Windows 8.1' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             // Win Opera 15+ not currently supported by Sauce Labs
 | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'iphone', | 
					
						
							|  |  |  |               version: '6.1', | 
					
						
							|  |  |  |               platform: 'OS X 10.8' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             // iOS Chrome not currently supported by Sauce Labs
 | 
					
						
							|  |  |  |             // Linux (unofficial)
 | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'chrome', | 
					
						
							|  |  |  |               version: '30', | 
					
						
							|  |  |  |               platform: 'Linux' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'firefox', | 
					
						
							|  |  |  |               version: '25', | 
					
						
							|  |  |  |               platform: 'Linux' | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             // Android Chrome not currently supported by Sauce Labs
 | 
					
						
							|  |  |  |             /* Android Browser (super-unofficial) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               browserName: 'android', | 
					
						
							|  |  |  |               version: '4.0', | 
					
						
							|  |  |  |               platform: 'Linux' | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             */ | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // These plugins provide necessary tasks.
 | 
					
						
							| 
									
										
										
										
											2013-12-10 21:47:50 +08:00
										 |  |  |   require('load-grunt-tasks')(grunt, {scope: 'devDependencies'}); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-13 06:01:06 +08:00
										 |  |  |   // Docs HTML validation task
 | 
					
						
							| 
									
										
										
										
											2013-08-19 04:43:53 +08:00
										 |  |  |   grunt.registerTask('validate-html', ['jekyll', 'validation']); | 
					
						
							| 
									
										
										
										
											2013-08-13 06:01:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // Test task.
 | 
					
						
							| 
									
										
										
										
											2013-12-15 11:09:44 +08:00
										 |  |  |   var testSubtasks = []; | 
					
						
							|  |  |  |   // Skip core tests if running a different subset of the test suite
 | 
					
						
							|  |  |  |   if (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'core') { | 
					
						
							|  |  |  |     testSubtasks = testSubtasks.concat(['dist-css', 'jshint', 'jscs', 'qunit']); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   // Skip HTML validation if running a different subset of the test suite
 | 
					
						
							|  |  |  |   if (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'validate-html') { | 
					
						
							|  |  |  |     testSubtasks.push('validate-html'); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2013-12-04 10:42:31 +08:00
										 |  |  |   // Only run Sauce Labs tests if there's a Sauce access key
 | 
					
						
							| 
									
										
										
										
											2013-12-15 11:09:44 +08:00
										 |  |  |   if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' | 
					
						
							|  |  |  |       // Skip Sauce if running a different subset of the test suite
 | 
					
						
							|  |  |  |       && (!process.env.TWBS_TEST || process.env.TWBS_TEST === 'sauce-js-unit')) { | 
					
						
							| 
									
										
										
										
											2013-12-04 10:42:31 +08:00
										 |  |  |     testSubtasks.push('connect'); | 
					
						
							|  |  |  |     testSubtasks.push('saucelabs-qunit'); | 
					
						
							| 
									
										
										
										
											2013-08-06 15:39:35 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   grunt.registerTask('test', testSubtasks); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // JS distribution task.
 | 
					
						
							|  |  |  |   grunt.registerTask('dist-js', ['concat', 'uglify']); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // CSS distribution task.
 | 
					
						
							| 
									
										
										
										
											2013-12-09 16:12:11 +08:00
										 |  |  |   grunt.registerTask('dist-css', ['less', 'csscomb', 'usebanner']); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-18 15:36:51 +08:00
										 |  |  |   // Fonts distribution task.
 | 
					
						
							|  |  |  |   grunt.registerTask('dist-fonts', ['copy']); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // Full distribution task.
 | 
					
						
							| 
									
										
										
										
											2013-08-18 15:36:51 +08:00
										 |  |  |   grunt.registerTask('dist', ['clean', 'dist-css', 'dist-fonts', 'dist-js']); | 
					
						
							| 
									
										
										
										
											2013-05-04 22:55:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-04 07:03:38 +08:00
										 |  |  |   // Default task.
 | 
					
						
							| 
									
										
										
										
											2013-08-18 07:44:54 +08:00
										 |  |  |   grunt.registerTask('default', ['test', 'dist', 'build-customizer']); | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-02 09:15:25 +08:00
										 |  |  |   // 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']); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  |   // task for building customizer
 | 
					
						
							|  |  |  |   grunt.registerTask('build-customizer', 'Add scripts/less files to customizer.', function () { | 
					
						
							|  |  |  |     var fs = require('fs') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function getFiles(type) { | 
					
						
							|  |  |  |       var files = {} | 
					
						
							|  |  |  |       fs.readdirSync(type) | 
					
						
							|  |  |  |         .filter(function (path) { | 
					
						
							| 
									
										
										
										
											2013-08-20 03:19:00 +08:00
										 |  |  |           return type == 'fonts' ? true : new RegExp('\\.' + type + '$').test(path) | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  |         }) | 
					
						
							|  |  |  |         .forEach(function (path) { | 
					
						
							| 
									
										
										
										
											2013-10-10 08:57:52 +08:00
										 |  |  |           var fullPath = type + '/' + path | 
					
						
							|  |  |  |           return files[path] = (type == 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8')) | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  |         }) | 
					
						
							|  |  |  |       return 'var __' + type + ' = ' + JSON.stringify(files) + '\n' | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-20 05:16:52 +08:00
										 |  |  |     var files = getFiles('js') + getFiles('less') + getFiles('fonts') | 
					
						
							| 
									
										
										
										
											2013-09-24 04:00:43 +08:00
										 |  |  |     fs.writeFileSync('docs-assets/js/raw-files.js', files) | 
					
						
							| 
									
										
										
										
											2013-08-08 14:06:29 +08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2013-09-18 14:04:09 +08:00
										 |  |  | }; |