railsstrap 3.2.0.3 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/lib/railsstrap/constants.rb +1 -1
  3. data/vendor/assets/bower_components/bootstrap/Gruntfile.js +98 -76
  4. data/vendor/assets/bower_components/bootstrap/README.md +25 -23
  5. data/vendor/assets/bower_components/bootstrap/bower.json +3 -3
  6. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +26 -11
  7. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -1
  8. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +2 -2
  9. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css +286 -131
  10. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -1
  11. data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css +2 -2
  12. data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +1 -1
  13. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +340 -178
  14. data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +3 -2
  15. data/vendor/assets/bower_components/bootstrap/dist/js/npm.js +13 -0
  16. data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +1 -1
  17. data/vendor/assets/bower_components/bootstrap/grunt/bs-commonjs-generator.js +23 -0
  18. data/vendor/assets/bower_components/bootstrap/grunt/bs-lessdoc-parser.js +7 -5
  19. data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +1 -1
  20. data/vendor/assets/bower_components/bootstrap/js/affix.js +43 -23
  21. data/vendor/assets/bower_components/bootstrap/js/alert.js +6 -4
  22. data/vendor/assets/bower_components/bootstrap/js/button.js +16 -10
  23. data/vendor/assets/bower_components/bootstrap/js/carousel.js +26 -10
  24. data/vendor/assets/bower_components/bootstrap/js/collapse.js +69 -28
  25. data/vendor/assets/bower_components/bootstrap/js/dropdown.js +20 -10
  26. data/vendor/assets/bower_components/bootstrap/js/modal.js +22 -21
  27. data/vendor/assets/bower_components/bootstrap/js/popover.js +13 -7
  28. data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +12 -7
  29. data/vendor/assets/bower_components/bootstrap/js/tab.js +41 -16
  30. data/vendor/assets/bower_components/bootstrap/js/tooltip.js +60 -39
  31. data/vendor/assets/bower_components/bootstrap/js/transition.js +1 -1
  32. data/vendor/assets/bower_components/bootstrap/less/button-groups.less +16 -9
  33. data/vendor/assets/bower_components/bootstrap/less/buttons.less +7 -4
  34. data/vendor/assets/bower_components/bootstrap/less/carousel.less +24 -0
  35. data/vendor/assets/bower_components/bootstrap/less/code.less +1 -0
  36. data/vendor/assets/bower_components/bootstrap/less/component-animations.less +5 -2
  37. data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +3 -5
  38. data/vendor/assets/bower_components/bootstrap/less/forms.less +44 -25
  39. data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +2 -1
  40. data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +4 -4
  41. data/vendor/assets/bower_components/bootstrap/less/list-group.less +1 -0
  42. data/vendor/assets/bower_components/bootstrap/less/media.less +27 -36
  43. data/vendor/assets/bower_components/bootstrap/less/mixins/buttons.less +2 -0
  44. data/vendor/assets/bower_components/bootstrap/less/mixins/forms.less +5 -1
  45. data/vendor/assets/bower_components/bootstrap/less/mixins/image.less +0 -1
  46. data/vendor/assets/bower_components/bootstrap/less/mixins/labels.less +1 -1
  47. data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +6 -3
  48. data/vendor/assets/bower_components/bootstrap/less/modals.less +2 -3
  49. data/vendor/assets/bower_components/bootstrap/less/navbar.less +29 -25
  50. data/vendor/assets/bower_components/bootstrap/less/navs.less +3 -1
  51. data/vendor/assets/bower_components/bootstrap/less/normalize.less +5 -3
  52. data/vendor/assets/bower_components/bootstrap/less/pager.less +1 -2
  53. data/vendor/assets/bower_components/bootstrap/less/pagination.less +1 -1
  54. data/vendor/assets/bower_components/bootstrap/less/panels.less +21 -3
  55. data/vendor/assets/bower_components/bootstrap/less/popovers.less +5 -4
  56. data/vendor/assets/bower_components/bootstrap/less/print.less +102 -96
  57. data/vendor/assets/bower_components/bootstrap/less/progress-bars.less +1 -19
  58. data/vendor/assets/bower_components/bootstrap/less/responsive-embed.less +2 -1
  59. data/vendor/assets/bower_components/bootstrap/less/scaffolding.less +1 -1
  60. data/vendor/assets/bower_components/bootstrap/less/tables.less +11 -10
  61. data/vendor/assets/bower_components/bootstrap/less/theme.less +12 -10
  62. data/vendor/assets/bower_components/bootstrap/less/thumbnails.less +1 -1
  63. data/vendor/assets/bower_components/bootstrap/less/type.less +0 -11
  64. data/vendor/assets/bower_components/bootstrap/less/utilities.less +0 -1
  65. data/vendor/assets/bower_components/bootstrap/less/variables.less +29 -19
  66. data/vendor/assets/bower_components/bootstrap/package.json +20 -19
  67. metadata +4 -3
  68. data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +0 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e12bab1aacc0c5c73e8fcc54e6d9602d58b835f
