├── .bowerrc ├── .gitignore ├── Gruntfile-example.js ├── Gruntfile.js ├── README.md ├── bootstrap ├── .bower.json ├── CHANGELOG.md ├── Gemfile ├── Gemfile.lock ├── Gruntfile.js ├── LICENSE ├── README.md ├── _site │ ├── CHANGELOG.md │ ├── Gemfile │ ├── Gemfile.lock │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── dist │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ └── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ ├── npm.js │ │ │ └── umd │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── util.js │ ├── docs │ │ └── assets │ │ │ └── css │ │ │ ├── docs.min.css │ │ │ └── docs.min.css.map │ ├── docs4000 │ ├── grunt │ │ ├── bs-commonjs-generator.js │ │ ├── bs-sass-compile │ │ │ ├── libsass.js │ │ │ └── sass.js │ │ ├── change-version.js │ │ ├── configBridge.json │ │ ├── npm-shrinkwrap.json │ │ └── sauce_browsers.yml │ ├── js │ │ ├── dist │ │ │ ├── alert.js │ │ │ ├── alert.js.map │ │ │ ├── button.js │ │ │ ├── button.js.map │ │ │ ├── carousel.js │ │ │ ├── carousel.js.map │ │ │ ├── collapse.js │ │ │ ├── collapse.js.map │ │ │ ├── dropdown.js │ │ │ ├── dropdown.js.map │ │ │ ├── modal.js │ │ │ ├── modal.js.map │ │ │ ├── popover.js │ │ │ ├── popover.js.map │ │ │ ├── scrollspy.js │ │ │ ├── scrollspy.js.map │ │ │ ├── tab.js │ │ │ ├── tab.js.map │ │ │ ├── tooltip.js │ │ │ ├── tooltip.js.map │ │ │ ├── util.js │ │ │ └── util.js.map │ │ └── src │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── util.js │ ├── nuget │ │ ├── MyGet.ps1 │ │ ├── bootstrap.nuspec │ │ └── bootstrap.sass.nuspec │ ├── package.js │ ├── package.json │ ├── sache.json │ └── scss │ │ ├── bootstrap-flex.scss │ │ ├── bootstrap-grid.scss │ │ ├── bootstrap-reboot.scss │ │ └── bootstrap.scss ├── bower.json ├── dist │ ├── css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── npm.js │ │ └── umd │ │ ├── alert.js │ │ ├── button.js │ │ ├── carousel.js │ │ ├── collapse.js │ │ ├── dropdown.js │ │ ├── modal.js │ │ ├── popover.js │ │ ├── scrollspy.js │ │ ├── tab.js │ │ ├── tooltip.js │ │ └── util.js ├── docs │ └── assets │ │ └── css │ │ ├── docs.min.css │ │ └── docs.min.css.map ├── docs4000 ├── grunt │ ├── bs-commonjs-generator.js │ ├── bs-sass-compile │ │ ├── libsass.js │ │ └── sass.js │ ├── change-version.js │ ├── configBridge.json │ ├── npm-shrinkwrap.json │ └── sauce_browsers.yml ├── js │ ├── .eslintrc │ ├── .jscsrc │ ├── dist │ │ ├── alert.js │ │ ├── alert.js.map │ │ ├── button.js │ │ ├── button.js.map │ │ ├── carousel.js │ │ ├── carousel.js.map │ │ ├── collapse.js │ │ ├── collapse.js.map │ │ ├── dropdown.js │ │ ├── dropdown.js.map │ │ ├── modal.js │ │ ├── modal.js.map │ │ ├── popover.js │ │ ├── popover.js.map │ │ ├── scrollspy.js │ │ ├── scrollspy.js.map │ │ ├── tab.js │ │ ├── tab.js.map │ │ ├── tooltip.js │ │ ├── tooltip.js.map │ │ ├── util.js │ │ └── util.js.map │ └── src │ │ ├── alert.js │ │ ├── button.js │ │ ├── carousel.js │ │ ├── collapse.js │ │ ├── dropdown.js │ │ ├── modal.js │ │ ├── popover.js │ │ ├── scrollspy.js │ │ ├── tab.js │ │ ├── tooltip.js │ │ └── util.js ├── nuget │ ├── MyGet.ps1 │ ├── bootstrap.nuspec │ └── bootstrap.sass.nuspec ├── package.js ├── package.json ├── sache.json └── scss │ ├── .csscomb.json │ ├── .scss-lint.yml │ ├── _alert.scss │ ├── _animation.scss │ ├── _breadcrumb.scss │ ├── _button-group.scss │ ├── _buttons.scss │ ├── _card.scss │ ├── _carousel.scss │ ├── _close.scss │ ├── _code.scss │ ├── _custom-forms.scss │ ├── _dropdown.scss │ ├── _forms.scss │ ├── _grid.scss │ ├── _images.scss │ ├── _input-group.scss │ ├── _jumbotron.scss │ ├── _labels.scss │ ├── _list-group.scss │ ├── _media.scss │ ├── _mixins.scss │ ├── _modal.scss │ ├── _nav.scss │ ├── _navbar.scss │ ├── _normalize.scss │ ├── _pager.scss │ ├── _pagination.scss │ ├── _popover.scss │ ├── _print.scss │ ├── _progress.scss │ ├── _reboot.scss │ ├── _responsive-embed.scss │ ├── _tables.scss │ ├── _tooltip.scss │ ├── _type.scss │ ├── _utilities-background.scss │ ├── _utilities-responsive.scss │ ├── _utilities-spacing.scss │ ├── _utilities.scss │ ├── _variables-CUSTOM.scss │ ├── _variables-ORIGINAL.scss │ ├── _variables.scss │ ├── bootstrap-flex.scss │ ├── bootstrap-grid.scss │ ├── bootstrap-reboot.scss │ ├── bootstrap.scss │ └── mixins │ ├── _alert.scss │ ├── _background-variant.scss │ ├── _border-radius.scss │ ├── _breakpoints.scss │ ├── _buttons.scss │ ├── _cards.scss │ ├── _center-block.scss │ ├── _clearfix.scss │ ├── _forms.scss │ ├── _gradients.scss │ ├── _grid-framework.scss │ ├── _grid.scss │ ├── _hover.scss │ ├── _image.scss │ ├── _label.scss │ ├── _list-group.scss │ ├── _lists.scss │ ├── _nav-divider.scss │ ├── _navbar-align.scss │ ├── _pagination.scss │ ├── _progress.scss │ ├── _pulls.scss │ ├── _reset-filter.scss │ ├── _reset-text.scss │ ├── _resize.scss │ ├── _screen-reader.scss │ ├── _size.scss │ ├── _tab-focus.scss │ ├── _table-row.scss │ ├── _text-emphasis.scss │ ├── _text-hide.scss │ └── _text-truncate.scss ├── config ├── config.dev.json ├── config.google.json ├── config.local.json ├── config.prod.json └── config.test.json ├── package.json ├── server.js ├── src ├── app │ ├── app.component.ts │ ├── app.module.ts │ ├── app.routes.ts │ ├── components │ │ ├── auth │ │ │ └── callback.ts │ │ ├── navbar │ │ │ └── navbar.ts │ │ └── pages │ │ │ ├── loggedout-page.ts │ │ │ ├── protected-page.ts │ │ │ └── public-page.ts │ ├── directives │ │ └── protected.directive.ts │ ├── main.ts │ ├── pipes │ │ ├── reverse-pipe.ts │ │ └── sort-by-property-pipe.ts │ └── services │ │ ├── auth.service.ts │ │ ├── cookies.service.ts │ │ └── window.service.ts ├── config.json ├── css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── main.css ├── index.html ├── lib │ ├── bootstrap │ │ └── bootstrap.js │ └── js.cookie │ │ └── js.cookie.js ├── mockup.html ├── unit-tests.html ├── vendor.js ├── vendor.js.map └── vendor.ts ├── tsconfig.json ├── webpack.config.js └── webpack.prod.config.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "src/bower_components/" 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | node_modules/ 3 | .idea/ 4 | *.iml 5 | npm-debug.log 6 | __build__ 7 | temp.json 8 | site.zip 9 | node_modules-0.12 10 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with IntelliJ IDEA. 3 | * User: mfo 4 | * Date: 12/24/15 5 | * Time: 9:18 AM 6 | */ 7 | module.exports = function (grunt) { 8 | 9 | grunt.initConfig({ 10 | pkg: grunt.file.readJSON('package.json'), 11 | watch: { 12 | files: ['<%= jshint.files %>'], 13 | tasks: ['jshint', 'qunit'] 14 | }, 15 | grunt: { 16 | 'bootstrap': { 17 | gruntfile: 'bootstrap/Gruntfile.js', 18 | tasks: ['dist'] 19 | } 20 | }, 21 | compress: { 22 | main: { 23 | options: { 24 | archive: 'site.zip' 25 | }, 26 | files: [ 27 | {expand: true, cwd: 'src/', src: ['index.html', 'config.json'], dest: ''}, 28 | {expand: true, cwd: 'src/', src: 'lib/**', dest: ''}, 29 | {expand: true, src: '__build__/**', dest: ''} 30 | ] 31 | } 32 | }, 33 | shell: { 34 | options: { 35 | stderr: false 36 | }, 37 | webpack: { 38 | command: 'webpack --config webpack.config.js', 39 | }, 40 | webpackProd: { 41 | command: 'webpack --config webpack.prod.config.js' 42 | } 43 | }, 44 | copy: { 45 | bootstrapCss: { 46 | src: 'bootstrap/dist/css/bootstrap.css', 47 | dest: 'src/css/bootstrap.css' 48 | }, 49 | bootstrapJs: { 50 | src: 'bootstrap/dist/js/bootstrap.js', 51 | dest: 'src/lib/bootstrap/bootstrap.js' 52 | }, 53 | configgoogle: { 54 | src: 'config/config.google.json', 55 | dest: 'src/config.json' 56 | }, 57 | configlocal: { 58 | src: 'config/config.local.json', 59 | dest: 'src/config.json' 60 | }, 61 | configdev: { 62 | src: 'config/config.dev.json', 63 | dest: 'src/config.json' 64 | }, 65 | configtest: { 66 | src: 'config/config.test.json', 67 | dest: 'src/config.json' 68 | }, 69 | configprod: { 70 | src: 'config/config.prod.json', 71 | dest: 'src/config.json' 72 | } 73 | } 74 | }); 75 | 76 | grunt.loadNpmTasks('grunt-grunt'); 77 | grunt.loadNpmTasks('grunt-bump'); 78 | grunt.loadNpmTasks('grunt-xmlpoke'); 79 | grunt.loadNpmTasks('grunt-string-replace'); 80 | grunt.loadNpmTasks('grunt-contrib-watch'); 81 | grunt.loadNpmTasks('grunt-contrib-copy'); 82 | grunt.loadNpmTasks('grunt-contrib-compress'); 83 | require('load-grunt-tasks')(grunt); 84 | 85 | grunt.registerTask('bootstrap', 'build bootstrap and copy files into project', function (target) { 86 | grunt.task.run(['grunt:bootstrap', 'copy:bootstrapCss', 'copy:bootstrapJs']); 87 | }); 88 | 89 | grunt.registerTask('version', 'update version and tag release', function (target) { 90 | target = target || 'patch'; 91 | 92 | if (target === 'patch') { 93 | grunt.task.run([ 94 | 'bump-only' 95 | ]) 96 | } else { 97 | grunt.task.run([ 98 | 'bump-only:' + target 99 | ]) 100 | } 101 | grunt.task.run([ 102 | 'string-replace:about', 103 | 'xmlpoke:versionname', 104 | 'bump-commit' 105 | ]) 106 | }); 107 | 108 | grunt.registerTask('env', 'change environment to run the Angular app', function (target) { 109 | target = target || 'dev'; 110 | 111 | grunt.task.run([ 112 | 'copy:config' + target 113 | ]) 114 | }); 115 | 116 | grunt.registerTask('build', 'change environment to run the Angular app', function (target) { 117 | target = target || 'dev'; 118 | 119 | if (target === 'prod') { 120 | grunt.task.run([ 121 | 'env:prod', 122 | 'shell:webpackProd', 123 | 'compress' 124 | ]) 125 | } else { 126 | grunt.task.run([ 127 | 'shell:webpack', 128 | 'compress' 129 | ]) 130 | } 131 | 132 | }); 133 | 134 | }; -------------------------------------------------------------------------------- /bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "scss/bootstrap.scss", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | }, 34 | "version": "4.0.0-alpha.2", 35 | "_release": "4.0.0-alpha.2", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v4.0.0-alpha.2", 39 | "commit": "48938155eb24b4ccdde09426066869504c6dab3c" 40 | }, 41 | "_source": "git://github.com/twbs/bootstrap.git", 42 | "_target": "v4.0.0-alpha.2", 43 | "_originalSource": "bootstrap", 44 | "_direct": true 45 | } -------------------------------------------------------------------------------- /bootstrap/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs. 2 | 3 | See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. 4 | 5 | Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. 6 | -------------------------------------------------------------------------------- /bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | # Ruby Gems for building and testing Bootstrap 2 | # Run `grunt update-gemfile-lock` to update to the latest compatible versions 3 | 4 | source 'https://rubygems.org' 5 | 6 | group :development, :test do 7 | gem 'jekyll', '~> 3.0.1' 8 | gem 'jekyll-redirect-from', '~> 0.9.0' 9 | gem 'jekyll-sitemap', '~> 0.9.0' 10 | gem 'sass', '~> 3.4.19' 11 | gem 'scss_lint', '~> 0.43' 12 | end 13 | -------------------------------------------------------------------------------- /bootstrap/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | colorator (0.1) 5 | ffi (1.9.10) 6 | ffi (1.9.10-x64-mingw32) 7 | jekyll (3.0.1) 8 | colorator (~> 0.1) 9 | jekyll-sass-converter (~> 1.0) 10 | jekyll-watch (~> 1.1) 11 | kramdown (~> 1.3) 12 | liquid (~> 3.0) 13 | mercenary (~> 0.3.3) 14 | rouge (~> 1.7) 15 | safe_yaml (~> 1.0) 16 | jekyll-redirect-from (0.9.0) 17 | jekyll (>= 2.0) 18 | jekyll-sass-converter (1.3.0) 19 | sass (~> 3.2) 20 | jekyll-sitemap (0.9.0) 21 | jekyll-watch (1.3.0) 22 | listen (~> 3.0) 23 | kramdown (1.9.0) 24 | liquid (3.0.6) 25 | listen (3.0.5) 26 | rb-fsevent (>= 0.9.3) 27 | rb-inotify (>= 0.9) 28 | mercenary (0.3.5) 29 | rainbow (2.0.0) 30 | rb-fsevent (0.9.6) 31 | rb-inotify (0.9.5) 32 | ffi (>= 0.5.0) 33 | rouge (1.10.1) 34 | safe_yaml (1.0.4) 35 | sass (3.4.19) 36 | scss_lint (0.43.2) 37 | rainbow (~> 2.0) 38 | sass (~> 3.4.15) 39 | 40 | PLATFORMS 41 | ruby 42 | x64-mingw32 43 | 44 | DEPENDENCIES 45 | jekyll (~> 3.0.1) 46 | jekyll-redirect-from (~> 0.9.0) 47 | jekyll-sitemap (~> 0.9.0) 48 | sass (~> 3.4.19) 49 | scss_lint (~> 0.43) 50 | 51 | BUNDLED WITH 52 | 1.10.6 53 | -------------------------------------------------------------------------------- /bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2015 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bootstrap/_site/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs. 2 | 3 | See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. 4 | 5 | Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release. 6 | -------------------------------------------------------------------------------- /bootstrap/_site/Gemfile: -------------------------------------------------------------------------------- 1 | # Ruby Gems for building and testing Bootstrap 2 | # Run `grunt update-gemfile-lock` to update to the latest compatible versions 3 | 4 | source 'https://rubygems.org' 5 | 6 | group :development, :test do 7 | gem 'jekyll', '~> 3.0.1' 8 | gem 'jekyll-redirect-from', '~> 0.9.0' 9 | gem 'jekyll-sitemap', '~> 0.9.0' 10 | gem 'sass', '~> 3.4.19' 11 | gem 'scss_lint', '~> 0.43' 12 | end 13 | -------------------------------------------------------------------------------- /bootstrap/_site/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | colorator (0.1) 5 | ffi (1.9.10) 6 | ffi (1.9.10-x64-mingw32) 7 | jekyll (3.0.1) 8 | colorator (~> 0.1) 9 | jekyll-sass-converter (~> 1.0) 10 | jekyll-watch (~> 1.1) 11 | kramdown (~> 1.3) 12 | liquid (~> 3.0) 13 | mercenary (~> 0.3.3) 14 | rouge (~> 1.7) 15 | safe_yaml (~> 1.0) 16 | jekyll-redirect-from (0.9.0) 17 | jekyll (>= 2.0) 18 | jekyll-sass-converter (1.3.0) 19 | sass (~> 3.2) 20 | jekyll-sitemap (0.9.0) 21 | jekyll-watch (1.3.0) 22 | listen (~> 3.0) 23 | kramdown (1.9.0) 24 | liquid (3.0.6) 25 | listen (3.0.5) 26 | rb-fsevent (>= 0.9.3) 27 | rb-inotify (>= 0.9) 28 | mercenary (0.3.5) 29 | rainbow (2.0.0) 30 | rb-fsevent (0.9.6) 31 | rb-inotify (0.9.5) 32 | ffi (>= 0.5.0) 33 | rouge (1.10.1) 34 | safe_yaml (1.0.4) 35 | sass (3.4.19) 36 | scss_lint (0.43.2) 37 | rainbow (~> 2.0) 38 | sass (~> 3.4.15) 39 | 40 | PLATFORMS 41 | ruby 42 | x64-mingw32 43 | 44 | DEPENDENCIES 45 | jekyll (~> 3.0.1) 46 | jekyll-redirect-from (~> 0.9.0) 47 | jekyll-sitemap (~> 0.9.0) 48 | sass (~> 3.4.19) 49 | scss_lint (~> 0.43) 50 | 51 | BUNDLED WITH 52 | 1.10.6 53 | -------------------------------------------------------------------------------- /bootstrap/_site/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2015 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bootstrap/_site/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "scss/bootstrap.scss", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /bootstrap/_site/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('./umd/util.js') 3 | require('./umd/alert.js') 4 | require('./umd/button.js') 5 | require('./umd/carousel.js') 6 | require('./umd/collapse.js') 7 | require('./umd/dropdown.js') 8 | require('./umd/modal.js') 9 | require('./umd/scrollspy.js') 10 | require('./umd/tab.js') 11 | require('./umd/tooltip.js') 12 | require('./umd/popover.js') -------------------------------------------------------------------------------- /bootstrap/_site/docs/assets/css/docs.min.css: -------------------------------------------------------------------------------- 1 | 2 | /*# sourceMappingURL=docs.min.css.map */ -------------------------------------------------------------------------------- /bootstrap/_site/docs/assets/css/docs.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":""} -------------------------------------------------------------------------------- /bootstrap/_site/docs4000: -------------------------------------------------------------------------------- 1 | bundle exec jekyll serve 2 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/bs-commonjs-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for the CommonJS module generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var path = require('path'); 12 | 13 | var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n'; 14 | 15 | module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) { 16 | var destDir = path.dirname(destFilepath); 17 | 18 | function srcPathToDestRequire(srcFilepath) { 19 | return 'require(\'' + srcFilepath.replace(/\\/g, '/') + '\')'; 20 | } 21 | 22 | var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n'); 23 | try { 24 | fs.writeFileSync(destFilepath, moduleOutputJs); 25 | } catch (err) { 26 | grunt.fail.warn(err); 27 | } 28 | grunt.log.writeln('File ' + destFilepath.cyan + ' created.'); 29 | }; 30 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/bs-sass-compile/libsass.js: -------------------------------------------------------------------------------- 1 | // Compile Bootstrap with [libsass][1] using [grunt-sass][2] 2 | // [1]: https://github.com/sass/libsass 3 | // [2]: https://github.com/sindresorhus/grunt-sass 4 | module.exports = function configureLibsass(grunt) { 5 | grunt.config.merge({ 6 | sass: { 7 | options: { 8 | includePaths: ['scss'], 9 | precision: 6, 10 | sourceComments: false, 11 | sourceMap: true, 12 | outputStyle: 'expanded' 13 | }, 14 | core: { 15 | files: { 16 | 'dist/css/<%= pkg.name %>.css': 'scss/<%= pkg.name %>.scss' 17 | } 18 | }, 19 | extras: { 20 | files: { 21 | 'dist/css/<%= pkg.name %>-flex.css': 'scss/<%= pkg.name %>-flex.scss', 22 | 'dist/css/<%= pkg.name %>-grid.css': 'scss/<%= pkg.name %>-grid.scss', 23 | 'dist/css/<%= pkg.name %>-reboot.css': 'scss/<%= pkg.name %>-reboot.scss' 24 | } 25 | }, 26 | docs: { 27 | files: { 28 | 'docs/assets/css/docs.min.css': 'docs/assets/scss/docs.scss' 29 | } 30 | } 31 | } 32 | }); 33 | grunt.loadNpmTasks('grunt-sass'); 34 | }; 35 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/bs-sass-compile/sass.js: -------------------------------------------------------------------------------- 1 | // Compile Bootstrap with [Ruby Sass][1] using [grunt-contrib-sass][2] 2 | // [1]: https://github.com/sass/sass 3 | // [2]: https://github.com/gruntjs/grunt-contrib-sass 4 | module.exports = function configureRubySass(grunt) { 5 | var options = { 6 | loadPath: ['scss'], 7 | precision: 6, 8 | sourcemap: 'auto', 9 | style: 'expanded', 10 | trace: true, 11 | bundleExec: true 12 | }; 13 | grunt.config.merge({ 14 | sass: { 15 | core: { 16 | options: options, 17 | files: { 18 | 'dist/css/<%= pkg.name %>.css': 'scss/<%= pkg.name %>.scss' 19 | } 20 | }, 21 | extras: { 22 | options: options, 23 | files: { 24 | 'dist/css/<%= pkg.name %>-flex.css': 'scss/<%= pkg.name %>-flex.scss', 25 | 'dist/css/<%= pkg.name %>-grid.css': 'scss/<%= pkg.name %>-grid.scss', 26 | 'dist/css/<%= pkg.name %>-reboot.css': 'scss/<%= pkg.name %>-reboot.scss' 27 | } 28 | }, 29 | docs: { 30 | options: options, 31 | files: { 32 | 'docs/assets/css/docs.min.css': 'docs/assets/scss/docs.scss' 33 | } 34 | } 35 | } 36 | }); 37 | grunt.loadNpmTasks('grunt-contrib-sass'); 38 | }; 39 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/change-version.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | /*! 5 | * Script to update version number references in the project. 6 | * Copyright 2015 Twitter, Inc. 7 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 8 | */ 9 | var fs = require('fs'); 10 | var path = require('path'); 11 | var sh = require('shelljs'); 12 | sh.config.fatal = true; 13 | var sed = sh.sed; 14 | 15 | // Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37 16 | RegExp.quote = function (string) { 17 | return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); 18 | }; 19 | RegExp.quoteReplacement = function (string) { 20 | return string.replace(/[$]/g, '$$'); 21 | }; 22 | 23 | var DRY_RUN = false; 24 | 25 | function walkAsync(directory, excludedDirectories, fileCallback, errback) { 26 | if (excludedDirectories.has(path.parse(directory).base)) { 27 | return; 28 | } 29 | fs.readdir(directory, function (err, names) { 30 | if (err) { 31 | errback(err); 32 | return; 33 | } 34 | names.forEach(function (name) { 35 | var filepath = path.join(directory, name); 36 | fs.lstat(filepath, function (err, stats) { 37 | if (err) { 38 | process.nextTick(errback, err); 39 | return; 40 | } 41 | if (stats.isSymbolicLink()) { 42 | return; 43 | } 44 | else if (stats.isDirectory()) { 45 | process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback); 46 | } 47 | else if (stats.isFile()) { 48 | process.nextTick(fileCallback, filepath); 49 | } 50 | }); 51 | }); 52 | }); 53 | } 54 | 55 | function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) { 56 | original = new RegExp(RegExp.quote(original), 'g'); 57 | replacement = RegExp.quoteReplacement(replacement); 58 | var updateFile = !DRY_RUN ? (function (filepath) { 59 | if (allowedExtensions.has(path.parse(filepath).ext)) { 60 | sed('-i', original, replacement, filepath); 61 | } 62 | }) : (function (filepath) { 63 | if (allowedExtensions.has(path.parse(filepath).ext)) { 64 | console.log('FILE: ' + filepath); 65 | } 66 | else { 67 | console.log('EXCLUDED:' + filepath); 68 | } 69 | }); 70 | walkAsync('.', excludedDirectories, updateFile, function (err) { 71 | console.error('ERROR while traversing directory!:') 72 | console.error(err); 73 | process.exit(1); 74 | }); 75 | } 76 | 77 | function main(args) { 78 | if (args.length !== 2) { 79 | console.error('USAGE: change-version old_version new_version'); 80 | console.error('Got arguments:', args); 81 | process.exit(1); 82 | } 83 | var oldVersion = args[0]; 84 | var newVersion = args[1]; 85 | var EXCLUDED_DIRS = new Set([ 86 | '.git', 87 | 'node_modules', 88 | 'vendor' 89 | ]); 90 | var INCLUDED_EXTENSIONS = new Set([ 91 | // This extension whitelist is how we avoid modifying binary files 92 | '', 93 | '.css', 94 | '.html', 95 | '.js', 96 | '.json', 97 | '.md', 98 | '.scss', 99 | '.txt', 100 | '.yml' 101 | ]); 102 | replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion); 103 | }; 104 | 105 | main(process.argv.slice(2)); 106 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/configBridge.json: -------------------------------------------------------------------------------- 1 | { 2 | "paths": { 3 | "docsJs": [ 4 | "../assets/js/vendor/anchor.min.js", 5 | "../assets/js/vendor/clipboard.min.js", 6 | "../assets/js/vendor/holder.min.js", 7 | "../assets/js/src/application.js" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bootstrap/_site/grunt/sauce_browsers.yml: -------------------------------------------------------------------------------- 1 | [ 2 | # Docs: https://saucelabs.com/docs/platforms/webdriver 3 | 4 | { 5 | browserName: "safari", 6 | platform: "OS X 10.10" 7 | }, 8 | { 9 | browserName: "chrome", 10 | platform: "OS X 10.10" 11 | }, 12 | { 13 | browserName: "firefox", 14 | platform: "OS X 10.10" 15 | }, 16 | 17 | # Mac Opera not currently supported by Sauce Labs 18 | 19 | { 20 | browserName: "MicrosoftEdge", 21 | platform: "Windows 10" 22 | }, 23 | { 24 | browserName: "internet explorer", 25 | version: "11", 26 | platform: "Windows 8.1" 27 | }, 28 | { 29 | browserName: "internet explorer", 30 | version: "10", 31 | platform: "Windows 8" 32 | }, 33 | { 34 | browserName: "internet explorer", 35 | version: "9", 36 | platform: "Windows 7" 37 | }, 38 | 39 | { 40 | browserName: "chrome", 41 | platform: "Windows 8.1" 42 | }, 43 | { 44 | browserName: "firefox", 45 | platform: "Windows 8.1" 46 | }, 47 | 48 | # Win Opera 15+ not currently supported by Sauce Labs 49 | 50 | { 51 | browserName: "iphone", 52 | platform: "OS X 10.10", 53 | version: "9.1" 54 | }, 55 | 56 | # iOS Chrome not currently supported by Sauce Labs 57 | 58 | # Linux (unofficial) 59 | { 60 | browserName: "chrome", 61 | platform: "Linux" 62 | }, 63 | { 64 | browserName: "firefox", 65 | platform: "Linux" 66 | } 67 | 68 | # Android Chrome not currently supported by Sauce Labs 69 | # Android v5.0+ not currently supported by Sauce Labs 70 | # { # Android Browser 71 | # browserName: "android", 72 | # version: "5.0", 73 | # platform: "Linux" 74 | # } 75 | ] 76 | -------------------------------------------------------------------------------- /bootstrap/_site/js/dist/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.0.0-alpha.2): util.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var Util = (function ($) { 11 | 12 | /** 13 | * ------------------------------------------------------------------------ 14 | * Private TransitionEnd Helpers 15 | * ------------------------------------------------------------------------ 16 | */ 17 | 18 | var transition = false; 19 | 20 | var TransitionEndEvent = { 21 | WebkitTransition: 'webkitTransitionEnd', 22 | MozTransition: 'transitionend', 23 | OTransition: 'oTransitionEnd otransitionend', 24 | transition: 'transitionend' 25 | }; 26 | 27 | // shoutout AngusCroll (https://goo.gl/pxwQGp) 28 | function toType(obj) { 29 | return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); 30 | } 31 | 32 | function isElement(obj) { 33 | return (obj[0] || obj).nodeType; 34 | } 35 | 36 | function getSpecialTransitionEndEvent() { 37 | return { 38 | bindType: transition.end, 39 | delegateType: transition.end, 40 | handle: function handle(event) { 41 | if ($(event.target).is(this)) { 42 | return event.handleObj.handler.apply(this, arguments); 43 | } 44 | } 45 | }; 46 | } 47 | 48 | function transitionEndTest() { 49 | if (window.QUnit) { 50 | return false; 51 | } 52 | 53 | var el = document.createElement('bootstrap'); 54 | 55 | for (var _name in TransitionEndEvent) { 56 | if (el.style[_name] !== undefined) { 57 | return { end: TransitionEndEvent[_name] }; 58 | } 59 | } 60 | 61 | return false; 62 | } 63 | 64 | function transitionEndEmulator(duration) { 65 | var _this = this; 66 | 67 | var called = false; 68 | 69 | $(this).one(Util.TRANSITION_END, function () { 70 | called = true; 71 | }); 72 | 73 | setTimeout(function () { 74 | if (!called) { 75 | Util.triggerTransitionEnd(_this); 76 | } 77 | }, duration); 78 | 79 | return this; 80 | } 81 | 82 | function setTransitionEndSupport() { 83 | transition = transitionEndTest(); 84 | 85 | $.fn.emulateTransitionEnd = transitionEndEmulator; 86 | 87 | if (Util.supportsTransitionEnd()) { 88 | $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 89 | } 90 | } 91 | 92 | /** 93 | * -------------------------------------------------------------------------- 94 | * Public Util Api 95 | * -------------------------------------------------------------------------- 96 | */ 97 | 98 | var Util = { 99 | 100 | TRANSITION_END: 'bsTransitionEnd', 101 | 102 | getUID: function getUID(prefix) { 103 | do { 104 | prefix += ~ ~(Math.random() * 1000000); // "~~" acts like a faster Math.floor() here 105 | } while (document.getElementById(prefix)); 106 | return prefix; 107 | }, 108 | 109 | getSelectorFromElement: function getSelectorFromElement(element) { 110 | var selector = element.getAttribute('data-target'); 111 | 112 | if (!selector) { 113 | selector = element.getAttribute('href') || ''; 114 | selector = /^#[a-z]/i.test(selector) ? selector : null; 115 | } 116 | 117 | return selector; 118 | }, 119 | 120 | reflow: function reflow(element) { 121 | new Function('bs', 'return bs')(element.offsetHeight); 122 | }, 123 | 124 | triggerTransitionEnd: function triggerTransitionEnd(element) { 125 | $(element).trigger(transition.end); 126 | }, 127 | 128 | supportsTransitionEnd: function supportsTransitionEnd() { 129 | return Boolean(transition); 130 | }, 131 | 132 | typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 133 | for (var property in configTypes) { 134 | if (configTypes.hasOwnProperty(property)) { 135 | var expectedTypes = configTypes[property]; 136 | var value = config[property]; 137 | var valueType = undefined; 138 | 139 | if (value && isElement(value)) { 140 | valueType = 'element'; 141 | } else { 142 | valueType = toType(value); 143 | } 144 | 145 | if (!new RegExp(expectedTypes).test(valueType)) { 146 | throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); 147 | } 148 | } 149 | } 150 | } 151 | }; 152 | 153 | setTransitionEndSupport(); 154 | 155 | return Util; 156 | })(jQuery); 157 | //# sourceMappingURL=util.js.map 158 | -------------------------------------------------------------------------------- /bootstrap/_site/js/src/alert.js: -------------------------------------------------------------------------------- 1 | import Util from './util' 2 | 3 | 4 | /** 5 | * -------------------------------------------------------------------------- 6 | * Bootstrap (v4.0.0-alpha.2): alert.js 7 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 8 | * -------------------------------------------------------------------------- 9 | */ 10 | 11 | const Alert = (($) => { 12 | 13 | 14 | /** 15 | * ------------------------------------------------------------------------ 16 | * Constants 17 | * ------------------------------------------------------------------------ 18 | */ 19 | 20 | const NAME = 'alert' 21 | const VERSION = '4.0.0-alpha' 22 | const DATA_KEY = 'bs.alert' 23 | const EVENT_KEY = `.${DATA_KEY}` 24 | const DATA_API_KEY = '.data-api' 25 | const JQUERY_NO_CONFLICT = $.fn[NAME] 26 | const TRANSITION_DURATION = 150 27 | 28 | const Selector = { 29 | DISMISS : '[data-dismiss="alert"]' 30 | } 31 | 32 | const Event = { 33 | CLOSE : `close${EVENT_KEY}`, 34 | CLOSED : `closed${EVENT_KEY}`, 35 | CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` 36 | } 37 | 38 | const ClassName = { 39 | ALERT : 'alert', 40 | FADE : 'fade', 41 | IN : 'in' 42 | } 43 | 44 | 45 | /** 46 | * ------------------------------------------------------------------------ 47 | * Class Definition 48 | * ------------------------------------------------------------------------ 49 | */ 50 | 51 | class Alert { 52 | 53 | constructor(element) { 54 | this._element = element 55 | } 56 | 57 | 58 | // getters 59 | 60 | static get VERSION() { 61 | return VERSION 62 | } 63 | 64 | 65 | // public 66 | 67 | close(element) { 68 | element = element || this._element 69 | 70 | let rootElement = this._getRootElement(element) 71 | let customEvent = this._triggerCloseEvent(rootElement) 72 | 73 | if (customEvent.isDefaultPrevented()) { 74 | return 75 | } 76 | 77 | this._removeElement(rootElement) 78 | } 79 | 80 | dispose() { 81 | $.removeData(this._element, DATA_KEY) 82 | this._element = null 83 | } 84 | 85 | 86 | // private 87 | 88 | _getRootElement(element) { 89 | let selector = Util.getSelectorFromElement(element) 90 | let parent = false 91 | 92 | if (selector) { 93 | parent = $(selector)[0] 94 | } 95 | 96 | if (!parent) { 97 | parent = $(element).closest(`.${ClassName.ALERT}`)[0] 98 | } 99 | 100 | return parent 101 | } 102 | 103 | _triggerCloseEvent(element) { 104 | let closeEvent = $.Event(Event.CLOSE) 105 | 106 | $(element).trigger(closeEvent) 107 | return closeEvent 108 | } 109 | 110 | _removeElement(element) { 111 | $(element).removeClass(ClassName.IN) 112 | 113 | if (!Util.supportsTransitionEnd() || 114 | !$(element).hasClass(ClassName.FADE)) { 115 | this._destroyElement(element) 116 | return 117 | } 118 | 119 | $(element) 120 | .one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)) 121 | .emulateTransitionEnd(TRANSITION_DURATION) 122 | } 123 | 124 | _destroyElement(element) { 125 | $(element) 126 | .detach() 127 | .trigger(Event.CLOSED) 128 | .remove() 129 | } 130 | 131 | 132 | // static 133 | 134 | static _jQueryInterface(config) { 135 | return this.each(function () { 136 | let $element = $(this) 137 | let data = $element.data(DATA_KEY) 138 | 139 | if (!data) { 140 | data = new Alert(this) 141 | $element.data(DATA_KEY, data) 142 | } 143 | 144 | if (config === 'close') { 145 | data[config](this) 146 | } 147 | }) 148 | } 149 | 150 | static _handleDismiss(alertInstance) { 151 | return function (event) { 152 | if (event) { 153 | event.preventDefault() 154 | } 155 | 156 | alertInstance.close(this) 157 | } 158 | } 159 | 160 | } 161 | 162 | 163 | /** 164 | * ------------------------------------------------------------------------ 165 | * Data Api implementation 166 | * ------------------------------------------------------------------------ 167 | */ 168 | 169 | $(document).on( 170 | Event.CLICK_DATA_API, 171 | Selector.DISMISS, 172 | Alert._handleDismiss(new Alert()) 173 | ) 174 | 175 | 176 | /** 177 | * ------------------------------------------------------------------------ 178 | * jQuery 179 | * ------------------------------------------------------------------------ 180 | */ 181 | 182 | $.fn[NAME] = Alert._jQueryInterface 183 | $.fn[NAME].Constructor = Alert 184 | $.fn[NAME].noConflict = function () { 185 | $.fn[NAME] = JQUERY_NO_CONFLICT 186 | return Alert._jQueryInterface 187 | } 188 | 189 | return Alert 190 | 191 | })(jQuery) 192 | 193 | export default Alert 194 | -------------------------------------------------------------------------------- /bootstrap/_site/js/src/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.0.0-alpha.2): util.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | const Util = (($) => { 9 | 10 | 11 | /** 12 | * ------------------------------------------------------------------------ 13 | * Private TransitionEnd Helpers 14 | * ------------------------------------------------------------------------ 15 | */ 16 | 17 | let transition = false 18 | 19 | const TransitionEndEvent = { 20 | WebkitTransition : 'webkitTransitionEnd', 21 | MozTransition : 'transitionend', 22 | OTransition : 'oTransitionEnd otransitionend', 23 | transition : 'transitionend' 24 | } 25 | 26 | // shoutout AngusCroll (https://goo.gl/pxwQGp) 27 | function toType(obj) { 28 | return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() 29 | } 30 | 31 | function isElement(obj) { 32 | return (obj[0] || obj).nodeType 33 | } 34 | 35 | function getSpecialTransitionEndEvent() { 36 | return { 37 | bindType: transition.end, 38 | delegateType: transition.end, 39 | handle(event) { 40 | if ($(event.target).is(this)) { 41 | return event.handleObj.handler.apply(this, arguments) 42 | } 43 | } 44 | } 45 | } 46 | 47 | function transitionEndTest() { 48 | if (window.QUnit) { 49 | return false 50 | } 51 | 52 | let el = document.createElement('bootstrap') 53 | 54 | for (let name in TransitionEndEvent) { 55 | if (el.style[name] !== undefined) { 56 | return { end: TransitionEndEvent[name] } 57 | } 58 | } 59 | 60 | return false 61 | } 62 | 63 | function transitionEndEmulator(duration) { 64 | let called = false 65 | 66 | $(this).one(Util.TRANSITION_END, () => { 67 | called = true 68 | }) 69 | 70 | setTimeout(() => { 71 | if (!called) { 72 | Util.triggerTransitionEnd(this) 73 | } 74 | }, duration) 75 | 76 | return this 77 | } 78 | 79 | function setTransitionEndSupport() { 80 | transition = transitionEndTest() 81 | 82 | $.fn.emulateTransitionEnd = transitionEndEmulator 83 | 84 | if (Util.supportsTransitionEnd()) { 85 | $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() 86 | } 87 | } 88 | 89 | 90 | /** 91 | * -------------------------------------------------------------------------- 92 | * Public Util Api 93 | * -------------------------------------------------------------------------- 94 | */ 95 | 96 | let Util = { 97 | 98 | TRANSITION_END: 'bsTransitionEnd', 99 | 100 | getUID(prefix) { 101 | do { 102 | prefix += ~~(Math.random() * 1000000) // "~~" acts like a faster Math.floor() here 103 | } while (document.getElementById(prefix)) 104 | return prefix 105 | }, 106 | 107 | getSelectorFromElement(element) { 108 | let selector = element.getAttribute('data-target') 109 | 110 | if (!selector) { 111 | selector = element.getAttribute('href') || '' 112 | selector = /^#[a-z]/i.test(selector) ? selector : null 113 | } 114 | 115 | return selector 116 | }, 117 | 118 | reflow(element) { 119 | new Function('bs', 'return bs')(element.offsetHeight) 120 | }, 121 | 122 | triggerTransitionEnd(element) { 123 | $(element).trigger(transition.end) 124 | }, 125 | 126 | supportsTransitionEnd() { 127 | return Boolean(transition) 128 | }, 129 | 130 | typeCheckConfig(componentName, config, configTypes) { 131 | for (let property in configTypes) { 132 | if (configTypes.hasOwnProperty(property)) { 133 | let expectedTypes = configTypes[property] 134 | let value = config[property] 135 | let valueType 136 | 137 | if (value && isElement(value)) { 138 | valueType = 'element' 139 | } else { 140 | valueType = toType(value) 141 | } 142 | 143 | if (!new RegExp(expectedTypes).test(valueType)) { 144 | throw new Error( 145 | `${componentName.toUpperCase()}: ` + 146 | `Option "${property}" provided type "${valueType}" ` + 147 | `but expected type "${expectedTypes}".`) 148 | } 149 | } 150 | } 151 | } 152 | } 153 | 154 | setTransitionEndSupport() 155 | 156 | return Util 157 | 158 | })(jQuery) 159 | 160 | export default Util 161 | -------------------------------------------------------------------------------- /bootstrap/_site/nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | $nuget = $env:NuGet 2 | 3 | #parse the version number out of package.json 4 | $bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version 5 | 6 | #create packages 7 | & $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 8 | & $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion -------------------------------------------------------------------------------- /bootstrap/_site/nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 4.0.0-alpha 6 | Bootstrap CSS 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in CSS. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /bootstrap/_site/nuget/bootstrap.sass.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap.sass 5 | 4.0.0-alpha 6 | Bootstrap Sass 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in Sass. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /bootstrap/_site/package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | /* global Package:true */ 4 | 5 | Package.describe({ 6 | name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap 7 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 8 | version: '4.0.0-alpha', 9 | git: 'https://github.com/twbs/bootstrap.git' 10 | }); 11 | 12 | Package.onUse(function (api) { 13 | api.versionsFrom('METEOR@1.0'); 14 | api.use('jquery', 'client'); 15 | api.addFiles([ 16 | 'dist/css/bootstrap.css', 17 | 'dist/js/bootstrap.js' 18 | ], 'client'); 19 | }); 20 | -------------------------------------------------------------------------------- /bootstrap/_site/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "version": "4.0.0-alpha.2", 5 | "keywords": [ 6 | "css", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "author": "Twitter, Inc.", 16 | "scripts": { 17 | "change-version": "node grunt/change-version.js", 18 | "test": "grunt test" 19 | }, 20 | "style": "dist/css/bootstrap.css", 21 | "sass": "scss/bootstrap.scss", 22 | "main": "./dist/js/npm", 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/twbs/bootstrap.git" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/twbs/bootstrap/issues" 29 | }, 30 | "license": "MIT", 31 | "devDependencies": { 32 | "autoprefixer": "^6.0.3", 33 | "babel-eslint": "^4.1.3", 34 | "btoa": "~1.1.2", 35 | "glob": "~6.0.1", 36 | "grunt": "~0.4.5", 37 | "grunt-babel": "^5.0.3", 38 | "grunt-build-control": "~0.6.0", 39 | "grunt-contrib-clean": "~0.7.0", 40 | "grunt-contrib-compress": "~0.14.0", 41 | "grunt-contrib-concat": "~0.5.1", 42 | "grunt-contrib-connect": "~0.11.2", 43 | "grunt-contrib-copy": "~0.8.1", 44 | "grunt-contrib-cssmin": "~0.14.0", 45 | "grunt-contrib-qunit": "~0.7.0", 46 | "grunt-contrib-sass": "^0.9.2", 47 | "grunt-contrib-uglify": "~0.11.0", 48 | "grunt-contrib-watch": "~0.6.1", 49 | "grunt-csscomb": "~3.1.0", 50 | "grunt-eslint": "^17.1.0", 51 | "grunt-exec": "~0.4.6", 52 | "grunt-html": "~5.0.0", 53 | "grunt-jekyll": "~0.4.2", 54 | "grunt-jscs": "~2.4.0", 55 | "grunt-line-remover": "0.0.2", 56 | "grunt-postcss": "^0.7.0", 57 | "grunt-sass": "^1.0.0", 58 | "grunt-saucelabs": "~8.6.1", 59 | "grunt-scss-lint": "^0.3.8", 60 | "grunt-stamp": "^0.1.0", 61 | "is-travis": "^1.0.0", 62 | "load-grunt-tasks": "~3.3.0", 63 | "markdown-it": "^5.0.0", 64 | "mq4-hover-shim": "^0.3.0", 65 | "npm-shrinkwrap": "^200.1.0", 66 | "shelljs": "^0.5.3", 67 | "time-grunt": "^1.2.1" 68 | }, 69 | "engines": { 70 | "node": ">=0.10.1" 71 | }, 72 | "files": [ 73 | "dist", 74 | "grunt/*.js", 75 | "grunt/*.json", 76 | "js/*.js", 77 | "scss/**/*.scss", 78 | "Gruntfile.js", 79 | "LICENSE" 80 | ], 81 | "jspm": { 82 | "main": "js/bootstrap", 83 | "ignore": [ 84 | "dist/js/npm" 85 | ], 86 | "directories": { 87 | "lib": "dist" 88 | }, 89 | "shim": { 90 | "js/bootstrap": { 91 | "deps": [ 92 | "jquery" 93 | ], 94 | "exports": "$" 95 | } 96 | }, 97 | "dependencies": { 98 | "jquery": "*" 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /bootstrap/_site/sache.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.", 4 | "tags": ["bootstrap", "grid", "typography", "buttons", "ui", "responsive-web-design"] 5 | } 6 | -------------------------------------------------------------------------------- /bootstrap/_site/scss/bootstrap-flex.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap with Flexbox enabled 2 | // 3 | // Includes all the imports from the standard Bootstrap project, but enables 4 | // the flexbox variable. 5 | 6 | $enable-flex: true; 7 | 8 | @import "bootstrap"; 9 | -------------------------------------------------------------------------------- /bootstrap/_site/scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Grid only 2 | // 3 | // Includes relevant variables and mixins for the regular (non-flexbox) grid 4 | // system, as well as the generated predefined classes (e.g., `.col-4-sm`). 5 | 6 | 7 | // 8 | // Variables 9 | // 10 | 11 | 12 | // Grid breakpoints 13 | // 14 | // Define the minimum and maximum dimensions at which your layout will change, 15 | // adapting to different screen sizes, for use in media queries. 16 | 17 | $grid-breakpoints: ( 18 | // Extra small screen / phone 19 | xs: 0, 20 | // Small screen / phone 21 | sm: 544px, 22 | // Medium screen / tablet 23 | md: 768px, 24 | // Large screen / desktop 25 | lg: 992px, 26 | // Extra large screen / wide desktop 27 | xl: 1200px 28 | ) !default; 29 | 30 | 31 | // Grid containers 32 | // 33 | // Define the maximum width of `.container` for different screen sizes. 34 | 35 | $container-max-widths: ( 36 | sm: 576px, 37 | md: 720px, 38 | lg: 940px, 39 | xl: 1140px 40 | ) !default; 41 | 42 | 43 | // Grid columns 44 | // 45 | // Set the number of columns and specify the width of the gutters. 46 | 47 | $grid-columns: 12 !default; 48 | $grid-gutter-width: 1.875rem !default; // 30px 49 | 50 | 51 | // 52 | // Grid mixins 53 | // 54 | 55 | @import "variables"; 56 | 57 | @import "mixins/clearfix"; 58 | @import "mixins/breakpoints"; 59 | @import "mixins/grid-framework"; 60 | @import "mixins/grid"; 61 | 62 | @import "grid"; 63 | -------------------------------------------------------------------------------- /bootstrap/_site/scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Reboot only 2 | // 3 | // Includes only Normalize and our custom Reboot reset. 4 | 5 | @import "variables"; 6 | @import "mixins/hover"; 7 | @import "mixins/tab-focus"; 8 | 9 | @import "normalize"; 10 | @import "reboot"; 11 | -------------------------------------------------------------------------------- /bootstrap/_site/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // Core variables and mixins 8 | @import "variables"; 9 | @import "mixins"; 10 | 11 | // Reset and dependencies 12 | @import "normalize"; 13 | @import "print"; 14 | 15 | // Core CSS 16 | @import "reboot"; 17 | @import "type"; 18 | @import "images"; 19 | @import "code"; 20 | @import "grid"; 21 | @import "tables"; 22 | @import "forms"; 23 | @import "buttons"; 24 | 25 | // Components 26 | @import "animation"; 27 | @import "dropdown"; 28 | @import "button-group"; 29 | @import "input-group"; 30 | @import "custom-forms"; 31 | @import "nav"; 32 | @import "navbar"; 33 | @import "card"; 34 | @import "breadcrumb"; 35 | @import "pagination"; 36 | @import "pager"; 37 | @import "labels"; 38 | @import "jumbotron"; 39 | @import "alert"; 40 | @import "progress"; 41 | @import "media"; 42 | @import "list-group"; 43 | @import "responsive-embed"; 44 | @import "close"; 45 | 46 | // Components w/ JavaScript 47 | @import "modal"; 48 | @import "tooltip"; 49 | @import "popover"; 50 | @import "carousel"; 51 | 52 | // Utility classes 53 | @import "utilities"; 54 | @import "utilities-background"; 55 | @import "utilities-spacing"; 56 | @import "utilities-responsive"; 57 | -------------------------------------------------------------------------------- /bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "scss/bootstrap.scss", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('./umd/util.js') 3 | require('./umd/alert.js') 4 | require('./umd/button.js') 5 | require('./umd/carousel.js') 6 | require('./umd/collapse.js') 7 | require('./umd/dropdown.js') 8 | require('./umd/modal.js') 9 | require('./umd/scrollspy.js') 10 | require('./umd/tab.js') 11 | require('./umd/tooltip.js') 12 | require('./umd/popover.js') -------------------------------------------------------------------------------- /bootstrap/docs/assets/css/docs.min.css: -------------------------------------------------------------------------------- 1 | 2 | /*# sourceMappingURL=docs.min.css.map */ -------------------------------------------------------------------------------- /bootstrap/docs/assets/css/docs.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":""} -------------------------------------------------------------------------------- /bootstrap/docs4000: -------------------------------------------------------------------------------- 1 | bundle exec jekyll serve 2 | -------------------------------------------------------------------------------- /bootstrap/grunt/bs-commonjs-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for the CommonJS module generation 3 | * http://getbootstrap.com 4 | * Copyright 2014-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var fs = require('fs'); 11 | var path = require('path'); 12 | 13 | var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n'; 14 | 15 | module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) { 16 | var destDir = path.dirname(destFilepath); 17 | 18 | function srcPathToDestRequire(srcFilepath) { 19 | return 'require(\'' + srcFilepath.replace(/\\/g, '/') + '\')'; 20 | } 21 | 22 | var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n'); 23 | try { 24 | fs.writeFileSync(destFilepath, moduleOutputJs); 25 | } catch (err) { 26 | grunt.fail.warn(err); 27 | } 28 | grunt.log.writeln('File ' + destFilepath.cyan + ' created.'); 29 | }; 30 | -------------------------------------------------------------------------------- /bootstrap/grunt/bs-sass-compile/libsass.js: -------------------------------------------------------------------------------- 1 | // Compile Bootstrap with [libsass][1] using [grunt-sass][2] 2 | // [1]: https://github.com/sass/libsass 3 | // [2]: https://github.com/sindresorhus/grunt-sass 4 | module.exports = function configureLibsass(grunt) { 5 | grunt.config.merge({ 6 | sass: { 7 | options: { 8 | includePaths: ['scss'], 9 | precision: 6, 10 | sourceComments: false, 11 | sourceMap: true, 12 | outputStyle: 'expanded' 13 | }, 14 | core: { 15 | files: { 16 | 'dist/css/<%= pkg.name %>.css': 'scss/<%= pkg.name %>.scss' 17 | } 18 | }, 19 | extras: { 20 | files: { 21 | 'dist/css/<%= pkg.name %>-flex.css': 'scss/<%= pkg.name %>-flex.scss', 22 | 'dist/css/<%= pkg.name %>-grid.css': 'scss/<%= pkg.name %>-grid.scss', 23 | 'dist/css/<%= pkg.name %>-reboot.css': 'scss/<%= pkg.name %>-reboot.scss' 24 | } 25 | }, 26 | docs: { 27 | files: { 28 | 'docs/assets/css/docs.min.css': 'docs/assets/scss/docs.scss' 29 | } 30 | } 31 | } 32 | }); 33 | grunt.loadNpmTasks('grunt-sass'); 34 | }; 35 | -------------------------------------------------------------------------------- /bootstrap/grunt/bs-sass-compile/sass.js: -------------------------------------------------------------------------------- 1 | // Compile Bootstrap with [Ruby Sass][1] using [grunt-contrib-sass][2] 2 | // [1]: https://github.com/sass/sass 3 | // [2]: https://github.com/gruntjs/grunt-contrib-sass 4 | module.exports = function configureRubySass(grunt) { 5 | var options = { 6 | loadPath: ['scss'], 7 | precision: 6, 8 | sourcemap: 'auto', 9 | style: 'expanded', 10 | trace: true, 11 | bundleExec: true 12 | }; 13 | grunt.config.merge({ 14 | sass: { 15 | core: { 16 | options: options, 17 | files: { 18 | 'dist/css/<%= pkg.name %>.css': 'scss/<%= pkg.name %>.scss' 19 | } 20 | }, 21 | extras: { 22 | options: options, 23 | files: { 24 | 'dist/css/<%= pkg.name %>-flex.css': 'scss/<%= pkg.name %>-flex.scss', 25 | 'dist/css/<%= pkg.name %>-grid.css': 'scss/<%= pkg.name %>-grid.scss', 26 | 'dist/css/<%= pkg.name %>-reboot.css': 'scss/<%= pkg.name %>-reboot.scss' 27 | } 28 | }, 29 | docs: { 30 | options: options, 31 | files: { 32 | 'docs/assets/css/docs.min.css': 'docs/assets/scss/docs.scss' 33 | } 34 | } 35 | } 36 | }); 37 | grunt.loadNpmTasks('grunt-contrib-sass'); 38 | }; 39 | -------------------------------------------------------------------------------- /bootstrap/grunt/change-version.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | /*! 5 | * Script to update version number references in the project. 6 | * Copyright 2015 Twitter, Inc. 7 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 8 | */ 9 | var fs = require('fs'); 10 | var path = require('path'); 11 | var sh = require('shelljs'); 12 | sh.config.fatal = true; 13 | var sed = sh.sed; 14 | 15 | // Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37 16 | RegExp.quote = function (string) { 17 | return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); 18 | }; 19 | RegExp.quoteReplacement = function (string) { 20 | return string.replace(/[$]/g, '$$'); 21 | }; 22 | 23 | var DRY_RUN = false; 24 | 25 | function walkAsync(directory, excludedDirectories, fileCallback, errback) { 26 | if (excludedDirectories.has(path.parse(directory).base)) { 27 | return; 28 | } 29 | fs.readdir(directory, function (err, names) { 30 | if (err) { 31 | errback(err); 32 | return; 33 | } 34 | names.forEach(function (name) { 35 | var filepath = path.join(directory, name); 36 | fs.lstat(filepath, function (err, stats) { 37 | if (err) { 38 | process.nextTick(errback, err); 39 | return; 40 | } 41 | if (stats.isSymbolicLink()) { 42 | return; 43 | } 44 | else if (stats.isDirectory()) { 45 | process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback); 46 | } 47 | else if (stats.isFile()) { 48 | process.nextTick(fileCallback, filepath); 49 | } 50 | }); 51 | }); 52 | }); 53 | } 54 | 55 | function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) { 56 | original = new RegExp(RegExp.quote(original), 'g'); 57 | replacement = RegExp.quoteReplacement(replacement); 58 | var updateFile = !DRY_RUN ? (function (filepath) { 59 | if (allowedExtensions.has(path.parse(filepath).ext)) { 60 | sed('-i', original, replacement, filepath); 61 | } 62 | }) : (function (filepath) { 63 | if (allowedExtensions.has(path.parse(filepath).ext)) { 64 | console.log('FILE: ' + filepath); 65 | } 66 | else { 67 | console.log('EXCLUDED:' + filepath); 68 | } 69 | }); 70 | walkAsync('.', excludedDirectories, updateFile, function (err) { 71 | console.error('ERROR while traversing directory!:') 72 | console.error(err); 73 | process.exit(1); 74 | }); 75 | } 76 | 77 | function main(args) { 78 | if (args.length !== 2) { 79 | console.error('USAGE: change-version old_version new_version'); 80 | console.error('Got arguments:', args); 81 | process.exit(1); 82 | } 83 | var oldVersion = args[0]; 84 | var newVersion = args[1]; 85 | var EXCLUDED_DIRS = new Set([ 86 | '.git', 87 | 'node_modules', 88 | 'vendor' 89 | ]); 90 | var INCLUDED_EXTENSIONS = new Set([ 91 | // This extension whitelist is how we avoid modifying binary files 92 | '', 93 | '.css', 94 | '.html', 95 | '.js', 96 | '.json', 97 | '.md', 98 | '.scss', 99 | '.txt', 100 | '.yml' 101 | ]); 102 | replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion); 103 | }; 104 | 105 | main(process.argv.slice(2)); 106 | -------------------------------------------------------------------------------- /bootstrap/grunt/configBridge.json: -------------------------------------------------------------------------------- 1 | { 2 | "paths": { 3 | "docsJs": [ 4 | "../assets/js/vendor/anchor.min.js", 5 | "../assets/js/vendor/clipboard.min.js", 6 | "../assets/js/vendor/holder.min.js", 7 | "../assets/js/src/application.js" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bootstrap/grunt/sauce_browsers.yml: -------------------------------------------------------------------------------- 1 | [ 2 | # Docs: https://saucelabs.com/docs/platforms/webdriver 3 | 4 | { 5 | browserName: "safari", 6 | platform: "OS X 10.10" 7 | }, 8 | { 9 | browserName: "chrome", 10 | platform: "OS X 10.10" 11 | }, 12 | { 13 | browserName: "firefox", 14 | platform: "OS X 10.10" 15 | }, 16 | 17 | # Mac Opera not currently supported by Sauce Labs 18 | 19 | { 20 | browserName: "MicrosoftEdge", 21 | platform: "Windows 10" 22 | }, 23 | { 24 | browserName: "internet explorer", 25 | version: "11", 26 | platform: "Windows 8.1" 27 | }, 28 | { 29 | browserName: "internet explorer", 30 | version: "10", 31 | platform: "Windows 8" 32 | }, 33 | { 34 | browserName: "internet explorer", 35 | version: "9", 36 | platform: "Windows 7" 37 | }, 38 | 39 | { 40 | browserName: "chrome", 41 | platform: "Windows 8.1" 42 | }, 43 | { 44 | browserName: "firefox", 45 | platform: "Windows 8.1" 46 | }, 47 | 48 | # Win Opera 15+ not currently supported by Sauce Labs 49 | 50 | { 51 | browserName: "iphone", 52 | platform: "OS X 10.10", 53 | version: "9.1" 54 | }, 55 | 56 | # iOS Chrome not currently supported by Sauce Labs 57 | 58 | # Linux (unofficial) 59 | { 60 | browserName: "chrome", 61 | platform: "Linux" 62 | }, 63 | { 64 | browserName: "firefox", 65 | platform: "Linux" 66 | } 67 | 68 | # Android Chrome not currently supported by Sauce Labs 69 | # Android v5.0+ not currently supported by Sauce Labs 70 | # { # Android Browser 71 | # browserName: "android", 72 | # version: "5.0", 73 | # platform: "Linux" 74 | # } 75 | ] 76 | -------------------------------------------------------------------------------- /bootstrap/js/.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "verbose": true, 4 | "disallowEmptyBlocks": true, 5 | "disallowKeywords": ["with"], 6 | "disallowMixedSpacesAndTabs": true, 7 | "disallowMultipleLineStrings": true, 8 | "disallowMultipleVarDecl": true, 9 | "disallowQuotedKeysInObjects": "allButReserved", 10 | "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], 11 | "disallowSpaceBeforeBinaryOperators": [","], 12 | "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], 13 | "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, 14 | "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, 15 | "disallowSpacesInsideArrayBrackets": true, 16 | "disallowSpacesInsideParentheses": true, 17 | "disallowTrailingComma": true, 18 | "disallowTrailingWhitespace": true, 19 | "requireCamelCaseOrUpperCaseIdentifiers": true, 20 | "requireCapitalizedConstructors": true, 21 | "requireCommaBeforeLineBreak": true, 22 | "requireDollarBeforejQueryAssignment": true, 23 | "requireDotNotation": true, 24 | "requireLineFeedAtFileEnd": true, 25 | "requirePaddingNewLinesAfterUseStrict": true, 26 | "requirePaddingNewLinesBeforeExport": true, 27 | "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="], 28 | "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], 29 | "requireSpaceAfterLineComment": true, 30 | "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="], 31 | "requireSpaceBetweenArguments": true, 32 | "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] }, 33 | "requireSpacesInConditionalExpression": true, 34 | "requireSpacesInForStatement": true, 35 | "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, 36 | "requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true }, 37 | "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, 38 | "requireSpacesInsideObjectBrackets": "allButNested", 39 | "validateAlignedFunctionParameters": true, 40 | "validateIndentation": 2, 41 | "validateLineBreaks": "LF", 42 | "validateNewlineAfterArrayElements": true, 43 | "validateQuoteMarks": "'" 44 | } 45 | -------------------------------------------------------------------------------- /bootstrap/js/dist/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.0.0-alpha.2): util.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | 'use strict'; 9 | 10 | var Util = (function ($) { 11 | 12 | /** 13 | * ------------------------------------------------------------------------ 14 | * Private TransitionEnd Helpers 15 | * ------------------------------------------------------------------------ 16 | */ 17 | 18 | var transition = false; 19 | 20 | var TransitionEndEvent = { 21 | WebkitTransition: 'webkitTransitionEnd', 22 | MozTransition: 'transitionend', 23 | OTransition: 'oTransitionEnd otransitionend', 24 | transition: 'transitionend' 25 | }; 26 | 27 | // shoutout AngusCroll (https://goo.gl/pxwQGp) 28 | function toType(obj) { 29 | return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); 30 | } 31 | 32 | function isElement(obj) { 33 | return (obj[0] || obj).nodeType; 34 | } 35 | 36 | function getSpecialTransitionEndEvent() { 37 | return { 38 | bindType: transition.end, 39 | delegateType: transition.end, 40 | handle: function handle(event) { 41 | if ($(event.target).is(this)) { 42 | return event.handleObj.handler.apply(this, arguments); 43 | } 44 | } 45 | }; 46 | } 47 | 48 | function transitionEndTest() { 49 | if (window.QUnit) { 50 | return false; 51 | } 52 | 53 | var el = document.createElement('bootstrap'); 54 | 55 | for (var _name in TransitionEndEvent) { 56 | if (el.style[_name] !== undefined) { 57 | return { end: TransitionEndEvent[_name] }; 58 | } 59 | } 60 | 61 | return false; 62 | } 63 | 64 | function transitionEndEmulator(duration) { 65 | var _this = this; 66 | 67 | var called = false; 68 | 69 | $(this).one(Util.TRANSITION_END, function () { 70 | called = true; 71 | }); 72 | 73 | setTimeout(function () { 74 | if (!called) { 75 | Util.triggerTransitionEnd(_this); 76 | } 77 | }, duration); 78 | 79 | return this; 80 | } 81 | 82 | function setTransitionEndSupport() { 83 | transition = transitionEndTest(); 84 | 85 | $.fn.emulateTransitionEnd = transitionEndEmulator; 86 | 87 | if (Util.supportsTransitionEnd()) { 88 | $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 89 | } 90 | } 91 | 92 | /** 93 | * -------------------------------------------------------------------------- 94 | * Public Util Api 95 | * -------------------------------------------------------------------------- 96 | */ 97 | 98 | var Util = { 99 | 100 | TRANSITION_END: 'bsTransitionEnd', 101 | 102 | getUID: function getUID(prefix) { 103 | do { 104 | prefix += ~ ~(Math.random() * 1000000); // "~~" acts like a faster Math.floor() here 105 | } while (document.getElementById(prefix)); 106 | return prefix; 107 | }, 108 | 109 | getSelectorFromElement: function getSelectorFromElement(element) { 110 | var selector = element.getAttribute('data-target'); 111 | 112 | if (!selector) { 113 | selector = element.getAttribute('href') || ''; 114 | selector = /^#[a-z]/i.test(selector) ? selector : null; 115 | } 116 | 117 | return selector; 118 | }, 119 | 120 | reflow: function reflow(element) { 121 | new Function('bs', 'return bs')(element.offsetHeight); 122 | }, 123 | 124 | triggerTransitionEnd: function triggerTransitionEnd(element) { 125 | $(element).trigger(transition.end); 126 | }, 127 | 128 | supportsTransitionEnd: function supportsTransitionEnd() { 129 | return Boolean(transition); 130 | }, 131 | 132 | typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 133 | for (var property in configTypes) { 134 | if (configTypes.hasOwnProperty(property)) { 135 | var expectedTypes = configTypes[property]; 136 | var value = config[property]; 137 | var valueType = undefined; 138 | 139 | if (value && isElement(value)) { 140 | valueType = 'element'; 141 | } else { 142 | valueType = toType(value); 143 | } 144 | 145 | if (!new RegExp(expectedTypes).test(valueType)) { 146 | throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); 147 | } 148 | } 149 | } 150 | } 151 | }; 152 | 153 | setTransitionEndSupport(); 154 | 155 | return Util; 156 | })(jQuery); 157 | //# sourceMappingURL=util.js.map 158 | -------------------------------------------------------------------------------- /bootstrap/js/src/alert.js: -------------------------------------------------------------------------------- 1 | import Util from './util' 2 | 3 | 4 | /** 5 | * -------------------------------------------------------------------------- 6 | * Bootstrap (v4.0.0-alpha.2): alert.js 7 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 8 | * -------------------------------------------------------------------------- 9 | */ 10 | 11 | const Alert = (($) => { 12 | 13 | 14 | /** 15 | * ------------------------------------------------------------------------ 16 | * Constants 17 | * ------------------------------------------------------------------------ 18 | */ 19 | 20 | const NAME = 'alert' 21 | const VERSION = '4.0.0-alpha' 22 | const DATA_KEY = 'bs.alert' 23 | const EVENT_KEY = `.${DATA_KEY}` 24 | const DATA_API_KEY = '.data-api' 25 | const JQUERY_NO_CONFLICT = $.fn[NAME] 26 | const TRANSITION_DURATION = 150 27 | 28 | const Selector = { 29 | DISMISS : '[data-dismiss="alert"]' 30 | } 31 | 32 | const Event = { 33 | CLOSE : `close${EVENT_KEY}`, 34 | CLOSED : `closed${EVENT_KEY}`, 35 | CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` 36 | } 37 | 38 | const ClassName = { 39 | ALERT : 'alert', 40 | FADE : 'fade', 41 | IN : 'in' 42 | } 43 | 44 | 45 | /** 46 | * ------------------------------------------------------------------------ 47 | * Class Definition 48 | * ------------------------------------------------------------------------ 49 | */ 50 | 51 | class Alert { 52 | 53 | constructor(element) { 54 | this._element = element 55 | } 56 | 57 | 58 | // getters 59 | 60 | static get VERSION() { 61 | return VERSION 62 | } 63 | 64 | 65 | // public 66 | 67 | close(element) { 68 | element = element || this._element 69 | 70 | let rootElement = this._getRootElement(element) 71 | let customEvent = this._triggerCloseEvent(rootElement) 72 | 73 | if (customEvent.isDefaultPrevented()) { 74 | return 75 | } 76 | 77 | this._removeElement(rootElement) 78 | } 79 | 80 | dispose() { 81 | $.removeData(this._element, DATA_KEY) 82 | this._element = null 83 | } 84 | 85 | 86 | // private 87 | 88 | _getRootElement(element) { 89 | let selector = Util.getSelectorFromElement(element) 90 | let parent = false 91 | 92 | if (selector) { 93 | parent = $(selector)[0] 94 | } 95 | 96 | if (!parent) { 97 | parent = $(element).closest(`.${ClassName.ALERT}`)[0] 98 | } 99 | 100 | return parent 101 | } 102 | 103 | _triggerCloseEvent(element) { 104 | let closeEvent = $.Event(Event.CLOSE) 105 | 106 | $(element).trigger(closeEvent) 107 | return closeEvent 108 | } 109 | 110 | _removeElement(element) { 111 | $(element).removeClass(ClassName.IN) 112 | 113 | if (!Util.supportsTransitionEnd() || 114 | !$(element).hasClass(ClassName.FADE)) { 115 | this._destroyElement(element) 116 | return 117 | } 118 | 119 | $(element) 120 | .one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)) 121 | .emulateTransitionEnd(TRANSITION_DURATION) 122 | } 123 | 124 | _destroyElement(element) { 125 | $(element) 126 | .detach() 127 | .trigger(Event.CLOSED) 128 | .remove() 129 | } 130 | 131 | 132 | // static 133 | 134 | static _jQueryInterface(config) { 135 | return this.each(function () { 136 | let $element = $(this) 137 | let data = $element.data(DATA_KEY) 138 | 139 | if (!data) { 140 | data = new Alert(this) 141 | $element.data(DATA_KEY, data) 142 | } 143 | 144 | if (config === 'close') { 145 | data[config](this) 146 | } 147 | }) 148 | } 149 | 150 | static _handleDismiss(alertInstance) { 151 | return function (event) { 152 | if (event) { 153 | event.preventDefault() 154 | } 155 | 156 | alertInstance.close(this) 157 | } 158 | } 159 | 160 | } 161 | 162 | 163 | /** 164 | * ------------------------------------------------------------------------ 165 | * Data Api implementation 166 | * ------------------------------------------------------------------------ 167 | */ 168 | 169 | $(document).on( 170 | Event.CLICK_DATA_API, 171 | Selector.DISMISS, 172 | Alert._handleDismiss(new Alert()) 173 | ) 174 | 175 | 176 | /** 177 | * ------------------------------------------------------------------------ 178 | * jQuery 179 | * ------------------------------------------------------------------------ 180 | */ 181 | 182 | $.fn[NAME] = Alert._jQueryInterface 183 | $.fn[NAME].Constructor = Alert 184 | $.fn[NAME].noConflict = function () { 185 | $.fn[NAME] = JQUERY_NO_CONFLICT 186 | return Alert._jQueryInterface 187 | } 188 | 189 | return Alert 190 | 191 | })(jQuery) 192 | 193 | export default Alert 194 | -------------------------------------------------------------------------------- /bootstrap/js/src/button.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.0.0-alpha.2): button.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | const Button = (($) => { 9 | 10 | 11 | /** 12 | * ------------------------------------------------------------------------ 13 | * Constants 14 | * ------------------------------------------------------------------------ 15 | */ 16 | 17 | const NAME = 'button' 18 | const VERSION = '4.0.0-alpha' 19 | const DATA_KEY = 'bs.button' 20 | const EVENT_KEY = `.${DATA_KEY}` 21 | const DATA_API_KEY = '.data-api' 22 | const JQUERY_NO_CONFLICT = $.fn[NAME] 23 | 24 | const ClassName = { 25 | ACTIVE : 'active', 26 | BUTTON : 'btn', 27 | FOCUS : 'focus' 28 | } 29 | 30 | const Selector = { 31 | DATA_TOGGLE_CARROT : '[data-toggle^="button"]', 32 | DATA_TOGGLE : '[data-toggle="buttons"]', 33 | INPUT : 'input', 34 | ACTIVE : '.active', 35 | BUTTON : '.btn' 36 | } 37 | 38 | const Event = { 39 | CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`, 40 | FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` 41 | + `blur${EVENT_KEY}${DATA_API_KEY}` 42 | } 43 | 44 | 45 | /** 46 | * ------------------------------------------------------------------------ 47 | * Class Definition 48 | * ------------------------------------------------------------------------ 49 | */ 50 | 51 | class Button { 52 | 53 | constructor(element) { 54 | this._element = element 55 | } 56 | 57 | 58 | // getters 59 | 60 | static get VERSION() { 61 | return VERSION 62 | } 63 | 64 | 65 | // public 66 | 67 | toggle() { 68 | let triggerChangeEvent = true 69 | let rootElement = $(this._element).closest( 70 | Selector.DATA_TOGGLE 71 | )[0] 72 | 73 | if (rootElement) { 74 | let input = $(this._element).find(Selector.INPUT)[0] 75 | 76 | if (input) { 77 | if (input.type === 'radio') { 78 | if (input.checked && 79 | $(this._element).hasClass(ClassName.ACTIVE)) { 80 | triggerChangeEvent = false 81 | 82 | } else { 83 | let activeElement = $(rootElement).find(Selector.ACTIVE)[0] 84 | 85 | if (activeElement) { 86 | $(activeElement).removeClass(ClassName.ACTIVE) 87 | } 88 | } 89 | } 90 | 91 | if (triggerChangeEvent) { 92 | input.checked = !$(this._element).hasClass(ClassName.ACTIVE) 93 | $(this._element).trigger('change') 94 | } 95 | } 96 | } else { 97 | this._element.setAttribute('aria-pressed', 98 | !$(this._element).hasClass(ClassName.ACTIVE)) 99 | } 100 | 101 | if (triggerChangeEvent) { 102 | $(this._element).toggleClass(ClassName.ACTIVE) 103 | } 104 | } 105 | 106 | dispose() { 107 | $.removeData(this._element, DATA_KEY) 108 | this._element = null 109 | } 110 | 111 | 112 | // static 113 | 114 | static _jQueryInterface(config) { 115 | return this.each(function () { 116 | let data = $(this).data(DATA_KEY) 117 | 118 | if (!data) { 119 | data = new Button(this) 120 | $(this).data(DATA_KEY, data) 121 | } 122 | 123 | if (config === 'toggle') { 124 | data[config]() 125 | } 126 | }) 127 | } 128 | 129 | } 130 | 131 | 132 | /** 133 | * ------------------------------------------------------------------------ 134 | * Data Api implementation 135 | * ------------------------------------------------------------------------ 136 | */ 137 | 138 | $(document) 139 | .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { 140 | event.preventDefault() 141 | 142 | let button = event.target 143 | 144 | if (!$(button).hasClass(ClassName.BUTTON)) { 145 | button = $(button).closest(Selector.BUTTON) 146 | } 147 | 148 | Button._jQueryInterface.call($(button), 'toggle') 149 | }) 150 | .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { 151 | let button = $(event.target).closest(Selector.BUTTON)[0] 152 | $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)) 153 | }) 154 | 155 | 156 | /** 157 | * ------------------------------------------------------------------------ 158 | * jQuery 159 | * ------------------------------------------------------------------------ 160 | */ 161 | 162 | $.fn[NAME] = Button._jQueryInterface 163 | $.fn[NAME].Constructor = Button 164 | $.fn[NAME].noConflict = function () { 165 | $.fn[NAME] = JQUERY_NO_CONFLICT 166 | return Button._jQueryInterface 167 | } 168 | 169 | return Button 170 | 171 | })(jQuery) 172 | 173 | export default Button 174 | -------------------------------------------------------------------------------- /bootstrap/js/src/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.0.0-alpha.2): util.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | 8 | const Util = (($) => { 9 | 10 | 11 | /** 12 | * ------------------------------------------------------------------------ 13 | * Private TransitionEnd Helpers 14 | * ------------------------------------------------------------------------ 15 | */ 16 | 17 | let transition = false 18 | 19 | const TransitionEndEvent = { 20 | WebkitTransition : 'webkitTransitionEnd', 21 | MozTransition : 'transitionend', 22 | OTransition : 'oTransitionEnd otransitionend', 23 | transition : 'transitionend' 24 | } 25 | 26 | // shoutout AngusCroll (https://goo.gl/pxwQGp) 27 | function toType(obj) { 28 | return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() 29 | } 30 | 31 | function isElement(obj) { 32 | return (obj[0] || obj).nodeType 33 | } 34 | 35 | function getSpecialTransitionEndEvent() { 36 | return { 37 | bindType: transition.end, 38 | delegateType: transition.end, 39 | handle(event) { 40 | if ($(event.target).is(this)) { 41 | return event.handleObj.handler.apply(this, arguments) 42 | } 43 | } 44 | } 45 | } 46 | 47 | function transitionEndTest() { 48 | if (window.QUnit) { 49 | return false 50 | } 51 | 52 | let el = document.createElement('bootstrap') 53 | 54 | for (let name in TransitionEndEvent) { 55 | if (el.style[name] !== undefined) { 56 | return { end: TransitionEndEvent[name] } 57 | } 58 | } 59 | 60 | return false 61 | } 62 | 63 | function transitionEndEmulator(duration) { 64 | let called = false 65 | 66 | $(this).one(Util.TRANSITION_END, () => { 67 | called = true 68 | }) 69 | 70 | setTimeout(() => { 71 | if (!called) { 72 | Util.triggerTransitionEnd(this) 73 | } 74 | }, duration) 75 | 76 | return this 77 | } 78 | 79 | function setTransitionEndSupport() { 80 | transition = transitionEndTest() 81 | 82 | $.fn.emulateTransitionEnd = transitionEndEmulator 83 | 84 | if (Util.supportsTransitionEnd()) { 85 | $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() 86 | } 87 | } 88 | 89 | 90 | /** 91 | * -------------------------------------------------------------------------- 92 | * Public Util Api 93 | * -------------------------------------------------------------------------- 94 | */ 95 | 96 | let Util = { 97 | 98 | TRANSITION_END: 'bsTransitionEnd', 99 | 100 | getUID(prefix) { 101 | do { 102 | prefix += ~~(Math.random() * 1000000) // "~~" acts like a faster Math.floor() here 103 | } while (document.getElementById(prefix)) 104 | return prefix 105 | }, 106 | 107 | getSelectorFromElement(element) { 108 | let selector = element.getAttribute('data-target') 109 | 110 | if (!selector) { 111 | selector = element.getAttribute('href') || '' 112 | selector = /^#[a-z]/i.test(selector) ? selector : null 113 | } 114 | 115 | return selector 116 | }, 117 | 118 | reflow(element) { 119 | new Function('bs', 'return bs')(element.offsetHeight) 120 | }, 121 | 122 | triggerTransitionEnd(element) { 123 | $(element).trigger(transition.end) 124 | }, 125 | 126 | supportsTransitionEnd() { 127 | return Boolean(transition) 128 | }, 129 | 130 | typeCheckConfig(componentName, config, configTypes) { 131 | for (let property in configTypes) { 132 | if (configTypes.hasOwnProperty(property)) { 133 | let expectedTypes = configTypes[property] 134 | let value = config[property] 135 | let valueType 136 | 137 | if (value && isElement(value)) { 138 | valueType = 'element' 139 | } else { 140 | valueType = toType(value) 141 | } 142 | 143 | if (!new RegExp(expectedTypes).test(valueType)) { 144 | throw new Error( 145 | `${componentName.toUpperCase()}: ` + 146 | `Option "${property}" provided type "${valueType}" ` + 147 | `but expected type "${expectedTypes}".`) 148 | } 149 | } 150 | } 151 | } 152 | } 153 | 154 | setTransitionEndSupport() 155 | 156 | return Util 157 | 158 | })(jQuery) 159 | 160 | export default Util 161 | -------------------------------------------------------------------------------- /bootstrap/nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | $nuget = $env:NuGet 2 | 3 | #parse the version number out of package.json 4 | $bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version 5 | 6 | #create packages 7 | & $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 8 | & $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion -------------------------------------------------------------------------------- /bootstrap/nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 4.0.0-alpha 6 | Bootstrap CSS 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in CSS. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /bootstrap/nuget/bootstrap.sass.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap.sass 5 | 4.0.0-alpha 6 | Bootstrap Sass 7 | Twitter, Inc. 8 | bootstrap 9 | The most popular front-end framework for developing responsive, mobile first projects on the web. 10 | http://blog.getbootstrap.com 11 | Bootstrap framework in Sass. Includes fonts and JavaScript 12 | en-us 13 | http://getbootstrap.com 14 | http://getbootstrap.com/apple-touch-icon.png 15 | https://github.com/twbs/bootstrap/blob/master/LICENSE 16 | Copyright 2015 17 | false 18 | 19 | 20 | 21 | css js less mobile-first responsive front-end framework web 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /bootstrap/package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | /* global Package:true */ 4 | 5 | Package.describe({ 6 | name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap 7 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 8 | version: '4.0.0-alpha', 9 | git: 'https://github.com/twbs/bootstrap.git' 10 | }); 11 | 12 | Package.onUse(function (api) { 13 | api.versionsFrom('METEOR@1.0'); 14 | api.use('jquery', 'client'); 15 | api.addFiles([ 16 | 'dist/css/bootstrap.css', 17 | 'dist/js/bootstrap.js' 18 | ], 'client'); 19 | }); 20 | -------------------------------------------------------------------------------- /bootstrap/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "version": "4.0.0-alpha.2", 5 | "keywords": [ 6 | "css", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "author": "Twitter, Inc.", 16 | "scripts": { 17 | "change-version": "node grunt/change-version.js", 18 | "test": "grunt test" 19 | }, 20 | "style": "dist/css/bootstrap.css", 21 | "sass": "scss/bootstrap.scss", 22 | "main": "./dist/js/npm", 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/twbs/bootstrap.git" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/twbs/bootstrap/issues" 29 | }, 30 | "license": "MIT", 31 | "devDependencies": { 32 | "autoprefixer": "^6.0.3", 33 | "babel-eslint": "^4.1.3", 34 | "btoa": "~1.1.2", 35 | "glob": "~6.0.1", 36 | "grunt": "~0.4.5", 37 | "grunt-babel": "^5.0.3", 38 | "grunt-build-control": "~0.6.0", 39 | "grunt-contrib-clean": "~0.7.0", 40 | "grunt-contrib-compress": "~0.14.0", 41 | "grunt-contrib-concat": "~0.5.1", 42 | "grunt-contrib-connect": "~0.11.2", 43 | "grunt-contrib-copy": "~0.8.1", 44 | "grunt-contrib-cssmin": "~0.14.0", 45 | "grunt-contrib-qunit": "~0.7.0", 46 | "grunt-contrib-sass": "^0.9.2", 47 | "grunt-contrib-uglify": "~0.11.0", 48 | "grunt-contrib-watch": "~0.6.1", 49 | "grunt-csscomb": "~3.1.0", 50 | "grunt-eslint": "^17.1.0", 51 | "grunt-exec": "~0.4.6", 52 | "grunt-html": "~5.0.0", 53 | "grunt-jekyll": "~0.4.2", 54 | "grunt-jscs": "~2.4.0", 55 | "grunt-line-remover": "0.0.2", 56 | "grunt-postcss": "^0.7.0", 57 | "grunt-sass": "^1.0.0", 58 | "grunt-saucelabs": "~8.6.1", 59 | "grunt-scss-lint": "^0.3.8", 60 | "grunt-stamp": "^0.1.0", 61 | "is-travis": "^1.0.0", 62 | "load-grunt-tasks": "~3.3.0", 63 | "markdown-it": "^5.0.0", 64 | "mq4-hover-shim": "^0.3.0", 65 | "npm-shrinkwrap": "^200.1.0", 66 | "shelljs": "^0.5.3", 67 | "time-grunt": "^1.2.1" 68 | }, 69 | "engines": { 70 | "node": ">=0.10.1" 71 | }, 72 | "files": [ 73 | "dist", 74 | "grunt/*.js", 75 | "grunt/*.json", 76 | "js/*.js", 77 | "scss/**/*.scss", 78 | "Gruntfile.js", 79 | "LICENSE" 80 | ], 81 | "jspm": { 82 | "main": "js/bootstrap", 83 | "ignore": [ 84 | "dist/js/npm" 85 | ], 86 | "directories": { 87 | "lib": "dist" 88 | }, 89 | "shim": { 90 | "js/bootstrap": { 91 | "deps": [ 92 | "jquery" 93 | ], 94 | "exports": "$" 95 | } 96 | }, 97 | "dependencies": { 98 | "jquery": "*" 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /bootstrap/sache.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.", 4 | "tags": ["bootstrap", "grid", "typography", "buttons", "ui", "responsive-web-design"] 5 | } 6 | -------------------------------------------------------------------------------- /bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | padding: $alert-padding; 7 | margin-bottom: $spacer-y; 8 | border: $alert-border-width solid transparent; 9 | @include border-radius($alert-border-radius); 10 | 11 | // Improve alignment and spacing of inner content 12 | > p, 13 | > ul { 14 | margin-bottom: 0; 15 | } 16 | > p + p { 17 | margin-top: 5px; 18 | } 19 | } 20 | 21 | // Headings for larger alerts 22 | .alert-heading { 23 | // Specified to prevent conflicts of changing $headings-color 24 | color: inherit; 25 | } 26 | 27 | // Provide class for links that match alerts 28 | .alert-link { 29 | font-weight: $alert-link-font-weight; 30 | } 31 | 32 | 33 | // Dismissible alerts 34 | // 35 | // Expand the right padding and account for the close button's positioning. 36 | 37 | .alert-dismissible { 38 | padding-right: ($alert-padding + 20); 39 | 40 | // Adjust close link position 41 | .close { 42 | position: relative; 43 | top: -2px; 44 | right: -21px; 45 | color: inherit; 46 | } 47 | } 48 | 49 | 50 | // Alternate styles 51 | // 52 | // Generate contextual modifier classes for colorizing the alert. 53 | 54 | .alert-success { 55 | @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); 56 | } 57 | .alert-info { 58 | @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); 59 | } 60 | .alert-warning { 61 | @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); 62 | } 63 | .alert-danger { 64 | @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); 65 | } 66 | -------------------------------------------------------------------------------- /bootstrap/scss/_animation.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | opacity: 0; 3 | transition: opacity .15s linear; 4 | 5 | &.in { 6 | opacity: 1; 7 | } 8 | } 9 | 10 | .collapse { 11 | display: none; 12 | 13 | &.in { 14 | display: block; 15 | } 16 | // tr&.in { display: table-row; } 17 | // tbody&.in { display: table-row-group; } 18 | } 19 | 20 | .collapsing { 21 | position: relative; 22 | height: 0; 23 | overflow: hidden; 24 | transition-timing-function: ease; 25 | transition-duration: .35s; 26 | transition-property: height; 27 | } 28 | -------------------------------------------------------------------------------- /bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; 3 | margin-bottom: $spacer-y; 4 | list-style: none; 5 | background-color: $breadcrumb-bg; 6 | @include border-radius($border-radius); 7 | @include clearfix; 8 | 9 | > li { 10 | float: left; 11 | 12 | + li::before { 13 | padding-right: .5rem; 14 | padding-left: .5rem; 15 | color: $breadcrumb-divider-color; 16 | content: "#{$breadcrumb-divider}"; 17 | } 18 | } 19 | 20 | > .active { 21 | color: $breadcrumb-active-color; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /bootstrap/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .btn { 6 | display: inline-block; 7 | font-weight: $btn-font-weight; 8 | text-align: center; 9 | white-space: nowrap; 10 | vertical-align: middle; 11 | cursor: pointer; 12 | user-select: none; 13 | border: $input-btn-border-width solid transparent; 14 | @include button-size($btn-padding-y, $btn-padding-x, $font-size-base, $line-height, $btn-border-radius); 15 | @include transition(all .2s ease-in-out); 16 | 17 | &, 18 | &:active, 19 | &.active { 20 | &:focus, 21 | &.focus { 22 | @include tab-focus(); 23 | } 24 | } 25 | 26 | @include hover-focus { 27 | text-decoration: none; 28 | } 29 | &.focus { 30 | text-decoration: none; 31 | } 32 | 33 | &:active, 34 | &.active { 35 | background-image: none; 36 | outline: 0; 37 | @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); 38 | } 39 | 40 | &.disabled, 41 | &:disabled { 42 | cursor: $cursor-disabled; 43 | opacity: .65; 44 | @include box-shadow(none); 45 | } 46 | } 47 | 48 | // Future-proof disabling of clicks on `` elements 49 | a.btn.disabled, 50 | fieldset[disabled] a.btn { 51 | pointer-events: none; 52 | } 53 | 54 | 55 | // 56 | // Alternate buttons 57 | // 58 | 59 | .btn-primary { 60 | @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); 61 | } 62 | .btn-secondary { 63 | @include button-variant($btn-secondary-color, $btn-secondary-bg, $btn-secondary-border); 64 | } 65 | .btn-info { 66 | @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); 67 | } 68 | .btn-success { 69 | @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); 70 | } 71 | .btn-warning { 72 | @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); 73 | } 74 | .btn-danger { 75 | @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); 76 | } 77 | 78 | // Remove all backgrounds 79 | .btn-primary-outline { 80 | @include button-outline-variant($btn-primary-bg); 81 | } 82 | .btn-secondary-outline { 83 | @include button-outline-variant($btn-secondary-border); 84 | } 85 | .btn-info-outline { 86 | @include button-outline-variant($btn-info-bg); 87 | } 88 | .btn-success-outline { 89 | @include button-outline-variant($btn-success-bg); 90 | } 91 | .btn-warning-outline { 92 | @include button-outline-variant($btn-warning-bg); 93 | } 94 | .btn-danger-outline { 95 | @include button-outline-variant($btn-danger-bg); 96 | } 97 | 98 | 99 | // 100 | // Link buttons 101 | // 102 | 103 | // Make a button look and behave like a link 104 | .btn-link { 105 | font-weight: normal; 106 | color: $link-color; 107 | border-radius: 0; 108 | 109 | &, 110 | &:active, 111 | &.active, 112 | &:disabled { 113 | background-color: transparent; 114 | @include box-shadow(none); 115 | } 116 | &, 117 | &:focus, 118 | &:active { 119 | border-color: transparent; 120 | } 121 | @include hover { 122 | border-color: transparent; 123 | } 124 | @include hover-focus { 125 | color: $link-hover-color; 126 | text-decoration: $link-hover-decoration; 127 | background-color: transparent; 128 | } 129 | &:disabled { 130 | @include hover-focus { 131 | color: $btn-link-disabled-color; 132 | text-decoration: none; 133 | } 134 | } 135 | } 136 | 137 | 138 | // 139 | // Button Sizes 140 | // 141 | 142 | .btn-lg { 143 | // line-height: ensure even-numbered height of button next to large input 144 | @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $font-size-lg, $line-height-lg, $btn-border-radius-lg); 145 | } 146 | .btn-sm { 147 | // line-height: ensure proper height of button next to small input 148 | @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $font-size-sm, $line-height-sm, $btn-border-radius-sm); 149 | } 150 | 151 | 152 | // 153 | // Block button 154 | // 155 | 156 | .btn-block { 157 | display: block; 158 | width: 100%; 159 | } 160 | 161 | // Vertically space out multiple block buttons 162 | .btn-block + .btn-block { 163 | margin-top: 5px; 164 | } 165 | 166 | // Specificity overrides 167 | input[type="submit"], 168 | input[type="reset"], 169 | input[type="button"] { 170 | &.btn-block { 171 | width: 100%; 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /bootstrap/scss/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | font-size: ($font-size-base * 1.5); 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .2; 9 | 10 | @include hover-focus { 11 | color: $close-color; 12 | text-decoration: none; 13 | cursor: pointer; 14 | opacity: .5; 15 | } 16 | } 17 | 18 | // Additional properties for button version 19 | // iOS requires the button element instead of an anchor tag. 20 | // If you want the anchor version, it requires `href="#"`. 21 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 22 | button.close { 23 | padding: 0; 24 | cursor: pointer; 25 | background: transparent; 26 | border: 0; 27 | -webkit-appearance: none; 28 | } 29 | -------------------------------------------------------------------------------- /bootstrap/scss/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline and block code styles 2 | code, 3 | kbd, 4 | pre, 5 | samp { 6 | font-family: $font-family-monospace; 7 | } 8 | 9 | // Inline code 10 | code { 11 | padding: .2rem .4rem; 12 | font-size: 90%; 13 | color: $code-color; 14 | background-color: $code-bg; 15 | @include border-radius($border-radius); 16 | } 17 | 18 | // User input typically entered via keyboard 19 | kbd { 20 | padding: .2rem .4rem; 21 | font-size: 90%; 22 | color: $kbd-color; 23 | background-color: $kbd-bg; 24 | @include border-radius($border-radius-sm); 25 | @include box-shadow(inset 0 -.1rem 0 rgba(0,0,0,.25)); 26 | 27 | kbd { 28 | padding: 0; 29 | font-size: 100%; 30 | font-weight: $nested-kbd-font-weight; 31 | @include box-shadow(none); 32 | } 33 | } 34 | 35 | // Blocks of code 36 | pre { 37 | display: block; 38 | margin-top: 0; 39 | margin-bottom: 1rem; 40 | font-size: 90%; 41 | line-height: $line-height; 42 | color: $pre-color; 43 | 44 | // Account for some code outputs that place code tags in pre tags 45 | code { 46 | padding: 0; 47 | font-size: inherit; 48 | color: inherit; 49 | background-color: transparent; 50 | border-radius: 0; 51 | } 52 | } 53 | 54 | // Enable scrollable blocks of code 55 | .pre-scrollable { 56 | max-height: $pre-scrollable-max-height; 57 | overflow-y: scroll; 58 | } 59 | -------------------------------------------------------------------------------- /bootstrap/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | .container { 6 | @include make-container(); 7 | @include make-container-max-widths(); 8 | 9 | } 10 | 11 | 12 | // Fluid container 13 | // 14 | // Utilizes the mixin meant for fixed width containers, but without any defined 15 | // width for fluid, full width layouts. 16 | 17 | .container-fluid { 18 | @include make-container(); 19 | } 20 | 21 | 22 | // Row 23 | // 24 | // Rows contain and clear the floats of your columns. 25 | 26 | @if $enable-grid-classes { 27 | .row { 28 | @include make-row(); 29 | } 30 | } 31 | 32 | 33 | // Columns 34 | // 35 | // Common styles for small and large grid columns 36 | 37 | @if $enable-grid-classes { 38 | @include make-grid-columns(); 39 | } 40 | 41 | 42 | // Flex variation 43 | // 44 | // Custom styles for additional flex alignment options. 45 | 46 | @if $enable-flex and $enable-grid-classes { 47 | 48 | // Flex column reordering 49 | 50 | @each $breakpoint in map-keys($grid-breakpoints) { 51 | @include media-breakpoint-up($breakpoint) { 52 | .col-#{$breakpoint}-first { order: -1; } 53 | .col-#{$breakpoint}-last { order: 1; } 54 | } 55 | } 56 | 57 | // Alignment for every column in row 58 | 59 | @each $breakpoint in map-keys($grid-breakpoints) { 60 | @include media-breakpoint-up($breakpoint) { 61 | .row-#{$breakpoint}-top { align-items: flex-start; } 62 | .row-#{$breakpoint}-center { align-items: center; } 63 | .row-#{$breakpoint}-bottom { align-items: flex-end; } 64 | } 65 | } 66 | 67 | // Alignment per column 68 | 69 | @each $breakpoint in map-keys($grid-breakpoints) { 70 | @include media-breakpoint-up($breakpoint) { 71 | .col-#{$breakpoint}-top { align-self: flex-start; } 72 | .col-#{$breakpoint}-center { align-self: center; } 73 | .col-#{$breakpoint}-bottom { align-self: flex-end; } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /bootstrap/scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | // Rounded corners 13 | .img-rounded { 14 | @include border-radius($border-radius-lg); 15 | } 16 | 17 | // Image thumbnails 18 | .img-thumbnail { 19 | padding: $thumbnail-padding; 20 | line-height: $line-height; 21 | background-color: $thumbnail-bg; 22 | border: $thumbnail-border-width solid $thumbnail-border-color; 23 | border-radius: $thumbnail-border-radius; 24 | transition: all .2s ease-in-out; 25 | @include box-shadow(0 1px 2px rgba(0,0,0,.075)); 26 | 27 | // Keep them at most 100% wide 28 | @include img-fluid(inline-block); 29 | } 30 | 31 | // Perfect circle 32 | .img-circle { 33 | border-radius: 50%; 34 | } 35 | 36 | // 37 | // Figures 38 | // 39 | 40 | .figure { 41 | // Ensures the caption's text aligns with the image. 42 | display: inline-block; 43 | } 44 | 45 | .figure-img { 46 | margin-bottom: ($spacer-y / 2); 47 | line-height: 1; 48 | } 49 | 50 | .figure-caption { 51 | font-size: 90%; 52 | color: $gray-light; 53 | } 54 | -------------------------------------------------------------------------------- /bootstrap/scss/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | background-color: $jumbotron-bg; 5 | @include border-radius($border-radius-lg); 6 | 7 | @include media-breakpoint-up(sm) { 8 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 9 | } 10 | } 11 | 12 | .jumbotron-hr { 13 | border-top-color: darken($jumbotron-bg, 10%); 14 | } 15 | 16 | .jumbotron-fluid { 17 | padding-right: 0; 18 | padding-left: 0; 19 | @include border-radius(0); 20 | } 21 | -------------------------------------------------------------------------------- /bootstrap/scss/_labels.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .label { 7 | display: inline-block; 8 | padding: .25em .4em; 9 | font-size: 75%; 10 | font-weight: $label-font-weight; 11 | line-height: 1; 12 | color: $label-color; 13 | text-align: center; 14 | white-space: nowrap; 15 | vertical-align: baseline; 16 | @include border-radius(); 17 | 18 | // Empty labels collapse automatically 19 | &:empty { 20 | display: none; 21 | } 22 | } 23 | 24 | // Quick fix for labels in buttons 25 | .btn .label { 26 | position: relative; 27 | top: -1px; 28 | } 29 | 30 | // Add hover effects, but only for links 31 | a.label { 32 | @include hover-focus { 33 | color: $label-link-hover-color; 34 | text-decoration: none; 35 | cursor: pointer; 36 | } 37 | } 38 | 39 | // Pill labels 40 | // 41 | // Make them extra rounded with a modifier to replace v3's badges. 42 | 43 | .label-pill { 44 | padding-right: .6em; 45 | padding-left: .6em; 46 | // Use a higher than normal value to ensure completely rounded edges when 47 | // customizing padding or font-size on labels. 48 | @include border-radius(10rem); 49 | } 50 | 51 | // Colors 52 | // 53 | // Contextual variations (linked labels get darker on :hover). 54 | 55 | .label-default { 56 | @include label-variant($label-default-bg); 57 | } 58 | 59 | .label-primary { 60 | @include label-variant($label-primary-bg); 61 | } 62 | 63 | .label-success { 64 | @include label-variant($label-success-bg); 65 | } 66 | 67 | .label-info { 68 | @include label-variant($label-info-bg); 69 | } 70 | 71 | .label-warning { 72 | @include label-variant($label-warning-bg); 73 | } 74 | 75 | .label-danger { 76 | @include label-variant($label-danger-bg); 77 | } 78 | -------------------------------------------------------------------------------- /bootstrap/scss/_list-group.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Easily usable on