Compare commits

...

193 Commits

Author SHA1 Message Date
XhmikosR 8fa0d30101 Release v4.3.1. (#28252) 2019-02-13 18:01:40 +02:00
XhmikosR dae20da750 Remove unneeded glob. (#28249)
Typo from 10b97f6.
2019-02-13 15:21:04 +02:00
XhmikosR 10b97f6ed9 Fix npm package contents 2019-02-13 08:32:15 +02:00
Johann-S 7bc4d2e0bc Add sanitize template option for tooltip/popover plugins. 2019-02-13 08:32:15 +02:00
Martijn Cuppens bf2515ae68 Update RFS to v8.0.1 (#28245)
Remove warning if RFS is included more than once.
2019-02-12 22:49:12 +01:00
Martijn Cuppens 45ced606f4 Update font size (#28232) 2019-02-12 09:38:42 +02:00
Mark Otto 1ded0d6a4e Release v4.3.0 (#28228)
* Prep for v4.3.0

* More updates for v4.3.0.

* rerun to build docs source map
2019-02-11 11:15:34 -08:00
XhmikosR 3aa0770b71 docs snippets: a few more minor tweaks (#28225)
* Remove extra comma.

* Use curly braces in snippet.
2019-02-11 11:34:02 +02:00
XhmikosR adf16da25e toasts.md: Remove useless divs.
Instead pass the class to the example include.
2019-02-11 08:54:17 +02:00
XhmikosR 2bfe581eeb Remove stray parameter from capture. 2019-02-11 08:54:17 +02:00
XhmikosR bbf8b768ef Cosmetic changes in snippets. 2019-02-11 08:54:17 +02:00
XhmikosR 7a9a8db7b1 docs: remove -ms-overflow-style: -ms-autohiding-scrollbar (#28220)
Similar to #28153
2019-02-10 22:13:13 +02:00
XhmikosR 24253b18e1 migration.md: use https. (#28221) 2019-02-10 22:05:16 +02:00
Martijn Cuppens 545f3fa921 Prevent text selection in placeholder images (#28218) 2019-02-09 14:21:41 +02:00
XhmikosR 94acdee691 Revert "Silence mkdir. (#28184)" (#28209)
This reverts commit 6ea000d2bc.

Unfortunately, it doesn't seem to work.
2019-02-09 13:20:02 +02:00
XhmikosR 6c7dcc6882 placeholder.svg: Partially revert the changes from c0e42cb. (#28216)
It broke the example include.
2019-02-09 13:10:29 +02:00
XhmikosR 1145365f6d Reword footer text. 2019-02-08 22:51:45 +02:00
XhmikosR bd328bf217 Use the site.repo variable. 2019-02-08 22:51:45 +02:00
XhmikosR a920429089 Change footer link to point to the docs team page 2019-02-08 22:51:45 +02:00
XhmikosR c56b10c147 Offcanvas example: transition the transform (#28203)
This is more efficient than transitioning the `left` property.
2019-02-08 18:08:40 +02:00
XhmikosR 52e6ce4512 Update devDependencies. (#28175) 2019-02-08 09:39:03 +02:00
Shohei Yoshida 93dec4c67c Fix scrollable modal snippet 2019-02-07 21:33:25 -08:00
Martijn Cuppens 51375abca5 Responsive font size implementation (#23816) 2019-02-07 23:32:05 +01:00
Shohei Yoshida d250567ce0 Remove -ms-autohiding-scrollbar to prevent overlapping the table content (#28153) 2019-02-07 19:52:23 +02:00
Martijn Cuppens 8b41cb1368 Optional btn & input font sizes (#28068) 2019-02-07 19:47:24 +02:00
Martijn Cuppens 2ee8ecedf4 Deprecate img-retina() mixin (#28072) 2019-02-07 19:33:57 +02:00
Martijn Cuppens bcfb7ed159 Deprecate invisible() mixin (#28066) 2019-02-07 19:19:00 +02:00
XhmikosR c0e42cb89e Optimize and normalize SVGs. (#28200)
Mostly be consistent with the attributes' order and improve compression when possible.
2019-02-07 15:01:25 +02:00
XhmikosR 00df9177fc Make ToC's entries' color darker.
The previous was too light.
2019-02-07 11:53:47 +02:00
XhmikosR 3473b77527 Remove unused selector. 2019-02-07 11:53:47 +02:00
XhmikosR f663a86810 approach.md: Remove stray comma. 2019-02-07 11:53:47 +02:00
XhmikosR 30ddcafb2d Rename Screenreaders to "Screen readers".
No redirect is added because the next version will be a minor version bump.
2019-02-07 11:53:47 +02:00
XhmikosR f0eb29cd5e Remove ToC from pages when we don't have (m)any headers. 2019-02-07 11:53:47 +02:00
Zachary Welch b647dd0565 Add map-name param to _assert-starts-at-zero (#24986)
* Add map-name param to _assert-starts-at-zero

* Set default value for backwards compatibility
2019-02-07 10:19:38 +01:00
João Lucas eb1313d213 Create border-top-left-radius and border-bottom-right-radius mixins (#28100)
* Create border-top-left-radius mixin
* Create border-bottom-right-radius mixin
2019-02-07 09:02:05 +01:00
Martijn Cuppens 311d6dab68 Deprecate size mixin (#28067) 2019-02-07 08:21:47 +01:00
Martijn Cuppens 8f4f201424 Fix .nav-justified example (#28193) 2019-02-06 23:44:44 +02:00
Bardi Harborow b5fb4f7d6b Add text-decoration to .btn-link. (#28169) 2019-02-06 22:33:03 +01:00
Patrick H. Lauke b4cb48d9f3 Remove outdated reference to not-allowed cursor (#28188)
as this styling was removed back in https://github.com/twbs/bootstrap/commit/7056f702408a97f01cb32bc6075d88ec27cdcf52
2019-02-06 17:12:11 +02:00
Johann-S b54ddfda83 fix modal test to be sure we call getTransitionDurationFromElement 2019-02-06 15:01:13 +01:00
Johann-S 3c49467224 allow to override default toast options (#28186) 2019-02-06 15:19:04 +02:00
Martijn Cuppens 58470c0ac5 Fix text break in Firefox (#28063) 2019-02-06 12:38:13 +02:00
XhmikosR 6ea000d2bc Silence mkdir. (#28184)
This can fail if run in parallel.
2019-02-06 12:22:49 +02:00
Johann-S 11880109fc fix tabs, apply show class only when fade class is present (#28183) 2019-02-06 11:12:02 +01:00
XhmikosR 8217499640 carousel.md: Highlight the whole example for consistency. 2019-02-06 11:47:31 +02:00
XhmikosR c1ea5ac49a docs license header: split sentence in period. 2019-02-06 11:47:31 +02:00
XhmikosR 1131705f14 Add missing trailing slash. 2019-02-06 11:47:31 +02:00
Jason Golieb e44d0475e0 Move dropdown offset function logic into private function. (#28138) 2019-02-05 10:31:18 +02:00
XhmikosR 1139f62ca2 Adjust bundlesize limits. 2019-02-05 10:24:49 +02:00
Jason Golieb 8f6cffde97 Move offset function logic to a private function. 2019-02-05 10:24:49 +02:00
Jason Golieb 88a34aacbe Add support for tooltip offset option to be a function. 2019-02-05 10:24:49 +02:00
XhmikosR 1accd37aa0 examples: remove JS from blog and sticky footer. (#28173)
They don't use it.
2019-02-04 23:42:23 +02:00
Martijn Cuppens d4e782efab Fix dropdown radius if $dropdown-padding-y is not 0 (#28127) 2019-02-03 23:07:16 +02:00
Ryan Worth 1275e35336 Fix negative margin example (#28140)
Negative margin example wasn't displaying correctly due to border and background styling being applied directly to the `.col` element. Made a child element and applied the styling to it
2019-02-03 22:58:54 +02:00
Martijn Cuppens cbaf0c3f7c Change logo size (#28163) 2019-02-03 17:52:36 +02:00
XhmikosR f134d4ba01 components: redirect to the alerts page (#28147) 2019-01-30 21:52:42 +02:00
XhmikosR a60c595dc1 image-replacement.md: use three dots. 2019-01-29 17:21:11 +02:00
XhmikosR be5d3de1d6 Add missing trailing slash. 2019-01-29 17:21:11 +02:00
XhmikosR a93c71832b generate-sri.js: move object. 2019-01-29 17:21:11 +02:00
XhmikosR ffe05d3a9c analytics.html: use double quotes in src attribute. 2019-01-29 17:21:11 +02:00
XhmikosR 2adefeb055 build-tools.md: npm is written lowercase. 2019-01-29 17:21:11 +02:00
XhmikosR 4bec752345 migration.md: remove stray /. 2019-01-29 17:21:11 +02:00
Shohei Yoshida e65dccfc95 Fix custom select caret issue on IE (#28112) 2019-01-25 21:09:21 +01:00
Shohei Yoshida 0f8f84329b Fix validated custom select bg color (#28119) 2019-01-25 20:44:52 +01:00
Martijn Cuppens 6466a0461a Deprecate float mixins (#28104) 2019-01-24 22:51:36 +02:00
Martijn Cuppens 2749bf34de Add !important to .text-monospace utility class (#28064) 2019-01-24 22:42:42 +02:00
XhmikosR 3723613875 Update devDependencies and gems. (#28094) 2019-01-24 21:25:49 +02:00
Martijn Cuppens dfba588d0d Add default value for $ignore-warning (#28103) 2019-01-23 05:59:15 +02:00
Martijn Cuppens 5c56e9adff Add deprecate() mixin (#28092) 2019-01-22 20:55:23 +01:00
XhmikosR f7e8445f72 Add canonical URL. (#28093) 2019-01-21 14:59:51 +02:00
XhmikosR cf25028640 Fix approach redirect. (#28095) 2019-01-21 14:49:55 +02:00
Martijn Cuppens 59d040fcbb Make component colors configurable (#28035) 2019-01-20 23:38:29 +02:00
Shohei Yoshida de0bb1e052 Scrollable modal (#27769) 2019-01-20 23:28:16 +02:00
Martijn Cuppens 41f85b64bf Add ref to reason why min-width: 0; is added (#28061) 2019-01-20 23:23:05 +02:00
Johann-S 842da1ddc3 use absolute path to output lcov file for coveralls (#28075) 2019-01-17 11:06:43 +01:00
XhmikosR 3aeda9942d tests: use jQuery from node_modules. (#28059) 2019-01-15 18:01:40 +02:00
XhmikosR 0828b88563 Fix js-main script. (#28057) 2019-01-15 17:30:21 +02:00
Martijn Cuppens f1f740be09 Make progress animation respect $enable-transitions and prefers-reduced-motion media query
Make progress animation respect `$enable-transitions` and `prefers-reduced-motion` media query
2019-01-15 00:51:11 +00:00
Laussel Loïc 8eb8b8d3da Examples: add tabindex="-1" and aria-disabled="true" on disabled links 2019-01-14 23:29:51 +00:00
XhmikosR e2a6f297c0 Clean up .gitignore. (#28050) 2019-01-14 21:08:24 +02:00
Johann-S d51ee0dcf1 Fix Carousel's touch option to not add touch listeners when set to false (#28046) 2019-01-14 18:53:54 +02:00
Martijn Cuppens 3d350c3b34 Remove map-merge (#28033) 2019-01-13 16:35:00 -08:00
Martijn Cuppens d546cb8374 Cleanup popover arrows (#28008) 2019-01-13 16:29:37 -08:00
Martijn Cuppens 70f50f3079 Sync dropdown font size to base font size 2019-01-13 16:27:40 -08:00
Martijn Cuppens e57cdee6bc Sync dropdown font size with btn font size 2019-01-13 16:27:40 -08:00
Martijn Cuppens fd98e77cac Remove background from nested tables 2019-01-13 16:26:56 -08:00
Martijn Cuppens 93272f45f3 Add some margin below the buttons 2019-01-13 16:24:36 -08:00
Martijn Cuppens d09bd2e629 Fix background size y 2019-01-13 16:24:01 -08:00
Martijn Cuppens e2ac792bc7 Minify background property 2019-01-13 16:24:01 -08:00
Martijn Cuppens 50492b8840 Combine background properties into one 2019-01-13 16:23:32 -08:00
Martijn Cuppens 8db577bd51 Prevent useless property rendering 2019-01-13 16:22:25 -08:00
Martijn Cuppens 4b839b1c87 Don't render a background by default 2019-01-13 16:21:57 -08:00
Martijn Cuppens 5adcfe97f0 Prevent rendering of color property by default 2019-01-13 16:21:16 -08:00
Martijn Cuppens cd4964f345 Change comment heading title to Typography (#28032) 2019-01-14 01:59:51 +02:00
Martijn Cuppens b3226c1ccc Align toast variables (#28041) 2019-01-14 01:51:53 +02:00
Justin 8f5abf0ab0 Add new rounded sizes classes (#28011)
* update border-radius mixins

Add $enable-rounded as a keyword argument to border-raidus mixins

* Update rounded classes

- use border-radius mixins to repleace !important
- use true for $enable-rounded for rounded classes
- Add `.rounded-sm` and `.rounded-sm`  #27934

* update borders docs

* Revert touch of dist files

* Revert change of border-radius mixins

* use !important in border-radius utilies classes

* update border radius classes keep only rounded-lg and rounded-sm
2019-01-13 11:49:25 -08:00
Martijn Cuppens fd4d426e51 Change default custom select styles (#28027) 2019-01-13 09:52:46 +02:00
Martijn Cuppens e077ddbc6c Prevent wrapping if caret is included (#28029) 2019-01-13 09:43:52 +02:00
Mark Otto deea117293 Add form-validation-states Sass map (#27999) 2019-01-11 21:16:50 +02:00
Miha Eržen fd9dc1a0ca Fix input-height-inner wrongly calculated (#28018)
In a scenario where `$input-line-height` or `$input-font-size` are different than `$input-btn-line-height` and `$input-btn-font-size` the final `$input-height-inner` was wrongly calculated.
2019-01-11 14:22:14 +02:00
XhmikosR 746a057f0c Update devDependencies. (#28016) 2019-01-10 15:56:54 +02:00
XhmikosR ff4c35f566 Tighten bundlesize limits. (#28012) 2019-01-10 09:03:16 +02:00
Mark Otto 39b76861a7 npm run test to build dist files 2019-01-08 21:23:50 +02:00
XhmikosR 0e5d387f04 Examples: use {{ site.time | date: "%Y" }}.
Since they are being build, no point in hardcoding the year.
2019-01-08 21:23:50 +02:00
XhmikosR f11f56558b Bump copyright year to 2019. 2019-01-08 21:23:50 +02:00
wojtask9 46f34fd131 remove redundant loop from list-group-horizontal (#28005) 2019-01-08 20:18:36 +02:00
wojtask9 5dcf7cd3b7 box-shadow mixin fix (#28004) 2019-01-08 19:42:28 +02:00
Shohei Yoshida dc436427e9 Move z-index to .list-group-item-action and remove redundant text-decoration: none (#27996) 2019-01-08 06:59:49 +02:00
Martijn Cuppens 48fe2c23d3 Space fixes (#27997) 2019-01-08 06:46:29 +02:00
XhmikosR b23241480a Enable cache for stylelint. 2019-01-07 19:15:06 +02:00
XhmikosR 1213d06b2f Enable cache for ESLint. 2019-01-07 19:15:06 +02:00
XhmikosR cdece35bde Update devDependencies and gems. (#27981) 2019-01-07 18:57:52 +02:00
Martijn Cuppens 68062cfe60 Allow configuration of caret spacing and vertical alignment (#27994) 2019-01-07 18:28:21 +02:00
Martijn Cuppens 2b96e9adf1 remove screen from media query (#27985) 2019-01-07 18:18:43 +02:00
文翼 87cd64e3bf docs: use the twitter Jekyll variable everywhere (#27990) 2019-01-07 18:09:34 +02:00
Martijn Cuppens 8305114ab3 Blog example IE fix & minor tweaks (#27933) 2019-01-07 03:21:53 +02:00
Shohei Yoshida 92cc5a70d3 Fix incorrect responsive alignment of dropdown menu (#27873) 2019-01-07 03:12:51 +02:00
Vishnuprasad Venugopal ea9129c8ae fix border issue for nested card inside accordions (#27881) 2019-01-07 03:06:37 +02:00
Mark Otto e6b1eefc73 Add horizontal list group modifier (#27970)
Alternate take to #27683 that builds the modifier class based on min-width, such that list groups are stacked until the class's breakpoint is reached. This is less verbose, matches our primary responsive approach, and prevents an extra class. Unfortunately, I believe supporting flush list groups is too much code here, so I've skipped that and made a note in the docs.

Also added examples generate from our breakpoints data file with a protip for how to do equal width items.
2019-01-07 03:01:36 +02:00
wojtask9 42bed436e8 take account 'none' for box-shadow (#27972) 2019-01-07 02:52:39 +02:00
Martijn Cuppens cbc8a7273a Sync custom select focus state with custom control focus state 2019-01-07 02:48:04 +02:00
XhmikosR 849067d763 README.md: fix redirect. 2019-01-06 17:22:51 +02:00
XhmikosR d1067d7c35 Switch to our Stylelint config. (#27974) 2019-01-05 20:59:44 +02:00
XhmikosR f21b5f9e98 Remove unneeded stylelint disables. 2019-01-05 20:50:07 +02:00
XhmikosR fcb034828f stylelint: no need to specify syntax.
This speeds things up a bit because we don't spawn a new instance.
2019-01-05 20:02:00 +02:00
Martijn Cuppens 75ec03c2ab Run linters in parallel
This should speed up things a bit
2019-01-05 20:02:00 +02:00
XhmikosR 47610b0f8b Update postcss-cli to v6.1.1. 2019-01-05 00:36:31 +02:00
Mark Otto 1488a83b13 latest changes 2019-01-04 08:29:45 -08:00
Johann-S 89a73f100e carousel should not cycle when there is no data-ride on init (#27968) 2019-01-04 18:15:01 +02:00
XhmikosR d4b5b4b78c Update devDependencies and gems. 2019-01-04 14:22:23 +02:00
Mark Otto b478234cba Add note to the summary of important changes 2019-01-04 11:53:32 +02:00
Martijn Cuppens e1b990fb90 Move hand cursor for buttons to reboot 2019-01-04 11:53:32 +02:00
Martijn Cuppens 83dc45b31b Prevent select word wrap in Safari (#27932) 2019-01-04 11:40:10 +02:00
Florian Lacreuse c71b291cd9 Remove unnecessary brackets for consistency (#27966) 2019-01-03 20:59:18 +02:00
sabruss 6813653bb1 Fix Typo on docs (#27962) 2019-01-02 18:33:52 +02:00
XhmikosR bec34acbbe Add a few more redirects. 2018-12-31 02:20:08 +02:00
Martijn Cuppens e7336e7d7f Remove wrapping paragraph in readme (#27948) 2018-12-29 18:40:56 +02:00
Martijn Cuppens c0dfda964f Configurable display utility classes (#27917) 2018-12-29 04:54:58 +02:00
Martijn Cuppens 952374654c Fix custom select font sizes (#27929) 2018-12-29 04:44:35 +02:00
Martijn Cuppens 8eef162c44 Match input font size for .input-group-text (#27941) 2018-12-28 23:18:10 +02:00
XhmikosR ee09d96628 reboot: Fix comment (#27937) 2018-12-28 00:48:51 +02:00
Martijn Cuppens 8bf823e22d Fix form-feedback-icon-invalid color (#27935) 2018-12-27 23:05:29 +02:00
XhmikosR 501e8c0837 toasts: mention that positioning is manual. (#27931) 2018-12-27 21:41:14 +02:00
XhmikosR dc17c924e8 stretched-link.md: fix typo (#27918) 2018-12-24 16:34:30 +02:00
Martijn Cuppens 4a5217c4c7 Add Open Collective to header (#27916) 2018-12-23 22:24:25 +02:00
Mark Otto e4fe18e426 Add horizontal card example (#27906) 2018-12-23 15:00:51 +02:00
Johann-S 3bd9fb3649 getSelectorFromElement return null on bad selectors (#27912) 2018-12-23 14:30:35 +02:00
XhmikosR 7d5cb2df3a versions: sort from newer to older. (#27898) 2018-12-23 14:12:13 +02:00
XhmikosR 3c88ed7069 Fix 4:3 embed (#27910) 2018-12-23 13:58:58 +02:00
Martijn Cuppens 81e35985b8 Simplify card group css (#27901) 2018-12-23 09:19:07 +02:00
Martijn Cuppens 39b14c9806 Blacklist border-radius property (use mixin instead) (#27900) 2018-12-23 09:11:11 +02:00
Mark Otto 6a5a1b073d move to 4.2 2018-12-22 22:20:26 -08:00
XhmikosR de7a38250b Merge branch 'v4-dev' into stretched-link 2018-12-23 00:30:55 +02:00
XhmikosR 46f86df0bb bootstrap-stack.svg: remove unneeded space. 2018-12-22 23:54:21 +02:00
XhmikosR 3bdb363495 Remove obsolete redirects in examples. (#27897) 2018-12-22 22:07:37 +02:00
XhmikosR 74987d9591 Add two new meta tags for Algolia (#27902) 2018-12-22 21:58:06 +02:00
XhmikosR 74a2d93517 Merge branch 'v4-dev' into stretched-link 2018-12-22 18:32:28 +02:00
Jesse Mandel dee3ab427c Update nuspec and build script (#27894)
Update nuspec and build script to support `<license />` instead of the deprecated `<licenseUrl />`
2018-12-22 17:09:51 +02:00
Mark Otto f0e5cc3f41 Add a notes about multiple links/targets, remove multiple link example 2018-12-21 21:10:40 -08:00
XhmikosR 2dda0a22e4 Update devDependencies and gems. 2018-12-21 21:07:48 -08:00
Mark Otto 15be9d3277 Add variable for dropdown-divider-margin-y (#27857)
* Add variable for dropdown-divider-margin-y

For us to reassign the nav-divider-margin-y variable here, we have to rearrange some of the variables.

Fixes #26660.

* bump bundlesize
2018-12-21 20:59:40 -08:00
Mark Otto a8b0fabf0a Merge branch 'table-dark-colors' into v4-dev 2018-12-21 15:36:09 -08:00
Mark Otto d51b408d0f Merge branch 'text-break-util' into v4-dev 2018-12-21 15:35:55 -08:00
Mark Otto 2162cb1806 dist 2018-12-21 15:35:15 -08:00
Mark Otto fca7531897 Merge branch 'table-dark-colors' into v4-dev 2018-12-21 14:49:11 -08:00
Mark Otto cdcfd3b1e8 Merge branch 'text-break-util' into v4-dev 2018-12-21 14:47:52 -08:00
ysds 27d691c64c Prevent unnecessary css when $emphasized-link-hover-darken-percentage is 0 or 0% 2018-12-21 14:46:20 -08:00
Martijn Cuppens 20f49143fc Sync modal header & footer border colors with $border-color 2018-12-21 13:56:44 -08:00
Martijn Cuppens 8bc118acce Sync $table-border-color with $border-color 2018-12-21 13:56:11 -08:00
Shohei Yoshida cda3301d08 Use border-radius() mixin for toast 2018-12-21 13:55:44 -08:00
Martijn Cuppens fc841b0ceb #27135: themed link focus state & selector improvement (#27136) 2018-12-21 13:55:05 -08:00
Sam Tape 9d3930b6dd Apply arrow styles to direct descendants of bootstrap popover classes
With the current styles, it is not possible to nest a popover inside of
another popover if they have different placements because the arrow
styles of the parent popover will conflict with the arrow styles of the
child popover.
2018-12-21 13:54:29 -08:00
Mark Otto f6abb4976f Prevent checks from shrinking in inline forms (#27870)
Fixes #25336
2018-12-21 13:52:02 -08:00
Mark Otto 2e1d0fed00 Add table-hover-color variables (#27850)
* Add table-hover-color variables
Fixes #26465

* Put $table-color to use outside _variables.scss
2018-12-21 13:51:38 -08:00
Mark Otto 1449d041c8 Merge branch 'validation-support-list' into v4-dev 2018-12-21 13:48:53 -08:00
Mark Otto d9712b7bcd Merge branch 'table-hover-colors' into v4-dev 2018-12-21 13:48:44 -08:00
Mark Otto 3b843c37c1 Merge branch 'grid-vertical-alignment-ie-warning' into v4-dev 2018-12-21 13:48:19 -08:00
Mark Otto 9e4e94747b Bump to v4.2.1 (#27892) 2018-12-21 10:55:28 -08:00
Mark Otto f7bf353cdc Add docs for .text-break 2018-12-17 09:58:18 -08:00
Martijn Cuppens 353c8b4376 Update scss/utilities/_text.scss
Co-Authored-By: mdo <otto@github.com>
2018-12-17 09:48:06 -08:00
XhmikosR 901761a34b Merge branch 'v4-dev' into table-dark-colors 2018-12-17 00:20:56 +02:00
Mark Otto 540537c481 Add new .text-break utility for applying word-break: break-word 2018-12-16 13:23:33 -08:00
Mark Otto 4ad7ba7b23 List out what's supported in validation styles
Fixes #27169
2018-12-15 14:25:40 -08:00
Mark Otto 3b42a9ec5b Add table-hover-color variables
Fixes #26465
2018-12-15 14:01:09 -08:00
Mark Otto 9d05cc25cb Fixes #26468: Mention min-height issue in IE10/11 for flexbox vertical alignment 2018-12-15 13:51:20 -08:00
Mark Otto 236c7803cb Update site/docs/4.1/utilities/stretched-link.md
Co-Authored-By: MartijnCuppens <martijn.cuppens@gmail.com>
2018-12-15 20:18:55 +01:00
Mark Otto 470145bdca Update site/docs/4.1/utilities/stretched-link.md
Co-Authored-By: MartijnCuppens <martijn.cuppens@gmail.com>
2018-12-15 20:17:45 +01:00
Mark Otto 210d49ec05 Update site/docs/4.1/utilities/stretched-link.md
Co-Authored-By: MartijnCuppens <martijn.cuppens@gmail.com>
2018-12-15 20:15:03 +01:00
Mark Otto abd5a5e4bd Copy change
Co-Authored-By: MartijnCuppens <martijn.cuppens@gmail.com>
2018-12-15 20:14:42 +01:00
Mark Otto 35caac013c Copy change
Co-Authored-By: MartijnCuppens <martijn.cuppens@gmail.com>
2018-12-15 20:14:05 +01:00
Mark Otto f50f6e0355 Match .table-dark background-color to the -dark variable 2018-12-15 10:15:52 -08:00
XhmikosR e184c11618 Merge branch 'v4-dev' into stretched-link 2018-12-05 11:38:55 +02:00
Martijn Cuppens 3007d4b435 Stretched link 2018-12-04 21:22:12 +01:00
379 changed files with 4942 additions and 3192 deletions
+2
View File
@@ -2,3 +2,5 @@
**/dist/
**/vendor/
/_gh_pages/
/js/coverage/
/package.js
+9 -13
View File
@@ -1,13 +1,12 @@
# Ignore docs files
_gh_pages
_site
site/docs/**/dist/
/_gh_pages/
/site/.jekyll-metadata
/site/docs/**/dist/
# Ignore ruby files
.ruby-version
.bundle
vendor/cache
vendor/bundle
# Ignore ruby/bundler files
/.bundle/
/vendor/
/.ruby-version
# Numerous always-ignore extensions
*.diff
@@ -39,9 +38,6 @@ Thumbs.db
.komodotools
*.komodoproject
# Jekyll metadata
docs/.jekyll-metadata
# Folders to ignore
node_modules
js/coverage
/js/coverage/
/node_modules/
+4 -310
View File
@@ -1,321 +1,15 @@
{
"extends": [
"stylelint-config-standard",
"stylelint-config-recommended-scss"
],
"plugins": [
"stylelint-order"
"stylelint-config-twbs-bootstrap/scss"
],
"rules": {
"at-rule-empty-line-before": null,
"at-rule-name-space-after": "always",
"at-rule-no-unknown": null,
"at-rule-no-vendor-prefix": true,
"at-rule-semicolon-space-before": "never",
"block-closing-brace-empty-line-before": null,
"block-closing-brace-newline-after": null,
"block-opening-brace-space-before": null,
"color-named": "never",
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-newline-before": "never-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-empty-line-before": null,
"declaration-no-important": true,
"font-family-name-quotes": "always-where-recommended",
"font-weight-notation": [
"numeric",
{
"ignore": [
"relative"
]
}
],
"function-url-no-scheme-relative": true,
"function-url-quotes": "always",
"length-zero-no-unit": true,
"max-empty-lines": 2,
"max-line-length": null,
"media-feature-name-no-unknown": [
true,
{
"ignoreMediaFeatureNames": [
"prefers-reduced-motion"
]
}
],
"media-feature-name-no-vendor-prefix": true,
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "never",
"no-descending-specificity": null,
"no-duplicate-selectors": true,
"number-leading-zero": "never",
"order/properties-order": [
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"box-sizing",
"display",
"flex",
"flex-align",
"flex-basis",
"flex-direction",
"flex-wrap",
"flex-flow",
"flex-shrink",
"flex-grow",
"flex-order",
"flex-pack",
"align-content",
"align-items",
"align-self",
"justify-content",
"order",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"-ms-overflow-x",
"-ms-overflow-y",
"-ms-overflow-style",
"columns",
"column-count",
"column-fill",
"column-gap",
"column-rule",
"column-rule-width",
"column-rule-style",
"column-rule-color",
"column-span",
"column-width",
"orphans",
"widows",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"src",
"hyphens",
"line-height",
"color",
"text-align",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"-webkit-text-size-adjust",
"-ms-text-size-adjust",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"overflow-wrap",
"tab-size",
"white-space",
"vertical-align",
"direction",
"unicode-bidi",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"-ms-touch-action",
"touch-action",
"cursor",
"visibility",
"zoom",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"background-color",
"background-image",
"filter",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"background-clip",
"background-origin",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"property-blacklist": [
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"border-image",
"border-image-source",
"border-image-slice",
"border-image-width",
"border-image-outset",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"box-shadow",
"opacity",
"-ms-interpolation-mode",
"page-break-after",
"page-break-before",
"page-break-inside",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"transform",
"transform-origin",
"perspective",
"appearance",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode",
"fill",
"stroke"
],
"property-blacklist": ["transition"],
"property-no-vendor-prefix": true,
"rule-empty-line-before": null,
"scss/at-function-named-arguments": "never",
"scss/at-function-parentheses-space-before": "never",
"scss/at-import-no-partial-leading-underscore": true,
"scss/at-mixin-argumentless-call-parentheses": null,
"scss/at-mixin-named-arguments": null,
"scss/at-mixin-parentheses-space-before": "never",
"scss/at-rule-no-unknown": true,
"scss/dollar-variable-colon-space-after": "at-least-one-space",
"scss/dollar-variable-colon-space-before": "never",
"scss/dollar-variable-default": [
true,
{
"ignore": "local"
}
],
"scss/dollar-variable-no-missing-interpolation": true,
"scss/media-feature-value-dollar-variable": null,
"scss/no-duplicate-dollar-variables": [
null,
{
"ignoreInsideAtRules": [
"if",
"mixin"
]
}
],
"scss/operator-no-newline-after": true,
"scss/operator-no-newline-before": true,
"scss/operator-no-unspaced": true,
"selector-attribute-quotes": "always",
"selector-class-pattern": "^[a-z][a-z0-9\\-]*[a-z0-9]$",
"selector-list-comma-newline-after": "always",
"selector-list-comma-newline-before": "never-multi-line",
"selector-list-comma-space-after": "always-single-line",
"selector-list-comma-space-before": "never-single-line",
"selector-max-attribute": 2,
"selector-max-class": 4,
"selector-max-combinators": 4,
"selector-max-compound-selectors": 4,
"selector-max-empty-lines": 1,
"selector-max-id": 0,
"selector-max-specificity": null,
"selector-max-type": 2,
"selector-max-universal": 1,
"selector-no-qualifying-type": true,
"selector-no-vendor-prefix": true,
"shorthand-property-no-redundant-values": true,
"string-quotes": "double",
"value-keyword-case": "lower",
"value-list-comma-newline-after": "never-multi-line",
"value-list-comma-newline-before": "never-multi-line",
"value-list-comma-space-after": "always",
"value-no-vendor-prefix": true
"transition"
]
}
}
+13 -13
View File
@@ -1,17 +1,17 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.5.2)
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
colorator (1.1.0)
concurrent-ruby (1.1.3)
concurrent-ruby (1.1.4)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
ffi (1.9.25)
ffi (1.9.25-x64-mingw32)
ffi (1.10.0)
ffi (1.10.0-x64-mingw32)
forwardable-extended (2.6.0)
http_parser.rb (0.6.0)
i18n (0.9.5)
@@ -46,21 +46,21 @@ GEM
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
mini_portile2 (2.3.0)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
nokogiri (1.8.5-x64-mingw32)
mini_portile2 (~> 2.3.0)
mini_portile2 (2.4.0)
nokogiri (1.10.1)
mini_portile2 (~> 2.4.0)
nokogiri (1.10.1-x64-mingw32)
mini_portile2 (~> 2.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (3.0.3)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rb-inotify (0.10.0)
ffi (~> 1.0)
rouge (3.3.0)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.7.2)
sass (3.7.3)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
@@ -79,4 +79,4 @@ DEPENDENCIES
wdm (~> 0.1.1)
BUNDLED WITH
1.17.1
1.17.3
+2 -2
View File
@@ -1,7 +1,7 @@
The MIT License (MIT)
Copyright (c) 2011-2018 Twitter, Inc.
Copyright (c) 2011-2018 The Bootstrap Authors
Copyright (c) 2011-2019 Twitter, Inc.
Copyright (c) 2011-2019 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+26 -25
View File
@@ -1,24 +1,24 @@
<p align="center">
<a href="https://getbootstrap.com/">
<img src="https://getbootstrap.com/docs/4.2/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width=72 height=72>
<img src="https://getbootstrap.com/docs/4.3/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width="72" height="72">
</a>
</p>
<h3 align="center">Bootstrap</h3>
<h3 align="center">Bootstrap</h3>
<p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br>
<a href="https://getbootstrap.com/docs/4.2/"><strong>Explore Bootstrap docs »</strong></a>
<br>
<br>
<a href="https://github.com/twbs/bootstrap/issues/new?template=bug.md">Report bug</a>
·
<a href="https://github.com/twbs/bootstrap/issues/new?template=feature.md&labels=feature">Request feature</a>
·
<a href="https://themes.getbootstrap.com/">Themes</a>
·
<a href="https://blog.getbootstrap.com/">Blog</a>
</p>
<p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br>
<a href="https://getbootstrap.com/docs/4.3/"><strong>Explore Bootstrap docs »</strong></a>
<br>
<br>
<a href="https://github.com/twbs/bootstrap/issues/new?template=bug.md">Report bug</a>
·
<a href="https://github.com/twbs/bootstrap/issues/new?template=feature.md&labels=feature">Request feature</a>
·
<a href="https://themes.getbootstrap.com/">Themes</a>
·
<a href="https://blog.getbootstrap.com/">Blog</a>
</p>
@@ -41,14 +41,14 @@
Several quick start options are available:
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.2.0.zip)
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.3.1.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.2.0`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.2.0`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.3.1`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.3.1`
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
Read the [Getting started page](https://getbootstrap.com/docs/4.2/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
Read the [Getting started page](https://getbootstrap.com/docs/4.3/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
## Status
@@ -101,7 +101,7 @@ bootstrap/
└── bootstrap.min.js.map
```
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). [source maps](https://developers.google.com/web/tools/chrome-devtools/debug/readability/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`bootstrap.bundle.js` and minified `bootstrap.bundle.min.js`) include [Popper](https://popper.js.org/), but not [jQuery](https://jquery.com/).
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`bootstrap.bundle.js` and minified `bootstrap.bundle.min.js`) include [Popper](https://popper.js.org/), but not [jQuery](https://jquery.com/).
## Bugs and feature requests
@@ -113,11 +113,11 @@ Have a bug or a feature request? Please first read the [issue guidelines](https:
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.2/assets/js/src/search.js` file.
Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.3/assets/js/src/search.js` file.
### Running documentation locally
1. Run through the [tooling setup](https://getbootstrap.com/docs/4.2/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
1. Run through the [tooling setup](https://getbootstrap.com/docs/4.3/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
2. Run `npm install` to install Node.js dependencies.
3. Run `npm start` to compile CSS and JavaScript files, generate our docs, and watch for changes.
4. Open `http://localhost:9001` in your browser, and voilà.
@@ -131,6 +131,7 @@ Learn more about using Jekyll by reading its [documentation](https://jekyllrb.co
- For v3.4.0: <https://getbootstrap.com/docs/3.4/>
- For v4.0.x: <https://getbootstrap.com/docs/4.0/>
- For v4.1.x: <https://getbootstrap.com/docs/4.1/>
- For v4.2.x: <https://getbootstrap.com/docs/4.2/>
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
@@ -179,7 +180,7 @@ See [the Releases section of our GitHub project](https://github.com/twbs/bootstr
## Thanks
<a href="https://www.browserstack.com/">
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="490" height="106">
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="192" height="42">
</a>
Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers!
@@ -210,4 +211,4 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
## Copyright and license
Code and documentation copyright 2011-2018 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) 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).
Code and documentation copyright 2011-2019 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) 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).
+17 -16
View File
@@ -17,7 +17,7 @@ baseurl: ""
url: "https://getbootstrap.com"
encoding: UTF-8
exclude:
- docs/4.2/assets/scss/
- docs/4.3/assets/scss/
plugins:
- jekyll-redirect-from
@@ -29,35 +29,36 @@ title: Bootstrap
description: "The most popular HTML, CSS, and JS library in the world."
twitter: getbootstrap
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
social_image_path: /docs/4.2/assets/brand/bootstrap-social.png
social_logo_path: /docs/4.2/assets/brand/bootstrap-social-logo.png
social_image_path: /docs/4.3/assets/brand/bootstrap-social.png
social_logo_path: /docs/4.3/assets/brand/bootstrap-social-logo.png
# Custom variables
current_version: 4.2.0
current_ruby_version: 4.2.0
docs_version: 4.2
current_version: 4.3.1
current_ruby_version: 4.3.1
docs_version: 4.3
repo: "https://github.com/twbs/bootstrap"
slack: "https://bootstrap-slack.herokuapp.com"
opencollective: "https://opencollective.com/bootstrap"
blog: "https://blog.getbootstrap.com"
expo: "https://expo.getbootstrap.com"
themes: "https://themes.getbootstrap.com"
download:
source: "https://github.com/twbs/bootstrap/archive/v4.2.0.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v4.2.0/bootstrap-4.2.0-dist.zip"
source: "https://github.com/twbs/bootstrap/archive/v4.3.1.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v4.3.1/bootstrap-4.3.1-dist.zip"
cdn:
# See https://www.srihash.org for info on how to generate the hashes
css: "https://stackpath.bootstrapcdn.com/bootstrap/4.2.0/css/bootstrap.min.css"
css_hash: "sha384-SlJL6LojdN8eNCOoIfK7KJ7SgRFeYBDu8tB1uxELbSAv+RVgD12pZmOcxTUTPXIg"
js: "https://stackpath.bootstrapcdn.com/bootstrap/4.2.0/js/bootstrap.min.js"
js_hash: "sha384-1AHwFvFDF+iQPDBasw2LKa8PdkI8aYv2ad2o197DHC8qr4LuwSe44JY1THkowrqg"
js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.2.0/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-DzxYXig+LjvgMPAmuesvYZSTCE+bYqgfCLpnqxglyMvZGL5gNcalAK2mVo9klgWS"
css: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
css_hash: "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
js: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
js_hash: "sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o"
jquery: "https://code.jquery.com/jquery-3.3.1.slim.min.js"
jquery_hash: "sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"
popper_hash: "sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut"
popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
popper_hash: "sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
toc:
min_level: 2
+2 -2
View File
@@ -1,7 +1,7 @@
/*!
* Script to build our plugins to use them separately.
* Copyright 2018 The Bootstrap Authors
* Copyright 2018 Twitter, Inc.
* Copyright 2019 The Bootstrap Authors
* Copyright 2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
+2 -2
View File
@@ -2,8 +2,8 @@
/*!
* Script to update version number references in the project.
* Copyright 2017-2018 The Bootstrap Authors
* Copyright 2017-2018 Twitter, Inc.
* Copyright 2017-2019 The Bootstrap Authors
* Copyright 2017-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
+6 -6
View File
@@ -5,8 +5,8 @@
* Remember to use the same vendor files as the CDN ones,
* otherwise the hashes won't match!
*
* Copyright 2017-2018 The Bootstrap Authors
* Copyright 2017-2018 Twitter, Inc.
* Copyright 2017-2019 The Bootstrap Authors
* Copyright 2017-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
@@ -35,14 +35,14 @@ const files = [
file: 'dist/js/bootstrap.min.js',
configPropertyName: 'js_hash'
},
{
file: `site/docs/${pkg.version_short}/assets/js/vendor/jquery-slim.min.js`,
configPropertyName: 'jquery_hash'
},
{
file: 'dist/js/bootstrap.bundle.min.js',
configPropertyName: 'js_bundle_hash'
},
{
file: `site/docs/${pkg.version_short}/assets/js/vendor/jquery-slim.min.js`,
configPropertyName: 'jquery_hash'
},
{
file: 'node_modules/popper.js/dist/umd/popper.min.js',
configPropertyName: 'popper_hash'
+2 -2
View File
@@ -2,8 +2,8 @@
/*!
* Script to run vnu-jar if Java is available.
* Copyright 2017-2018 The Bootstrap Authors
* Copyright 2017-2018 Twitter, Inc.
* Copyright 2017-2019 The Bootstrap Authors
* Copyright 2017-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
+3 -3
View File
@@ -1,7 +1,7 @@
/*!
* Bootstrap Grid v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Bootstrap Grid v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
html {
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+15 -3
View File
@@ -1,7 +1,7 @@
/*!
* Bootstrap Reboot v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
@@ -60,6 +60,7 @@ abbr[data-original-title] {
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
@@ -225,6 +226,10 @@ select {
text-transform: none;
}
select {
word-wrap: normal;
}
button,
[type="button"],
[type="reset"],
@@ -232,6 +237,13 @@ button,
-webkit-appearance: button;
}
button:not(:disabled),
[type="button"]:not(:disabled),
[type="reset"]:not(:disabled),
[type="submit"]:not(:disabled) {
cursor: pointer;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -1,8 +1,8 @@
/*!
* Bootstrap Reboot v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
File diff suppressed because one or more lines are too long
+378 -227
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+302 -107
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
(factory((global.bootstrap = {}),global.jQuery));
}(this, (function (exports,$) { 'use strict';
(global = global || self, factory(global.bootstrap = {}, global.jQuery));
}(this, function (exports, $) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
@@ -69,7 +69,7 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): util.js
* Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -145,7 +145,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
}
return selector && document.querySelector(selector) ? selector : null;
try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
},
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
@@ -225,7 +229,7 @@
*/
var NAME = 'alert';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -280,8 +284,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}; // Private
} // Private
;
_proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -323,8 +327,8 @@
_proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove();
}; // Static
} // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -390,7 +394,7 @@
*/
var NAME$1 = 'button';
var VERSION$1 = '4.2.0';
var VERSION$1 = '4.3.1';
var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api';
@@ -476,8 +480,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$1);
this._element = null;
}; // Static
} // Static
;
Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -544,7 +548,7 @@
*/
var NAME$2 = 'carousel';
var VERSION$2 = '4.2.0';
var VERSION$2 = '4.3.1';
var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api';
@@ -739,8 +743,8 @@
this._isSliding = null;
this._activeElement = null;
this._indicatorsElement = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config);
@@ -784,7 +788,9 @@
});
}
this._addTouchEventListeners();
if (this._config.touch) {
this._addTouchEventListeners();
}
};
_proto._addTouchEventListeners = function _addTouchEventListeners() {
@@ -1025,8 +1031,8 @@
if (isCycling) {
this.cycle();
}
}; // Static
} // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -1053,7 +1059,7 @@
}
data[action]();
} else if (_config.interval) {
} else if (_config.interval && _config.ride) {
data.pause();
data.cycle();
}
@@ -1142,7 +1148,7 @@
*/
var NAME$3 = 'collapse';
var VERSION$3 = '4.2.0';
var VERSION$3 = '4.3.1';
var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api';
@@ -1364,8 +1370,8 @@
this._element = null;
this._triggerArray = null;
this._isTransitioning = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$1, config);
@@ -1409,8 +1415,8 @@
if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}
}; // Static
} // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -1497,7 +1503,7 @@
/**!
* @fileOverview Kickass library to create and place poppers near their reference elements.
* @version 1.14.6
* @version 1.14.7
* @license
* Copyright (c) 2016 Federico Zivolo and contributors
*
@@ -2065,7 +2071,11 @@
if (getStyleComputedProperty(element, 'position') === 'fixed') {
return true;
}
return isFixed(getParentNode(element));
var parentNode = getParentNode(element);
if (!parentNode) {
return false;
}
return isFixed(parentNode);
}
/**
@@ -2721,18 +2731,23 @@
var _data$offsets = data.offsets,
popper = _data$offsets.popper,
reference = _data$offsets.reference;
var round = Math.round,
floor = Math.floor;
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthOddness = reference.width % 2 === popper.width % 2;
var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1;
var noRound = function noRound(v) {
return v;
};
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor;
var verticalToInteger = !shouldRound ? noRound : Math.round;
var referenceWidth = round(reference.width);
var popperWidth = round(popper.width);
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
var verticalToInteger = !shouldRound ? noRound : round;
return {
left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
@@ -4072,7 +4087,7 @@
*/
var NAME$4 = 'dropdown';
var VERSION$4 = '4.2.0';
var VERSION$4 = '4.3.1';
var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api';
@@ -4301,8 +4316,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Private
} // Private
;
_proto._addEventListeners = function _addEventListeners() {
var _this = this;
@@ -4358,24 +4373,28 @@
return $(this._element).closest('.navbar').length > 0;
};
_proto._getPopperConfig = function _getPopperConfig() {
_proto._getOffset = function _getOffset() {
var _this2 = this;
var offsetConf = {};
var offset = {};
if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data;
};
} else {
offsetConf.offset = this._config.offset;
offset.offset = this._config.offset;
}
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = {
placement: this._getPlacement(),
modifiers: {
offset: offsetConf,
offset: this._getOffset(),
flip: {
enabled: this._config.flip
},
@@ -4393,8 +4412,8 @@
}
return popperConfig;
}; // Static
} // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -4478,8 +4497,8 @@
}
return parent || element.parentNode;
}; // eslint-disable-next-line complexity
} // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea:
@@ -4594,7 +4613,7 @@
*/
var NAME$5 = 'modal';
var VERSION$5 = '4.2.0';
var VERSION$5 = '4.3.1';
var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api';
@@ -4627,6 +4646,7 @@
CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
};
var ClassName$5 = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop',
OPEN: 'modal-open',
@@ -4635,6 +4655,7 @@
};
var Selector$5 = {
DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -4787,8 +4808,8 @@
_proto.handleUpdate = function handleUpdate() {
this._adjustDialog();
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$3, config);
@@ -4812,7 +4833,11 @@
this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0;
if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) {
Util.reflow(this._element);
@@ -4982,11 +5007,11 @@
} else if (callback) {
callback();
}
}; // ----------------------------------------------------------------------
} // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js
// ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@@ -5071,8 +5096,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}; // Static
} // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () {
@@ -5163,6 +5188,127 @@
return Modal._jQueryInterface;
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/**
* ------------------------------------------------------------------------
* Constants
@@ -5170,12 +5316,13 @@
*/
var NAME$6 = 'tooltip';
var VERSION$6 = '4.2.0';
var VERSION$6 = '4.3.1';
var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4 = {
animation: 'boolean',
template: 'string',
@@ -5185,10 +5332,13 @@
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)'
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
};
var AttachmentMap$1 = {
AUTO: 'auto',
@@ -5209,7 +5359,10 @@
offset: 0,
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent'
boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
};
var HoverState = {
SHOW: 'show',
@@ -5394,9 +5547,7 @@
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
offset: {
offset: this.config.offset
},
offset: this._getOffset(),
flip: {
behavior: this.config.fallbackPlacement
},
@@ -5505,8 +5656,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Protected
} // Protected
;
_proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle());
@@ -5528,19 +5679,27 @@
};
_proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery
if (html) {
if (this.config.html) {
if (!$(content).parent().is($element)) {
$element.empty().append(content);
}
} else {
$element.text($(content).text());
}
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else {
$element[html ? 'html' : 'text'](content);
$element.text(content);
}
};
@@ -5552,8 +5711,25 @@
}
return title;
}; // Private
} // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() {
if (this.config.container === false) {
@@ -5572,27 +5748,27 @@
};
_proto._setListeners = function _setListeners() {
var _this3 = this;
var _this4 = this;
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
return _this3.toggle(event);
$(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this4.toggle(event);
});
} else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) {
return _this3._enter(event);
}).on(eventOut, _this3.config.selector, function (event) {
return _this3._leave(event);
var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this4._enter(event);
}).on(eventOut, _this4.config.selector, function (event) {
return _this4._leave(event);
});
}
});
$(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) {
_this3.hide();
if (_this4.element) {
_this4.hide();
}
});
@@ -5691,7 +5867,13 @@
};
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});
var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') {
config.delay = {
@@ -5709,6 +5891,11 @@
}
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config;
};
@@ -5757,8 +5944,8 @@
this.hide();
this.show();
this.config.animation = initConfigAnimation;
}; // Static
} // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -5846,7 +6033,7 @@
*/
var NAME$7 = 'popover';
var VERSION$7 = '4.2.0';
var VERSION$7 = '4.3.1';
var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@@ -5929,8 +6116,8 @@
this.setElementContent($tip.find(Selector$7.CONTENT), content);
$tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
}; // Private
} // Private
;
_proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content;
@@ -5943,8 +6130,8 @@
if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join(''));
}
}; // Static
} // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -6033,7 +6220,7 @@
*/
var NAME$8 = 'scrollspy';
var VERSION$8 = '4.2.0';
var VERSION$8 = '4.3.1';
var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api';
@@ -6156,8 +6343,8 @@
this._targets = null;
this._activeTarget = null;
this._scrollHeight = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@@ -6264,8 +6451,8 @@
}).forEach(function (node) {
return node.classList.remove(ClassName$8.ACTIVE);
});
}; // Static
} // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -6340,7 +6527,7 @@
*/
var NAME$9 = 'tab';
var VERSION$9 = '4.2.0';
var VERSION$9 = '4.3.1';
var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api';
@@ -6448,8 +6635,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$9);
this._element = null;
}; // Private
} // Private
;
_proto._activate = function _activate(element, container, callback) {
var _this2 = this;
@@ -6491,7 +6678,10 @@
}
Util.reflow(element);
$(element).addClass(ClassName$9.SHOW);
if (element.classList.contains(ClassName$9.FADE)) {
element.classList.add(ClassName$9.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@@ -6507,8 +6697,8 @@
if (callback) {
callback();
}
}; // Static
} // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -6572,7 +6762,7 @@
*/
var NAME$a = 'toast';
var VERSION$a = '4.2.0';
var VERSION$a = '4.3.1';
var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@@ -6687,8 +6877,8 @@
$.removeData(this._element, DATA_KEY$a);
this._element = null;
this._config = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@@ -6721,8 +6911,8 @@
} else {
complete();
}
}; // Static
} // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -6756,6 +6946,11 @@
get: function get() {
return DefaultType$7;
}
}, {
key: "Default",
get: function get() {
return Default$7;
}
}]);
return Toast;
@@ -6777,7 +6972,7 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): index.js
* Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -6814,5 +7009,5 @@
Object.defineProperty(exports, '__esModule', { value: true });
})));
}));
//# sourceMappingURL=bootstrap.bundle.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+287 -101
View File
@@ -1,16 +1,16 @@
/*!
* Bootstrap v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('popper.js'), require('jquery')) :
typeof define === 'function' && define.amd ? define(['exports', 'popper.js', 'jquery'], factory) :
(factory((global.bootstrap = {}),global.Popper,global.jQuery));
}(this, (function (exports,Popper,$) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
(global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
}(this, function (exports, $, Popper) { 'use strict';
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
@@ -70,7 +70,7 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): util.js
* Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -146,7 +146,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
}
return selector && document.querySelector(selector) ? selector : null;
try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
},
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
@@ -226,7 +230,7 @@
*/
var NAME = 'alert';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -281,8 +285,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}; // Private
} // Private
;
_proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -324,8 +328,8 @@
_proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove();
}; // Static
} // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -391,7 +395,7 @@
*/
var NAME$1 = 'button';
var VERSION$1 = '4.2.0';
var VERSION$1 = '4.3.1';
var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api';
@@ -477,8 +481,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$1);
this._element = null;
}; // Static
} // Static
;
Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -545,7 +549,7 @@
*/
var NAME$2 = 'carousel';
var VERSION$2 = '4.2.0';
var VERSION$2 = '4.3.1';
var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api';
@@ -740,8 +744,8 @@
this._isSliding = null;
this._activeElement = null;
this._indicatorsElement = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config);
@@ -785,7 +789,9 @@
});
}
this._addTouchEventListeners();
if (this._config.touch) {
this._addTouchEventListeners();
}
};
_proto._addTouchEventListeners = function _addTouchEventListeners() {
@@ -1026,8 +1032,8 @@
if (isCycling) {
this.cycle();
}
}; // Static
} // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -1054,7 +1060,7 @@
}
data[action]();
} else if (_config.interval) {
} else if (_config.interval && _config.ride) {
data.pause();
data.cycle();
}
@@ -1143,7 +1149,7 @@
*/
var NAME$3 = 'collapse';
var VERSION$3 = '4.2.0';
var VERSION$3 = '4.3.1';
var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api';
@@ -1365,8 +1371,8 @@
this._element = null;
this._triggerArray = null;
this._isTransitioning = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$1, config);
@@ -1410,8 +1416,8 @@
if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}
}; // Static
} // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -1503,7 +1509,7 @@
*/
var NAME$4 = 'dropdown';
var VERSION$4 = '4.2.0';
var VERSION$4 = '4.3.1';
var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api';
@@ -1732,8 +1738,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Private
} // Private
;
_proto._addEventListeners = function _addEventListeners() {
var _this = this;
@@ -1789,24 +1795,28 @@
return $(this._element).closest('.navbar').length > 0;
};
_proto._getPopperConfig = function _getPopperConfig() {
_proto._getOffset = function _getOffset() {
var _this2 = this;
var offsetConf = {};
var offset = {};
if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data;
};
} else {
offsetConf.offset = this._config.offset;
offset.offset = this._config.offset;
}
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = {
placement: this._getPlacement(),
modifiers: {
offset: offsetConf,
offset: this._getOffset(),
flip: {
enabled: this._config.flip
},
@@ -1824,8 +1834,8 @@
}
return popperConfig;
}; // Static
} // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -1909,8 +1919,8 @@
}
return parent || element.parentNode;
}; // eslint-disable-next-line complexity
} // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea:
@@ -2025,7 +2035,7 @@
*/
var NAME$5 = 'modal';
var VERSION$5 = '4.2.0';
var VERSION$5 = '4.3.1';
var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api';
@@ -2058,6 +2068,7 @@
CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
};
var ClassName$5 = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop',
OPEN: 'modal-open',
@@ -2066,6 +2077,7 @@
};
var Selector$5 = {
DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -2218,8 +2230,8 @@
_proto.handleUpdate = function handleUpdate() {
this._adjustDialog();
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$3, config);
@@ -2243,7 +2255,11 @@
this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0;
if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) {
Util.reflow(this._element);
@@ -2413,11 +2429,11 @@
} else if (callback) {
callback();
}
}; // ----------------------------------------------------------------------
} // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js
// ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@@ -2502,8 +2518,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}; // Static
} // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () {
@@ -2594,6 +2610,127 @@
return Modal._jQueryInterface;
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/**
* ------------------------------------------------------------------------
* Constants
@@ -2601,12 +2738,13 @@
*/
var NAME$6 = 'tooltip';
var VERSION$6 = '4.2.0';
var VERSION$6 = '4.3.1';
var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4 = {
animation: 'boolean',
template: 'string',
@@ -2616,10 +2754,13 @@
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)'
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
};
var AttachmentMap$1 = {
AUTO: 'auto',
@@ -2640,7 +2781,10 @@
offset: 0,
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent'
boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
};
var HoverState = {
SHOW: 'show',
@@ -2825,9 +2969,7 @@
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
offset: {
offset: this.config.offset
},
offset: this._getOffset(),
flip: {
behavior: this.config.fallbackPlacement
},
@@ -2936,8 +3078,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Protected
} // Protected
;
_proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle());
@@ -2959,19 +3101,27 @@
};
_proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery
if (html) {
if (this.config.html) {
if (!$(content).parent().is($element)) {
$element.empty().append(content);
}
} else {
$element.text($(content).text());
}
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else {
$element[html ? 'html' : 'text'](content);
$element.text(content);
}
};
@@ -2983,8 +3133,25 @@
}
return title;
}; // Private
} // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() {
if (this.config.container === false) {
@@ -3003,27 +3170,27 @@
};
_proto._setListeners = function _setListeners() {
var _this3 = this;
var _this4 = this;
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
return _this3.toggle(event);
$(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this4.toggle(event);
});
} else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) {
return _this3._enter(event);
}).on(eventOut, _this3.config.selector, function (event) {
return _this3._leave(event);
var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this4._enter(event);
}).on(eventOut, _this4.config.selector, function (event) {
return _this4._leave(event);
});
}
});
$(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) {
_this3.hide();
if (_this4.element) {
_this4.hide();
}
});
@@ -3122,7 +3289,13 @@
};
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});
var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') {
config.delay = {
@@ -3140,6 +3313,11 @@
}
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config;
};
@@ -3188,8 +3366,8 @@
this.hide();
this.show();
this.config.animation = initConfigAnimation;
}; // Static
} // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -3277,7 +3455,7 @@
*/
var NAME$7 = 'popover';
var VERSION$7 = '4.2.0';
var VERSION$7 = '4.3.1';
var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@@ -3360,8 +3538,8 @@
this.setElementContent($tip.find(Selector$7.CONTENT), content);
$tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
}; // Private
} // Private
;
_proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content;
@@ -3374,8 +3552,8 @@
if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join(''));
}
}; // Static
} // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -3464,7 +3642,7 @@
*/
var NAME$8 = 'scrollspy';
var VERSION$8 = '4.2.0';
var VERSION$8 = '4.3.1';
var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api';
@@ -3587,8 +3765,8 @@
this._targets = null;
this._activeTarget = null;
this._scrollHeight = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@@ -3695,8 +3873,8 @@
}).forEach(function (node) {
return node.classList.remove(ClassName$8.ACTIVE);
});
}; // Static
} // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -3771,7 +3949,7 @@
*/
var NAME$9 = 'tab';
var VERSION$9 = '4.2.0';
var VERSION$9 = '4.3.1';
var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api';
@@ -3879,8 +4057,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$9);
this._element = null;
}; // Private
} // Private
;
_proto._activate = function _activate(element, container, callback) {
var _this2 = this;
@@ -3922,7 +4100,10 @@
}
Util.reflow(element);
$(element).addClass(ClassName$9.SHOW);
if (element.classList.contains(ClassName$9.FADE)) {
element.classList.add(ClassName$9.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@@ -3938,8 +4119,8 @@
if (callback) {
callback();
}
}; // Static
} // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -4003,7 +4184,7 @@
*/
var NAME$a = 'toast';
var VERSION$a = '4.2.0';
var VERSION$a = '4.3.1';
var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@@ -4118,8 +4299,8 @@
$.removeData(this._element, DATA_KEY$a);
this._element = null;
this._config = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@@ -4152,8 +4333,8 @@
} else {
complete();
}
}; // Static
} // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -4187,6 +4368,11 @@
get: function get() {
return DefaultType$7;
}
}, {
key: "Default",
get: function get() {
return Default$7;
}
}]);
return Toast;
@@ -4208,7 +4394,7 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): index.js
* Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -4245,5 +4431,5 @@
Object.defineProperty(exports, '__esModule', { value: true });
})));
}));
//# sourceMappingURL=bootstrap.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap alert.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap alert.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Alert = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Alert = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -35,7 +35,7 @@
*/
var NAME = 'alert';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -90,8 +90,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}; // Private
} // Private
;
_proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -133,8 +133,8 @@
_proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove();
}; // Static
} // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -195,5 +195,5 @@
return Alert;
})));
}));
//# sourceMappingURL=alert.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -8
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap button.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap button.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global.Button = factory(global.jQuery));
}(this, (function ($) { 'use strict';
(global = global || self, global.Button = factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
@@ -34,7 +34,7 @@
*/
var NAME = 'button';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -120,8 +120,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}; // Static
} // Static
;
Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -183,5 +183,5 @@
return Button;
})));
}));
//# sourceMappingURL=button.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+14 -12
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap carousel.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap carousel.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Carousel = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Carousel = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -69,7 +69,7 @@
*/
var NAME = 'carousel';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -264,8 +264,8 @@
this._isSliding = null;
this._activeElement = null;
this._indicatorsElement = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config);
@@ -309,7 +309,9 @@
});
}
this._addTouchEventListeners();
if (this._config.touch) {
this._addTouchEventListeners();
}
};
_proto._addTouchEventListeners = function _addTouchEventListeners() {
@@ -550,8 +552,8 @@
if (isCycling) {
this.cycle();
}
}; // Static
} // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -578,7 +580,7 @@
}
data[action]();
} else if (_config.interval) {
} else if (_config.interval && _config.ride) {
data.pause();
data.cycle();
}
@@ -662,5 +664,5 @@
return Carousel;
})));
}));
//# sourceMappingURL=carousel.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap collapse.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap collapse.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Collapse = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Collapse = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -69,7 +69,7 @@
*/
var NAME = 'collapse';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -291,8 +291,8 @@
this._element = null;
this._triggerArray = null;
this._isTransitioning = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config);
@@ -336,8 +336,8 @@
if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}
}; // Static
} // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element);
@@ -424,5 +424,5 @@
return Collapse;
})));
}));
//# sourceMappingURL=collapse.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+22 -18
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap dropdown.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap dropdown.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
(global.Dropdown = factory(global.jQuery,global.Popper,global.Util));
}(this, (function ($,Popper,Util) { 'use strict';
(global = global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
}(this, function ($, Popper, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@@ -70,7 +70,7 @@
*/
var NAME = 'dropdown';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -299,8 +299,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Private
} // Private
;
_proto._addEventListeners = function _addEventListeners() {
var _this = this;
@@ -356,24 +356,28 @@
return $(this._element).closest('.navbar').length > 0;
};
_proto._getPopperConfig = function _getPopperConfig() {
_proto._getOffset = function _getOffset() {
var _this2 = this;
var offsetConf = {};
var offset = {};
if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data;
};
} else {
offsetConf.offset = this._config.offset;
offset.offset = this._config.offset;
}
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = {
placement: this._getPlacement(),
modifiers: {
offset: offsetConf,
offset: this._getOffset(),
flip: {
enabled: this._config.flip
},
@@ -391,8 +395,8 @@
}
return popperConfig;
}; // Static
} // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -476,8 +480,8 @@
}
return parent || element.parentNode;
}; // eslint-disable-next-line complexity
} // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea:
@@ -587,5 +591,5 @@
return Dropdown;
})));
}));
//# sourceMappingURL=dropdown.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): index.js
* Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
+19 -13
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap modal.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap modal.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Modal = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Modal = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -69,7 +69,7 @@
*/
var NAME = 'modal';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -102,6 +102,7 @@
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
};
var ClassName = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop',
OPEN: 'modal-open',
@@ -110,6 +111,7 @@
};
var Selector = {
DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -262,8 +264,8 @@
_proto.handleUpdate = function handleUpdate() {
this._adjustDialog();
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config);
@@ -287,7 +289,11 @@
this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0;
if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {
this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) {
Util.reflow(this._element);
@@ -457,11 +463,11 @@
} else if (callback) {
callback();
}
}; // ----------------------------------------------------------------------
} // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js
// ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@@ -546,8 +552,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}; // Static
} // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () {
@@ -640,5 +646,5 @@
return Modal;
})));
}));
//# sourceMappingURL=modal.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap popover.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap popover.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :
(global.Popover = factory(global.jQuery,global.Tooltip));
}(this, (function ($,Tooltip) { 'use strict';
(global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));
}(this, function ($, Tooltip) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;
@@ -75,7 +75,7 @@
*/
var NAME = 'popover';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -158,8 +158,8 @@
this.setElementContent($tip.find(Selector.CONTENT), content);
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
}; // Private
} // Private
;
_proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content;
@@ -172,8 +172,8 @@
if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join(''));
}
}; // Static
} // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -257,5 +257,5 @@
return Popover;
})));
}));
//# sourceMappingURL=popover.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap scrollspy.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap scrollspy.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.ScrollSpy = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -69,7 +69,7 @@
*/
var NAME = 'scrollspy';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -192,8 +192,8 @@
this._targets = null;
this._activeTarget = null;
this._scrollHeight = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});
@@ -300,8 +300,8 @@
}).forEach(function (node) {
return node.classList.remove(ClassName.ACTIVE);
});
}; // Static
} // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -371,5 +371,5 @@
return ScrollSpy;
})));
}));
//# sourceMappingURL=scrollspy.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+14 -11
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap tab.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tab.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Tab = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Tab = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -35,7 +35,7 @@
*/
var NAME = 'tab';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@@ -143,8 +143,8 @@
_proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}; // Private
} // Private
;
_proto._activate = function _activate(element, container, callback) {
var _this2 = this;
@@ -186,7 +186,10 @@
}
Util.reflow(element);
$(element).addClass(ClassName.SHOW);
if (element.classList.contains(ClassName.FADE)) {
element.classList.add(ClassName.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
@@ -202,8 +205,8 @@
if (callback) {
callback();
}
}; // Static
} // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -262,5 +265,5 @@
return Tab;
})));
}));
//# sourceMappingURL=tab.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+15 -10
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap toast.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap toast.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
(global.Toast = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';
(global = global || self, global.Toast = factory(global.jQuery, global.Util));
}(this, function ($, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
@@ -69,7 +69,7 @@
*/
var NAME = 'toast';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.toast';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -184,8 +184,8 @@
$.removeData(this._element, DATA_KEY);
this._element = null;
this._config = null;
}; // Private
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, $(this._element).data(), typeof config === 'object' && config ? config : {});
@@ -218,8 +218,8 @@
} else {
complete();
}
}; // Static
} // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -253,6 +253,11 @@
get: function get() {
return DefaultType;
}
}, {
key: "Default",
get: function get() {
return Default;
}
}]);
return Toast;
@@ -274,5 +279,5 @@
return Toast;
})));
}));
//# sourceMappingURL=toast.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+195 -33
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap tooltip.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tooltip.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
(global.Tooltip = factory(global.jQuery,global.Popper,global.Util));
}(this, (function ($,Popper,Util) { 'use strict';
(global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));
}(this, function ($, Popper, Util) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@@ -63,6 +63,127 @@
return target;
}
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/**
* ------------------------------------------------------------------------
* Constants
@@ -70,12 +191,13 @@
*/
var NAME = 'tooltip';
var VERSION = '4.2.0';
var VERSION = '4.3.1';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType = {
animation: 'boolean',
template: 'string',
@@ -85,10 +207,13 @@
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)'
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
};
var AttachmentMap = {
AUTO: 'auto',
@@ -109,7 +234,10 @@
offset: 0,
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent'
boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
};
var HoverState = {
SHOW: 'show',
@@ -294,9 +422,7 @@
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
offset: {
offset: this.config.offset
},
offset: this._getOffset(),
flip: {
behavior: this.config.fallbackPlacement
},
@@ -405,8 +531,8 @@
if (this._popper !== null) {
this._popper.scheduleUpdate();
}
}; // Protected
} // Protected
;
_proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle());
@@ -428,19 +554,27 @@
};
_proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery
if (html) {
if (this.config.html) {
if (!$(content).parent().is($element)) {
$element.empty().append(content);
}
} else {
$element.text($(content).text());
}
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else {
$element[html ? 'html' : 'text'](content);
$element.text(content);
}
};
@@ -452,8 +586,25 @@
}
return title;
}; // Private
} // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() {
if (this.config.container === false) {
@@ -472,27 +623,27 @@
};
_proto._setListeners = function _setListeners() {
var _this3 = this;
var _this4 = this;
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
return _this3.toggle(event);
$(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this4.toggle(event);
});
} else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) {
return _this3._enter(event);
}).on(eventOut, _this3.config.selector, function (event) {
return _this3._leave(event);
var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this4._enter(event);
}).on(eventOut, _this4.config.selector, function (event) {
return _this4._leave(event);
});
}
});
$(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) {
_this3.hide();
if (_this4.element) {
_this4.hide();
}
});
@@ -591,7 +742,13 @@
};
_proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {});
var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') {
config.delay = {
@@ -609,6 +766,11 @@
}
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config;
};
@@ -657,8 +819,8 @@
this.hide();
this.show();
this.config.animation = initConfigAnimation;
}; // Static
} // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
@@ -741,5 +903,5 @@
return Tooltip;
})));
}));
//# sourceMappingURL=tooltip.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+11 -7
View File
@@ -1,19 +1,19 @@
/*!
* Bootstrap util.js v4.2.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap util.js v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global.Util = factory(global.jQuery));
}(this, (function ($) { 'use strict';
(global = global || self, global.Util = factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): util.js
* Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -89,7 +89,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
}
return selector && document.querySelector(selector) ? selector : null;
try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
},
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
@@ -164,5 +168,5 @@
return Util;
})));
}));
//# sourceMappingURL=util.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): alert.js
* Bootstrap (v4.3.1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'alert'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.alert'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
+2 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): button.js
* Bootstrap (v4.3.1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -14,7 +14,7 @@ import $ from 'jquery'
*/
const NAME = 'button'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.button'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
+6 -4
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): carousel.js
* Bootstrap (v4.3.1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'carousel'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.carousel'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -268,7 +268,9 @@ class Carousel {
.on(Event.MOUSELEAVE, (event) => this.cycle(event))
}
this._addTouchEventListeners()
if (this._config.touch) {
this._addTouchEventListeners()
}
}
_addTouchEventListeners() {
@@ -531,7 +533,7 @@ class Carousel {
throw new TypeError(`No method named "${action}"`)
}
data[action]()
} else if (_config.interval) {
} else if (_config.interval && _config.ride) {
data.pause()
data.cycle()
}
+2 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): collapse.js
* Bootstrap (v4.3.1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'collapse'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.collapse'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
+15 -8
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): dropdown.js
* Bootstrap (v4.3.1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -16,7 +16,7 @@ import Util from './util'
*/
const NAME = 'dropdown'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.dropdown'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -319,24 +319,30 @@ class Dropdown {
return $(this._element).closest('.navbar').length > 0
}
_getPopperConfig() {
const offsetConf = {}
_getOffset() {
const offset = {}
if (typeof this._config.offset === 'function') {
offsetConf.fn = (data) => {
offset.fn = (data) => {
data.offsets = {
...data.offsets,
...this._config.offset(data.offsets) || {}
...this._config.offset(data.offsets, this._element) || {}
}
return data
}
} else {
offsetConf.offset = this._config.offset
offset.offset = this._config.offset
}
return offset
}
_getPopperConfig() {
const popperConfig = {
placement: this._getPlacement(),
modifiers: {
offset: offsetConf,
offset: this._getOffset(),
flip: {
enabled: this._config.flip
},
@@ -352,6 +358,7 @@ class Dropdown {
enabled: false
}
}
return popperConfig
}
+1 -1
View File
@@ -14,7 +14,7 @@ import Util from './util'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): index.js
* Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
+10 -3
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): modal.js
* Bootstrap (v4.3.1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'modal'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.modal'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -51,6 +51,7 @@ const Event = {
}
const ClassName = {
SCROLLABLE : 'modal-dialog-scrollable',
SCROLLBAR_MEASURER : 'modal-scrollbar-measure',
BACKDROP : 'modal-backdrop',
OPEN : 'modal-open',
@@ -60,6 +61,7 @@ const ClassName = {
const Selector = {
DIALOG : '.modal-dialog',
MODAL_BODY : '.modal-body',
DATA_TOGGLE : '[data-toggle="modal"]',
DATA_DISMISS : '[data-dismiss="modal"]',
FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@@ -244,7 +246,12 @@ class Modal {
this._element.style.display = 'block'
this._element.removeAttribute('aria-hidden')
this._element.setAttribute('aria-modal', true)
this._element.scrollTop = 0
if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {
this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0
} else {
this._element.scrollTop = 0
}
if (transition) {
Util.reflow(this._element)
+2 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): popover.js
* Bootstrap (v4.3.1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Tooltip from './tooltip'
*/
const NAME = 'popover'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.popover'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
+2 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): scrollspy.js
* Bootstrap (v4.3.1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'scrollspy'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.scrollspy'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
+6 -3
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): tab.js
* Bootstrap (v4.3.1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'tab'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.tab'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -188,7 +188,10 @@ class Tab {
}
Util.reflow(element)
$(element).addClass(ClassName.SHOW)
if (element.classList.contains(ClassName.FADE)) {
element.classList.add(ClassName.SHOW)
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]
+6 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): toast.js
* Bootstrap (v4.3.1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -15,7 +15,7 @@ import Util from './util'
*/
const NAME = 'toast'
const VERSION = '4.2.0'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.toast'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
@@ -75,6 +75,10 @@ class Toast {
return DefaultType
}
static get Default() {
return Default
}
// Public
show() {
+127
View File
@@ -0,0 +1,127 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
const uriAttrs = [
'background',
'cite',
'href',
'itemtype',
'longdesc',
'poster',
'src',
'xlink:href'
]
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
export const DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute(attr, allowedAttributeList) {
const attrName = attr.nodeName.toLowerCase()
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
}
return true
}
const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)
// Check if a regular expression validates the attribute.
for (let i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true
}
}
return false
}
export function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml)
}
const domParser = new window.DOMParser()
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')
const whitelistKeys = Object.keys(whiteList)
const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))
for (let i = 0, len = elements.length; i < len; i++) {
const el = elements[i]
const elName = el.nodeName.toLowerCase()
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el)
continue
}
const attributeList = [].slice.call(el.attributes)
const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
attributeList.forEach((attr) => {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName)
}
})
}
return createdDocument.body.innerHTML
}
+68 -18
View File
@@ -1,10 +1,14 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): tooltip.js
* Bootstrap (v4.3.1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
import {
DefaultWhitelist,
sanitizeHtml
} from './tools/sanitizer'
import $ from 'jquery'
import Popper from 'popper.js'
import Util from './util'
@@ -15,13 +19,14 @@ import Util from './util'
* ------------------------------------------------------------------------
*/
const NAME = 'tooltip'
const VERSION = '4.2.0'
const DATA_KEY = 'bs.tooltip'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_PREFIX = 'bs-tooltip'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
const NAME = 'tooltip'
const VERSION = '4.3.1'
const DATA_KEY = 'bs.tooltip'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_PREFIX = 'bs-tooltip'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
const DefaultType = {
animation : 'boolean',
@@ -32,10 +37,13 @@ const DefaultType = {
html : 'boolean',
selector : '(string|boolean)',
placement : '(string|function)',
offset : '(number|string)',
offset : '(number|string|function)',
container : '(string|element|boolean)',
fallbackPlacement : '(string|array)',
boundary : '(string|element)'
boundary : '(string|element)',
sanitize : 'boolean',
sanitizeFn : '(null|function)',
whiteList : 'object'
}
const AttachmentMap = {
@@ -60,7 +68,10 @@ const Default = {
offset : 0,
container : false,
fallbackPlacement : 'flip',
boundary : 'scrollParent'
boundary : 'scrollParent',
sanitize : true,
sanitizeFn : null,
whiteList : DefaultWhitelist
}
const HoverState = {
@@ -285,9 +296,7 @@ class Tooltip {
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
offset: {
offset: this.config.offset
},
offset: this._getOffset(),
flip: {
behavior: this.config.fallbackPlacement
},
@@ -421,18 +430,27 @@ class Tooltip {
}
setElementContent($element, content) {
const html = this.config.html
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery
if (html) {
if (this.config.html) {
if (!$(content).parent().is($element)) {
$element.empty().append(content)
}
} else {
$element.text($(content).text())
}
return
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)
}
$element.html(content)
} else {
$element[html ? 'html' : 'text'](content)
$element.text(content)
}
}
@@ -450,6 +468,25 @@ class Tooltip {
// Private
_getOffset() {
const offset = {}
if (typeof this.config.offset === 'function') {
offset.fn = (data) => {
data.offsets = {
...data.offsets,
...this.config.offset(data.offsets, this.element) || {}
}
return data
}
} else {
offset.offset = this.config.offset
}
return offset
}
_getContainer() {
if (this.config.container === false) {
return document.body
@@ -619,9 +656,18 @@ class Tooltip {
}
_getConfig(config) {
const dataAttributes = $(this.element).data()
Object.keys(dataAttributes)
.forEach((dataAttr) => {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr]
}
})
config = {
...this.constructor.Default,
...$(this.element).data(),
...dataAttributes,
...typeof config === 'object' && config ? config : {}
}
@@ -646,6 +692,10 @@ class Tooltip {
this.constructor.DefaultType
)
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)
}
return config
}
+6 -2
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.2.0): util.js
* Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -82,7 +82,11 @@ const Util = {
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''
}
return selector && document.querySelector(selector) ? selector : null
try {
return document.querySelector(selector) ? selector : null
} catch (err) {
return null
}
},
getTransitionDurationFromElement(element) {
+1 -13
View File
@@ -6,19 +6,7 @@
<title>Bootstrap Plugin Test Suite</title>
<!-- jQuery -->
<script>
(function () {
var path = '../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js'
// get jquery param from the query string.
var jQueryVersion = location.search.match(/[?&]jquery=(.*?)(?=&|$)/)
// If a version was specified, use that version from jQuery CDN
if (jQueryVersion) {
path = 'https://code.jquery.com/jquery-' + jQueryVersion[1] + '.min.js'
}
document.write('<script src="' + path + '"><\/script>')
}())
</script>
<script src="../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<!-- QUnit -->
+4 -6
View File
@@ -1,16 +1,14 @@
/* eslint-env node */
/* eslint no-process-env: 0 */
const path = require('path')
const ip = require('ip')
const pkg = require('../../package.json')
const {
browsers,
browsersKeys
} = require('./browsers')
const path = require('path')
const jsCoveragePath = path.resolve(__dirname, '../coverage')
const jqueryFile = process.env.USE_OLD_JQUERY ? 'https://code.jquery.com/jquery-1.9.1.min.js' : `site/docs/${pkg.version_short}/assets/js/vendor/jquery-slim.min.js`
const jqueryFile = process.env.USE_OLD_JQUERY ? 'https://code.jquery.com/jquery-1.9.1.min.js' : 'node_modules/jquery/dist/jquery.slim.min.js'
const bundle = process.env.BUNDLE === 'true'
const browserStack = process.env.BROWSER === 'true'
@@ -94,7 +92,7 @@ if (bundle) {
conf.browsers = browsersKeys
reporters.push('BrowserStack')
files = files.concat([
`site/docs/${pkg.version_short}/assets/js/vendor/jquery-slim.min.js`,
'node_modules/jquery/dist/jquery.slim.min.js',
'js/dist/util.js',
'js/dist/tooltip.js',
'js/dist/!(util|index|tooltip).js' // include all of our js/dist files except util.js, index.js and tooltip.js
@@ -117,7 +115,7 @@ if (bundle) {
conf.customLaunchers = customLaunchers
conf.detectBrowsers = detectBrowsers
conf.coverageIstanbulReporter = {
dir: jsCoveragePath,
dir: path.resolve(__dirname, '../coverage/'),
reports: ['lcov', 'text-summary'],
thresholds: {
emitWarning: false,
+62 -2
View File
@@ -948,7 +948,7 @@ $(function () {
$textArea.trigger(eventKeyDown)
})
QUnit.test('Should not go to the next item when the carousel is not visible', function (assert) {
QUnit.test('should not go to the next item when the carousel is not visible', function (assert) {
assert.expect(2)
var done = assert.async()
var html = '<div id="myCarousel" class="carousel slide" data-interval="50" style="display: none;">' +
@@ -985,7 +985,7 @@ $(function () {
}, 80)
})
QUnit.test('Should not go to the next item when the parent of the carousel is not visible', function (assert) {
QUnit.test('should not go to the next item when the parent of the carousel is not visible', function (assert) {
assert.expect(2)
var done = assert.async()
var html = '<div id="parent" style="display: none;">' +
@@ -1270,4 +1270,64 @@ $(function () {
assert.strictEqual(spy.called, true)
sandbox.restore()
})
QUnit.test('should not cycle when there is no attribute data-ride', function (assert) {
assert.expect(1)
var spy = sinon.spy(Carousel.prototype, 'cycle')
var carouselHTML = '<div class="carousel"></div>'
var $carousel = $(carouselHTML)
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, false)
spy.restore()
})
QUnit.test('should cycle when there is data-ride attribute', function (assert) {
assert.expect(1)
var spy = sinon.spy(Carousel.prototype, 'cycle')
var carouselHTML = '<div class="carousel" data-ride="carousel"></div>'
var $carousel = $(carouselHTML)
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, true)
spy.restore()
})
QUnit.test('should init carousels with data-ride on load event', function (assert) {
assert.expect(1)
var done = assert.async()
var spy = sinon.spy(Carousel, '_jQueryInterface')
var carouselHTML = '<div class="carousel" data-ride="carousel"></div>'
var $carousel = $(carouselHTML)
$carousel.appendTo('#qunit-fixture')
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.strictEqual(spy.called, true)
spy.restore()
done()
}, 5)
})
QUnit.test('should not add touch event listeners when touch option set to false', function (assert) {
assert.expect(1)
var spy = sinon.spy(Carousel.prototype, '_addTouchEventListeners')
var $carousel = $('<div class="carousel" data-ride="carousel" data-touch="false"></div>')
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, false)
spy.restore()
})
})
+55
View File
@@ -1361,4 +1361,59 @@ $(function () {
$dropdown.hide()
assert.ok($dropdown.parent('.dropdown').hasClass('show'))
})
QUnit.test('should create offset modifier correctly when offset option is a function', function (assert) {
assert.expect(2)
var getOffset = function (offsets) {
return offsets
}
var dropdownHTML =
'<div class="dropdown">' +
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
' <div class="dropdown-menu">' +
' <a class="dropdown-item" href="#">Another link</a>' +
' </div>' +
'</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown({
offset: getOffset
})
var dropdown = $dropdown.data('bs.dropdown')
var offset = dropdown._getOffset()
assert.ok(typeof offset.offset === 'undefined')
assert.ok(typeof offset.fn === 'function')
})
QUnit.test('should create offset modifier correctly when offset option is not a function', function (assert) {
assert.expect(2)
var dropdownHTML =
'<div class="dropdown">' +
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
' <div class="dropdown-menu">' +
' <a class="dropdown-item" href="#">Another link</a>' +
' </div>' +
'</div>'
var myOffset = 42
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown({
offset: myOffset
})
var dropdown = $dropdown.data('bs.dropdown')
var offset = dropdown._getOffset()
assert.strictEqual(offset.offset, myOffset)
assert.ok(typeof offset.fn === 'undefined')
})
})
+53 -34
View File
@@ -619,40 +619,37 @@ $(function () {
assert.expect(1)
var done = assert.async()
try {
var $toggleBtn = $('<button data-toggle="modal" data-target="&lt;div id=&quot;modal-test&quot;&gt;&lt;div class=&quot;contents&quot;&lt;div&lt;div id=&quot;close&quot; data-dismiss=&quot;modal&quot;/&gt;&lt;/div&gt;&lt;/div&gt;"/>')
.appendTo('#qunit-fixture')
var $toggleBtn = $('<button data-toggle="modal" data-target="&lt;div id=&quot;modal-test&quot;&gt;&lt;div class=&quot;contents&quot;&lt;div&lt;div id=&quot;close&quot; data-dismiss=&quot;modal&quot;/&gt;&lt;/div&gt;&lt;/div&gt;"/>')
.appendTo('#qunit-fixture')
$toggleBtn.trigger('click')
} catch (e) {
$toggleBtn.trigger('click')
setTimeout(function () {
assert.strictEqual($('#modal-test').length, 0, 'target has not been parsed and added to the document')
done()
}
}, 0)
})
QUnit.test('should not execute js from target', function (assert) {
assert.expect(0)
var done = assert.async()
try {
// This toggle button contains XSS payload in its data-target
// Note: it uses the onerror handler of an img element to execute the js, because a simple script element does not work here
// a script element works in manual tests though, so here it is likely blocked by the qunit framework
var $toggleBtn = $('<button data-toggle="modal" data-target="&lt;div&gt;&lt;image src=&quot;missing.png&quot; onerror=&quot;$(&apos;#qunit-fixture button.control&apos;).trigger(&apos;click&apos;)&quot;&gt;&lt;/div&gt;"/>')
.appendTo('#qunit-fixture')
// The XSS payload above does not have a closure over this function and cannot access the assert object directly
// However, it can send a click event to the following control button, which will then fail the assert
$('<button>')
.addClass('control')
.on('click', function () {
assert.notOk(true, 'XSS payload is not executed as js')
})
.appendTo('#qunit-fixture')
// This toggle button contains XSS payload in its data-target
// Note: it uses the onerror handler of an img element to execute the js, because a simple script element does not work here
// a script element works in manual tests though, so here it is likely blocked by the qunit framework
var $toggleBtn = $('<button data-toggle="modal" data-target="&lt;div&gt;&lt;image src=&quot;missing.png&quot; onerror=&quot;$(&apos;#qunit-fixture button.control&apos;).trigger(&apos;click&apos;)&quot;&gt;&lt;/div&gt;"/>')
.appendTo('#qunit-fixture')
// The XSS payload above does not have a closure over this function and cannot access the assert object directly
// However, it can send a click event to the following control button, which will then fail the assert
$('<button>')
.addClass('control')
.on('click', function () {
assert.notOk(true, 'XSS payload is not executed as js')
})
.appendTo('#qunit-fixture')
$toggleBtn.trigger('click')
} catch (e) {
done()
}
$toggleBtn.trigger('click')
setTimeout(done, 500)
})
QUnit.test('should not try to open a modal which is already visible', function (assert) {
@@ -672,7 +669,7 @@ $(function () {
})
QUnit.test('transition duration should be the modal-dialog duration before triggering shown event', function (assert) {
assert.expect(2)
assert.expect(1)
var done = assert.async()
var style = [
'<style>',
@@ -697,22 +694,17 @@ $(function () {
'</div>'
].join('')
var beginTimestamp = 0
var $modal = $(modalHTML).appendTo('#qunit-fixture')
var $modalDialog = $('.modal-dialog')
var transitionDuration = Util.getTransitionDurationFromElement($modalDialog[0])
assert.strictEqual(transitionDuration, 300)
var expectedTransitionDuration = 300
var spy = sinon.spy(Util, 'getTransitionDurationFromElement')
$modal.on('shown.bs.modal', function () {
var diff = Date.now() - beginTimestamp
assert.ok(diff < 400)
assert.ok(spy.returned(expectedTransitionDuration))
$style.remove()
spy.restore()
done()
})
.bootstrapModal('show')
beginTimestamp = Date.now()
})
QUnit.test('should dispose modal', function (assert) {
@@ -793,4 +785,31 @@ $(function () {
})
.bootstrapModal('show')
})
QUnit.test('should scroll to top of the modal body if the modal has .modal-dialog-scrollable class', function (assert) {
assert.expect(2)
var done = assert.async()
var $modal = $([
'<div id="modal-test">',
' <div class="modal-dialog modal-dialog-scrollable">',
' <div class="modal-content">',
' <div class="modal-body" style="height: 100px; overflow-y: auto;">',
' <div style="height: 200px" />',
' </div>',
' </div>',
' </div>',
'</div>'
].join('')).appendTo('#qunit-fixture')
var $modalBody = $('.modal-body')
$modalBody.scrollTop(100)
assert.strictEqual($modalBody.scrollTop(), 100)
$modal.on('shown.bs.modal', function () {
assert.strictEqual($modalBody.scrollTop(), 0, 'modal body scrollTop should be 0 when opened')
done()
})
.bootstrapModal('show')
})
})
+56
View File
@@ -459,4 +459,60 @@ $(function () {
})
.trigger($.Event('click'))
})
QUnit.test('should not add show class to tab panes if there is no `.fade` class', function (assert) {
assert.expect(1)
var done = assert.async()
var html = [
'<ul class="nav nav-tabs" role="tablist">',
' <li class="nav-item">',
' <a class="nav-link nav-tab" href="#home" role="tab" data-toggle="tab">Home</a>',
' </li>',
' <li class="nav-item">',
' <a id="secondNav" class="nav-link nav-tab" href="#profile" role="tab" data-toggle="tab">Profile</a>',
' </li>',
'</ul>',
'<div class="tab-content">',
' <div role="tabpanel" class="tab-pane" id="home">test 1</div>',
' <div role="tabpanel" class="tab-pane" id="profile">test 2</div>',
'</div>'
].join('')
$(html).appendTo('#qunit-fixture')
$('#secondNav').on('shown.bs.tab', function () {
assert.strictEqual($('.show').length, 0)
done()
})
.trigger($.Event('click'))
})
QUnit.test('should add show class to tab panes if there is a `.fade` class', function (assert) {
assert.expect(1)
var done = assert.async()
var html = [
'<ul class="nav nav-tabs" role="tablist">',
' <li class="nav-item">',
' <a class="nav-link nav-tab" href="#home" role="tab" data-toggle="tab">Home</a>',
' </li>',
' <li class="nav-item">',
' <a id="secondNav" class="nav-link nav-tab" href="#profile" role="tab" data-toggle="tab">Profile</a>',
' </li>',
'</ul>',
'<div class="tab-content">',
' <div role="tabpanel" class="tab-pane fade" id="home">test 1</div>',
' <div role="tabpanel" class="tab-pane fade" id="profile">test 2</div>',
'</div>'
].join('')
$(html).appendTo('#qunit-fixture')
$('#secondNav').on('shown.bs.tab', function () {
assert.strictEqual($('.show').length, 1)
done()
})
.trigger($.Event('click'))
})
})
+20
View File
@@ -236,4 +236,24 @@ $(function () {
})
.bootstrapToast('show')
})
QUnit.test('should expose default setting to allow to override them', function (assert) {
assert.expect(1)
var defaultDelay = 1000
Toast.Default.delay = defaultDelay
var toastHtml =
'<div class="toast" data-autohide="false" data-animation="false">' +
'<button type="button" class="ml-2 mb-1 close" data-dismiss="toast">' +
'close' +
'</button>' +
'</div>'
var $toast = $(toastHtml)
.bootstrapToast()
var toast = $toast.data('bs.toast')
assert.strictEqual(toast._config.delay, defaultDelay)
})
})
+197
View File
@@ -1069,4 +1069,201 @@ $(function () {
assert.strictEqual(tooltip._isEnabled, true)
})
QUnit.test('should create offset modifier correctly when offset option is a function', function (assert) {
assert.expect(2)
var getOffset = function (offsets) {
return offsets
}
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
offset: getOffset
})
var tooltip = $trigger.data('bs.tooltip')
var offset = tooltip._getOffset()
assert.ok(typeof offset.offset === 'undefined')
assert.ok(typeof offset.fn === 'function')
})
QUnit.test('should create offset modifier correctly when offset option is not a function', function (assert) {
assert.expect(2)
var myOffset = 42
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
offset: myOffset
})
var tooltip = $trigger.data('bs.tooltip')
var offset = tooltip._getOffset()
assert.strictEqual(offset.offset, myOffset)
assert.ok(typeof offset.fn === 'undefined')
})
QUnit.test('should disable sanitizer', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
sanitize: false
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.sanitize, false)
})
QUnit.test('should sanitize template by removing disallowed tags', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<div>',
' <script>console.log("oups script inserted")</script>',
' <span>Some content</span>',
'</div>'
].join('')
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.template.indexOf('script'), -1)
})
QUnit.test('should sanitize template by removing disallowed attributes', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<div>',
' <img src="x" onError="alert(\'test\')">Some content</img>',
'</div>'
].join('')
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.template.indexOf('onError'), -1)
})
QUnit.test('should sanitize template by removing tags with XSS', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<div>',
' <a href="javascript:alert(7)">Click me</a>',
' <span>Some content</span>',
'</div>'
].join('')
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.template.indexOf('script'), -1)
})
QUnit.test('should allow custom sanitization rules', function (assert) {
assert.expect(2)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<a href="javascript:alert(7)">Click me</a>',
'<span>Some content</span>'
].join(''),
whiteList: {
span: null
}
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.template.indexOf('<a'), -1)
assert.ok(tooltip.config.template.indexOf('span') !== -1)
})
QUnit.test('should allow passing a custom function for sanitization', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<span>Some content</span>'
].join(''),
sanitizeFn: function (input) {
return input
}
})
var tooltip = $trigger.data('bs.tooltip')
assert.ok(tooltip.config.template.indexOf('span') !== -1)
})
QUnit.test('should allow passing aria attributes', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<span aria-pressed="true">Some content</span>'
].join('')
})
var tooltip = $trigger.data('bs.tooltip')
assert.ok(tooltip.config.template.indexOf('aria-pressed') !== -1)
})
QUnit.test('should not sanitize element content', function (assert) {
assert.expect(1)
var $element = $('<div />').appendTo('#qunit-fixture')
var content = '<script>var test = 1;</script>'
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<span aria-pressed="true">Some content</span>'
].join(''),
html: true,
sanitize: false
})
var tooltip = $trigger.data('bs.tooltip')
tooltip.setElementContent($element, content)
assert.strictEqual($element[0].innerHTML, content)
})
QUnit.test('should not take into account sanitize in data attributes', function (assert) {
assert.expect(1)
var $trigger = $('<a href="#" rel="tooltip" data-sanitize="false" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
template: [
'<span aria-pressed="true">Some content</span>'
].join('')
})
var tooltip = $trigger.data('bs.tooltip')
assert.strictEqual(tooltip.config.sanitize, true)
})
})
+6 -7
View File
@@ -20,17 +20,16 @@ $(function () {
assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)
})
QUnit.test('Util.getSelectorFromElement should throw error when there is a bad selector', function (assert) {
QUnit.test('Util.getSelectorFromElement should return null when there is a bad selector', function (assert) {
assert.expect(2)
var $el = $('<div data-target="#1"></div>').appendTo($('#qunit-fixture'))
try {
assert.ok(true, 'trying to use a bad selector')
Util.getSelectorFromElement($el[0])
} catch (e) {
assert.ok(e instanceof DOMException)
}
assert.strictEqual(Util.getSelectorFromElement($el[0]), null)
var $el2 = $('<a href="/posts"></a>').appendTo($('#qunit-fixture'))
assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)
})
QUnit.test('Util.typeCheckConfig should thrown an error when a bad config is passed', function (assert) {
+1 -1
View File
@@ -51,7 +51,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/alert.js"></script>
</body>
+1 -1
View File
@@ -44,7 +44,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/button.js"></script>
</body>
+1 -1
View File
@@ -45,7 +45,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/carousel.js"></script>
<script>
+1 -1
View File
@@ -71,7 +71,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/collapse.js"></script>
</body>
+1 -1
View File
@@ -203,7 +203,7 @@
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/dropdown.js"></script>
+1 -1
View File
@@ -205,7 +205,7 @@
</button>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/modal.js"></script>
+1 -1
View File
@@ -31,7 +31,7 @@
</button>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/tooltip.js"></script>
+1 -1
View File
@@ -86,7 +86,7 @@
<p>Ad leggings keytar, brunch id art party dolor labore.</p>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/scrollspy.js"></script>
<script src="../../dist/dropdown.js"></script>
+1 -1
View File
@@ -225,7 +225,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/tab.js"></script>
+1 -1
View File
@@ -52,7 +52,7 @@
</div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/toast.js"></script>
<script>
+1 -1
View File
@@ -71,7 +71,7 @@
<div id="customContainer"></div>
</div>
<script src="../../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
<script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
<script src="../../dist/util.js"></script>
<script src="../../dist/tooltip.js"></script>
+5 -4
View File
@@ -1,16 +1,17 @@
# set env vars usually set by MyGet (enable for local testing)
#$env:SourcesPath = '..'
#$env:NuGet = "./nuget.exe" #https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
#$env:NuGet = "./nuget.exe" # https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
$nuget = $env:NuGet
Copy-Item $env:SourcesPath\LICENSE $env:SourcesPath\LICENSE.txt # has to be .txt extension, don't check in
# parse the version number out of package.json
$bsversionParts = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version.split('-', 2) # split the version on the '-'
$bsversion = $bsversionParts[0]
if ($bsversionParts.Length -gt 1)
{
$bsversion += '-' + $bsversionParts[1].replace('.', '').replace('-', '_') # strip out invalid chars from the PreRelease part
if ($bsversionParts.Length -gt 1) {
$bsversion += '-' + $bsversionParts[1].replace('.', '').replace('-', '_') # strip out invalid chars from the PreRelease part
}
# create packages
+6 -4
View File
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>bootstrap</id>
<version>4.2.0</version>
<version>4.3.0</version>
<title>Bootstrap CSS</title>
<authors>The Bootstrap Authors, Twitter Inc.</authors>
<owners>bootstrap</owners>
@@ -11,9 +11,9 @@
<summary>Bootstrap framework in CSS. Includes fonts and JavaScript</summary>
<language>en-us</language>
<projectUrl>https://getbootstrap.com/</projectUrl>
<iconUrl>https://getbootstrap.com/docs/4.2/assets/img/favicons/apple-touch-icon.png</iconUrl>
<licenseUrl>https://github.com/twbs/bootstrap/blob/master/LICENSE</licenseUrl>
<copyright>Copyright 2017-2018</copyright>
<iconUrl>https://getbootstrap.com/docs/4.3/assets/img/favicons/apple-touch-icon.png</iconUrl>
<license type="file">LICENSE.txt</license>
<copyright>Copyright 2017-2019</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies>
<dependency id="jQuery" version="[3.0.0,4)" />
@@ -22,6 +22,8 @@
<tags>css mobile-first responsive front-end framework web</tags>
</metadata>
<files>
<file src="LICENSE.txt" target="" />
<file src="dist\css\*.*" target="content\Content" />
<file src="dist\js\bootstrap*.js" target="content\Scripts" />
<file src="dist\js\bootstrap*.js.map" target="content\Scripts" />
+6 -4
View File
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>bootstrap.sass</id>
<version>4.2.0</version>
<version>4.3.0</version>
<title>Bootstrap Sass</title>
<authors>The Bootstrap Authors, Twitter Inc.</authors>
<owners>bootstrap</owners>
@@ -11,9 +11,9 @@
<summary>Bootstrap framework in Sass. Includes fonts and JavaScript</summary>
<language>en-us</language>
<projectUrl>https://getbootstrap.com/</projectUrl>
<iconUrl>https://getbootstrap.com/docs/4.2/assets/img/favicons/apple-touch-icon.png</iconUrl>
<licenseUrl>https://github.com/twbs/bootstrap/blob/master/LICENSE</licenseUrl>
<copyright>Copyright 2017-2018</copyright>
<iconUrl>https://getbootstrap.com/docs/4.3/assets/img/favicons/apple-touch-icon.png</iconUrl>
<license type="file">LICENSE.txt</license>
<copyright>Copyright 2017-2019</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies>
<dependency id="jQuery" version="[3.0.0,4)" />
@@ -22,6 +22,8 @@
<tags>css sass mobile-first responsive front-end framework web</tags>
</metadata>
<files>
<file src="LICENSE.txt" target="" />
<file src="scss\**\*.scss" target="content\Content\bootstrap" />
<file src="dist\js\bootstrap*.js" target="content\Scripts" />
<file src="dist\js\bootstrap*.js.map" target="content\Scripts" />
+1245 -1291
View File
File diff suppressed because it is too large Load Diff
+2 -4
View File
@@ -1,11 +1,9 @@
// package metadata file for Meteor.js
/* eslint-env meteor */
Package.describe({
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
version: '4.2.0',
version: '4.3.1',
git: 'https://github.com/twbs/bootstrap.git'
});
+45 -48
View File
@@ -1,8 +1,8 @@
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"version": "4.2.0",
"version_short": "4.2",
"version": "4.3.1",
"version_short": "4.3",
"keywords": [
"css",
"sass",
@@ -31,8 +31,8 @@
"css-compile-main": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.css && npm run css-copy",
"css-compile-docs": "cross-env-shell node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/docs/$npm_package_version_short/assets/scss/docs.scss site/docs/$npm_package_version_short/assets/css/docs.min.css",
"css-lint": "npm-run-all --parallel css-lint-*",
"css-lint-main": "stylelint --syntax scss \"scss/**/*.scss\"",
"css-lint-docs": "stylelint --syntax scss \"site/docs/**/assets/scss/*.scss\" && stylelint \"site/docs/**/*.css\"",
"css-lint-main": "stylelint \"scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache",
"css-lint-docs": "stylelint \"site/docs/**/assets/scss/*.scss\" \"site/docs/**/*.css\" --cache --cache-location .cache/.stylelintcache",
"css-lint-vars": "fusv scss/ site/docs/",
"css-minify": "npm-run-all --parallel css-minify-*",
"css-minify-main": "cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css",
@@ -42,7 +42,7 @@
"css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/docs/**/*.css\" \"site/docs/**/*.css\"",
"js": "npm-run-all js-compile js-minify js-copy",
"js-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/js/ site/docs/$npm_package_version_short/dist/",
"js-main": "npm-run-all js-lint js-compile-main js-minify-main",
"js-main": "npm-run-all js-lint js-compile js-minify-main",
"js-docs": "npm-run-all js-lint-docs js-minify-docs",
"js-compile": "npm-run-all --parallel js-compile-* --sequential js-copy",
"js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap",
@@ -50,8 +50,8 @@
"js-compile-plugins": "node build/build-plugins.js",
"js-compile-plugins-coverage": "cross-env NODE_ENV=test node build/build-plugins.js",
"js-lint": "npm-run-all --parallel js-lint-*",
"js-lint-main": "eslint js/src js/tests build/",
"js-lint-docs": "eslint site/",
"js-lint-main": "eslint --cache --cache-location .cache/.eslintcache js/src js/tests build/",
"js-lint-docs": "eslint --cache --cache-location .cache/.eslintcache site/",
"js-minify": "npm-run-all --parallel js-minify-main js-minify-docs",
"js-minify-main": "npm-run-all js-minify-standalone js-minify-bundle",
"js-minify-standalone": "uglifyjs --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
@@ -64,7 +64,7 @@
"js-test-karma-bundle-old": "cross-env BUNDLE=true USE_OLD_JQUERY=true npm run js-test-karma",
"js-test-integration": "rollup --config js/tests/integration/rollup.bundle.js",
"js-test-cloud": "cross-env BROWSER=true npm run js-test-karma",
"lint": "npm-run-all js-lint css-lint",
"lint": "npm-run-all --parallel js-lint css-lint",
"coveralls": "shx cat js/coverage/lcov.info | coveralls",
"docs": "npm-run-all css-docs js-docs docs-compile docs-lint",
"docs-compile": "bundle exec jekyll build",
@@ -99,30 +99,30 @@
"dependencies": {},
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.14.6"
"popper.js": "^1.14.7"
},
"devDependencies": {
"@babel/cli": "^7.2.0",
"@babel/core": "^7.2.0",
"@babel/plugin-proposal-object-rest-spread": "^7.2.0",
"@babel/preset-env": "^7.2.0",
"autoprefixer": "^9.4.2",
"@babel/cli": "^7.2.3",
"@babel/core": "^7.2.2",
"@babel/plugin-proposal-object-rest-spread": "^7.3.2",
"@babel/preset-env": "^7.3.1",
"autoprefixer": "^9.4.7",
"babel-eslint": "^10.0.1",
"babel-plugin-istanbul": "^5.1.0",
"broken-link-checker": "^0.7.8",
"bundlesize": "^0.15.3",
"bundlesize": "0.15.3",
"clean-css-cli": "^4.2.1",
"coveralls": "^3.0.2",
"cross-env": "^5.2.0",
"eslint": "^5.10.0",
"find-unused-sass-variables": "^0.3.1",
"eslint": "^5.13.0",
"find-unused-sass-variables": "^0.3.2",
"glob": "^7.1.3",
"hammer-simulator": "0.0.1",
"http-server": "^0.11.1",
"ip": "^1.1.5",
"jquery": "^3.3.1",
"karma": "^3.1.3",
"karma-browserstack-launcher": "^1.3.0",
"karma": "^3.1.4",
"karma-browserstack-launcher": "^1.4.0",
"karma-chrome-launcher": "^2.2.0",
"karma-coverage-istanbul-reporter": "^2.0.4",
"karma-detect-browsers": "^2.3.3",
@@ -130,23 +130,20 @@
"karma-qunit": "^2.1.0",
"karma-sinon": "^1.0.5",
"node-sass": "^4.11.0",
"nodemon": "^1.18.7",
"nodemon": "^1.18.9",
"npm-run-all": "^4.1.5",
"popper.js": "^1.14.6",
"postcss-cli": "^6.0.1",
"qunit": "^2.8.0",
"rollup": "^0.67.4",
"rollup-plugin-babel": "^4.0.3",
"popper.js": "^1.14.7",
"postcss-cli": "^6.1.1",
"qunit": "^2.9.1",
"rollup": "^1.1.2",
"rollup-plugin-babel": "^4.3.2",
"rollup-plugin-commonjs": "^9.2.0",
"rollup-plugin-node-resolve": "^4.0.0",
"shelljs": "^0.8.3",
"shx": "^0.3.2",
"sinon": "^7.1.1",
"stylelint": "^9.9.0",
"stylelint-config-recommended-scss": "^3.2.0",
"stylelint-config-standard": "^18.2.0",
"stylelint-order": "^2.0.0",
"stylelint-scss": "^3.4.1",
"sinon": "^7.2.3",
"stylelint": "^9.10.1",
"stylelint-config-twbs-bootstrap": "^0.3.0",
"uglify-js": "^3.4.9",
"vnu-jar": "18.11.5"
},
@@ -155,7 +152,7 @@
},
"files": [
"dist/{css,js}/*.{css,js,map}",
"js/{src,dist}/*.{js,map}",
"js/{src,dist}/**/*.{js,map}",
"scss/**/*.scss"
],
"bundlesize": [
@@ -169,11 +166,11 @@
},
{
"path": "./dist/css/bootstrap-reboot.css",
"maxSize": "3 kB"
"maxSize": "2 kB"
},
{
"path": "./dist/css/bootstrap-reboot.min.css",
"maxSize": "3 kB"
"maxSize": "2 kB"
},
{
"path": "./dist/css/bootstrap.css",
@@ -181,23 +178,23 @@
},
{
"path": "./dist/css/bootstrap.min.css",
"maxSize": "22.5 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
"maxSize": "45 kB"
},
{
"path": "./dist/js/bootstrap.bundle.min.js",
"maxSize": "25 kB"
},
{
"path": "./dist/js/bootstrap.js",
"maxSize": "23 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
"maxSize": "47 kB"
},
{
"path": "./dist/js/bootstrap.bundle.min.js",
"maxSize": "22 kB"
},
{
"path": "./dist/js/bootstrap.js",
"maxSize": "25 kB"
},
{
"path": "./dist/js/bootstrap.min.js",
"maxSize": "15 kB"
"maxSize": "15.5 kB"
}
],
"jspm": {
@@ -218,7 +215,7 @@
"dependencies": {},
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.14.6"
"popper.js": "^1.14.7"
}
}
}
+2 -1
View File
@@ -6,13 +6,14 @@
.badge {
display: inline-block;
padding: $badge-padding-y $badge-padding-x;
font-size: $badge-font-size;
@include font-size($badge-font-size);
font-weight: $badge-font-weight;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
@include border-radius($badge-border-radius);
@include transition($badge-transition);
@at-root a#{&} {
@include hover-focus {
+2 -5
View File
@@ -6,6 +6,7 @@
.btn {
display: inline-block;
font-family: $btn-font-family;
font-weight: $btn-font-weight;
color: $body-color;
text-align: center;
@@ -34,11 +35,6 @@
@include box-shadow(none);
}
// Opinionated: add "hand" cursor to non-disabled .btn elements
&:not(:disabled):not(.disabled) {
cursor: pointer;
}
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active {
@include box-shadow($btn-active-box-shadow);
@@ -81,6 +77,7 @@ fieldset:disabled a.btn {
.btn-link {
font-weight: $font-weight-normal;
color: $link-color;
text-decoration: $link-decoration;
@include hover {
color: $link-hover-color;
+13 -34
View File
@@ -6,7 +6,7 @@
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
word-wrap: break-word;
background-color: $card-bg;
background-clip: border-box;
@@ -36,6 +36,7 @@
// as much space as possible, ensuring footers are aligned to the bottom.
flex: 1 1 auto;
padding: $card-spacer-x;
color: $card-color;
}
.card-title {
@@ -195,55 +196,35 @@
// Handle rounded corners
@if $enable-rounded {
&:first-child {
&:not(:last-child) {
@include border-right-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-blacklist
border-top-right-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-right-radius: 0;
}
}
&:last-child {
&:not(:first-child) {
@include border-left-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-blacklist
border-top-left-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-left-radius: 0;
}
}
&:only-child {
@include border-radius($card-border-radius);
.card-img-top,
.card-header {
@include border-top-radius($card-border-radius);
}
.card-img-bottom,
.card-footer {
@include border-bottom-radius($card-border-radius);
}
}
&:not(:first-child):not(:last-child):not(:only-child) {
@include border-radius(0);
.card-img-top,
.card-img-bottom,
.card-header,
.card-footer {
@include border-radius(0);
}
}
}
}
}
@@ -278,29 +259,27 @@
//
.accordion {
.card {
> .card {
overflow: hidden;
&:not(:first-of-type) {
.card-header:first-child {
border-radius: 0;
@include border-radius(0);
}
&:not(:last-of-type) {
border-bottom: 0;
border-radius: 0;
@include border-radius(0);
}
}
&:first-of-type {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
@include border-bottom-radius(0);
}
&:last-of-type {
border-top-left-radius: 0;
border-top-right-radius: 0;
@include border-top-radius(0);
}
.card-header {
+1 -2
View File
@@ -127,8 +127,7 @@
display: inline-block;
width: $carousel-control-icon-width;
height: $carousel-control-icon-width;
background: transparent no-repeat center center;
background-size: 100% 100%;
background: no-repeat 50% / 100% 100%;
}
.carousel-control-prev-icon {
background-image: $carousel-control-prev-icon-bg;

Some files were not shown because too many files have changed in this diff Show More