4
- data.tar.gz: e12a9d052d2d9f1b06c9a9d879424ccaacee751b
3
+ metadata.gz: 576cfff798a3f38bbdcf0268a8177f0d014af88c
4
+ data.tar.gz: 9d433b38d88e8a48020fa97f0c24d8c04c69134d
5
5
  SHA512:
6
- metadata.gz: 4997f111d82f7dfce5cea8a3a06d4c4c083129c50a1588cee6b028d083dc1b2ff2b978cb7f04bcd8f7bef5360bd274baf315d717bd0a893b6c1fadb72b823941
7
- data.tar.gz: 0fdaff045e68a40440988afab5211620069144d817474b02ddda572e965bf5d7663cc69d8e0605673e241361c37b68f0aeec3ae3d85c884a1b3cdab830974255
6
+ metadata.gz: 2b31ade8e0cd02f676c593b7deaf183ae816017a1f28018cf2f5f0615b75d2251fe3e03640d6ad50d4025fd6bd6a90dc1555379674943e4061e36d582b36c208
7
+ data.tar.gz: 4b9109e82154b84ade8438933212932bcb8bcac474d041331f06e498a071196e04845f46a6dc3a2ca0a3ce73a18125e4082a217acc5d2901c3a6091b99dc473c
@@ -1,6 +1,6 @@
1
1
  module Railsstrap
2
2
  module Constants
3
3
  #we follow along with Bootstrap's version number for easy identification
4
- VERSION = '3.2.0.3'
4
+ VERSION = '3.3.0'
5
5
  end
6
6
  end
