| @@ -0,0 +1,11 @@ | ||
| # Ruby Gems for building and testing Bootstrap | ||
| # Run `grunt update-gemfile-lock` to update to the latest compatible versions | ||
|
|
||
| source 'https://rubygems.org' | ||
|
|
||
| group :development, :test do | ||
| gem 'jekyll', '~> 2.5.2' | ||
| gem 'rouge', '~> 1.7.4' | ||
| gem 'sass', '~> 3.4.9' | ||
| gem 'scss-lint', '~> 0.31' | ||
| end |
| @@ -0,0 +1,78 @@ | ||
| GEM | ||
| remote: https://rubygems.org/ | ||
| specs: | ||
| blankslate (2.1.2.4) | ||
| celluloid (0.16.0) | ||
| timers (~> 4.0.0) | ||
| classifier-reborn (2.0.2) | ||
| fast-stemmer (~> 1.0) | ||
| coffee-script (2.3.0) | ||
| coffee-script-source | ||
| execjs | ||
| coffee-script-source (1.8.0) | ||
| colorator (0.1) | ||
| execjs (2.2.2) | ||
| fast-stemmer (1.0.2) | ||
| ffi (1.9.6) | ||
| hitimes (1.2.2) | ||
| jekyll (2.5.2) | ||
| classifier-reborn (~> 2.0) | ||
| colorator (~> 0.1) | ||
| jekyll-coffeescript (~> 1.0) | ||
| jekyll-gist (~> 1.0) | ||
| jekyll-paginate (~> 1.0) | ||
| jekyll-sass-converter (~> 1.0) | ||
| jekyll-watch (~> 1.1) | ||
| kramdown (~> 1.3) | ||
| liquid (~> 2.6.1) | ||
| mercenary (~> 0.3.3) | ||
| pygments.rb (~> 0.6.0) | ||
| redcarpet (~> 3.1) | ||
| safe_yaml (~> 1.0) | ||
| toml (~> 0.1.0) | ||
| jekyll-coffeescript (1.0.1) | ||
| coffee-script (~> 2.2) | ||
| jekyll-gist (1.1.0) | ||
| jekyll-paginate (1.1.0) | ||
| jekyll-sass-converter (1.3.0) | ||
| sass (~> 3.2) | ||
| jekyll-watch (1.2.0) | ||
| listen (~> 2.7) | ||
| kramdown (1.5.0) | ||
| liquid (2.6.1) | ||
| listen (2.8.4) | ||
| celluloid (>= 0.15.2) | ||
| rb-fsevent (>= 0.9.3) | ||
| rb-inotify (>= 0.9) | ||
| mercenary (0.3.5) | ||
| parslet (1.5.0) | ||
| blankslate (~> 2.0) | ||
| posix-spawn (0.3.9) | ||
| pygments.rb (0.6.0) | ||
| posix-spawn (~> 0.3.6) | ||
| yajl-ruby (~> 1.1.0) | ||
| rainbow (2.0.0) | ||
| rb-fsevent (0.9.4) | ||
| rb-inotify (0.9.5) | ||
| ffi (>= 0.5.0) | ||
| redcarpet (3.2.2) | ||
| rouge (1.7.4) | ||
| safe_yaml (1.0.4) | ||
| sass (3.4.9) | ||
| scss-lint (0.31.0) | ||
| rainbow (~> 2.0) | ||
| sass (~> 3.4.1) | ||
| timers (4.0.1) | ||
| hitimes | ||
| toml (0.1.2) | ||
| parslet (~> 1.5.0) | ||
| yajl-ruby (1.1.0) | ||
|
|
||
| PLATFORMS | ||
| ruby | ||
|
|
||
| DEPENDENCIES | ||
| jekyll (~> 2.5.2) | ||
| rouge (~> 1.7.4) | ||
| sass (~> 3.4.9) | ||
| scss-lint (~> 0.31) |
| @@ -0,0 +1,21 @@ | ||
| The MIT License (MIT) | ||
|
|
||
| Copyright (c) 2011-2015 Twitter, Inc | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in | ||
| all copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| THE SOFTWARE. |
| @@ -0,0 +1,130 @@ | ||
| # [Bootstrap](http://getbootstrap.com) | ||
|
|
||
| [](https://bootstrap-slack.herokuapp.com) | ||
|  | ||
| [](https://www.npmjs.com/package/bootstrap) | ||
| [](https://rubygems.org/gems/bootstrap) | ||
| [](https://travis-ci.org/twbs/bootstrap) | ||
| [](https://david-dm.org/twbs/bootstrap#info=devDependencies) | ||
| [](https://saucelabs.com/u/bootstrap) | ||
|
|
||
| Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community. | ||
|
|
||
| To get started, check out <http://getbootstrap.com>! | ||
|
|
||
| ## Table of contents | ||
|
|
||
| - [Quick start](#quick-start) | ||
| - [Bugs and feature requests](#bugs-and-feature-requests) | ||
| - [Documentation](#documentation) | ||
| - [Contributing](#contributing) | ||
| - [Community](#community) | ||
| - [Versioning](#versioning) | ||
| - [Creators](#creators) | ||
| - [Copyright and license](#copyright-and-license) | ||
|
|
||
| ## Quick start | ||
|
|
||
| Several quick start options are available: | ||
|
|
||
| - [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.5.zip). | ||
| - Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. | ||
| - Install with [Bower](http://bower.io): `bower install bootstrap`. | ||
| - Install with [npm](https://www.npmjs.com): `npm install bootstrap`. | ||
| - Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`. | ||
| - Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`. | ||
|
|
||
| Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. | ||
|
|
||
| ### What's included | ||
|
|
||
| Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: | ||
|
|
||
| ``` | ||
| bootstrap/ | ||
| ├── css/ | ||
| │ ├── bootstrap.css | ||
| │ ├── bootstrap.css.map | ||
| │ ├── bootstrap.min.css | ||
| │ └── bootstrap.min.css.map | ||
| └── js/ | ||
| ├── bootstrap.js | ||
| └── bootstrap.min.js | ||
| ``` | ||
|
|
||
| We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. | ||
|
|
||
|
|
||
| ## Bugs and feature requests | ||
|
|
||
| Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). | ||
|
|
||
|
|
||
| ## Documentation | ||
|
|
||
| Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally. | ||
|
|
||
| ### Running documentation locally | ||
|
|
||
| 1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.5.x). | ||
| - **Windows users:** Read [this unofficial guide](http://jekyll-windows.juthilo.com/) to get Jekyll up and running without problems. | ||
| 2. Install the Ruby-based syntax highlighter, [Rouge](https://github.com/jneen/rouge), with `gem install rouge`. | ||
| 3. From the root `/bootstrap` directory, run `jekyll serve` in the command line. | ||
| 4. Open <http://localhost:9001> in your browser, and voilà. | ||
|
|
||
| Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). | ||
|
|
||
| ### Documentation for previous releases | ||
|
|
||
| Documentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3. | ||
|
|
||
| [Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. | ||
|
|
||
|
|
||
|
|
||
| ## Contributing | ||
|
|
||
| Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. | ||
|
|
||
| Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo). | ||
|
|
||
| Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>. | ||
|
|
||
|
|
||
|
|
||
| ## Community | ||
|
|
||
| Get updates on Bootstrap's development and chat with the project maintainers and community members. | ||
|
|
||
| - Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap). | ||
| - Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). | ||
| - Join [the official Slack room](https://bootstrap-slack.herokuapp.com). | ||
| - Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel. | ||
| - Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). | ||
| - Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability. | ||
|
|
||
|
|
||
|
|
||
| ## Versioning | ||
|
|
||
| For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](http://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. | ||
|
|
||
|
|
||
|
|
||
| ## Creators | ||
|
|
||
| **Mark Otto** | ||
|
|
||
| - <https://twitter.com/mdo> | ||
| - <https://github.com/mdo> | ||
|
|
||
| **Jacob Thornton** | ||
|
|
||
| - <https://twitter.com/fat> | ||
| - <https://github.com/fat> | ||
|
|
||
|
|
||
|
|
||
| ## Copyright and license | ||
|
|
||
| Code and documentation copyright 2011-2015 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE). |
| @@ -0,0 +1,41 @@ | ||
| # Dependencies | ||
| markdown: kramdown | ||
| highlighter: rouge | ||
|
|
||
| kramdown: | ||
| auto_ids: true | ||
|
|
||
| # Permalinks | ||
| permalink: pretty | ||
|
|
||
| # Server | ||
| source: docs | ||
| destination: _gh_pages | ||
| host: 0.0.0.0 | ||
| port: 9001 | ||
| baseurl: "" | ||
| url: http://getbootstrap.com | ||
| encoding: UTF-8 | ||
| exclude: [assets/scss/] | ||
|
|
||
| gems: | ||
| - jekyll-redirect-from | ||
|
|
||
| # Custom vars | ||
| current_version: 4.0.0-alpha | ||
| repo: https://github.com/twbs/bootstrap | ||
| sass_repo: https://github.com/twbs/bootstrap-sass | ||
| slack: https://bootstrap-slack.herokuapp.com | ||
|
|
||
| download: | ||
| source: https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.zip | ||
| dist: https://github.com/twbs/bootstrap/releases/download/v4.0.0-alpha/bootstrap-4.0.0-alpha-dist.zip | ||
|
|
||
| blog: http://blog.getbootstrap.com | ||
| expo: http://expo.getbootstrap.com | ||
| themes: http://themes.getbootstrap.com | ||
|
|
||
| cdn: | ||
| css: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css | ||
| css_theme: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css | ||
| js: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js |
| @@ -0,0 +1,34 @@ | ||
| { | ||
| "name": "bootstrap", | ||
| "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", | ||
| "keywords": [ | ||
| "css", | ||
| "js", | ||
| "sass", | ||
| "mobile-first", | ||
| "responsive", | ||
| "front-end", | ||
| "framework", | ||
| "web" | ||
| ], | ||
| "homepage": "http://getbootstrap.com", | ||
| "license": "MIT", | ||
| "moduleType": "globals", | ||
| "main": [ | ||
| "scss/bootstrap.scss", | ||
| "dist/js/bootstrap.js" | ||
| ], | ||
| "ignore": [ | ||
| "/.*", | ||
| "_config.yml", | ||
| "CNAME", | ||
| "composer.json", | ||
| "CONTRIBUTING.md", | ||
| "docs", | ||
| "js/tests", | ||
| "test-infra" | ||
| ], | ||
| "dependencies": { | ||
| "jquery": "1.9.1 - 2" | ||
| } | ||
| } |
| @@ -0,0 +1,37 @@ | ||
| { | ||
| "name": "twbs/bootstrap", | ||
| "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", | ||
| "keywords": [ | ||
| "css", | ||
| "js", | ||
| "sass", | ||
| "mobile-first", | ||
| "responsive", | ||
| "front-end", | ||
| "framework", | ||
| "web" | ||
| ], | ||
| "homepage": "http://getbootstrap.com", | ||
| "authors": [ | ||
| { | ||
| "name": "Mark Otto", | ||
| "email": "markdotto@gmail.com" | ||
| }, | ||
| { | ||
| "name": "Jacob Thornton", | ||
| "email": "jacobthornton@gmail.com" | ||
| } | ||
| ], | ||
| "support": { | ||
| "issues": "https://github.com/twbs/bootstrap/issues" | ||
| }, | ||
| "license": "MIT", | ||
| "extra": { | ||
| "branch-alias": { | ||
| "dev-master": "3.3.x-dev" | ||
| } | ||
| }, | ||
| "replace": { | ||
| "twitter/bootstrap": "self.version" | ||
| } | ||
| } |
| @@ -0,0 +1,12 @@ | ||
| // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. | ||
| require('./umd/util.js') | ||
| require('./umd/alert.js') | ||
| require('./umd/button.js') | ||
| require('./umd/carousel.js') | ||
| require('./umd/collapse.js') | ||
| require('./umd/dropdown.js') | ||
| require('./umd/modal.js') | ||
| require('./umd/scrollspy.js') | ||
| require('./umd/tab.js') | ||
| require('./umd/tooltip.js') | ||
| require('./umd/popover.js') |
| @@ -0,0 +1,211 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './util'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./util')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Util); | ||
| global.alert = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _util) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var _Util = _interopRequireDefault(_util); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): alert.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Alert = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'alert'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.alert'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
| var TRANSITION_DURATION = 150; | ||
|
|
||
| var Selector = { | ||
| DISMISS: '[data-dismiss="alert"]' | ||
| }; | ||
|
|
||
| var Event = { | ||
| CLOSE: 'close' + EVENT_KEY, | ||
| CLOSED: 'closed' + EVENT_KEY, | ||
| CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY | ||
| }; | ||
|
|
||
| var ClassName = { | ||
| ALERT: 'alert', | ||
| FADE: 'fade', | ||
| IN: 'in' | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Alert = (function () { | ||
| function Alert(element) { | ||
| _classCallCheck(this, Alert); | ||
|
|
||
| this._element = element; | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(Alert, [{ | ||
| key: 'close', | ||
|
|
||
| // public | ||
|
|
||
| value: function close(element) { | ||
| element = element || this._element; | ||
|
|
||
| var rootElement = this._getRootElement(element); | ||
| var customEvent = this._triggerCloseEvent(rootElement); | ||
|
|
||
| if (customEvent.isDefaultPrevented()) { | ||
| return; | ||
| } | ||
|
|
||
| this._removeElement(rootElement); | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeData(this._element, DATA_KEY); | ||
| this._element = null; | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_getRootElement', | ||
| value: function _getRootElement(element) { | ||
| var selector = _Util['default'].getSelectorFromElement(element); | ||
| var parent = false; | ||
|
|
||
| if (selector) { | ||
| parent = $(selector)[0]; | ||
| } | ||
|
|
||
| if (!parent) { | ||
| parent = $(element).closest('.' + ClassName.ALERT)[0]; | ||
| } | ||
|
|
||
| return parent; | ||
| } | ||
| }, { | ||
| key: '_triggerCloseEvent', | ||
| value: function _triggerCloseEvent(element) { | ||
| var closeEvent = $.Event(Event.CLOSE); | ||
|
|
||
| $(element).trigger(closeEvent); | ||
| return closeEvent; | ||
| } | ||
| }, { | ||
| key: '_removeElement', | ||
| value: function _removeElement(element) { | ||
| $(element).removeClass(ClassName.IN); | ||
|
|
||
| if (!_Util['default'].supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) { | ||
| this._destroyElement(element); | ||
| return; | ||
| } | ||
|
|
||
| $(element).one(_Util['default'].TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION); | ||
| } | ||
| }, { | ||
| key: '_destroyElement', | ||
| value: function _destroyElement(element) { | ||
| $(element).detach().trigger(Event.CLOSED).remove(); | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var $element = $(this); | ||
| var data = $element.data(DATA_KEY); | ||
|
|
||
| if (!data) { | ||
| data = new Alert(this); | ||
| $element.data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (config === 'close') { | ||
| data[config](this); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: '_handleDismiss', | ||
| value: function _handleDismiss(alertInstance) { | ||
| return function (event) { | ||
| if (event) { | ||
| event.preventDefault(); | ||
| } | ||
|
|
||
| alertInstance.close(this); | ||
| }; | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }]); | ||
|
|
||
| return Alert; | ||
| })(); | ||
|
|
||
| $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = Alert._jQueryInterface; | ||
| $.fn[NAME].Constructor = Alert; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Alert._jQueryInterface; | ||
| }; | ||
|
|
||
| return Alert; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Alert; | ||
| }); |
| @@ -0,0 +1,187 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod); | ||
| global.button = mod.exports; | ||
| } | ||
| })(this, function (exports, module) { | ||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): button.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var Button = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'button'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.button'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
|
|
||
| var ClassName = { | ||
| ACTIVE: 'active', | ||
| BUTTON: 'btn', | ||
| FOCUS: 'focus' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| DATA_TOGGLE_CARROT: '[data-toggle^="button"]', | ||
| DATA_TOGGLE: '[data-toggle="buttons"]', | ||
| INPUT: 'input', | ||
| ACTIVE: '.active', | ||
| BUTTON: '.btn' | ||
| }; | ||
|
|
||
| var Event = { | ||
| CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, | ||
| FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY) | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Button = (function () { | ||
| function Button(element) { | ||
| _classCallCheck(this, Button); | ||
|
|
||
| this._element = element; | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(Button, [{ | ||
| key: 'toggle', | ||
|
|
||
| // public | ||
|
|
||
| value: function toggle() { | ||
| var triggerChangeEvent = true; | ||
| var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0]; | ||
|
|
||
| if (rootElement) { | ||
| var input = $(this._element).find(Selector.INPUT)[0]; | ||
|
|
||
| if (input) { | ||
| if (input.type === 'radio') { | ||
| if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) { | ||
| triggerChangeEvent = false; | ||
| } else { | ||
| var activeElement = $(rootElement).find(Selector.ACTIVE)[0]; | ||
|
|
||
| if (activeElement) { | ||
| $(activeElement).removeClass(ClassName.ACTIVE); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| if (triggerChangeEvent) { | ||
| input.checked = !$(this._element).hasClass(ClassName.ACTIVE); | ||
| $(this._element).trigger('change'); | ||
| } | ||
| } | ||
| } else { | ||
| this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE)); | ||
| } | ||
|
|
||
| if (triggerChangeEvent) { | ||
| $(this._element).toggleClass(ClassName.ACTIVE); | ||
| } | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeData(this._element, DATA_KEY); | ||
| this._element = null; | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var data = $(this).data(DATA_KEY); | ||
|
|
||
| if (!data) { | ||
| data = new Button(this); | ||
| $(this).data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (config === 'toggle') { | ||
| data[config](); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }]); | ||
|
|
||
| return Button; | ||
| })(); | ||
|
|
||
| $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
| event.preventDefault(); | ||
|
|
||
| var button = event.target; | ||
|
|
||
| if (!$(button).hasClass(ClassName.BUTTON)) { | ||
| button = $(button).closest(Selector.BUTTON); | ||
| } | ||
|
|
||
| Button._jQueryInterface.call($(button), 'toggle'); | ||
| }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
| var button = $(event.target).closest(Selector.BUTTON)[0]; | ||
| $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); | ||
| }); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = Button._jQueryInterface; | ||
| $.fn[NAME].Constructor = Button; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Button._jQueryInterface; | ||
| }; | ||
|
|
||
| return Button; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Button; | ||
| }); |
| @@ -0,0 +1,380 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './util'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./util')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Util); | ||
| global.collapse = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _util) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var _Util = _interopRequireDefault(_util); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): collapse.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Collapse = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'collapse'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.collapse'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
| var TRANSITION_DURATION = 600; | ||
|
|
||
| var Default = { | ||
| toggle: true, | ||
| parent: '' | ||
| }; | ||
|
|
||
| var DefaultType = { | ||
| toggle: 'boolean', | ||
| parent: 'string' | ||
| }; | ||
|
|
||
| var Event = { | ||
| SHOW: 'show' + EVENT_KEY, | ||
| SHOWN: 'shown' + EVENT_KEY, | ||
| HIDE: 'hide' + EVENT_KEY, | ||
| HIDDEN: 'hidden' + EVENT_KEY, | ||
| CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY | ||
| }; | ||
|
|
||
| var ClassName = { | ||
| IN: 'in', | ||
| COLLAPSE: 'collapse', | ||
| COLLAPSING: 'collapsing', | ||
| COLLAPSED: 'collapsed' | ||
| }; | ||
|
|
||
| var Dimension = { | ||
| WIDTH: 'width', | ||
| HEIGHT: 'height' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| ACTIVES: '.panel > .in, .panel > .collapsing', | ||
| DATA_TOGGLE: '[data-toggle="collapse"]' | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Collapse = (function () { | ||
| function Collapse(element, config) { | ||
| _classCallCheck(this, Collapse); | ||
|
|
||
| this._isTransitioning = false; | ||
| this._element = element; | ||
| this._config = this._getConfig(config); | ||
| this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]'))); | ||
|
|
||
| this._parent = this._config.parent ? this._getParent() : null; | ||
|
|
||
| if (!this._config.parent) { | ||
| this._addAriaAndCollapsedClass(this._element, this._triggerArray); | ||
| } | ||
|
|
||
| if (this._config.toggle) { | ||
| this.toggle(); | ||
| } | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(Collapse, [{ | ||
| key: 'toggle', | ||
|
|
||
| // public | ||
|
|
||
| value: function toggle() { | ||
| if ($(this._element).hasClass(ClassName.IN)) { | ||
| this.hide(); | ||
| } else { | ||
| this.show(); | ||
| } | ||
| } | ||
| }, { | ||
| key: 'show', | ||
| value: function show() { | ||
| var _this = this; | ||
|
|
||
| if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) { | ||
| return; | ||
| } | ||
|
|
||
| var actives = undefined; | ||
| var activesData = undefined; | ||
|
|
||
| if (this._parent) { | ||
| actives = $.makeArray($(Selector.ACTIVES)); | ||
| if (!actives.length) { | ||
| actives = null; | ||
| } | ||
| } | ||
|
|
||
| if (actives) { | ||
| activesData = $(actives).data(DATA_KEY); | ||
| if (activesData && activesData._isTransitioning) { | ||
| return; | ||
| } | ||
| } | ||
|
|
||
| var startEvent = $.Event(Event.SHOW); | ||
| $(this._element).trigger(startEvent); | ||
| if (startEvent.isDefaultPrevented()) { | ||
| return; | ||
| } | ||
|
|
||
| if (actives) { | ||
| Collapse._jQueryInterface.call($(actives), 'hide'); | ||
| if (!activesData) { | ||
| $(actives).data(DATA_KEY, null); | ||
| } | ||
| } | ||
|
|
||
| var dimension = this._getDimension(); | ||
|
|
||
| $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); | ||
|
|
||
| this._element.style[dimension] = 0; | ||
| this._element.setAttribute('aria-expanded', true); | ||
|
|
||
| if (this._triggerArray.length) { | ||
| $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); | ||
| } | ||
|
|
||
| this.setTransitioning(true); | ||
|
|
||
| var complete = function complete() { | ||
| $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN); | ||
|
|
||
| _this._element.style[dimension] = ''; | ||
|
|
||
| _this.setTransitioning(false); | ||
|
|
||
| $(_this._element).trigger(Event.SHOWN); | ||
| }; | ||
|
|
||
| if (!_Util['default'].supportsTransitionEnd()) { | ||
| complete(); | ||
| return; | ||
| } | ||
|
|
||
| var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); | ||
| var scrollSize = 'scroll' + capitalizedDimension; | ||
|
|
||
| $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); | ||
|
|
||
| this._element.style[dimension] = this._element[scrollSize] + 'px'; | ||
| } | ||
| }, { | ||
| key: 'hide', | ||
| value: function hide() { | ||
| var _this2 = this; | ||
|
|
||
| if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) { | ||
| return; | ||
| } | ||
|
|
||
| var startEvent = $.Event(Event.HIDE); | ||
| $(this._element).trigger(startEvent); | ||
| if (startEvent.isDefaultPrevented()) { | ||
| return; | ||
| } | ||
|
|
||
| var dimension = this._getDimension(); | ||
| var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight'; | ||
|
|
||
| this._element.style[dimension] = this._element[offsetDimension] + 'px'; | ||
|
|
||
| _Util['default'].reflow(this._element); | ||
|
|
||
| $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN); | ||
|
|
||
| this._element.setAttribute('aria-expanded', false); | ||
|
|
||
| if (this._triggerArray.length) { | ||
| $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); | ||
| } | ||
|
|
||
| this.setTransitioning(true); | ||
|
|
||
| var complete = function complete() { | ||
| _this2.setTransitioning(false); | ||
| $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); | ||
| }; | ||
|
|
||
| this._element.style[dimension] = 0; | ||
|
|
||
| if (!_Util['default'].supportsTransitionEnd()) { | ||
| complete(); | ||
| return; | ||
| } | ||
|
|
||
| $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); | ||
| } | ||
| }, { | ||
| key: 'setTransitioning', | ||
| value: function setTransitioning(isTransitioning) { | ||
| this._isTransitioning = isTransitioning; | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeData(this._element, DATA_KEY); | ||
|
|
||
| this._config = null; | ||
| this._parent = null; | ||
| this._element = null; | ||
| this._triggerArray = null; | ||
| this._isTransitioning = null; | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_getConfig', | ||
| value: function _getConfig(config) { | ||
| config = $.extend({}, Default, config); | ||
| config.toggle = Boolean(config.toggle); // coerce string values | ||
| _Util['default'].typeCheckConfig(NAME, config, DefaultType); | ||
| return config; | ||
| } | ||
| }, { | ||
| key: '_getDimension', | ||
| value: function _getDimension() { | ||
| var hasWidth = $(this._element).hasClass(Dimension.WIDTH); | ||
| return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; | ||
| } | ||
| }, { | ||
| key: '_getParent', | ||
| value: function _getParent() { | ||
| var _this3 = this; | ||
|
|
||
| var parent = $(this._config.parent)[0]; | ||
| var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; | ||
|
|
||
| $(parent).find(selector).each(function (i, element) { | ||
| _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); | ||
| }); | ||
|
|
||
| return parent; | ||
| } | ||
| }, { | ||
| key: '_addAriaAndCollapsedClass', | ||
| value: function _addAriaAndCollapsedClass(element, triggerArray) { | ||
| if (element) { | ||
| var isOpen = $(element).hasClass(ClassName.IN); | ||
| element.setAttribute('aria-expanded', isOpen); | ||
|
|
||
| if (triggerArray.length) { | ||
| $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_getTargetFromElement', | ||
| value: function _getTargetFromElement(element) { | ||
| var selector = _Util['default'].getSelectorFromElement(element); | ||
| return selector ? $(selector)[0] : null; | ||
| } | ||
| }, { | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var $this = $(this); | ||
| var data = $this.data(DATA_KEY); | ||
| var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config); | ||
|
|
||
| if (!data && _config.toggle && /show|hide/.test(config)) { | ||
| _config.toggle = false; | ||
| } | ||
|
|
||
| if (!data) { | ||
| data = new Collapse(this, _config); | ||
| $this.data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (typeof config === 'string') { | ||
| data[config](); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }, { | ||
| key: 'Default', | ||
| get: function get() { | ||
| return Default; | ||
| } | ||
| }]); | ||
|
|
||
| return Collapse; | ||
| })(); | ||
|
|
||
| $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
| event.preventDefault(); | ||
|
|
||
| var target = Collapse._getTargetFromElement(this); | ||
| var data = $(target).data(DATA_KEY); | ||
| var config = data ? 'toggle' : $(this).data(); | ||
|
|
||
| Collapse._jQueryInterface.call($(target), config); | ||
| }); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = Collapse._jQueryInterface; | ||
| $.fn[NAME].Constructor = Collapse; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Collapse._jQueryInterface; | ||
| }; | ||
|
|
||
| return Collapse; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Collapse; | ||
| }); |
| @@ -0,0 +1,309 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './util'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./util')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Util); | ||
| global.dropdown = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _util) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var _Util = _interopRequireDefault(_util); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): dropdown.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Dropdown = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'dropdown'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.dropdown'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
|
|
||
| var Event = { | ||
| HIDE: 'hide' + EVENT_KEY, | ||
| HIDDEN: 'hidden' + EVENT_KEY, | ||
| SHOW: 'show' + EVENT_KEY, | ||
| SHOWN: 'shown' + EVENT_KEY, | ||
| CLICK: 'click' + EVENT_KEY, | ||
| CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, | ||
| KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY | ||
| }; | ||
|
|
||
| var ClassName = { | ||
| BACKDROP: 'dropdown-backdrop', | ||
| DISABLED: 'disabled', | ||
| OPEN: 'open' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| BACKDROP: '.dropdown-backdrop', | ||
| DATA_TOGGLE: '[data-toggle="dropdown"]', | ||
| FORM_CHILD: '.dropdown form', | ||
| ROLE_MENU: '[role="menu"]', | ||
| ROLE_LISTBOX: '[role="listbox"]', | ||
| NAVBAR_NAV: '.navbar-nav', | ||
| VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a' | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Dropdown = (function () { | ||
| function Dropdown(element) { | ||
| _classCallCheck(this, Dropdown); | ||
|
|
||
| this._element = element; | ||
|
|
||
| this._addEventListeners(); | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(Dropdown, [{ | ||
| key: 'toggle', | ||
|
|
||
| // public | ||
|
|
||
| value: function toggle() { | ||
| if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { | ||
| return false; | ||
| } | ||
|
|
||
| var parent = Dropdown._getParentFromElement(this); | ||
| var isActive = $(parent).hasClass(ClassName.OPEN); | ||
|
|
||
| Dropdown._clearMenus(); | ||
|
|
||
| if (isActive) { | ||
| return false; | ||
| } | ||
|
|
||
| if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { | ||
|
|
||
| // if mobile we use a backdrop because click events don't delegate | ||
| var dropdown = document.createElement('div'); | ||
| dropdown.className = ClassName.BACKDROP; | ||
| $(dropdown).insertBefore(this); | ||
| $(dropdown).on('click', Dropdown._clearMenus); | ||
| } | ||
|
|
||
| var relatedTarget = { relatedTarget: this }; | ||
| var showEvent = $.Event(Event.SHOW, relatedTarget); | ||
|
|
||
| $(parent).trigger(showEvent); | ||
|
|
||
| if (showEvent.isDefaultPrevented()) { | ||
| return false; | ||
| } | ||
|
|
||
| this.focus(); | ||
| this.setAttribute('aria-expanded', 'true'); | ||
|
|
||
| $(parent).toggleClass(ClassName.OPEN); | ||
| $(parent).trigger($.Event(Event.SHOWN, relatedTarget)); | ||
|
|
||
| return false; | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeData(this._element, DATA_KEY); | ||
| $(this._element).off(EVENT_KEY); | ||
| this._element = null; | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_addEventListeners', | ||
| value: function _addEventListeners() { | ||
| $(this._element).on(Event.CLICK, this.toggle); | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var data = $(this).data(DATA_KEY); | ||
|
|
||
| if (!data) { | ||
| $(this).data(DATA_KEY, data = new Dropdown(this)); | ||
| } | ||
|
|
||
| if (typeof config === 'string') { | ||
| data[config].call(this); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: '_clearMenus', | ||
| value: function _clearMenus(event) { | ||
| if (event && event.which === 3) { | ||
| return; | ||
| } | ||
|
|
||
| var backdrop = $(Selector.BACKDROP)[0]; | ||
| if (backdrop) { | ||
| backdrop.parentNode.removeChild(backdrop); | ||
| } | ||
|
|
||
| var toggles = $.makeArray($(Selector.DATA_TOGGLE)); | ||
|
|
||
| for (var i = 0; i < toggles.length; i++) { | ||
| var _parent = Dropdown._getParentFromElement(toggles[i]); | ||
| var relatedTarget = { relatedTarget: toggles[i] }; | ||
|
|
||
| if (!$(_parent).hasClass(ClassName.OPEN)) { | ||
| continue; | ||
| } | ||
|
|
||
| if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) { | ||
| continue; | ||
| } | ||
|
|
||
| var hideEvent = $.Event(Event.HIDE, relatedTarget); | ||
| $(_parent).trigger(hideEvent); | ||
| if (hideEvent.isDefaultPrevented()) { | ||
| continue; | ||
| } | ||
|
|
||
| toggles[i].setAttribute('aria-expanded', 'false'); | ||
|
|
||
| $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget)); | ||
| } | ||
| } | ||
| }, { | ||
| key: '_getParentFromElement', | ||
| value: function _getParentFromElement(element) { | ||
| var parent = undefined; | ||
| var selector = _Util['default'].getSelectorFromElement(element); | ||
|
|
||
| if (selector) { | ||
| parent = $(selector)[0]; | ||
| } | ||
|
|
||
| return parent || element.parentNode; | ||
| } | ||
| }, { | ||
| key: '_dataApiKeydownHandler', | ||
| value: function _dataApiKeydownHandler(event) { | ||
| if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) { | ||
| return; | ||
| } | ||
|
|
||
| event.preventDefault(); | ||
| event.stopPropagation(); | ||
|
|
||
| if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { | ||
| return; | ||
| } | ||
|
|
||
| var parent = Dropdown._getParentFromElement(this); | ||
| var isActive = $(parent).hasClass(ClassName.OPEN); | ||
|
|
||
| if (!isActive && event.which !== 27 || isActive && event.which === 27) { | ||
|
|
||
| if (event.which === 27) { | ||
| var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; | ||
| $(toggle).trigger('focus'); | ||
| } | ||
|
|
||
| $(this).trigger('click'); | ||
| return; | ||
| } | ||
|
|
||
| var items = $.makeArray($(Selector.VISIBLE_ITEMS)); | ||
|
|
||
| items = items.filter(function (item) { | ||
| return item.offsetWidth || item.offsetHeight; | ||
| }); | ||
|
|
||
| if (!items.length) { | ||
| return; | ||
| } | ||
|
|
||
| var index = items.indexOf(event.target); | ||
|
|
||
| if (event.which === 38 && index > 0) { | ||
| // up | ||
| index--; | ||
| } | ||
|
|
||
| if (event.which === 40 && index < items.length - 1) { | ||
| // down | ||
| index++; | ||
| } | ||
|
|
||
| if (! ~index) { | ||
| index = 0; | ||
| } | ||
|
|
||
| items[index].focus(); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }]); | ||
|
|
||
| return Dropdown; | ||
| })(); | ||
|
|
||
| $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { | ||
| e.stopPropagation(); | ||
| }); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = Dropdown._jQueryInterface; | ||
| $.fn[NAME].Constructor = Dropdown; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Dropdown._jQueryInterface; | ||
| }; | ||
|
|
||
| return Dropdown; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Dropdown; | ||
| }); |
| @@ -0,0 +1,223 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './tooltip'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./tooltip')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Tooltip); | ||
| global.popover = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _tooltip) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | ||
|
|
||
| var _Tooltip2 = _interopRequireDefault(_tooltip); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): popover.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Popover = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'popover'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.popover'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
|
|
||
| var Default = $.extend({}, _Tooltip2['default'].Default, { | ||
| placement: 'right', | ||
| trigger: 'click', | ||
| content: '', | ||
| template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>' | ||
| }); | ||
|
|
||
| var DefaultType = $.extend({}, _Tooltip2['default'].DefaultType, { | ||
| content: '(string|function)' | ||
| }); | ||
|
|
||
| var ClassName = { | ||
| FADE: 'fade', | ||
| IN: 'in' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| TITLE: '.popover-title', | ||
| CONTENT: '.popover-content', | ||
| ARROW: '.popover-arrow' | ||
| }; | ||
|
|
||
| var Event = { | ||
| HIDE: 'hide' + EVENT_KEY, | ||
| HIDDEN: 'hidden' + EVENT_KEY, | ||
| SHOW: 'show' + EVENT_KEY, | ||
| SHOWN: 'shown' + EVENT_KEY, | ||
| INSERTED: 'inserted' + EVENT_KEY, | ||
| CLICK: 'click' + EVENT_KEY, | ||
| FOCUSIN: 'focusin' + EVENT_KEY, | ||
| FOCUSOUT: 'focusout' + EVENT_KEY, | ||
| MOUSEENTER: 'mouseenter' + EVENT_KEY, | ||
| MOUSELEAVE: 'mouseleave' + EVENT_KEY | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Popover = (function (_Tooltip) { | ||
| _inherits(Popover, _Tooltip); | ||
|
|
||
| function Popover() { | ||
| _classCallCheck(this, Popover); | ||
|
|
||
| _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments); | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| _createClass(Popover, [{ | ||
| key: 'isWithContent', | ||
|
|
||
| // overrides | ||
|
|
||
| value: function isWithContent() { | ||
| return this.getTitle() || this._getContent(); | ||
| } | ||
| }, { | ||
| key: 'getTipElement', | ||
| value: function getTipElement() { | ||
| return this.tip = this.tip || $(this.config.template)[0]; | ||
| } | ||
| }, { | ||
| key: 'setContent', | ||
| value: function setContent() { | ||
| var tip = this.getTipElement(); | ||
| var title = this.getTitle(); | ||
| var content = this._getContent(); | ||
| var titleElement = $(tip).find(Selector.TITLE)[0]; | ||
|
|
||
| if (titleElement) { | ||
| titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title; | ||
| } | ||
|
|
||
| // we use append for html objects to maintain js events | ||
| $(tip).find(Selector.CONTENT).children().detach().end()[this.config.html ? typeof content === 'string' ? 'html' : 'append' : 'text'](content); | ||
|
|
||
| $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); | ||
|
|
||
| this.cleanupTether(); | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_getContent', | ||
| value: function _getContent() { | ||
| return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var data = $(this).data(DATA_KEY); | ||
| var _config = typeof config === 'object' ? config : null; | ||
|
|
||
| if (!data && /destroy|hide/.test(config)) { | ||
| return; | ||
| } | ||
|
|
||
| if (!data) { | ||
| data = new Popover(this, _config); | ||
| $(this).data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (typeof config === 'string') { | ||
| data[config](); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
|
|
||
| // getters | ||
|
|
||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }, { | ||
| key: 'Default', | ||
| get: function get() { | ||
| return Default; | ||
| } | ||
| }, { | ||
| key: 'NAME', | ||
| get: function get() { | ||
| return NAME; | ||
| } | ||
| }, { | ||
| key: 'DATA_KEY', | ||
| get: function get() { | ||
| return DATA_KEY; | ||
| } | ||
| }, { | ||
| key: 'Event', | ||
| get: function get() { | ||
| return Event; | ||
| } | ||
| }, { | ||
| key: 'EVENT_KEY', | ||
| get: function get() { | ||
| return EVENT_KEY; | ||
| } | ||
| }, { | ||
| key: 'DefaultType', | ||
| get: function get() { | ||
| return DefaultType; | ||
| } | ||
| }]); | ||
|
|
||
| return Popover; | ||
| })(_Tooltip2['default']); | ||
|
|
||
| $.fn[NAME] = Popover._jQueryInterface; | ||
| $.fn[NAME].Constructor = Popover; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Popover._jQueryInterface; | ||
| }; | ||
|
|
||
| return Popover; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Popover; | ||
| }); |
| @@ -0,0 +1,336 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './util'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./util')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Util); | ||
| global.scrollspy = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _util) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var _Util = _interopRequireDefault(_util); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): scrollspy.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var ScrollSpy = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'scrollspy'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.scrollspy'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
|
|
||
| var Default = { | ||
| offset: 10, | ||
| method: 'auto', | ||
| target: '' | ||
| }; | ||
|
|
||
| var DefaultType = { | ||
| offset: 'number', | ||
| method: 'string', | ||
| target: '(string|element)' | ||
| }; | ||
|
|
||
| var Event = { | ||
| ACTIVATE: 'activate' + EVENT_KEY, | ||
| SCROLL: 'scroll' + EVENT_KEY, | ||
| LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY | ||
| }; | ||
|
|
||
| var ClassName = { | ||
| DROPDOWN_ITEM: 'dropdown-item', | ||
| DROPDOWN_MENU: 'dropdown-menu', | ||
| NAV_LINK: 'nav-link', | ||
| NAV: 'nav', | ||
| ACTIVE: 'active' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| DATA_SPY: '[data-spy="scroll"]', | ||
| ACTIVE: '.active', | ||
| LIST_ITEM: '.list-item', | ||
| LI: 'li', | ||
| LI_DROPDOWN: 'li.dropdown', | ||
| NAV_LINKS: '.nav-link', | ||
| DROPDOWN: '.dropdown', | ||
| DROPDOWN_ITEMS: '.dropdown-item', | ||
| DROPDOWN_TOGGLE: '.dropdown-toggle' | ||
| }; | ||
|
|
||
| var OffsetMethod = { | ||
| OFFSET: 'offset', | ||
| POSITION: 'position' | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var ScrollSpy = (function () { | ||
| function ScrollSpy(element, config) { | ||
| _classCallCheck(this, ScrollSpy); | ||
|
|
||
| this._element = element; | ||
| this._scrollElement = element.tagName === 'BODY' ? window : element; | ||
| this._config = this._getConfig(config); | ||
| this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS); | ||
| this._offsets = []; | ||
| this._targets = []; | ||
| this._activeTarget = null; | ||
| this._scrollHeight = 0; | ||
|
|
||
| $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this)); | ||
|
|
||
| this.refresh(); | ||
| this._process(); | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(ScrollSpy, [{ | ||
| key: 'refresh', | ||
|
|
||
| // public | ||
|
|
||
| value: function refresh() { | ||
| var _this = this; | ||
|
|
||
| var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; | ||
|
|
||
| var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; | ||
|
|
||
| var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; | ||
|
|
||
| this._offsets = []; | ||
| this._targets = []; | ||
|
|
||
| this._scrollHeight = this._getScrollHeight(); | ||
|
|
||
| var targets = $.makeArray($(this._selector)); | ||
|
|
||
| targets.map(function (element) { | ||
| var target = undefined; | ||
| var targetSelector = _Util['default'].getSelectorFromElement(element); | ||
|
|
||
| if (targetSelector) { | ||
| target = $(targetSelector)[0]; | ||
| } | ||
|
|
||
| if (target && (target.offsetWidth || target.offsetHeight)) { | ||
| // todo (fat): remove sketch reliance on jQuery position/offset | ||
| return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; | ||
| } | ||
| }).filter(function (item) { | ||
| return item; | ||
| }).sort(function (a, b) { | ||
| return a[0] - b[0]; | ||
| }).forEach(function (item) { | ||
| _this._offsets.push(item[0]); | ||
| _this._targets.push(item[1]); | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeData(this._element, DATA_KEY); | ||
| $(this._scrollElement).off(EVENT_KEY); | ||
|
|
||
| this._element = null; | ||
| this._scrollElement = null; | ||
| this._config = null; | ||
| this._selector = null; | ||
| this._offsets = null; | ||
| this._targets = null; | ||
| this._activeTarget = null; | ||
| this._scrollHeight = null; | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_getConfig', | ||
| value: function _getConfig(config) { | ||
| config = $.extend({}, Default, config); | ||
|
|
||
| if (typeof config.target !== 'string') { | ||
| var id = $(config.target).attr('id'); | ||
| if (!id) { | ||
| id = _Util['default'].getUID(NAME); | ||
| $(config.target).attr('id', id); | ||
| } | ||
| config.target = '#' + id; | ||
| } | ||
|
|
||
| _Util['default'].typeCheckConfig(NAME, config, DefaultType); | ||
|
|
||
| return config; | ||
| } | ||
| }, { | ||
| key: '_getScrollTop', | ||
| value: function _getScrollTop() { | ||
| return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop; | ||
| } | ||
| }, { | ||
| key: '_getScrollHeight', | ||
| value: function _getScrollHeight() { | ||
| return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); | ||
| } | ||
| }, { | ||
| key: '_process', | ||
| value: function _process() { | ||
| var scrollTop = this._getScrollTop() + this._config.offset; | ||
| var scrollHeight = this._getScrollHeight(); | ||
| var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight; | ||
|
|
||
| if (this._scrollHeight !== scrollHeight) { | ||
| this.refresh(); | ||
| } | ||
|
|
||
| if (scrollTop >= maxScroll) { | ||
| var target = this._targets[this._targets.length - 1]; | ||
|
|
||
| if (this._activeTarget !== target) { | ||
| this._activate(target); | ||
| } | ||
| } | ||
|
|
||
| if (this._activeTarget && scrollTop < this._offsets[0]) { | ||
| this._activeTarget = null; | ||
| this._clear(); | ||
| return; | ||
| } | ||
|
|
||
| for (var i = this._offsets.length; i--;) { | ||
| var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]); | ||
|
|
||
| if (isActiveTarget) { | ||
| this._activate(this._targets[i]); | ||
| } | ||
| } | ||
| } | ||
| }, { | ||
| key: '_activate', | ||
| value: function _activate(target) { | ||
| this._activeTarget = target; | ||
|
|
||
| this._clear(); | ||
|
|
||
| var queries = this._selector.split(','); | ||
| queries = queries.map(function (selector) { | ||
| return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]'); | ||
| }); | ||
|
|
||
| var $link = $(queries.join(',')); | ||
|
|
||
| if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { | ||
| $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); | ||
| $link.addClass(ClassName.ACTIVE); | ||
| } else { | ||
| // todo (fat) this is kinda sus… | ||
| // recursively add actives to tested nav-links | ||
| $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); | ||
| } | ||
|
|
||
| $(this._scrollElement).trigger(Event.ACTIVATE, { | ||
| relatedTarget: target | ||
| }); | ||
| } | ||
| }, { | ||
| key: '_clear', | ||
| value: function _clear() { | ||
| $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var data = $(this).data(DATA_KEY); | ||
| var _config = typeof config === 'object' && config || null; | ||
|
|
||
| if (!data) { | ||
| data = new ScrollSpy(this, _config); | ||
| $(this).data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (typeof config === 'string') { | ||
| data[config](); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }, { | ||
| key: 'Default', | ||
| get: function get() { | ||
| return Default; | ||
| } | ||
| }]); | ||
|
|
||
| return ScrollSpy; | ||
| })(); | ||
|
|
||
| $(window).on(Event.LOAD_DATA_API, function () { | ||
| var scrollSpys = $.makeArray($(Selector.DATA_SPY)); | ||
|
|
||
| for (var i = scrollSpys.length; i--;) { | ||
| var $spy = $(scrollSpys[i]); | ||
| ScrollSpy._jQueryInterface.call($spy, $spy.data()); | ||
| } | ||
| }); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = ScrollSpy._jQueryInterface; | ||
| $.fn[NAME].Constructor = ScrollSpy; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return ScrollSpy._jQueryInterface; | ||
| }; | ||
|
|
||
| return ScrollSpy; | ||
| })(jQuery); | ||
|
|
||
| module.exports = ScrollSpy; | ||
| }); |
| @@ -0,0 +1,279 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module', './util'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module, require('./util')); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod, global.Util); | ||
| global.tab = mod.exports; | ||
| } | ||
| })(this, function (exports, module, _util) { | ||
| 'use strict'; | ||
|
|
||
| var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); | ||
|
|
||
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
|
|
||
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } | ||
|
|
||
| var _Util = _interopRequireDefault(_util); | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): tab.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Tab = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Constants | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var NAME = 'tab'; | ||
| var VERSION = '4.0.0'; | ||
| var DATA_KEY = 'bs.tab'; | ||
| var EVENT_KEY = '.' + DATA_KEY; | ||
| var DATA_API_KEY = '.data-api'; | ||
| var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
| var TRANSITION_DURATION = 150; | ||
|
|
||
| var Event = { | ||
| HIDE: 'hide' + EVENT_KEY, | ||
| HIDDEN: 'hidden' + EVENT_KEY, | ||
| SHOW: 'show' + EVENT_KEY, | ||
| SHOWN: 'shown' + EVENT_KEY, | ||
| CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY | ||
| }; | ||
|
|
||
| var ClassName = { | ||
| DROPDOWN_MENU: 'dropdown-menu', | ||
| ACTIVE: 'active', | ||
| FADE: 'fade', | ||
| IN: 'in' | ||
| }; | ||
|
|
||
| var Selector = { | ||
| A: 'a', | ||
| LI: 'li', | ||
| DROPDOWN: '.dropdown', | ||
| UL: 'ul:not(.dropdown-menu)', | ||
| FADE_CHILD: '> .nav-item .fade, > .fade', | ||
| ACTIVE: '.active', | ||
| ACTIVE_CHILD: '> .nav-item > .active, > .active', | ||
| DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]', | ||
| DROPDOWN_TOGGLE: '.dropdown-toggle', | ||
| DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' | ||
| }; | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Class Definition | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var Tab = (function () { | ||
| function Tab(element) { | ||
| _classCallCheck(this, Tab); | ||
|
|
||
| this._element = element; | ||
| } | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Data Api implementation | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| // getters | ||
|
|
||
| _createClass(Tab, [{ | ||
| key: 'show', | ||
|
|
||
| // public | ||
|
|
||
| value: function show() { | ||
| var _this = this; | ||
|
|
||
| if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) { | ||
| return; | ||
| } | ||
|
|
||
| var target = undefined; | ||
| var previous = undefined; | ||
| var ulElement = $(this._element).closest(Selector.UL)[0]; | ||
| var selector = _Util['default'].getSelectorFromElement(this._element); | ||
|
|
||
| if (ulElement) { | ||
| previous = $.makeArray($(ulElement).find(Selector.ACTIVE)); | ||
| previous = previous[previous.length - 1]; | ||
| } | ||
|
|
||
| var hideEvent = $.Event(Event.HIDE, { | ||
| relatedTarget: this._element | ||
| }); | ||
|
|
||
| var showEvent = $.Event(Event.SHOW, { | ||
| relatedTarget: previous | ||
| }); | ||
|
|
||
| if (previous) { | ||
| $(previous).trigger(hideEvent); | ||
| } | ||
|
|
||
| $(this._element).trigger(showEvent); | ||
|
|
||
| if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { | ||
| return; | ||
| } | ||
|
|
||
| if (selector) { | ||
| target = $(selector)[0]; | ||
| } | ||
|
|
||
| this._activate(this._element, ulElement); | ||
|
|
||
| var complete = function complete() { | ||
| var hiddenEvent = $.Event(Event.HIDDEN, { | ||
| relatedTarget: _this._element | ||
| }); | ||
|
|
||
| var shownEvent = $.Event(Event.SHOWN, { | ||
| relatedTarget: previous | ||
| }); | ||
|
|
||
| $(previous).trigger(hiddenEvent); | ||
| $(_this._element).trigger(shownEvent); | ||
| }; | ||
|
|
||
| if (target) { | ||
| this._activate(target, target.parentNode, complete); | ||
| } else { | ||
| complete(); | ||
| } | ||
| } | ||
| }, { | ||
| key: 'dispose', | ||
| value: function dispose() { | ||
| $.removeClass(this._element, DATA_KEY); | ||
| this._element = null; | ||
| } | ||
|
|
||
| // private | ||
|
|
||
| }, { | ||
| key: '_activate', | ||
| value: function _activate(element, container, callback) { | ||
| var active = $(container).find(Selector.ACTIVE_CHILD)[0]; | ||
| var isTransitioning = callback && _Util['default'].supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0])); | ||
|
|
||
| var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback); | ||
|
|
||
| if (active && isTransitioning) { | ||
| $(active).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); | ||
| } else { | ||
| complete(); | ||
| } | ||
|
|
||
| if (active) { | ||
| $(active).removeClass(ClassName.IN); | ||
| } | ||
| } | ||
| }, { | ||
| key: '_transitionComplete', | ||
| value: function _transitionComplete(element, active, isTransitioning, callback) { | ||
| if (active) { | ||
| $(active).removeClass(ClassName.ACTIVE); | ||
|
|
||
| var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; | ||
|
|
||
| if (dropdownChild) { | ||
| $(dropdownChild).removeClass(ClassName.ACTIVE); | ||
| } | ||
|
|
||
| active.setAttribute('aria-expanded', false); | ||
| } | ||
|
|
||
| $(element).addClass(ClassName.ACTIVE); | ||
| element.setAttribute('aria-expanded', true); | ||
|
|
||
| if (isTransitioning) { | ||
| _Util['default'].reflow(element); | ||
| $(element).addClass(ClassName.IN); | ||
| } else { | ||
| $(element).removeClass(ClassName.FADE); | ||
| } | ||
|
|
||
| if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { | ||
|
|
||
| var dropdownElement = $(element).closest(Selector.DROPDOWN)[0]; | ||
| if (dropdownElement) { | ||
| $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); | ||
| } | ||
|
|
||
| element.setAttribute('aria-expanded', true); | ||
| } | ||
|
|
||
| if (callback) { | ||
| callback(); | ||
| } | ||
| } | ||
|
|
||
| // static | ||
|
|
||
| }], [{ | ||
| key: '_jQueryInterface', | ||
| value: function _jQueryInterface(config) { | ||
| return this.each(function () { | ||
| var $this = $(this); | ||
| var data = $this.data(DATA_KEY); | ||
|
|
||
| if (!data) { | ||
| data = data = new Tab(this); | ||
| $this.data(DATA_KEY, data); | ||
| } | ||
|
|
||
| if (typeof config === 'string') { | ||
| data[config](); | ||
| } | ||
| }); | ||
| } | ||
| }, { | ||
| key: 'VERSION', | ||
| get: function get() { | ||
| return VERSION; | ||
| } | ||
| }]); | ||
|
|
||
| return Tab; | ||
| })(); | ||
|
|
||
| $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
| event.preventDefault(); | ||
| Tab._jQueryInterface.call($(this), 'show'); | ||
| }); | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * jQuery | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| $.fn[NAME] = Tab._jQueryInterface; | ||
| $.fn[NAME].Constructor = Tab; | ||
| $.fn[NAME].noConflict = function () { | ||
| $.fn[NAME] = JQUERY_NO_CONFLICT; | ||
| return Tab._jQueryInterface; | ||
| }; | ||
|
|
||
| return Tab; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Tab; | ||
| }); |
| @@ -0,0 +1,172 @@ | ||
| (function (global, factory) { | ||
| if (typeof define === 'function' && define.amd) { | ||
| define(['exports', 'module'], factory); | ||
| } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { | ||
| factory(exports, module); | ||
| } else { | ||
| var mod = { | ||
| exports: {} | ||
| }; | ||
| factory(mod.exports, mod); | ||
| global.util = mod.exports; | ||
| } | ||
| })(this, function (exports, module) { | ||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Bootstrap (v4.0.0): util.js | ||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| 'use strict'; | ||
|
|
||
| var Util = (function ($) { | ||
|
|
||
| /** | ||
| * ------------------------------------------------------------------------ | ||
| * Private TransitionEnd Helpers | ||
| * ------------------------------------------------------------------------ | ||
| */ | ||
|
|
||
| var transition = false; | ||
|
|
||
| var TransitionEndEvent = { | ||
| WebkitTransition: 'webkitTransitionEnd', | ||
| MozTransition: 'transitionend', | ||
| OTransition: 'oTransitionEnd otransitionend', | ||
| transition: 'transitionend' | ||
| }; | ||
|
|
||
| // shoutout AngusCroll (https://goo.gl/pxwQGp) | ||
| function toType(obj) { | ||
| return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); | ||
| } | ||
|
|
||
| function isElement(obj) { | ||
| return (obj[0] || obj).nodeType; | ||
| } | ||
|
|
||
| function getSpecialTransitionEndEvent() { | ||
| return { | ||
| bindType: transition.end, | ||
| delegateType: transition.end, | ||
| handle: function handle(event) { | ||
| if ($(event.target).is(this)) { | ||
| return event.handleObj.handler.apply(this, arguments); | ||
| } | ||
| } | ||
| }; | ||
| } | ||
|
|
||
| function transitionEndTest() { | ||
| if (window.QUnit) { | ||
| return false; | ||
| } | ||
|
|
||
| var el = document.createElement('bootstrap'); | ||
|
|
||
| for (var _name in TransitionEndEvent) { | ||
| if (el.style[_name] !== undefined) { | ||
| return { end: TransitionEndEvent[_name] }; | ||
| } | ||
| } | ||
|
|
||
| return false; | ||
| } | ||
|
|
||
| function transitionEndEmulator(duration) { | ||
| var _this = this; | ||
|
|
||
| var called = false; | ||
|
|
||
| $(this).one(Util.TRANSITION_END, function () { | ||
| called = true; | ||
| }); | ||
|
|
||
| setTimeout(function () { | ||
| if (!called) { | ||
| Util.triggerTransitionEnd(_this); | ||
| } | ||
| }, duration); | ||
|
|
||
| return this; | ||
| } | ||
|
|
||
| function setTransitionEndSupport() { | ||
| transition = transitionEndTest(); | ||
|
|
||
| $.fn.emulateTransitionEnd = transitionEndEmulator; | ||
|
|
||
| if (Util.supportsTransitionEnd()) { | ||
| $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); | ||
| } | ||
| } | ||
|
|
||
| /** | ||
| * -------------------------------------------------------------------------- | ||
| * Public Util Api | ||
| * -------------------------------------------------------------------------- | ||
| */ | ||
|
|
||
| var Util = { | ||
|
|
||
| TRANSITION_END: 'bsTransitionEnd', | ||
|
|
||
| getUID: function getUID(prefix) { | ||
| do { | ||
| prefix += ~ ~(Math.random() * 1000000); | ||
| } while (document.getElementById(prefix)); | ||
| return prefix; | ||
| }, | ||
|
|
||
| getSelectorFromElement: function getSelectorFromElement(element) { | ||
| var selector = element.getAttribute('data-target'); | ||
|
|
||
| if (!selector) { | ||
| selector = element.getAttribute('href') || ''; | ||
| selector = /^#[a-z]/i.test(selector) ? selector : null; | ||
| } | ||
|
|
||
| return selector; | ||
| }, | ||
|
|
||
| reflow: function reflow(element) { | ||
| new Function('bs', 'return bs')(element.offsetHeight); | ||
| }, | ||
|
|
||
| triggerTransitionEnd: function triggerTransitionEnd(element) { | ||
| $(element).trigger(transition.end); | ||
| }, | ||
|
|
||
| supportsTransitionEnd: function supportsTransitionEnd() { | ||
| return Boolean(transition); | ||
| }, | ||
|
|
||
| typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { | ||
| for (var property in configTypes) { | ||
| if (configTypes.hasOwnProperty(property)) { | ||
| var expectedTypes = configTypes[property]; | ||
| var value = config[property]; | ||
| var valueType = undefined; | ||
|
|
||
| if (value && isElement(value)) { | ||
| valueType = 'element'; | ||
| } else { | ||
| valueType = toType(value); | ||
| } | ||
|
|
||
| if (!new RegExp(expectedTypes).test(valueType)) { | ||
| throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }; | ||
|
|
||
| setTransitionEndSupport(); | ||
|
|
||
| return Util; | ||
| })(jQuery); | ||
|
|
||
| module.exports = Util; | ||
| }); |
| @@ -0,0 +1,271 @@ | ||
| - | ||
| browser: > | ||
| Internet Explorer 11 & Microsoft Edge | ||
| summary: > | ||
| Hovered element still remains in `:hover` state after scrolling away. | ||
| upstream_bug: > | ||
| IE#926665 | ||
| origin: > | ||
| Bootstrap#14211 | ||
| - | ||
| browser: > | ||
| Internet Explorer 11 & Microsoft Edge | ||
| summary: > | ||
| When hovering over a `<select>` menu item, the cursor for the element underneath the menu is displayed. | ||
| upstream_bug: > | ||
| IE#963961 | ||
| origin: > | ||
| Bootstrap#14528 | ||
| - | ||
| browser: > | ||
| Internet Explorer 11 & Microsoft Edge | ||
| summary: > | ||
| CSS `border-radius` sometimes causes lines of bleed-through of the `background-color` of the parent element. | ||
| upstream_bug: > | ||
| IE#1463734 | ||
| origin: > | ||
| Bootstrap#16671 | ||
| - | ||
| browser: > | ||
| Firefox | ||
| summary: > | ||
| `.table-bordered` with an empty `<tbody>` is missing borders. | ||
| upstream_bug: > | ||
| Mozilla#1023761 | ||
| origin: > | ||
| Bootstrap#13453 | ||
| - | ||
| browser: > | ||
| Firefox | ||
| summary: > | ||
| `max-width: 100%;` doesn't work inside tables. | ||
| upstream_bug: > | ||
| Mozilla#975632 | ||
| origin: > | ||
| Bootstrap#10690 | ||
| - | ||
| browser: > | ||
| Firefox (Windows) | ||
| summary: > | ||
| Java applets that are descendants of elements with forced hardware acceleration using `translate3d(0,0,0)` are invisible. | ||
| upstream_bug: > | ||
| Mozilla#1048279 | ||
| origin: > | ||
| Bootstrap#14124 | ||
| - | ||
| browser: > | ||
| Firefox | ||
| summary: > | ||
| Button elements with `width: 100%` become cropped in long tables. | ||
| upstream_bug: > | ||
| Mozilla#1060131 | ||
| origin: > | ||
| Bootstrap#14320 | ||
| - | ||
| browser: > | ||
| Firefox | ||
| summary: > | ||
| If the disabled state of a form control is changed via JavaScript, the normal state doesn't return after refreshing the page. | ||
| upstream_bug: > | ||
| Mozilla#654072 | ||
| origin: > | ||
| Bootstrap#793 | ||
| - | ||
| browser: > | ||
| Chrome (OS X) | ||
| summary: > | ||
| Clicking above `<input type="number">` increment button flashes the decrement button. | ||
| upstream_bug: > | ||
| Chromium#419108 | ||
| origin: > | ||
| Offshoot of Bootstrap#8350 & Chromium#337668 | ||
| - | ||
| browser: > | ||
| Chrome (OS X) | ||
| summary: > | ||
| Caps Lock indicator not shown in `<input type="password">` with `display: block` | ||
| upstream_bug: > | ||
| Chromium#460200 | ||
| origin: > | ||
| Bootstrap#15832 | ||
| - | ||
| browser: > | ||
| Chrome | ||
| summary: > | ||
| Focus ring of image map within a modal is displayed in the wrong location. | ||
| upstream_bug: > | ||
| Chromium#475128 | ||
| origin: > | ||
| Bootstrap#16180 | ||
| - | ||
| browser: > | ||
| Chrome | ||
| summary: > | ||
| Incorrect viewport size used for media queries when printing. | ||
| upstream_bug: > | ||
| Chromium#273306 | ||
| origin: > | ||
| Bootstrap#12078 | ||
| - | ||
| browser: > | ||
| Chrome | ||
| summary: > | ||
| CSS infinite linear animation with alpha transparency leaks memory. | ||
| upstream_bug: > | ||
| Chromium#429375 | ||
| origin: > | ||
| Bootstrap#14409 | ||
| - | ||
| browser: > | ||
| Chrome | ||
| summary: > | ||
| `:focus` `outline` style causes cursor to not be displayed when toggling a `readonly` `<input>` to read-write. | ||
| upstream_bug: > | ||
| Chromium#465274 | ||
| origin: > | ||
| Bootstrap#16022 | ||
| - | ||
| browser: > | ||
| Chrome | ||
| summary: > | ||
| `width: 1%` on nested table cell causes its table to hog horizontal space. | ||
| upstream_bug: > | ||
| Chromium#427994 | ||
| origin: > | ||
| Bootstrap#16372 | ||
| - | ||
| browser: > | ||
| Chrome (Windows & Linux) | ||
| summary: > | ||
| Animation glitch when returning to inactive tab after animations occurred while tab was hidden. | ||
| upstream_bug: > | ||
| Chromium#449180 | ||
| origin: > | ||
| Bootstrap#15298 | ||
| - | ||
| browser: > | ||
| Safari | ||
| summary: > | ||
| `width: 1%` on nested table cell causes its table to hog horizontal space. | ||
| upstream_bug: > | ||
| WebKit#144696, Safari#20839572 | ||
| origin: > | ||
| Bootstrap#16372 | ||
| - | ||
| browser: > | ||
| Safari | ||
| summary: > | ||
| Incorrect placement of `position: fixed` element when it's a child of a `position: relative; left: X%;` element. | ||
| upstream_bug: > | ||
| WebKit#147284, Safari#21993128 | ||
| origin: > | ||
| Bootstrap#16814 | ||
| - | ||
| browser: > | ||
| Safari (OS X) | ||
| summary: > | ||
| Scrollbar clipped in `select[multiple]` with padding. | ||
| upstream_bug: > | ||
| WebKit#128489, Safari#19208483 | ||
| origin: > | ||
| Bootstrap#12536 | ||
| - | ||
| browser: > | ||
| Safari (OS X) | ||
| summary: > | ||
| Weird button behavior with some `<input type="number">` elements. | ||
| upstream_bug: > | ||
| WebKit#137269, Safari#18834768 | ||
| origin: > | ||
| Bootstrap#8350, | ||
| Normalize#283, | ||
| Chromium#337668 | ||
| - | ||
| browser: > | ||
| Safari (OS X) | ||
| summary: > | ||
| `display: table-cell;` within media query renders incorrectly when resizing the window. | ||
| upstream_bug: > | ||
| WebKit#138167, Safari#18987206 | ||
| origin: > | ||
| Bootstrap#9774 | ||
| - | ||
| browser: > | ||
| Safari (OS X) | ||
| summary: > | ||
| Small font size when printing webpage with fixed-width `.container`. | ||
| upstream_bug: > | ||
| WebKit#138192, Safari#19435018 | ||
| origin: > | ||
| Bootstrap#14868 | ||
| - | ||
| browser: > | ||
| Safari (OS X) | ||
| summary: > | ||
| Focus ring of image map within a modal is displayed in the wrong location. | ||
| upstream_bug: > | ||
| WebKit#143527, Safari#21908735 | ||
| origin: > | ||
| Bootstrap#16180 | ||
| - | ||
| browser: > | ||
| Safari (iOS) | ||
| summary: > | ||
| `transform: translate3d(0,0,0);` rendering bug. | ||
| upstream_bug: > | ||
| WebKit#138162, Safari#18804973 | ||
| origin: > | ||
| Bootstrap#14603 | ||
| - | ||
| browser: > | ||
| Safari (iOS) | ||
| summary: > | ||
| Text input's cursor doesn't move while scrolling the page. | ||
| upstream_bug: > | ||
| WebKit#138201, Safari#18819624 | ||
| origin: > | ||
| Bootstrap#14708 | ||
| - | ||
| browser: > | ||
| Safari (iOS) | ||
| summary: > | ||
| `display: block` causes text of temporal `<input>`s to become vertically misaligned | ||
| upstream_bug: > | ||
| WebKit#139848, Safari#19434878 | ||
| origin: > | ||
| Bootstrap#11266, Bootstrap#13098 | ||
| - | ||
| browser: > | ||
| Safari (iOS) | ||
| summary: > | ||
| Tapping below `<input>`s can focus them in some cases | ||
| upstream_bug: > | ||
| WebKit#146244, Safari#21509310 | ||
| origin: > | ||
| Bootstrap#15968 |
| @@ -0,0 +1,35 @@ | ||
| - name: Mark Otto | ||
| user: mdo | ||
| gravatar: bc4ab438f7a4ce1c406aadc688427f2c | ||
|
|
||
| - name: Jacob Thornton | ||
| user: fat | ||
| gravatar: a98244cbdacaf1c0b55499466002f7a8 | ||
|
|
||
| - name: Chris Rebert | ||
| user: cvrebert | ||
| gravatar: edec428c425453955f770095a7d26c50 | ||
|
|
||
| - name: Julian Thilo | ||
| user: juthilo | ||
| gravatar: 0f7dd3ce58a416be5685ea6194f82b11 | ||
|
|
||
| - name: XhmikosR | ||
| user: xhmikosr | ||
| gravatar: e37759b1ea0125d4e97b1e00b5eed26f | ||
|
|
||
| - name: Heinrich Fenkart | ||
| user: hnrch02 | ||
| gravatar: 0d53f5d3d3d28bd470f394d98f7ef48f | ||
|
|
||
| - name: Patrick H. Lauke | ||
| user: patrickhlauke | ||
| gravatar: 357f279672db832fc41a5a2f36559fcb | ||
|
|
||
| - name: Thomas McDonald | ||
| user: thomas-mcdonald | ||
| gravatar: 24cd55ab1a62ffb113ab8c02f64c9301 | ||
|
|
||
| - name: Gleb Mazovetskiy | ||
| user: glebm | ||
| gravatar: 729f685b8e8d7e9feed18c177c82e59b |
| @@ -0,0 +1,90 @@ | ||
| - title: Getting started | ||
| pages: | ||
| # - title: JavaScript | ||
| # - title: Accessibility | ||
| - title: Introduction | ||
| - title: Download | ||
| - title: Browsers & devices | ||
| - title: Options | ||
| - title: Flexbox | ||
| - title: Build tools | ||
| - title: Best practices | ||
|
|
||
| - title: Layout | ||
| pages: | ||
| - title: Overview | ||
| - title: Grid | ||
| - title: Media object | ||
| - title: Responsive utilities | ||
|
|
||
| - title: Content | ||
| pages: | ||
| - title: Reboot | ||
| - title: Typography | ||
| - title: Code | ||
| - title: Images | ||
| - title: Tables | ||
| - title: Figures | ||
|
|
||
| - title: Components | ||
| pages: | ||
| - title: Buttons | ||
| - title: Button group | ||
| - title: Button dropdown | ||
| - title: Forms | ||
| - title: Input group | ||
| - title: Dropdowns | ||
| - title: Jumbotron | ||
| - title: Label | ||
| - title: Alerts | ||
| - title: Card | ||
| - title: Navs | ||
| - title: Navbar | ||
| - title: Breadcrumb | ||
| - title: Pagination | ||
| - title: Progress | ||
| - title: List group | ||
| - title: Modal | ||
| - title: Scrollspy | ||
| - title: Tooltips | ||
| - title: Popovers | ||
| - title: Collapse | ||
| - title: Carousel | ||
| - title: Utilities | ||
|
|
||
| # - title: Examples | ||
| # pages: | ||
| # - title: Starter template | ||
| # - title: Grid | ||
| # - title: Jumbotron | ||
| # - title: Narrow jumbotron | ||
| # - title: Navbar | ||
| # - title: Navbar top | ||
| # - title: Navbar top fixed | ||
| # - title: Cover | ||
| # - title: Album | ||
| # - title: Carousel | ||
| # - title: Blog | ||
| # - title: Dashboard | ||
| # - title: Sign-in page | ||
| # - title: Justified nav | ||
| # - title: Sticky footer | ||
| # - title: Sticky footer with navbar | ||
| # - title: Offcanvas | ||
|
|
||
| # - title: Extend | ||
| # pages: | ||
| # - title: Approach | ||
| # - title: Icon fonts | ||
|
|
||
| - title: About | ||
| pages: | ||
| # - title: JavaScript | ||
| # - title: Accessibility | ||
| - title: History | ||
| - title: Team | ||
| - title: Brand | ||
| - title: License | ||
| - title: Translations | ||
|
|
||
| - title: Migration |
| @@ -0,0 +1,19 @@ | ||
| - name: Lyft | ||
| url: https://www.lyft.com | ||
| expo_url: http://expo.getbootstrap.com/2014/10/29/lyft/ | ||
| img: lyft | ||
|
|
||
| - name: Vogue | ||
| url: http://www.vogue.com | ||
| expo_url: http://expo.getbootstrap.com/2014/09/30/vogue/ | ||
| img: vogue | ||
|
|
||
| - name: Riot Design | ||
| url: http://riotdesign.eu/en/ | ||
| expo_url: http://expo.getbootstrap.com/2014/03/13/riot-design/ | ||
| img: riot | ||
|
|
||
| - name: Newsweek | ||
| url: http://www.newsweek.com/ | ||
| expo_url: http://expo.getbootstrap.com/2014/02/12/newsweek/ | ||
| img: newsweek |
| @@ -0,0 +1,59 @@ | ||
| - name: Chinese | ||
| code: zh | ||
| description: Bootstrap 中文文档 | ||
| url: http://v3.bootcss.com/ | ||
|
|
||
| - name: Danish | ||
| code: da | ||
| description: Bootstrap på Dansk | ||
| url: http://getbootstrap.dk/ | ||
|
|
||
| - name: French | ||
| code: fr | ||
| description: Bootstrap en Français | ||
| url: http://www.oneskyapp.com/fr/docs/bootstrap/getting-started/ | ||
|
|
||
| - name: German | ||
| code: de | ||
| description: Bootstrap auf Deutsch | ||
| url: http://holdirbootstrap.de/ | ||
|
|
||
| - name: Italian | ||
| code: it | ||
| description: Bootstrap in Italiano | ||
| url: http://www.hackerstribe.com/guide/IT-bootstrap-3.1.1/ | ||
|
|
||
| - name: Korean | ||
| code: ko | ||
| description: Bootstrap 한국어 | ||
| url: http://bootstrapk.com/ | ||
|
|
||
| - name: Brazilian Portuguese | ||
| code: pt-BR | ||
| description: Bootstrap em Português do Brasil | ||
| url: http://bootstrapbrasil.github.io/ | ||
|
|
||
| - name: Russian | ||
| code: ru | ||
| description: Bootstrap по-русски | ||
| url: http://www.oneskyapp.com/ru/docs/bootstrap/ | ||
|
|
||
| - name: Spanish | ||
| code: es | ||
| description: Bootstrap en Español | ||
| url: http://www.oneskyapp.com/es/docs/bootstrap/ | ||
|
|
||
| - name: Turkish | ||
| code: tr | ||
| description: Türkçe Bootstrap | ||
| url: http://www.trbootstrap.com | ||
|
|
||
| - name: Ukrainian | ||
| code: uk | ||
| description: Bootstrap українською | ||
| url: http://twbs.docs.org.ua | ||
|
|
||
| - name: Vietnamese | ||
| code: vi | ||
| description: Bootstrap bằng tiếng Việt | ||
| url: http://getbootstrap.com.vn |
| @@ -0,0 +1 @@ | ||
| <div id="carbonads-container"><div class="carbonad"><div id="azcarbon"></div><script>var z = document.createElement("script"); z.async = true; z.src = "http://engine.carbonads.com/z/32341/azcarbon_2_1_0_HORIZ"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(z, s);</script></div></div> |