@@ -18,9 +18,15 @@ module.exports = function (grunt) {
18
18
  var fs = require('fs');
19
19
  var path = require('path');
20
20
  var npmShrinkwrap = require('npm-shrinkwrap');
21
- var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
22
21
  var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
22
+ var getLessVarsData = function () {
23
+ var filePath = path.join(__dirname, 'less/variables.less');
24
+ var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
25
+ var parser = new BsLessdocParser(fileContent);
26
+ return { sections: parser.parseFile() };
27
+ };
23
28
  var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
29
+ var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
24
30
 
25
31
  // Project configuration.
26
32
  grunt.initConfig({
@@ -32,12 +38,26 @@ module.exports = function (grunt) {
32
38
  ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
33
39
  ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' +
34
40
  ' */\n',
35
- // NOTE: This jqueryCheck code is duplicated in customizer.js; if making changes here, be sure to update the other copy too.
36
- jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n',
41
+ // NOTE: This jqueryCheck/jqueryVersionCheck code is duplicated in customizer.js;
42
+ // if making changes here, be sure to update the other copy too.
43
+ jqueryCheck: [
44
+ 'if (typeof jQuery === \'undefined\') {',
45
+ ' throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\')',
46
+ '}\n'
47
+ ].join('\n'),
48
+ jqueryVersionCheck: [
49
+ '+function ($) {',
50
+ ' var version = $.fn.jquery.split(\' \')[0].split(\'.\')',
51
+ ' if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {',
52
+ ' throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery version 1.9.1 or higher\')',
53
+ ' }',
54
+ '}(jQuery);\n\n'
55
+ ].join('\n'),
37
56
 
38
57
  // Task configuration.
39
58
  clean: {
40
- dist: ['dist', 'docs/dist']
59
+ dist: 'dist',
60
+ docs: 'docs/dist'
41
61
  },
42
62
 
43
63
  jshint: {
@@ -50,7 +70,7 @@ module.exports = function (grunt) {
50
70
  },
51
71
  src: ['Gruntfile.js', 'grunt/*.js']
52
72
  },
53
- src: {
73
+ core: {
54
74
  src: 'js/*.js'
55
75
  },
56
76
  test: {
@@ -60,7 +80,7 @@ module.exports = function (grunt) {
60
80
  src: 'js/tests/unit/*.js'
61
81
  },
62
82
  assets: {
63
- src: ['docs/assets/js/_src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
83
+ src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
64
84
  }
65
85
  },
66
86
 
@@ -71,8 +91,8 @@ module.exports = function (grunt) {
71
91
  grunt: {
72
92
  src: '<%= jshint.grunt.src %>'
73
93
  },
74
- src: {
75
- src: '<%= jshint.src.src %>'
94
+ core: {
95
+ src: '<%= jshint.core.src %>'
76
96
  },
77
97
  test: {
78
98
  src: '<%= jshint.test.src %>'
@@ -87,7 +107,7 @@ module.exports = function (grunt) {
87
107
 
88
108
  concat: {
89
109
  options: {
90
- banner: '<%= banner %>\n<%= jqueryCheck %>',
110
+ banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
91
111
  stripBanners: false
92
112
  },
93
113
  bootstrap: {
@@ -113,27 +133,29 @@ module.exports = function (grunt) {
113
133
  options: {
114
134
  preserveComments: 'some'
115
135
  },
116
- bootstrap: {
136
+ core: {
117
137
  src: '<%= concat.bootstrap.dest %>',
118
138
  dest: 'dist/js/<%= pkg.name %>.min.js'
119
139
  },
120
140
  customize: {
141
+ // NOTE: This src list is duplicated in footer.html; if making changes here, be sure to update the other copy too.
121
142
  src: [
122
- 'docs/assets/js/_vendor/less.min.js',
123
- 'docs/assets/js/_vendor/jszip.min.js',
124
- 'docs/assets/js/_vendor/uglify.min.js',
125
- 'docs/assets/js/_vendor/blob.js',
126
- 'docs/assets/js/_vendor/filesaver.js',
143
+ 'docs/assets/js/vendor/less.min.js',
144
+ 'docs/assets/js/vendor/jszip.min.js',
145
+ 'docs/assets/js/vendor/uglify.min.js',
146
+ 'docs/assets/js/vendor/Blob.js',
147
+ 'docs/assets/js/vendor/FileSaver.js',
127
148
  'docs/assets/js/raw-files.min.js',
128
- 'docs/assets/js/_src/customizer.js'
149
+ 'docs/assets/js/src/customizer.js'
129
150
  ],
130
151
  dest: 'docs/assets/js/customize.min.js'
131
152
  },
132
153
  docsJs: {
154
+ // NOTE: This src list is duplicated in footer.html; if making changes here, be sure to update the other copy too.
133
155
  src: [
134
- 'docs/assets/js/_vendor/holder.js',
135
- 'docs/assets/js/_vendor/ZeroClipboard.min.js',
136
- 'docs/assets/js/_src/application.js'
156
+ 'docs/assets/js/vendor/holder.js',
157
+ 'docs/assets/js/vendor/ZeroClipboard.min.js',
158
+ 'docs/assets/js/src/application.js'
137
159
  ],
138
160
  dest: 'docs/assets/js/docs.min.js'
139
161
  }
@@ -155,9 +177,8 @@ module.exports = function (grunt) {
155
177
  sourceMapURL: '<%= pkg.name %>.css.map',
156
178
  sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
157
179
  },
158
- files: {
159
- 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less'
160
- }
180
+ src: 'less/bootstrap.less',
181
+ dest: 'dist/css/<%= pkg.name %>.css'
161
182
  },
162
183
  compileTheme: {
163
184
  options: {
@@ -167,9 +188,8 @@ module.exports = function (grunt) {
167
188
  sourceMapURL: '<%= pkg.name %>-theme.css.map',
168
189
  sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
169
190
  },
170
- files: {
171
- 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less'
172
- }
191
+ src: 'less/theme.less',
192
+ dest: 'dist/css/<%= pkg.name %>-theme.css'
173
193
  }
174
194
  },
175
195
 
@@ -199,7 +219,7 @@ module.exports = function (grunt) {
199
219
  src: 'dist/css/<%= pkg.name %>-theme.css'
200
220
  },
201
221
  docs: {
202
- src: 'docs/assets/css/_src/docs.css'
222
+ src: 'docs/assets/css/src/docs.css'
203
223
  },
204
224
  examples: {
205
225
  expand: true,
@@ -213,7 +233,7 @@ module.exports = function (grunt) {
213
233
  options: {
214
234
  csslintrc: 'less/.csslintrc'
215
235
  },
216
- src: [
236
+ dist: [
217
237
  'dist/css/bootstrap.css',
218
238
  'dist/css/bootstrap-theme.css'
219
239
  ],
@@ -225,7 +245,7 @@ module.exports = function (grunt) {
225
245
  ids: false,
226
246
  'overqualified-elements': false
227
247
  },
228
- src: 'docs/assets/css/_src/docs.css'
248
+ src: 'docs/assets/css/src/docs.css'
229
249
  }
230
250
  },
231
251
 
@@ -235,16 +255,18 @@ module.exports = function (grunt) {
235
255
  keepSpecialComments: '*',
236
256
  noAdvanced: true
237
257
  },
238
- core: {
239
- files: {
240
- 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
241
- 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'
242
- }
258
+ minifyCore: {
259
+ src: 'dist/css/<%= pkg.name %>.css',
260
+ dest: 'dist/css/<%= pkg.name %>.min.css'
261
+ },
262
+ minifyTheme: {
263
+ src: 'dist/css/<%= pkg.name %>-theme.css',
264
+ dest: 'dist/css/<%= pkg.name %>-theme.min.css'
243
265
  },
244
266
  docs: {
245
267
  src: [
246
- 'docs/assets/css/_src/docs.css',
247
- 'docs/assets/css/_src/pygments-manni.css'
268
+ 'docs/assets/css/src/docs.css',
269
+ 'docs/assets/css/src/pygments-manni.css'
248
270
  ],
249
271
  dest: 'docs/assets/css/docs.min.css'
250
272
  }
@@ -277,27 +299,19 @@ module.exports = function (grunt) {
277
299
  dest: 'docs/examples/'
278
300
  },
279
301
  docs: {
280
- files: {
281
- 'docs/assets/css/_src/docs.css': 'docs/assets/css/_src/docs.css'
282
- }
302
+ src: 'docs/assets/css/src/docs.css',
303
+ dest: 'docs/assets/css/src/docs.css'
283
304
  }
284
305
  },
285
306
 
286
307
  copy: {
287
308
  fonts: {
288
- expand: true,
289
309
  src: 'fonts/*',
290
310
  dest: 'dist/'
291
311
  },
292
312
  docs: {
293
- expand: true,
294
- cwd: './dist',
295
- src: [
296
- '{css,js}/*.min.*',
297
- 'css/*.map',
298
- 'fonts/*'
299
- ],
300
- dest: 'docs/dist'
313
+ src: 'dist/*/*',
314
+ dest: 'docs/'
301
315
  }
302
316
  },
303
317
 
@@ -315,20 +329,17 @@ module.exports = function (grunt) {
315
329
  },
316
330
 
317
331
  jade: {
318
- compile: {
319
- options: {
320
- pretty: true,
321
- data: function () {
322
- var filePath = path.join(__dirname, 'less/variables.less');
323
- var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
324
- var parser = new BsLessdocParser(fileContent);
325
- return { sections: parser.parseFile() };
326
- }
327
- },
328
- files: {
329
- 'docs/_includes/customizer-variables.html': 'docs/_jade/customizer-variables.jade',
330
- 'docs/_includes/nav/customize.html': 'docs/_jade/customizer-nav.jade'
331
- }
332
+ options: {
333
+ pretty: true,
334
+ data: getLessVarsData
335
+ },
336
+ customizerVars: {
337
+ src: 'docs/_jade/customizer-variables.jade',
338
+ dest: 'docs/_includes/customizer-variables.html'
339
+ },
340
+ customizerNav: {
341
+ src: 'docs/_jade/customizer-nav.jade',
342
+ dest: 'docs/_includes/nav/customize.html'
332
343
  }
333
344
  },
334
345
 
@@ -340,7 +351,9 @@ module.exports = function (grunt) {
340
351
  reset: true,
341
352
  relaxerror: [
342
353
  'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
343
- 'Element img is missing required attribute src.'
354
+ 'Element img is missing required attribute src.',
355
+ 'Attribute autocomplete not allowed on element input at this point.',
356
+ 'Attribute autocomplete not allowed on element button at this point.'
344
357
  ]
345
358
  },
346
359
  files: {
@@ -350,15 +363,15 @@ module.exports = function (grunt) {
350
363
 
351
364
  watch: {
352
365
  src: {
353
- files: '<%= jshint.src.src %>',
354
- tasks: ['jshint:src', 'qunit']
366
+ files: '<%= jshint.core.src %>',
367
+ tasks: ['jshint:src', 'qunit', 'concat']
355
368
  },
356
369
  test: {
357
370
  files: '<%= jshint.test.src %>',
358
371
  tasks: ['jshint:test', 'qunit']
359
372
  },
360
373
  less: {
361
- files: 'less/*.less',
374
+ files: 'less/**/*.less',
362
375
  tasks: 'less'
363
376
  }
364
377
  },
@@ -412,7 +425,7 @@ module.exports = function (grunt) {
412
425
  var testSubtasks = [];
413
426
  // Skip core tests if running a different subset of the test suite
414
427
  if (runSubset('core')) {
415
- testSubtasks = testSubtasks.concat(['dist-css', 'csslint', 'jshint', 'jscs', 'qunit', 'build-customizer-html']);
428
+ testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
416
429
  }
417
430
  // Skip HTML validation if running a different subset of the test suite
418
431
  if (runSubset('validate-html') &&
@@ -430,30 +443,26 @@ module.exports = function (grunt) {
430
443
  testSubtasks.push('saucelabs-qunit');
431
444
  }
432
445
  grunt.registerTask('test', testSubtasks);
446
+ grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
433
447
 
434
448
  // JS distribution task.
435
- grunt.registerTask('dist-js', ['concat', 'uglify']);
449
+ grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
436
450
 
437
451
  // CSS distribution task.
438
452
  grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']);
439
- grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'usebanner', 'csscomb', 'cssmin']);
440
-
441
- // Docs distribution task.
442
- grunt.registerTask('dist-docs', 'copy:docs');
453
+ grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'usebanner', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
443
454
 
444
455
  // Full distribution task.
445
- grunt.registerTask('dist', ['clean', 'dist-css', 'copy:fonts', 'dist-js', 'dist-docs']);
456
+ grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
446
457
 
447
458
  // Default task.
448
- grunt.registerTask('default', ['test', 'dist', 'build-glyphicons-data', 'build-customizer']);
459
+ grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
449
460
 
450
461
  // Version numbering task.
451
462
  // grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
452
463
  // This can be overzealous, so its changes should always be manually reviewed!
453
464
  grunt.registerTask('change-version-number', 'sed');
454
465
 
455
- grunt.registerTask('build-glyphicons-data', function () { generateGlyphiconsData.call(this, grunt); });
456
-
457
466
  // task for building customizer
458
467
  grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
459
468
  grunt.registerTask('build-customizer-html', 'jade');
@@ -462,6 +471,19 @@ module.exports = function (grunt) {
462
471
  generateRawFiles(grunt, banner);
463
472
  });
464
473
 
474
+ grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
475
+ var srcFiles = grunt.config.get('concat.bootstrap.src');
476
+ var destFilepath = 'dist/js/npm.js';
477
+ generateCommonJSModule(grunt, srcFiles, destFilepath);
478
+ });
479
+
480
+ // Docs task.
481
+ grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:docs']);
482
+ grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
483
+ grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
484
+ grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
485
+ grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-customizer']);
486
+
465
487
  // Task for updating the cached npm packages used by the Travis build (which are controlled by test-infra/npm-shrinkwrap.json).
466
488
  // This task should be run and the updated file should be committed whenever Bootstrap's dependencies change.
467
489
  grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', '_update-shrinkwrap']);
@@ -469,7 +491,7 @@ module.exports = function (grunt) {
469
491
  var done = this.async();
470
492
  npmShrinkwrap({ dev: true, dirname: __dirname }, function (err) {
471
493
  if (err) {
472
- grunt.fail.warn(err)
494
+ grunt.fail.warn(err);
473
495
  }
474
496
  var dest = 'test-infra/npm-shrinkwrap.json';
475
497
  fs.renameSync('npm-shrinkwrap.json', dest);
@@ -1,32 +1,33 @@
1
1
  # [Bootstrap](http://getbootstrap.com)
2
2
  [![Bower version](https://badge.fury.io/bo/bootstrap.svg)](http://badge.fury.io/bo/bootstrap)
3
3
  [![NPM version](https://badge.fury.io/js/bootstrap.svg)](http://badge.fury.io/js/bootstrap)
4
- [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.svg?branch=master)](http://travis-ci.org/twbs/bootstrap)
4
+ [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.svg?branch=master)](https://travis-ci.org/twbs/bootstrap)
5
5
  [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies)
6
6
  [![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap)
7
7
 
8
- Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community.
8
+ Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/twbs?tab=members) with the massive support and involvement of the community.
9
9
 
10
10
  To get started, check out <http://getbootstrap.com>!
11
11
 
12
12
  ## Table of contents
13
13
 
14
- - [Quick start](#quick-start)
15
- - [Bugs and feature requests](#bugs-and-feature-requests)
16
- - [Documentation](#documentation)
17
- - [Contributing](#contributing)
18
- - [Community](#community)
19
- - [Versioning](#versioning)
20
- - [Creators](#creators)
21
- - [Copyright and license](#copyright-and-license)
14
+ - [Quick start](#quick-start)
15
+ - [Bugs and feature requests](#bugs-and-feature-requests)
16
+ - [Documentation](#documentation)
17
+ - [Contributing](#contributing)
18
+ - [Community](#community)
19
+ - [Versioning](#versioning)
20
+ - [Creators](#creators)
21
+ - [Copyright and license](#copyright-and-license)
22
22
 
23
23
  ## Quick start
24
24
 
25
- Three quick start options are available:
25
+ Four quick start options are available:
26
26
 
27
- - [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.2.0.zip).
27
+ - [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.0.zip).
28
28
  - Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
29
29
  - Install with [Bower](http://bower.io): `bower install bootstrap`.
30
+ - Install with [npm](https://www.npmjs.org): `npm install bootstrap`.
30
31
 
31
32
  Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
32
33
 
@@ -66,10 +67,11 @@ Bootstrap's documentation, included in this repo in the root directory, is built
66
67
 
67
68
  ### Running documentation locally
68
69
 
69
- 1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.0.x).
70
- - **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. We use Pygments for syntax highlighting, so make sure to read the sections on installing Python and Pygments.
71
- 2. From the root `/bootstrap` directory, run `jekyll serve` in the command line.
72
- 3. Open <http://localhost:9001> in your browser, and voilà.
70
+ 1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.3.x).
71
+ - **Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems.
72
+ 2. Install the Ruby-based syntax highlighter, [Rouge](https://github.com/jneen/rouge), with `gem install rouge`.
73
+ 3. From the root `/bootstrap` directory, run `jekyll serve` in the command line.
74
+ 4. Open <http://localhost:9001> in your browser, and voilà.
73
75
 
74
76
  Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
75
77
 
@@ -85,7 +87,7 @@ Documentation for v2.3.2 has been made available for the time being at <http://g
85
87
 
86
88
  Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
87
89
 
88
- Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo).
90
+ Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
89
91
 
90
92
  Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
91
93
 
@@ -95,9 +97,9 @@ Editor preferences are available in the [editor config](https://github.com/twbs/
95
97
 
96
98
  Keep track of development and community news.
97
99
 
98
- - Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap).
100
+ - Follow [@twbootstrap on Twitter](https://twitter.com/twbootstrap).
99
101
  - Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
100
- - Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel.
102
+ - Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
101
103
  - Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
102
104
 
103
105
 
@@ -112,13 +114,13 @@ For transparency into our release cycle and in striving to maintain backward com
112
114
 
113
115
  **Mark Otto**
114
116
 
115
- - <http://twitter.com/mdo>
116
- - <http://github.com/mdo>
117
+ - <https://twitter.com/mdo>
118
+ - <https://github.com/mdo>
117
119
 
118
120
  **Jacob Thornton**
119
121
 
120
- - <http://twitter.com/fat>
121
- - <http://github.com/fat>
122
+ - <https://twitter.com/fat>
123
+ - <https://github.com/fat>
122
124
 
123
125
 
124
126