Compare commits

...

268 Commits

Author SHA1 Message Date
XhmikosR 5816fae803 Bring in .bd-announcement fixes 2024-03-22 08:02:12 +02:00
XhmikosR b04b43619d Fix link and drop prettier crappy formatting 2024-03-21 16:38:44 +02:00
XhmikosR 00da6cc06b Drop slack 2024-03-21 16:38:12 +02:00
Mark Otto 1b8b70b067 NES fixes 2024-03-21 16:38:12 +02:00
Edward Ezekiel a8f4adc864 feat(eol): Add End of Life documentation page 2024-03-06 10:18:03 -06:00
Edward Ezekiel 6bbc12ba12 feat(EOL): Add announcement to Examples page 2024-03-06 09:48:11 -06:00
Edward Ezekiel 26f225831a feat(announcement): Add End of Life announcement 2024-03-05 13:37:35 -06:00
Jesse Mandel fa4fbc8798 Backport: NuGet Changes
Update authors and copyright to match npm, add repository reference. Also incorporates licensing expression change by @vanillajonathan (#37378)

Co-authored-by: Jesse Mandel <jesse.mandel@jdpa.com>
2022-11-09 09:17:19 +02:00
Louis-Maxime Piton 5aa7f72689 Change view in GitHub links (#37223) 2022-09-28 13:12:21 +02:00
XhmikosR e5643aaa89 Release v4.6.2 (#36725)
* Bump version to 4.6.2.

* Dist
2022-07-19 18:13:44 +03:00
Julien Déramond 82a1f334cf Docs: Capitalize Unicode (#36735) 2022-07-13 18:53:40 +03:00
Mark Otto 4954ea15fa Add Fathom to v4 (#36727) 2022-07-12 18:41:19 +03:00
XhmikosR fdf1c372d4 Update devDependencies (#36724)
* @babel/cli               ^7.17.10  →  ^7.18.6
* @babel/core               ^7.18.2  →  ^7.18.6
* @babel/preset-env         ^7.18.2  →  ^7.18.6
* @rollup/plugin-commonjs   ^22.0.0  →  ^22.0.1
* eslint                    ^8.17.0  →  ^8.19.0
* eslint-plugin-qunit        ^7.2.0  →   ^7.3.1
* hugo-bin                  ^0.88.2  →  ^0.89.0
* karma                     ^6.3.20  →   ^6.4.0
* lockfile-lint              ^4.7.4  →   ^4.7.6
* nodemon                   ^2.0.16  →  ^2.0.19
* postcss-cli                ^9.1.0  →  ^10.0.0
* rollup                    ^2.75.6  →  ^2.76.0
* stylelint                 ^14.9.0  →  ^14.9.1
* terser                    ^5.14.0  →  ^5.14.1
2022-07-12 15:36:38 +03:00
Julien Déramond 35be9e74af Docs: update clipboard.js to v2.0.11 2022-06-28 20:31:51 -07:00
XhmikosR def158dc10 Update devDependencies (#36522)
* eslint                           ^8.16.0  →  ^8.17.0
* hugo-bin                         ^0.87.1  →  ^0.88.2
* rollup                           ^2.74.1  →  ^2.75.6
* stylelint-config-twbs-bootstrap   ^3.1.0  →   ^4.0.0
* stylelint                        ^14.8.5  →  ^14.9.0
* terser                           ^5.13.1  →  ^5.14.0
2022-06-28 07:52:23 +02:00
Patrick H. Lauke 6fd203060b v4: Improve accessible name of version dropdown in docs navbar (#36504)
- add `sr-only` "Bootstrap", which will be part of the accessible name
- extra `sr-only` text to give some context - that the dropdown is about switching versions
- remove the redundant id/aria-labelledby for the dropdown
- change the control from `<a>` to `<button>`
2022-06-05 10:33:18 +01:00
Patrick H. Lauke d136302a57 v4 Docs: Update outdated ARIA/PF link, expand color contrast explanation in accessibility.md (#36492)
PF link is backport of https://github.com/twbs/bootstrap/pull/36489
change in `accessibility.md` is to bring this in line with existing v5 prose
2022-06-03 17:43:01 +01:00
Patrick H. Lauke b4c994d296 Remove confusing unnecessary id/aria-labelledby for dropdown menus (#36491)
v4 port of https://github.com/twbs/bootstrap/pull/36487
2022-06-03 17:28:18 +01:00
Julien Déramond 4e951f8bc9 Docs: fix some ARIA Authoring Practices Guides broken links (#36490) 2022-06-03 10:41:59 +01:00
Louis-Maxime Piton 8274bf25d0 Fixing tabs' tests (#36485) 2022-06-02 12:58:43 +03:00
Mark Otto 4444f090b6 Add horizontal collapse support 2022-06-01 20:14:35 -07:00
Julien Déramond 5968ef23ca Fix closing HTML tag in navs docs (#36466) 2022-05-31 17:40:36 +03:00
XhmikosR 261b418798 Update devDependencies 2022-05-26 08:00:04 +03:00
XhmikosR c043a75d53 Update GitHub actions 2022-05-26 08:00:04 +03:00
XhmikosR c1b42e3538 build/change-version.js: remove the executable flag 2022-05-26 08:00:04 +03:00
Patrick H. Lauke 7d57d9a68b Dynamic tabs: use buttons rather than links (backport to v4) (#33163)
* Manually backport 32630

Dynamic tabs: use buttons rather than links

* Tweak unit test

* Tweak unit tests

* More tweakage

* show() should also bail if `disabled` attribute is set

* Tweak tests

* Simplify test for relatedTarget

* Temporarily remove problematic test

(as i can't get local tests to run just noww)

* Revert previous

* test: fix broken test cases for tab.js

* test: fix role=tablist invalid on nav element

* test: prefer <div/> over <div></div>

* Manually backport 32630

Dynamic tabs: use buttons rather than links

* test: fix broken test cases for tab.js

* Fixes

* Remove and ignore lock file

Co-authored-by: alpadev <alpa.muc@gmail.com>
Co-authored-by: Mark Otto <markd.otto@gmail.com>
Co-authored-by: Mark Otto <markdotto@gmail.com>
2022-05-24 11:16:58 -07:00
Julien Déramond e4dc2e91a5 Doc: remove role="group" from some split drop* buttons (#36254) 2022-05-24 11:04:59 +03:00
Adrian Curtin 6a500849de Replace the deprecated color-adjust with print-color-adjust (#36283) 2022-05-24 10:36:27 +03:00
Wladyslaw Dudko d9481ee054 _custom-forms.scss: fix order of attributes (#36231) 2022-05-14 21:37:08 +03:00
XhmikosR d36b1a46cf Fix lint issues 2022-04-19 09:07:15 +03:00
XhmikosR 7613953998 Update devDependencies 2022-04-19 09:07:15 +03:00
XhmikosR 0090af6a9c package.json: add GitHub Sponsors and reorder properties (#35451) 2022-04-19 09:07:15 +03:00
XhmikosR bae047fcee Move linkinator to GitHub Actions. (#35573)
* Move linkinator to GitHub Actions.

* Remove `docs-linkinator` npm script since it's no longer used
2022-04-19 09:07:15 +03:00
pricop 3b63d509de Updated the small-font-size to use a round value
This is a backport from BS5 to BS4.

As per https://github.com/twbs/bootstrap/issues/35553

The ```small-font -size``` will actually increase from ```13px``` to ```14px``` with this proposed change. Personally I'd prefer keeping it the BS5 way (```14px```), as the text is more readable now.

If it's needed, I can do another PR with the ```$small-font-size:             .8125rem !default;``` to resemble BS4 more closely but I feel like this would be a move forward even for BS4.
2022-04-14 09:25:38 -07:00
Julien Déramond 5299abeeab Doc: Reorder alphabetically lists of components (#36128) 2022-04-08 16:30:58 +03:00
XhmikosR 349a373ff6 Update devDependencies
* @babel/cli                       ^7.16.0  →  ^7.16.7
* @babel/core                      ^7.16.5  →  ^7.16.7
* @babel/preset-env                ^7.16.5  →  ^7.16.7
* @rollup/plugin-node-resolve      ^13.1.1  →  ^13.1.2
* autoprefixer                     ^10.4.0  →  ^10.4.1
* eslint                            ^8.4.1  →   ^8.6.0
* eslint-plugin-import             ^2.25.3  →  ^2.25.4
* eslint-plugin-qunit               ^7.1.0  →   ^7.2.0
* eslint-plugin-unicorn            ^39.0.0  →  ^40.0.0
* hugo-bin                         ^0.78.1  →  ^0.79.2
* linkinator                       ^2.16.2  →   ^3.0.3
* node-sass                         ^7.0.0  →   ^7.0.1
* rollup                           ^2.61.1  →  ^2.63.0
* stylelint                        ^14.1.0  →  ^14.2.0
* stylelint-config-twbs-bootstrap   ^3.0.0  →   ^3.0.1

Also, remove the unused glob package.
2022-01-04 09:50:53 +02:00
XhmikosR 69c5dc8934 Bump copyright year to 2022 2022-01-04 09:50:53 +02:00
Patrick H. Lauke 8469f695f9 Strengthen and expand note about dynamic tabs with dropdown menus (#35588)
following on from https://github.com/twbs/bootstrap/pull/35213 this

- expands the note, making it clear it's not supported
- makes it a callout
2022-01-04 09:50:53 +02:00
XhmikosR bee3847e6d Add note to carousel crossfade docs about bg color (#35587) 2022-01-04 09:50:53 +02:00
Patrick H. Lauke a3d14bb7b7 Tweak toast docs (#35633)
- a few rewordings/tweaks
- add info about toasts with focusable/actionable controls (shouldn't autohide them)

manual backport of https://github.com/twbs/bootstrap/pull/33810
2022-01-03 10:15:29 +02:00
Julien Déramond 9c60983949 Backport #35556 (#35558)
* Use param to set Bootstrap version in Contents doc

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-12-16 11:22:03 +02:00
XhmikosR f7cb3639a7 Update devDependencies 2021-12-16 09:23:08 +02:00
XhmikosR c488b8fcc3 Update Stylelint and our config too 2021-12-16 09:23:08 +02:00
Ty Mick 0b3796e33d docs: Add responsive variations for align-content-between (#35532)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-12-16 09:23:08 +02:00
XhmikosR c24f751c63 JS tests: only test one Node.js version (#35481) 2021-12-16 09:23:08 +02:00
XhmikosR 33f37880df CI: add workflow_dispatch (#35454) 2021-12-16 09:23:08 +02:00
XhmikosR 9a5a5c57aa Remove the now outdated build/svgo.yml (#35447) 2021-12-16 09:23:08 +02:00
XhmikosR 7245437856 build/change-version.js: fix wrong map usage (#35395) 2021-12-16 09:23:08 +02:00
XhmikosR d99c820f9c README.md: wrap file contents in a details element (#35452)
Co-authored-by: Mark Otto <markd.otto@gmail.com>
2021-12-16 09:23:08 +02:00
Christian Oliff b81ce1f9e2 README.md remove broken "David DM" dependency badges (#35313) 2021-12-16 09:23:08 +02:00
Patrick H. Lauke 4097441977 Update links to CCA, MQ5 prefers-reduced-motion, evergreen WCAG urls, more resources (#35427)
Manual backport of https://github.com/twbs/bootstrap/pull/33797
2021-11-30 08:38:07 +02:00
pricop e87eeb4ad6 Fixed docs for Toasts referencing blur transparency (#35190) 2021-11-15 12:49:55 +02:00
XhmikosR 043a03c95a Release v4.6.1 (#35272)
* Bump version to v4.6.1

* Dist
2021-10-28 17:45:21 +03:00
Barabas ef6a418535 images.md: remove zero-width space (#35234)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-10-28 14:22:59 +03:00
XhmikosR 3f88326815 Update devDependencies (#35271)
* autoprefixer  ^10.3.7  →  ^10.4.0
* eslint         ^8.0.1  →   ^8.1.0
* karma          ^6.3.5  →   ^6.3.6
* rollup        ^2.58.0  →  ^2.58.3
2021-10-28 13:53:14 +03:00
XhmikosR 41330696b9 Update devDependencies and switch to Node.js 16/npm 8
* @babel/core                      ^7.15.5  →   ^7.15.8
* @babel/preset-env                ^7.15.6  →   ^7.15.8
* @rollup/plugin-commonjs          ^20.0.0  →   ^21.0.1
* @rollup/plugin-node-resolve      ^13.0.5  →   ^13.0.6
* autoprefixer                     ^10.3.6  →   ^10.3.7
* babel-plugin-istanbul             ^6.0.0  →    ^6.1.1
* clean-css-cli                     ^5.3.3  →    ^5.4.2
* eslint                           ^7.32.0  →    ^8.0.0
* eslint-config-xo                 ^0.38.0  →   ^0.39.0
* eslint-plugin-import             ^2.24.2  →   ^2.25.1
* eslint-plugin-qunit               ^6.2.0  →    ^7.0.0
* eslint-plugin-unicorn            ^36.0.0  →   ^37.0.1
* karma                             ^6.3.4  →    ^6.3.5
* linkinator                       ^2.14.0  →   ^2.14.4
* nodemon                          ^2.0.13  →   ^2.0.14
* postcss                           ^8.3.8  →   ^8.3.11
* postcss-cli                       ^9.0.0  →    ^9.0.1
* rollup                           ^2.57.0  →   ^2.58.0
* stylelint-config-twbs-bootstrap   ^2.2.3  →    ^2.2.4
* vnu-jar                           21.9.2  →  21.10.12
2021-10-22 17:07:51 +03:00
XhmikosR fc492edfa3 terser: specify 2 passes as it offers slightly better compression 2021-10-22 17:07:51 +03:00
XhmikosR fe73da982f JS: minor refactoring
* shorten block comments
* reorder constants
2021-10-22 17:07:51 +03:00
XhmikosR 4f0187c891 Revert "Bundlewatch: stop ignoring dependabot branches (#33192)" (#35069)
This reverts commit 5560c86070.
2021-10-22 17:07:51 +03:00
XhmikosR 6d0fd8c3a5 Backport #35074
sanitizer: add `sms` in the `SAFE_URL_PATTERN`
2021-10-22 17:07:51 +03:00
XhmikosR 7b3a47ee3d Update terser to v5.9.0. 2021-10-22 17:07:51 +03:00
Gaël Poupard e482fbb159 fix(input-group): custom-file with validation (#33239) 2021-10-21 09:00:22 +03:00
Julien Déramond 8133c3e5b2 Fix capitalization after period in Markdown files (#35112) 2021-10-05 17:51:44 +03:00
XhmikosR 44a01ec5b7 Update devDependencies (#35068)
* @babel/cli                   ^7.15.4  →  ^7.15.7
* @rollup/plugin-node-resolve  ^13.0.4  →  ^13.0.5
* autoprefixer                 ^10.3.4  →  ^10.3.6
* glob                          ^7.1.7  →   ^7.2.0
* nodemon                      ^2.0.12  →  ^2.0.13
* postcss                       ^8.3.6  →   ^8.3.8
* postcss-cli                   ^8.3.1  →   ^9.0.0
* qunit                        ^2.17.1  →  ^2.17.2
* rollup                       ^2.56.3  →  ^2.57.0
2021-09-28 18:32:57 +03:00
Julien Déramond 8ebd6d95d6 Remove extra spaces in Markdown files (#35047) 2021-09-28 12:22:52 +03:00
XhmikosR bdab948670 Remove unneeded conditional 2021-09-15 15:44:20 +03:00
XhmikosR af52795501 Remove duplicate test. 2021-09-15 15:44:20 +03:00
XhmikosR f6ff736a59 Change test description so that it's unique 2021-09-15 15:44:20 +03:00
XhmikosR 77e0855e5e Merge duplicate test. 2021-09-15 15:44:20 +03:00
XhmikosR ed62ab6e41 Remove commented out test 2021-09-15 15:44:20 +03:00
XhmikosR d4e162f4ac Skip tests if attachShadow is not present 2021-09-15 15:44:20 +03:00
XhmikosR 551f37aff6 tests: comply to the new rules
Use `assert.strictEqual`/`assert.true`/`assert.false`
2021-09-15 15:44:20 +03:00
XhmikosR 5391ecdfde Add eslint-plugin-qunit 2021-09-15 15:44:20 +03:00
XhmikosR e202996a2b Update devDependencies
* @babel/cli                   ^7.14.8  →  ^7.15.5
* @babel/core                  ^7.14.8  →  ^7.15.4
* @babel/preset-env            ^7.14.8  →  ^7.15.6
* @rollup/plugin-commonjs      ^19.0.1  →  ^20.0.0
* @rollup/plugin-node-resolve  ^13.0.2  →  ^13.0.4
* autoprefixer                 ^10.3.1  →  ^10.3.4
* clean-css-cli                 ^5.3.0  →   ^5.3.3
* eslint                       ^7.31.0  →  ^7.32.0
* eslint-config-xo             ^0.37.0  →  ^0.38.0
* eslint-plugin-import         ^2.23.4  →  ^2.24.2
* eslint-plugin-unicorn        ^34.0.1  →  ^36.0.0
* hugo-bin                     ^0.74.0  →  ^0.76.1
* qunit                        ^2.16.0  →  ^2.17.1
* postcss                       ^8.3.5  →   ^8.3.6
* rollup                       ^2.53.3  →  ^2.56.3
* vnu-jar                      21.6.11  →   21.9.2
2021-09-15 15:31:00 +03:00
XhmikosR cb55e389b8 Update CodeQL workflow (#34961) 2021-09-15 15:31:00 +03:00
XhmikosR 08a550a044 Backport #34937
Update a URL mentioning dead name
2021-09-15 15:31:00 +03:00
XhmikosR b0cd2078f7 docs: backport layouts updates from the main branch 2021-09-15 15:31:00 +03:00
XhmikosR 9cdfbc06ce docs-navbar: use the config variable and update to 5.1 2021-09-15 15:31:00 +03:00
XhmikosR f9a79141be npm scripts: add aggregate-output (#32907) 2021-09-15 15:31:00 +03:00
Gaël Poupard 1db75d111b More concise improvements for add() and subtract() (#34432) 2021-09-15 15:31:00 +03:00
Mark Otto 01036ff2ef Update description of active buttons (#34966) 2021-09-14 15:05:07 +03:00
Patrick H. Lauke f4a1a35cf2 v4: Disabled link cleanup (#34924)
manual backport of #34886

per https://www.w3.org/TR/html-aria/#docconformance

> It is NOT RECOMMENDED to use `aria-disabled="true"` on an `a` element with an `href` attribute.
>
>NOTE
>If a link needs to be "disabled", remove the `href` attribute.

This PR removes the unnecessary `href="#"`, `tabindex="-1"`, and `aria-disabled="true"` from disabled links in both docs pages and examples. `aria-disabled="true"` *is* kept for disabled link-based buttons (that have `role="button"`) as there it's appropriate to use (you *want* to convey to assistive technologies that this thing you're claiming is a button is also disabled at the moment)

Further, the PR extends the "Link functionality caveat" to show the "proper" way (removing `href` and adding `.disabled` class only) to disable a link, but then explains what to do if that's not possible (and then keeps an example with all the traditional `href="#" tabindex="-1" aria-disabled="true"`, but explains clearly that it's not ideal). Same sort of explanation is also added to the pointer event utilities page
2021-09-09 14:49:06 +03:00
XhmikosR 408252eff1 Move RFS version in config.yml and update it. 2021-09-08 09:06:42 +03:00
XhmikosR 94b310dc6f Update RFS to v8.1.0 2021-09-08 09:06:42 +03:00
Mark Otto 8dec3d0a34 Replace Sass division with multiplication and custom divide() function
Fixes #34353.

Co-Authored-By: Slaven Tomac <slaventomac@gmail.com>
2021-09-08 09:06:42 +03:00
alpadev b010a6f9f4 fix(modal): change the order we return from show() method (#34087)
In case of a modal with fading enabled, a prevented show event can cause show to not showing the modal anymore.

See #34055

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-07-25 20:36:11 +03:00
XhmikosR 5d24fef741 Update devDependencies
* @babel/cli                       ^7.14.3  →  ^7.14.8
* @babel/core                      ^7.14.3  →  ^7.14.8
* @babel/preset-env                ^7.14.2  →  ^7.14.8
* @rollup/plugin-commonjs          ^19.0.0  →  ^19.0.1
* @rollup/plugin-node-resolve      ^13.0.0  →  ^13.0.2
* autoprefixer                     ^10.2.5  →  ^10.3.1
* eslint                           ^7.26.0  →  ^7.31.0
* eslint-config-xo                 ^0.36.0  →  ^0.37.0
* eslint-plugin-import             ^2.23.2  →  ^2.23.4
* eslint-plugin-unicorn            ^31.0.0  →  ^34.0.1
* globby                           ^11.0.3  →  ^11.0.4
* hugo-bin                         ^0.71.1  →  ^0.73.0
* karma                             ^6.3.2  →   ^6.3.4
* karma-firefox-launcher            ^2.1.0  →   ^2.1.1
* linkinator                       ^2.13.6  →  ^2.14.0
* nodemon                           ^2.0.7  →   ^2.0.12
* node-sass                         ^6.0.0  →   ^6.0.1
* postcss                           ^8.3.0  →   ^8.3.5
* qunit                            ^2.15.0  →  ^2.16.0
* rollup                           ^2.48.0  →  ^2.53.3
* stylelint-config-twbs-bootstrap   ^2.2.0  →   ^2.2.3
* vnu-jar                           21.4.9  →  21.6.11
2021-07-21 16:20:01 +03:00
XhmikosR 70267da28e CI: make use of the actions/setup-node's cache option (#34453) 2021-07-21 16:20:01 +03:00
dependabot[bot] 9cf31d9f8e Bump coverallsapp/github-action from 1.1.2 to 1.1.3 (#34491)
Bumps [coverallsapp/github-action](https://github.com/coverallsapp/github-action) from 1.1.2 to 1.1.3.
- [Release notes](https://github.com/coverallsapp/github-action/releases)
- [Commits](https://github.com/coverallsapp/github-action/compare/v1.1.2...1.1.3)

---
updated-dependencies:
- dependency-name: coverallsapp/github-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-07-21 16:20:01 +03:00
Kijima Daigo a6618c437b CONTRIBUTING.md: fix broken link to README.md (#34389) 2021-07-21 16:20:01 +03:00
XhmikosR 6c9951203c Backport #34336
Remove unneeded `.text-white-50` CSS rule

This is already part of Bootstrap 4.6 and 5.0.
2021-07-21 16:20:01 +03:00
XhmikosR ec986fcb57 Manually backport #34075 and #34279
Improve and clean up vnu-jar.js
2021-07-21 16:20:01 +03:00
XhmikosR c272eb80bf Update Hugo config and sitemap.xml (#34074) 2021-07-21 16:20:01 +03:00
Gaël Poupard ca3ff6dc29 Handle complex expressions in add() & subtract() (#34047) 2021-07-21 16:20:01 +03:00
XhmikosR 0ef990f18e Replace Freenode with Libera.Chat in the remaining files (#34250) 2021-07-21 16:20:01 +03:00
Christian Oliff 6c2c14d887 Remove print thead rule (#34426)
The `thead` rule is safe to remove -- it was a workaround for browsers that didn't conform to this part of the CSS 2.1 spec. (https://www.w3.org/TR/CSS21/tables.html#table-display)
In practice, this meant IE 6 & IE 7.

(thanks to @mattbrundage for this PR upstream for the main.css project (https://github.com/h5bp/main.css/pull/101)
2021-07-08 08:28:53 +03:00
k-utsumi 086c0bfc25 🐛 Enable 0.x with negative margins @ v4 (#33593)
* 🐛 Enable `0.x` with negative margins @ v4

I set it as below, but no negative margin was added.
`$spacers: (0\.5: ($spacer * .125));`

After investigating, it seems that `0 \ .5` is also evaluated as 0.
So I changed it to string comparison.

HTML example: `<img class="mt-n0.5">`

* 💚 Clear CI errors
2021-06-24 10:57:47 +03:00
Christian Oliff 538ea32cb7 Fix repetition in the description. 2021-06-09 14:08:50 -07:00
Gaël Poupard e376773ccc docs(color): wrong secondary hex code (#34159)
Closes #34146 

---

Not sure what happened but indeed, [our current `$secondary` is not what's shown in docs](https://github.com/twbs/bootstrap/blob/c2f949c1fdad09e30793b533e5502808c5e2d423/scss/_variables.scss#L68).
2021-06-02 04:59:48 +02:00
XhmikosR c2f949c1fd Update devDependencies
* @babel/cli                       ^7.13.14  →   ^7.14.3
* @babel/core                       ^7.14.0  →   ^7.14.3
* @babel/preset-env                 ^7.14.1  →   ^7.14.2
* @rollup/plugin-commonjs           ^18.0.0  →   ^19.0.0
* @rollup/plugin-node-resolve       ^11.2.1  →   ^13.0.0
* clean-css-cli                      ^5.2.2  →    ^5.3.0
* eslint                            ^7.23.0  →   ^7.26.0
* eslint-config-xo                  ^0.35.0  →   ^0.36.0
* eslint-plugin-import              ^2.22.1  →   ^2.23.2
* eslint-plugin-unicorn             ^29.0.0  →   ^31.0.0
* glob                               ^7.1.6  →    ^7.1.7
* hugo-bin                          ^0.70.0  →   ^0.71.1
* node-sass                          ^5.0.0  →    ^6.0.0
* postcss                            ^8.2.9  →    ^8.3.0
* qunit                             ^2.14.1  →   ^2.15.0
* rollup                            ^2.44.0  →   ^2.48.0
* stylelint                        ^13.12.0  →  ^13.13.1
* stylelint-config-twbs-bootstrap    ^2.1.0  →    ^2.2.0
* vnu-jar                            21.2.5  →    21.4.9
2021-05-21 08:19:22 +03:00
midzer fb604bc03f Replace freenode with libera IRC server (#34050) 2021-05-21 08:19:22 +03:00
XhmikosR 68f6aa6780 CI: remove Node.js 10 (#33923)
Node.js 10 is EOL since 30/04/2021
2021-05-21 08:19:22 +03:00
Mark Otto f61c2ed8f1 Spinner alignment changes 2021-05-21 08:19:22 +03:00
XhmikosR 6ed3845f31 JS tests: add Node.js 16 (#33720) 2021-05-21 08:19:22 +03:00
XhmikosR 5e69eab37a Update anchor.js to v4.3.1. (#33668) 2021-05-21 08:19:22 +03:00
XhmikosR 072a0402d8 docs: update clipboard.js to v2.0.8 (#33583) 2021-05-21 08:19:22 +03:00
Mark Otto 767856c7b8 Backport #33782 to v4 2021-04-30 14:40:27 -07:00
Carson Sievert 4b5eb3ca51 Backport #33634 (#33649)
Dropdown: support `.dropdown-item` wrapped in `<li>` tags
2021-04-28 07:02:22 +03:00
Patrick H. Lauke d967553913 Remove aria-haspopup from dropdowns (#33624)
`aria-haspopup="true"` is really intended to signal that an ARIA `menu` will be opened on activation. as a result, some assistive technologies will announce controls with `aria-haspopup="true"` as a menu or menu item (e.g. JAWS and NVDA).
In addition, `aria-haspopup` seems to trigger a bug in Edge/Narrator where the `aria-expanded` state is not correctly announced at the moment when `aria-haspopup` is present.
This now makes the dropdown button more like a generic disclosure widget control - see also https://www.w3.org/TR/wai-aria-practices-1.2/examples/disclosure/disclosure-navigation.html01
2021-04-15 06:35:54 +03:00
Stefano Bartoletti 016f8fff11 fix typo in docs (#33562) 2021-04-06 17:55:29 +03:00
XhmikosR 67f873f41a Update devDependencies
* @babel/cli                    ^7.13.0  →  ^7.13.14
* @babel/core                   ^7.13.8  →  ^7.13.14
* @babel/preset-env             ^7.13.9  →  ^7.13.12
* @rollup/plugin-commonjs       ^17.1.0  →   ^18.0.0
* @rollup/plugin-node-resolve   ^11.2.0  →   ^11.2.1
* autoprefixer                  ^10.2.4  →   ^10.2.5
* clean-css-cli                 ^5.2.0  →    ^5.2.2
* eslint                        ^7.21.0  →   ^7.23.0
* eslint-plugin-unicorn         ^28.0.2  →   ^29.0.0
* globby                        ^11.0.2  →   ^11.0.3
* hugo-bin                      ^0.69.0  →   ^0.70.0
* karma                         ^6.1.1  →    ^6.3.2
* postcss                       ^8.2.6  →    ^8.2.9
* qunit                         ^2.14.0  →   ^2.14.1
* rollup                        ^2.40.0  →   ^2.44.0
* stylelint                     ^13.11.0  →  ^13.12.0

Also lock jQuery to v3.5.1 since 3.6.0 has a bug that affects at least our tests
2021-04-05 07:44:39 +03:00
XhmikosR a06c2b6706 BrowserStack: test on iPhone 12 (#33398) 2021-04-05 07:44:39 +03:00
XhmikosR b58ea4a42e README.md: use shields.io for the tests badge too (#33401) 2021-04-05 07:44:39 +03:00
XhmikosR 459cc246b9 Improve change-version.js (#33148)
* switch to async/await
* remove shelljs
* switch to globby; supports .gitignore out of the box
* don't write any files to the disk if they are indentical
* add two more cmd switches: --dry and --verbose
* strip leading "v" from version arguments so that we don't end up with duplicate `v`s
2021-04-05 07:44:39 +03:00
XhmikosR 90228a4743 Delete the unused build/ship.sh (#33326) 2021-04-05 07:44:39 +03:00
Mark Otto 51c8b91d91 Manually backport #33386 to v4 to properly document Sass default variables 2021-03-18 18:57:12 -07:00
Patrick H. Lauke e16b06929a Manual backport of #32627 (#33165)
Carousel: use buttons, not links, for prev/next controls
2021-03-11 09:23:46 +02:00
XhmikosR 7365592fbe Update .bundlewatch.config.json 2021-03-10 22:38:38 -08:00
Mark Otto 40da702f80 Adjust feedback icon position and padding for select.form-control 2021-03-10 22:38:38 -08:00
XhmikosR a59d436518 Update devDependencies
* @babel/cli             ^7.12.16  →   ^7.13.0
* @babel/core            ^7.12.16  →   ^7.13.8
* @babel/preset-env      ^7.12.16  →   ^7.13.9
* eslint                  ^7.20.0  →   ^7.21.0
* eslint-config-xo        ^0.34.0  →   ^0.35.0
* eslint-plugin-unicorn   ^28.0.1  →   ^28.0.2
* hugo-bin                ^0.68.0  →   ^0.69.0
* linkinator              ^2.13.4  →   ^2.13.6
* lockfile-lint            ^4.3.7  →    ^4.6.2
* rollup                  ^2.39.0  →   ^2.40.0
* stylelint              ^13.10.0  →  ^13.11.0
2021-03-02 17:53:37 +02:00
XhmikosR cce467616f CodeQL: skip dependabot PRs too (#33130) 2021-03-02 17:53:37 +02:00
XhmikosR 58192b3cac Bundlewatch: stop ignoring dependabot branches (#33192) 2021-03-02 17:53:37 +02:00
XhmikosR cf70a58149 Rename _gh_pages to _site. (#33129) 2021-03-02 17:53:37 +02:00
XhmikosR 6692d1ed47 linkinator: replace --silent with --verbosity (#33100) 2021-03-02 17:53:37 +02:00
Nikon the Third 7ad0625b8d Adjust SAFE_URL_PATTERN regex for use with test method. (#33153)
The `test` method on regexes does not behave like `match` on strings
for checks if the regex matches when the global modifier (g) is present.

Also adds a unit test on tooltips for sanitizing the same template twice.

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-03-02 17:16:09 +02:00
XhmikosR 8ec32eec44 Update clean-css-cli to v5.2.0 (#33144)
* Update clean-css-cli to v5.2.0

* Enable clean-css's batch flag
2021-02-18 20:59:05 +02:00
XhmikosR c341721439 Partially backport #33045
Simplify karma.conf.js

`customLaunchers` does not seem to be needed.
2021-02-17 06:54:38 +02:00
XhmikosR 23a26e12ff Update devDependencies
* @babel/cli                   ^7.12.13  →  ^7.12.16
* @babel/core                  ^7.12.13  →  ^7.12.16
* @babel/preset-env            ^7.12.13  →  ^7.12.16
* @rollup/plugin-babel           ^5.2.3  →    ^5.3.0
* @rollup/plugin-node-resolve   ^11.1.1  →   ^11.2.0
* eslint                        ^7.19.0  →   ^7.20.0
* eslint-plugin-unicorn         ^27.0.0  →   ^28.0.1
* karma                          ^6.0.4  →    ^6.1.1
* postcss                        ^8.2.5  →    ^8.2.6
* rollup                        ^2.38.5  →   ^2.39.0
* stylelint                     ^13.9.0  →  ^13.10.0

Kept clean-css-cli to 4.x for the time being.
2021-02-17 06:54:38 +02:00
XhmikosR bb5b5891da Backport #32940
* Update the default value for $enable-deprecation-messages

As seen in the https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss,
the `$enable-deprecation-messages` variable is set to `true` by default.
2021-02-17 06:54:38 +02:00
Patrick H. Lauke 210cb72872 Add a callout for the sanitizer in popovers and tooltips (#32272)
* Add a callout for the sanitizer in popovers and tooltips

* Add second reference to sanitizer in the options

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-02-17 06:54:38 +02:00
XhmikosR 6487ba72f5 vnu-jar.js: quote vnu path (#33016)
Should work now with folders with spaces
2021-02-17 06:54:38 +02:00
XhmikosR 9c264dbea5 CI: remove the cache fallback and shorten cache key (#33012) 2021-02-17 06:54:38 +02:00
XhmikosR 254de4cb42 CI: switch to the coverallsapp/github-action tag (#32919)
Unfortunately, they don't offer a `v1` tag
2021-02-17 06:54:38 +02:00
XhmikosR a824d09ecd change-version: remove vendor, add resources (#32917) 2021-02-17 06:54:38 +02:00
Wesley Haines 9722106781 Fix minor visual bug in FF caused by moz-focusring (v4) (#32821)
Avoid bug in Firefox where text appears "noisy" due to text-shadow applying to focused form fields.
2021-02-17 06:00:37 +02:00
Gaël Poupard 030af97fad fix(forms): input-group and validation icons (#32968)
Fixes #30131

Issue mentions `form-control` but it impacts `.custom-select` — but not `textarea` since it has a qualifying type selector that increases its specificty.

So another way could be to set `select.custom-select` and `input.form-control`. Would there be any other tag concerned by those classes?

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-02-15 21:13:43 +02:00
XhmikosR 29674b8426 Simplify bugify.html (#33063)
* use `in` instead of `strings.Contains` since the latter is not documented
* use `cond`
2021-02-15 21:08:44 +02:00
XhmikosR ce8af15ad1 Update devDependencies (#32967)
* @babel/cli                  ^7.12.10  →  ^7.12.13
* @babel/core                 ^7.12.10  →  ^7.12.13
* @babel/preset-env           ^7.12.11  →  ^7.12.13
* @rollup/plugin-babel          ^5.2.2  →    ^5.2.3
* @rollup/plugin-commonjs      ^17.0.0  →   ^17.1.0
* @rollup/plugin-node-resolve  ^11.1.0  →   ^11.1.1
* autoprefixer                 ^10.2.3  →   ^10.2.4
* eslint                       ^7.18.0  →   ^7.19.0
* karma                         ^5.2.3  →    ^6.0.4
* karma-qunit                   ^4.1.1  →    ^4.1.2
* linkinator                    2.11.2  →   ^2.13.4
* postcss                       ^8.2.4  →    ^8.2.5
* rollup                       ^2.38.0  →   ^2.38.5
* vnu-jar                      20.6.30  →    21.2.5
2021-02-09 07:50:00 +02:00
pricop 72a9fb4624 _variables.scss: add missing newline before new section (#32868) 2021-02-08 17:19:46 +02:00
XhmikosR 2267193d8f Switch to jsDelivr for jQuery too. (#32918) 2021-01-28 23:26:39 +02:00
XhmikosR 17d8fba548 Update devDependencies (#32852)
Pin karma and linkinator due to failures
2021-01-27 18:37:18 +02:00
XhmikosR 6ffb0b48e4 Release v4.6.0. (#32726)
* Bump version to v4.6.0.

* Dist
2021-01-19 18:16:38 +02:00
XhmikosR 9d87bd7a30 Backport #32037 (#32833)
* Backport #32037

Add `.navbar-nav-scroll` for vertical scrolling of navbar content

* drop the css var for a Sass css

Co-authored-by: Mark Otto <markdotto@gmail.com>
2021-01-19 08:18:19 +02:00
Mark Otto 9c4abcc6a1 Backport #32759 (#32832)
Mention CSP and embedded SVGs in v4 docs
2021-01-19 07:22:27 +02:00
XhmikosR d2477abecd Backport #32760 (#32827)
Add a live toast example to the docs
2021-01-18 20:59:59 +02:00
voltaek ee282aff27 Docs: Sass implementation and rounding precision (#32791)
* Backport of changes to v5 docs that updated and clarified information about the Sass compiler used and the minimum rounding precision we recommend with it.

Co-authored-by: Mark Otto <otto@github.com>
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-17 20:59:11 +02:00
Mark Otto 87e42ce7c5 Lighten disabled dropdown text to $gray-500
Fixes #32474
2021-01-15 09:22:27 +02:00
XhmikosR 5a17956e5e Backport #32469 and #32799
Improve zip-examples.js by only including the assets we need
2021-01-15 09:22:27 +02:00
Mark Otto 05a108b3d5 Document some basic code conventions for us (#32778)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-15 09:22:27 +02:00
XhmikosR ec1d745c10 CI: change Node.js to 14 (#32796)
This is so that it's consistent with the JS workflow thus the cache should match.
2021-01-15 09:22:27 +02:00
Mark Otto d674c33a04 Backport #32795 (#32809)
* Clarify Sass import and customize docs for how to modify variable defaults

* Add an npm starter project callout to a few pages
2021-01-15 09:16:32 +02:00
Patrick H. Lauke 80aefd862c Remove role="button" from CTA links in carousel example (#32789)
They're links, acting as links. Just because they're styled as buttons visually (as is often the case for "Call to action" (CTA) links) doesn't mean they need/get `role="button"`
2021-01-14 12:19:19 +02:00
XhmikosR 2ed7504783 Update devDependencies 2021-01-13 11:03:32 +02:00
XhmikosR aeccf0e270 Stylelint: disallow some property values (#32756)
* `border: none`
* `outline: none`
2021-01-13 11:03:32 +02:00
Mark Otto 17521ed43a Mention stretched-link constraints with table elements (#32761)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-13 11:03:32 +02:00
XhmikosR da458176f3 GitHub Actions cleanup (#32755)
* lowercase `runner.os`
* remove `CI` environment variable since it's already set by the runner
2021-01-13 11:03:32 +02:00
Patrick H. Lauke 67c2f2c965 Darken dropdown item hover style
Backport of https://github.com/twbs/bootstrap/pull/32754
2021-01-13 11:03:32 +02:00
Patrick H. Lauke e7cbb59d53 Consistently use outline:0 rather than outline:none
Manual backport of https://github.com/twbs/bootstrap/pull/32751 (which has not been merged yet, but assume it will shortly)
2021-01-13 11:03:32 +02:00
Patrick H. Lauke dfe4810199 Suppress focus outline for buttons when it shouldn't be visible in Chromium
Manual backport of https://github.com/twbs/bootstrap/pull/32689
2021-01-13 11:03:32 +02:00
Patrick H. Lauke 4e6c981f4e Remove old/unnecessary reboot bug fix
Manual backport of https://github.com/twbs/bootstrap/pull/32631
2021-01-13 11:03:32 +02:00
XhmikosR 2e8f70f5a1 Backport #32737
package.json: move `version_short` variable under the `config` object

This is so that it works on npm 7.x too.
2021-01-13 11:03:32 +02:00
XhmikosR 0f1069a32e Update karma config
* rename constants
* enforce the constants to be Boolean
* use the coverage plugin only one time, on the latest jQuery run
* fix karma `logLevel`
2021-01-13 10:49:09 +02:00
XhmikosR f8da510367 karma: run tests in parallel 2021-01-13 10:49:09 +02:00
XhmikosR 37186db5fc docs: add v5.0 in versions (#32728) 2021-01-08 21:03:22 +02:00
XhmikosR 6b788acf63 Update devDependencies
* @babel/cli                   ^7.12.8  →  ^7.12.10
* @babel/core                  ^7.12.8  →  ^7.12.10
* @babel/preset-env            ^7.12.7  →  ^7.12.11
* @rollup/plugin-babel          ^5.2.1  →    ^5.2.2
* @rollup/plugin-commonjs      ^16.0.0  →   ^17.0.0
* @rollup/plugin-node-resolve  ^10.0.0  →   ^11.0.1
* autoprefixer                 ^10.0.2  →   ^10.2.1
* cross-env                     ^7.0.2  →    ^7.0.3
* eslint                       ^7.14.0  →   ^7.17.0
* eslint-config-xo             ^0.33.1  →   ^0.34.0
* eslint-plugin-unicorn        ^23.0.0  →   ^25.0.1
* find-unused-sass-variables    ^3.0.0  →    ^3.1.0
* hugo-bin                     ^0.66.2  →   ^0.68.0
* linkinator                    ^2.2.2  →   ^2.11.2
* nodemon                       ^2.0.6  →    ^2.0.7
* postcss                      ^8.1.10  →    ^8.2.3
* postcss-cli                   ^8.3.0  →    ^8.3.1
* qunit                        ^2.12.0  →   ^2.13.0
* rollup                       ^2.33.3  →   ^2.36.1
2021-01-08 12:04:37 +02:00
XhmikosR cafcca31ac Backport #32423
Add two new variables for pagination border-radius values
2021-01-08 12:04:37 +02:00
XhmikosR b633c2befe Backport #32632
Docs: Tweak the wording for collapse to indicate button is preferred/more semantic
2021-01-08 12:04:37 +02:00
XhmikosR 4540436f3d Backport #32685
Clarify the `$enable-shadows` option in our docs
2021-01-08 12:04:37 +02:00
XhmikosR 3768b6e5b6 Backport #32713
Bump copyright year to 2021
2021-01-08 12:04:37 +02:00
Patrick H. Lauke 264a412589 Remove incorrect mention of dropdowns for dynamic tab behavior (#32634)
While technically it still works, we're already saying authors shouldn't do it later on, and we removed any examples of this. This was a straggler.

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-08 12:04:37 +02:00
XhmikosR 1141a51789 CI: update to actions/setup-node@v2 (#32635) 2021-01-08 12:04:37 +02:00
XhmikosR ccee913e59 Tooltips: add missing space (#32529) 2021-01-08 12:04:37 +02:00
XhmikosR 378f3939c8 Backport #32489
Fix popover docs example
2021-01-08 12:04:37 +02:00
XhmikosR bb99676a8a BrowserStack: test on macOS Catalina instead of High Sierra (#32486) 2021-01-08 12:04:37 +02:00
Patrick H. Lauke 9fbf50c3ce Docs: style clipboard button on :focus, not just :hover (#32461)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-08 12:04:37 +02:00
XhmikosR 984aacc32f Update CodeQL Action (#32452) 2021-01-08 12:04:37 +02:00
XhmikosR b0e7e02ab6 CI: add a 30-min timeout for BrowserStack (#32238) 2021-01-08 12:04:37 +02:00
XhmikosR fcfd2ce4b2 CONTRIBUTING: mention dist files (#32314)
* CONTRIBUTING: mention dist files

* Update CONTRIBUTING.md

Co-authored-by: Mark Otto <markd.otto@gmail.com>
2021-01-08 12:04:37 +02:00
Christian Oliff fca04236ad Remove duplicated 'follow Bootstrap on Twitter' link in Community section (#32399)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2021-01-08 12:04:37 +02:00
XhmikosR 810de41bc3 build-plugins: switch to "bundled" for babel helpers (#32312) 2021-01-08 12:04:37 +02:00
XhmikosR 307c08af42 README: fix path to search.js (#32257) 2021-01-08 12:04:37 +02:00
XhmikosR 4620b9838b karma: add v4 in Browserstack build ID (#32502) 2021-01-08 10:05:56 +02:00
Aleksandr Gorbatov d1e0610a45 docs: Add Russian translation (#32253) 2021-01-08 09:53:22 +02:00
Patrick H. Lauke f1b2ed93df v4: Add an actual data-touch="false" example in the carousel docs (#32639)
* v4: Add an actual `data-touch="false"` example in the carousel docs

Backport of https://github.com/twbs/bootstrap/pull/32638

* Remove data-ride from example carousel

* Correct attribute table explanation and remove slide class from example

i believe the correct option is `slide` here, not `ride`.
the `if "carousel"` bit was rather unclear/confusing

* Edits...

sorry, trying to make sense of our quirky carousel stuff, it seems some illogical things have been there ever since

* Add data-interval to suppress autoplay

* Tweak carousel options formatting

* Update site/content/docs/4.5/components/carousel.md

Co-authored-by: Mark Otto <markd.otto@gmail.com>

* Tweak language

mostly based on @mdo's suggestion, but also adds the word "attribute" after `data-ride` for better flow/legibility

Co-authored-by: Mark Otto <markd.otto@gmail.com>
2021-01-05 23:42:55 +00:00
Patrick H. Lauke 4fc35bdc3c v4 backport: Replace Lorem Ipsum placeholder text with more representative (or at least english language) text (#32462)
Backport and expansion (for v4) of #32246 and #32479
2020-12-15 11:06:00 +02:00
Patrick H. Lauke 5db105e587 Add mention of the bs-custom-file-input plugin needed for the custom file input (#32457) 2020-12-15 09:22:34 +02:00
Kyle Tsang 1897b4cd89 v4: Move negative margin-bottom from .nav-item to .nav-link (#32211)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-12-10 11:02:28 +02:00
Mark Otto 17bb67dd5b Add hex values to colors (#32411) 2020-12-10 11:01:13 +02:00
XhmikosR fbfaba5bb8 Revert colors.yml accidental changes (#32206)
* Revert colors.yml accidental changes

* Bring colors data files up to par with the vars
2020-12-10 00:42:38 +02:00
Gaël Poupard 53542dc027 Remove useless .text-left in Layout / Overview (#32363) 2020-12-08 08:59:13 +02:00
Rohit Sharma 8e59752ee1 Partially backport #32217 (#32225)
Remove unnecessary `_getCustomClass` method.

`customClass` will be in the configuration already, even if it is provided in the data attributes, and jQuery's [`addClass()`](https://api.jquery.com/addclass/) method will handle it, either `this.config.customClass` is a function or a class name (even if it is a blank string).

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-25 09:35:36 +02:00
Rohit Sharma 22168e9b15 Fix typos (#32247) 2020-11-24 15:58:47 +02:00
XhmikosR 6f58383f5a Update codeql.yml (#32125)
Specify the branches and clean up the comments
2020-11-24 08:40:11 +02:00
XhmikosR 90ad4ffc82 introduction: split comments (#32223) 2020-11-24 08:40:11 +02:00
XhmikosR b45b5e9e65 Update _syntax.scss (#32117)
* Update _syntax.scss with the latest chroma selectors

* Sort selectors

* Remove no longer needed chroma workaround

* remove comments
2020-11-24 08:40:11 +02:00
XhmikosR c9876ed15b CI: specify FORCE_COLOR:2 (#32222)
This should show any colors in the output
2020-11-24 08:40:11 +02:00
XhmikosR b26768ee42 postcss.config.js: remove arrow return (#32235) 2020-11-24 08:40:11 +02:00
XhmikosR 9260427a34 Update devDependencies 2020-11-24 08:40:11 +02:00
XhmikosR 398ddedac7 Manually backport #32226
docs: use `event` instead of `e`
2020-11-24 08:40:11 +02:00
XhmikosR 57e045f0ab Backport #32224
Be consistent with Popper's name.
2020-11-24 08:40:11 +02:00
Noah Rosenzweig 631b5d4df1 Improve build/generate-sri.js regex (#29753)
When using single-quotes in config.yml, the previous
regular expression in build/generate-cli.js wasn't working correctly,
it was replacing ALL string values with hashes.
Now both double- and single-quotes can be used in config.yml,
and the RegExp will work as expected.

Also, allow trailing whitespaces and empty ("") values to be matched.

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-24 08:40:11 +02:00
XhmikosR 13486b8e27 examples: add the version number in title (#32198) 2020-11-24 08:40:11 +02:00
XhmikosR aed84c9430 Backport #32189
docs(dropdowns): clarify where is `.show` applied
2020-11-24 08:40:11 +02:00
XhmikosR 7eee78c517 Backport #32178 and #32182
Handle Chromium to run Karma
2020-11-24 08:40:11 +02:00
Rohit Sharma bfb773d64b Backport #32179 (#32220)
Don't hide modal when `config.keyboard` is false
2020-11-21 22:14:28 +02:00
James Remeika 2d8c02eb10 tooltip/popover: add a customClass option (#31834)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-20 11:56:16 +02:00
XhmikosR ffa88deb85 docs: update selector CodePen example (#32202)
Moving it to the CodePen org so that we can all edit it.
2020-11-20 11:36:35 +02:00
XhmikosR 6bc18dc113 scss: remove needless Stylelint disables (#32212) 2020-11-20 09:54:33 +02:00
XhmikosR e567b9a7ab Backport #32158 (#32203)
Switch to jsDelivr for the remaining docs assets

Also, update feather icons and chart.js
2020-11-19 20:35:28 +02:00
Patrick H. Lauke e5b5881f8c Add overflow suppression to custom file label (#32160)
Avoids unsightly spilling out of long filename text, particularly for multi file inputs

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-19 16:29:57 +02:00
XhmikosR 052f72d360 Use the example shortcode in more places
Now, it's safe to do use it since it covers more cases
2020-11-19 11:22:22 +02:00
XhmikosR 764184fc43 Fix syntax highlighting language 2020-11-19 11:22:22 +02:00
XhmikosR b46f05a948 Switch to Hugo
This commit includes all the needed workarounds and most changes from the main branch for everything to work, like:

* removing empty lines in raw HTML that break output
* read .browserslistrc, CSS variables from disk instead of duplicating it
* using Hugo mounts
* using Hugo for the docs CSS/JS
* move ToC Sass code to a separate file while adapting it for Hugo

Thus, this patch makes our npm scripts faster since lint runs on one step and there's no separate docs assets processing.
2020-11-19 11:22:22 +02:00
XhmikosR ae87f8f7ce homepage: split snippets and show copy buttons (#32196) 2020-11-19 11:13:08 +02:00
XhmikosR 5fd0c239bc alerts.md: use Markdown (#32193) 2020-11-18 21:29:41 +02:00
Mark Otto 4bdaa2604f Mention user-select-all support in docs (#32151) 2020-11-13 20:49:32 +02:00
XhmikosR 5795e421ac Manually backport #32121 (#32141)
Use correct value order

Co-authored-by: Martijn Cuppens <martijn.cuppens@gmail.com>
2020-11-13 18:58:51 +02:00
Patrick H. Lauke d3cb97ad71 Avoid invisible real file input "spilling" out of container (#32145)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-13 18:52:42 +02:00
XhmikosR c41897ca98 Fix caniuse.com redirects (#32147) 2020-11-13 17:45:11 +02:00
XhmikosR 6ddedbff77 Update devDependencies and gems 2020-11-13 12:50:13 +02:00
XhmikosR 4bbc32dda7 download.md: link to JS files comparison too (#32087) 2020-11-13 12:50:13 +02:00
XhmikosR fb12b0bd6a search.js: check for search-input element early (#32100) 2020-11-13 12:50:13 +02:00
XhmikosR 45bf55e4ba package.json: fix clean-css level switch (#32097) 2020-11-13 12:50:13 +02:00
XhmikosR e2e6e867f8 browsers-devices.md: make heading an h3 (#32136) 2020-11-13 12:44:27 +02:00
XhmikosR 49d5756f01 navbar.md: remove loading=lazy from snippets (#32138) 2020-11-12 20:40:15 +02:00
XhmikosR 03ec5342e0 input-group.md: fix wrong class .visually-hidden (#32137) 2020-11-12 20:39:19 +02:00
Mitchell Bryson 896e444895 Check for data-interval on the first slide of carousel - v4 (#31820)
When starting a cycle for a carousel, it only checks for a default interval, and not an interval defined on the slide element via data props. This adds a check in before creating the interval to move to the next slide.

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-12 09:34:17 +02:00
Mark Otto 9e9e1e61d5 Clarify JS bundle docs once more for v4 (#32106)
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-11-10 09:36:04 +02:00
Patrick H. Lauke dec3d86514 Changes to navbar documentation/explanation (#32094) 2020-11-09 18:10:04 +00:00
XhmikosR 43f7befe36 docs: mention "Liberation Sans" (#32083) 2020-11-08 20:30:07 +02:00
Patrick H. Lauke 44d54eb578 Make docs anchorjs links darker on keyboard focus (#32050)
* Make docs anchorjs links darker on keyboard focus

Not just on mouse hover

* Update site/assets/scss/_anchor.scss

Co-authored-by: Mark Otto <markd.otto@gmail.com>

Co-authored-by: Mark Otto <markd.otto@gmail.com>
2020-11-05 11:22:05 +02:00
XhmikosR f1acc7f1d8 Update devDependencies 2020-11-05 11:22:05 +02:00
XhmikosR b3aa3958da Backport #32045
tests: fix sanitizer test.

The test template does not include a `script` tag so the test always returned true.
2020-11-05 11:22:05 +02:00
XhmikosR 3063d74b86 ESLint: enable new-cap rule but ignore properties (#32036) 2020-11-05 11:22:05 +02:00
XhmikosR ecf7db731f CODE_OF_CONDUCT.md: fix redirect (#32033) 2020-11-05 11:22:05 +02:00
XhmikosR 39e9cced88 Clarify PRs section (#32027) 2020-11-05 11:22:05 +02:00
XhmikosR 30641eb346 Lint: stop ignoring package.js (#32021) 2020-11-05 11:22:05 +02:00
Patrick H. Lauke bbfd22f924 Backport #32040 (#32054)
Add callouts about using light colors ideally on a dark background
2020-11-03 09:44:42 +02:00
XhmikosR 5664e728b4 Move js/src/index.js one folder up (#32001) 2020-11-01 07:31:17 +02:00
XhmikosR 465135a0f8 Backport #32015
Fix redirects
2020-10-30 16:34:06 +02:00
XhmikosR f808026e5b Backport #31861
* Split up dropdown sizing docs to improve rendering

- Drop the included .btn-toolbar, no need
- Split large and small button examples
2020-10-30 16:34:06 +02:00
XhmikosR 76d4f728a0 Update devDependencies
* autoprefixer                ^9.8.6  →  ^10.0.1
* find-unused-sass-variables  ^2.0.0  →   ^3.0.0
* linkinator                  ^2.2.0  →   ^2.2.2
* postcss-cli                 ^7.1.2  →   ^8.2.0
2020-10-30 16:34:06 +02:00
Christian Oliff 1266103171 Update Edge's Rendering Engine on CONTRIBUTING.md (#32008)
* Update Edge's Rendering Engine on CONTRIBUTING.md

Also updated the URL to prevent a HTTP redirect.

* Add 'Go to "Help > Send Feedback" from the browser' note

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-10-30 16:34:06 +02:00
XhmikosR 3f0b15cca6 CI: switch to Node.js 14. (#32003) 2020-10-30 16:34:06 +02:00
XhmikosR 76958761f2 CI: Skip dependabot PR branches. (#32006)
Also, reword Node.js setup step
2020-10-30 16:34:06 +02:00
Martijn Cuppens 9a094d44ef Remove bugreport.apple.com since it doesn't work (#32005) 2020-10-30 16:34:06 +02:00
Adam Jones 71e5b7ca2b Fix form validation tooltip alignment (#31557)
* Fix form validation tooltip alignment

* Remove CSS hacks

* Update _forms.scss

Co-authored-by: Gaël Poupard <ffoodd@users.noreply.github.com>
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-10-30 16:15:31 +02:00
XhmikosR 23cf931c7f list-group.md: fix snippet (#31981) 2020-10-27 12:11:01 +02:00
XhmikosR 09df15cc3c CI: allow skipping BrowserStack (#31878)
This basically brings back the previous behavior we had on Travis CI, where if the commit message included `[ci skip]`, BrowserStack tests didn't run.

Additionally, this allows skipping BrowserStack if the commit message contains `[skip ci]` too.
2020-10-27 12:11:01 +02:00
XhmikosR 1a90b8a418 Update devDependencies and gems 2020-10-27 12:11:01 +02:00
XhmikosR 35de511cb3 Update CodeQL action (#31930)
Should run on PRs too.
2020-10-27 12:11:01 +02:00
Patrick H. Lauke d8c189df59 Explicitly mention emoji fonts, tweak sentence in typography (#31960) 2020-10-27 12:11:01 +02:00
Patrick H. Lauke 5f1bc4a756 Remove redundant visually hidden "(current)" from pagination controls (#31892)
* Replace visually hidden span with aria-current in tests

* Remove redundant visually hidden "(current)" when `aria-current` already used

Closes #31891
2020-10-27 12:11:01 +02:00
Martijn Cuppens a7d5923470 Suppress flexbox side effects in breadcrumb (#31700)
* Suppress flexbox side effects

* Trailing whitesapce

Co-authored-by: Mark Otto <markd.otto@gmail.com>
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-10-27 12:11:01 +02:00
XhmikosR 084795db82 Update anchor-js to v4.3.0. (#31951) 2020-10-27 12:11:01 +02:00
XhmikosR c0401ebfa0 Jekyll: switch to Liquid's strict mode.
This should make the build error out if there are any issues instead of emitting a warning, which we won't notice.
2020-10-27 12:11:01 +02:00
Gaël Poupard d29b05c775 Handle the Ubuntu sans-serif case (#31657)
On Ubuntu, our native font-stack doesn't output the same font on Firefox and Chrome. This is [a known aliasing issue](http://fontfamily.io/sans-serif) — check at the bottom, Ubuntu 14.04. Ubuntu 18.04 (my current) doesn't use the same (Firefox uses Liberation Sans, Chrome uses the default system font Ubuntu).

I'm inclined to prefer Liberation Sans since it's closer to Arial / Helvetica. This patch already exists in Boosted, didn't notice it was missing in bootstrap until today…

BTW, our linked Smashing Magazine's system fonts post mentions this and is even more accurate since it targets the three major Linux distributions. AFAIK this is not needed since [Liberation Sans is available everywhere](http://fontfamily.io/Liberation_Sans) — but we might go back to `Oxygen, Ubuntu, Cantarell`if we want to stick to system fonts.

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-10-27 12:11:01 +02:00
Gaël Poupard 4b30fe622c Backport #31882
* feature(spinners): slow down spinners when prefers-reduced-motion

* docs(spinners): add reduced motion callout and mention slowing down in accessibility page

* Update spinners.md

* docs(accessibility): rewording

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
Co-authored-by: Patrick H. Lauke <redux@splintered.co.uk>
2020-10-27 12:11:01 +02:00
XhmikosR efabff3a74 browserconfig.xml: switch to relative image path 2020-10-27 12:11:01 +02:00
XhmikosR 59b65a2cb8 Backport #31893
Update manifest.json

Switch to relative URLs so that we don't need to change the path with every major/minor release
2020-10-27 12:11:01 +02:00
Gaël Poupard 5f3fa833c9 docs(forms): backport #31904
* docs(forms): use a legend for fieldset instead of aria-label

* docs(forms): fix incorrect legend nesting in fieldset
2020-10-27 12:11:01 +02:00
XhmikosR cec8e5ddc3 Remove double spaces from homepage SVGs 2020-10-27 12:11:01 +02:00
Martijn Cuppens 5d310db486 Fix mobile menu jump & double border 2020-10-26 21:47:03 -07:00
Itamar Eduardo Gonçalves de Oliveira 61b5efbaf7 v4 Examples/Floating-labels: fix bad behavior with autofill 2020-10-26 21:19:56 -07:00
Martijn Cuppens a1b2071fe0 Require .has-validation for input groups with validation 2020-10-26 13:43:52 -07:00
Julien Déramond 171da55628 docs(forms): change inline custom radio name (#31936) 2020-10-19 22:13:30 +01:00
Alexandre Rosario b1ae785f40 Fixed: Undefined mixin 'deprecate' when importing 'bootstrap-grid-scss' (#31886)
* Fixed: Undefined mixin 'deprecate' when importing 'bootstrap-grid-scss'

* Updated: Mixin import moved down to feature together with others

Co-authored-by: XhmikosR <xhmikosr@gmail.com>
2020-10-15 16:32:08 +03:00
XhmikosR f86149807d docs: switch to suggesting jsDelivr as a CDN (#31898) 2020-10-14 20:41:37 +03:00
477 changed files with 26031 additions and 16995 deletions
+5 -5
View File
@@ -18,19 +18,19 @@
},
{
"path": "./dist/css/bootstrap.css",
"maxSize": "25.5 kB"
"maxSize": "26 kB"
},
{
"path": "./dist/css/bootstrap.min.css",
"maxSize": "23.5 kB"
"maxSize": "23.75 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
"maxSize": "47.5 kB"
"maxSize": "48 kB"
},
{
"path": "./dist/js/bootstrap.bundle.min.js",
"maxSize": "21.5 kB"
"maxSize": "21.75 kB"
},
{
"path": "./dist/js/bootstrap.js",
@@ -38,7 +38,7 @@
},
{
"path": "./dist/js/bootstrap.min.js",
"maxSize": "14.75 kB"
"maxSize": "15 kB"
}
],
"ci": {
+2 -3
View File
@@ -1,7 +1,6 @@
**/*.min.js
**/dist/
**/vendor/
/_gh_pages/
/_site/
/js/coverage/
/site/sw.js
/package.js
/site/static/sw.js
+27 -8
View File
@@ -4,11 +4,16 @@
"plugin:import/errors",
"plugin:import/warnings",
"plugin:unicorn/recommended",
"xo/esnext",
"xo",
"xo/browser"
],
"rules": {
"arrow-body-style": "off",
"capitalized-comments": "off",
"comma-dangle": [
"error",
"never"
],
"indent": [
"error",
2,
@@ -21,7 +26,12 @@
"warn",
5
],
"new-cap": "off",
"new-cap": [
"error",
{
"properties": false
}
],
"no-console": "error",
"no-mixed-operators": "off",
"no-negated-condition": "off",
@@ -29,26 +39,35 @@
"error",
"always"
],
"prefer-named-capture-group": "off",
"operator-linebreak": [
"error",
"after"
],
"semi": [
"error",
"never"
],
"unicorn/consistent-function-scoping": "off",
"unicorn/explicit-length-check": "off",
"unicorn/import-index": "off",
"unicorn/no-fn-reference-in-iterator": "off",
"unicorn/no-array-callback-reference": "off",
"unicorn/no-array-for-each": "off",
"unicorn/no-array-method-this-argument": "off",
"unicorn/no-for-loop": "off",
"unicorn/no-null": "off",
"unicorn/no-unused-properties": "error",
"unicorn/no-useless-undefined": "off",
"unicorn/numeric-separators-style": "off",
"unicorn/prefer-array-find": "off",
"unicorn/prefer-dataset": "off",
"unicorn/prefer-array-flat": "off",
"unicorn/prefer-dom-node-append": "off",
"unicorn/prefer-dom-node-dataset": "off",
"unicorn/prefer-dom-node-remove": "off",
"unicorn/prefer-includes": "off",
"unicorn/prefer-node-append": "off",
"unicorn/prefer-node-remove": "off",
"unicorn/prefer-math-trunc": "off",
"unicorn/prefer-module": "off",
"unicorn/prefer-number-properties": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-prototype-methods": "off",
"unicorn/prefer-query-selector": "off",
"unicorn/prefer-reflect-apply": "off",
"unicorn/prefer-set-has": "off",
+16 -14
View File
@@ -18,9 +18,9 @@ the preferred channel for [bug reports](#bug-reports), [features requests](#feat
and [submitting pull requests](#pull-requests), but please respect the following
restrictions:
* Please **do not** use the issue tracker for personal support requests. Stack
* Please **do not** use the issue tracker for personal support requests. Stack
Overflow ([`bootstrap-4`](https://stackoverflow.com/questions/tagged/bootstrap-4) tag),
[Slack](https://bootstrap-slack.herokuapp.com/) or [IRC](README.md#community) are better places to get help.
[Slack](https://bootstrap-slack.herokuapp.com/) or [IRC](/README.md#community) are better places to get help.
* Please **do not** derail or troll issues. Keep the discussion on topic and
respect the opinions of others.
@@ -102,12 +102,12 @@ Example:
Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se.
When feasible, we aim to report such upstream bugs to the relevant browser vendor(s), and then list them on our [Wall of Browser Bugs](https://getbootstrap.com/browser-bugs/) and [document them in MDN](https://developer.mozilla.org/en-US/docs/Web).
| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit <br> https://bugreport.apple.com/ | In Apple's bug reporter, choose "Safari" as the product. |
| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
| Microsoft | Edge | EdgeHTML | https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/ | |
| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------ | -------------------------------------------------------- |
| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit | In Apple's bug reporter, choose "Safari" as the product. |
| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
| Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser |
## Feature requests
@@ -124,23 +124,25 @@ Good pull requests—patches, improvements, new features—are a fantastic
help. They should remain focused in scope and avoid containing unrelated
commits.
**Please ask first** before embarking on any significant pull request (e.g.
**Please ask first** before embarking on any **significant** pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
project's developers might not want to merge into the project. For trivial
things, or things that don't require a lot of your time, you can go ahead and
make a PR.
Please adhere to the [coding guidelines](#code-guidelines) used throughout the
project (indentation, accurate comments, etc.) and any other requirements
(such as test coverage).
**Do not edit `bootstrap.css`, or `bootstrap.js`
directly!** Those files are automatically generated. You should edit the
source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/v4-dev/scss)
**Do not edit `bootstrap.css` or `bootstrap.js`, and do not commit
any dist files (`dist/` or `js/dist`).** Those files are automatically generated by our build tools. You should
edit the source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/v4-dev/scss)
and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/v4-dev/js/src) instead.
Similarly, when contributing to Bootstrap's documentation, you should edit the
documentation source files in
[the `/bootstrap/site/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/docs).
[the `/bootstrap/site/content/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/content/docs).
**Do not edit the `gh-pages` branch.** That branch is generated from the
documentation source files and is managed separately by the Bootstrap Core Team.
+1 -1
View File
@@ -7,5 +7,5 @@ See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports.
For general troubleshooting or help getting started:
- Join [the official Slack room](https://bootstrap-slack.herokuapp.com/).
- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
- Ask and explore Stack Overflow with the [`bootstrap-4`](https://stackoverflow.com/questions/tagged/bootstrap-4) tag.
+13 -16
View File
@@ -1,31 +1,28 @@
name: BrowserStack
on: [push]
on:
push:
workflow_dispatch:
env:
CI: true
NODE: 12.x
FORCE_COLOR: 2
NODE: 16
jobs:
browserstack:
runs-on: ubuntu-latest
if: github.repository == 'twbs/bootstrap'
if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]'))
timeout-minutes: 30
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
cache: npm
- name: Install npm dependencies
run: npm ci
+14 -15
View File
@@ -1,8 +1,15 @@
name: Bundlewatch
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
NODE: 12.x
FORCE_COLOR: 2
NODE: 16
jobs:
bundlewatch:
@@ -10,21 +17,13 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
cache: npm
- name: Install npm dependencies
run: npm ci
+23 -10
View File
@@ -1,25 +1,38 @@
name: "Code Scanning - Action"
name: "CodeQL"
on:
push:
branches:
- main
- v4-dev
- "!dependabot/**"
pull_request:
# The branches below must be a subset of the branches above
branches:
- main
- v4-dev
- "!dependabot/**"
schedule:
- cron: "0 0 * * 0"
- cron: "0 2 * * 5"
workflow_dispatch:
jobs:
CodeQL-Build:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: javascript
- name: Autobuild
uses: github/codeql-action/autobuild@v1
languages: "javascript"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
+14 -15
View File
@@ -1,8 +1,15 @@
name: CSS
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
NODE: 12.x
FORCE_COLOR: 2
NODE: 16
jobs:
css:
@@ -10,21 +17,13 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
cache: npm
- name: Install npm dependencies
run: npm ci
+13 -6
View File
@@ -1,8 +1,15 @@
name: CSS (Dart Sass)
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
NODE: 12.x
FORCE_COLOR: 2
NODE: 16
jobs:
css:
@@ -10,10 +17,10 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
+25 -45
View File
@@ -1,9 +1,15 @@
name: Docs
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
NODE: 12.x
RUBY: 2.7.x
FORCE_COLOR: 2
NODE: 16
jobs:
docs:
@@ -11,55 +17,29 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
cache: npm
- name: Set up Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY }}
- name: Set up Ruby env
run: |
echo "gem: --no-document" > ~/.gemrc # Disable gem docs
bundle config set clean 'true'
bundle config set deployment 'true'
- name: Set up Ruby cache
uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }}
${{ runner.os }}-ruby-v${{ env.RUBY }}-
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- run: ruby --version
- run: gem --version
- run: bundle --version
- run: java -version
- name: Install npm dependencies
run: npm ci
- name: Install bundler dependencies
run: bundle install --deployment --jobs=4 --retry=3 --clean
- name: Build docs
run: npm run docs-build
- name: Copy CSS and JS
run: npm run css-copy && npm run js-copy
- name: Validate HTML
run: npm run docs-vnu
- name: Test docs
run: npm run docs
- name: Run linkinator
uses: JustinBeckwith/linkinator-action@v1
with:
paths: _site
recurse: true
verbosity: error
skip: "^(?!http://localhost)"
+17 -23
View File
@@ -1,35 +1,30 @@
name: JS Tests
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
FORCE_COLOR: 2
NODE: 16
jobs:
run:
name: Node ${{ matrix.node }}
name: JS Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node: [10, 12]
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ matrix.node }}-
node-version: ${{ env.NODE }}
cache: npm
- name: Install npm dependencies
run: npm ci
@@ -41,8 +36,7 @@ jobs:
run: npm run js-test
- name: Run Coveralls
uses: coverallsapp/github-action@master
if: matrix.node == 12
uses: coverallsapp/github-action@1.1.3
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
path-to-lcov: "./js/coverage/lcov.info"
+14 -15
View File
@@ -1,8 +1,15 @@
name: Lint
on: [push, pull_request]
on:
push:
branches-ignore:
- "dependabot/**"
pull_request:
workflow_dispatch:
env:
CI: true
NODE: 12.x
FORCE_COLOR: 2
NODE: 16
jobs:
lint:
@@ -10,21 +17,13 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Set Node.js version
uses: actions/setup-node@v1
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
cache: npm
- name: Install npm dependencies
run: npm ci
+3 -10
View File
@@ -1,15 +1,8 @@
# Ignore docs files
/_gh_pages/
/site/.jekyll-cache
/site/.jekyll-metadata
/site/docs/**/dist/
# Hugo folders
/_site/
# Hugo files
/resources/
# Ignore ruby/bundler files
/.bundle/
/vendor/
/.ruby-version
/.hugo_build.lock
# Numerous always-ignore extensions
*.diff
+2 -1
View File
@@ -1,4 +1,5 @@
**/*.min.css
**/dist/
**/vendor/
/_gh_pages/
/_site/
/js/coverage/
+5 -1
View File
@@ -1,8 +1,12 @@
{
"extends": [
"stylelint-config-twbs-bootstrap/scss"
"stylelint-config-twbs-bootstrap"
],
"rules": {
"declaration-property-value-disallowed-list": {
"border": "none",
"outline": "none"
},
"function-disallowed-list": [
"calc"
],
+1 -4
View File
@@ -40,7 +40,4 @@ Project maintainers who do not follow or enforce the Code of Conduct in good fai
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html][version]
[homepage]: https://www.contributor-covenant.org/
[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4, available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct/>
-9
View File
@@ -1,9 +0,0 @@
source 'https://rubygems.org'
group :development, :test do
gem 'jekyll', '~> 4.1.1'
gem 'jekyll-redirect-from', '~> 0.16.0'
gem 'jekyll-sitemap', '~> 1.4.0'
gem 'jekyll-toc', '~> 0.14.0'
gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
end
-89
View File
@@ -1,89 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
colorator (1.1.0)
concurrent-ruby (1.1.7)
em-websocket (0.5.2)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
ffi (1.13.1)
ffi (1.13.1-x64-mingw32)
forwardable-extended (2.6.0)
http_parser.rb (0.6.0)
i18n (1.8.5)
concurrent-ruby (~> 1.0)
jekyll (4.1.1)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (~> 2.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.4.0)
pathutil (~> 0.9)
rouge (~> 3.0)
safe_yaml (~> 1.0)
terminal-table (~> 1.8)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
jekyll-sass-converter (2.1.0)
sassc (> 2.0.1, < 3.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-toc (0.14.0)
jekyll (>= 3.8)
nokogiri (~> 1.10)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.3.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.2.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
mini_portile2 (2.4.0)
nokogiri (1.10.10)
mini_portile2 (~> 2.4.0)
nokogiri (1.10.10-x64-mingw32)
mini_portile2 (~> 2.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
rb-fsevent (0.10.4)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.4)
rouge (3.23.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
sassc (2.4.0-x64-mingw32)
ffi (~> 1.9)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
unicode-display_width (1.7.0)
wdm (0.1.1)
PLATFORMS
ruby
x64-mingw32
DEPENDENCIES
jekyll (~> 4.1.1)
jekyll-redirect-from (~> 0.16.0)
jekyll-sitemap (~> 1.4.0)
jekyll-toc (~> 0.14.0)
wdm (~> 0.1.1)
BUNDLED WITH
2.1.4
+2 -2
View File
@@ -1,7 +1,7 @@
The MIT License (MIT)
Copyright (c) 2011-2020 Twitter, Inc.
Copyright (c) 2011-2020 The Bootstrap Authors
Copyright (c) 2011-2022 Twitter, Inc.
Copyright (c) 2011-2022 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
+20 -19
View File
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://getbootstrap.com/">
<img src="https://getbootstrap.com/docs/4.5/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width="72" height="72">
<img src="https://getbootstrap.com/docs/4.6/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width="72" height="72">
</a>
</p>
@@ -9,7 +9,7 @@
<p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br>
<a href="https://getbootstrap.com/docs/4.5/"><strong>Explore Bootstrap docs »</strong></a>
<a href="https://getbootstrap.com/docs/4.6/"><strong>Explore Bootstrap docs »</strong></a>
<br>
<br>
<a href="https://github.com/twbs/bootstrap/issues/new?template=bug_report.md">Report bug</a>
@@ -41,27 +41,25 @@
Several quick start options are available:
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.5.3.zip)
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.6.2.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.5.3`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.5.3`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.6.2`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.6.2`
- 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.5/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
Read the [Getting started page](https://getbootstrap.com/docs/4.6/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
## Status
[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/)
[![Build Status](https://github.com/twbs/bootstrap/workflows/JS%20Tests/badge.svg?branch=v4-dev)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Av4-dev)
[![Build Status](https://img.shields.io/github/workflow/status/twbs/bootstrap/JS%20Tests/v4-dev?label=JS%20Tests&logo=github)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Av4-dev)
[![npm version](https://img.shields.io/npm/v/bootstrap)](https://www.npmjs.com/package/bootstrap)
[![Gem version](https://img.shields.io/gem/v/bootstrap)](https://rubygems.org/gems/bootstrap)
[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue)](https://atmospherejs.com/twbs/bootstrap)
[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap)](https://packagist.org/packages/twbs/bootstrap)
[![NuGet](https://img.shields.io/nuget/vpre/bootstrap)](https://www.nuget.org/packages/bootstrap/absoluteLatest)
[![peerDependencies Status](https://img.shields.io/david/peer/twbs/bootstrap)](https://david-dm.org/twbs/bootstrap?type=peer)
[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap)](https://david-dm.org/twbs/bootstrap?type=dev)
[![Coverage Status](https://img.shields.io/coveralls/github/twbs/bootstrap/v4-dev)](https://coveralls.io/github/twbs/bootstrap?branch=v4-dev)
[![CSS gzip size](https://img.badgesize.io/twbs/bootstrap/v4-dev/dist/css/bootstrap.min.css?compression=gzip&label=CSS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/v4-dev/dist/css/bootstrap.min.css)
[![JS gzip size](https://img.badgesize.io/twbs/bootstrap/v4-dev/dist/js/bootstrap.min.js?compression=gzip&label=JS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/v4-dev/dist/js/bootstrap.min.js)
@@ -72,7 +70,9 @@ Read the [Getting started page](https://getbootstrap.com/docs/4.5/getting-starte
## What's included
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.
<details><summary>Download contents</summary>
```text
bootstrap/
@@ -100,8 +100,9 @@ bootstrap/
├── bootstrap.min.js
└── bootstrap.min.js.map
```
</details>
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/).
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
@@ -111,18 +112,18 @@ Have a bug or a feature request? Please first read the [issue guidelines](https:
## Documentation
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.
Bootstrap's documentation, included in this repo in the root directory, is built with [Hugo](https://gohugo.io/) 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.5/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/assets/js/search.js`.
### Running documentation locally
1. Run through the [tooling setup](https://getbootstrap.com/docs/4.5/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.
1. Run `npm install` to install the Node.js dependencies, including Hugo (the site builder).
2. Run `npm run test` (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
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à.
4. Open `http://localhost:9001/` in your browser, and voilà.
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/).
### Documentation for previous releases
@@ -147,7 +148,7 @@ Get updates on Bootstrap's development and chat with the project maintainers and
- Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
- Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
- Join [the official Slack room](https://bootstrap-slack.herokuapp.com/).
- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
- Implementation help may be found at Stack Overflow (tagged [`bootstrap-4`](https://stackoverflow.com/questions/tagged/bootstrap-4)).
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.
@@ -206,4 +207,4 @@ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com
## Copyright and license
Code and documentation copyright 2011-2020 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/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
Code and documentation copyright 2011-2022 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/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
-74
View File
@@ -1,74 +0,0 @@
# Dependencies
markdown: kramdown
highlighter: rouge
kramdown:
auto_ids: true
# Permalinks
permalink: pretty
# Server
source: "site"
destination: ./_gh_pages
host: "localhost"
port: 9001
baseurl: ""
url: "https://getbootstrap.com"
encoding: UTF-8
exclude:
- docs/4.5/assets/scss/
plugins:
- jekyll-redirect-from
- jekyll-sitemap
- jekyll-toc
redirect_from:
json: false
# Social
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.5/assets/brand/bootstrap-social.png
social_logo_path: /docs/4.5/assets/brand/bootstrap-social-logo.png
# Custom variables
current_version: 4.5.3
current_ruby_version: 4.5.3
docs_version: 4.5
github_org: "https://github.com/twbs"
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"
icons: "https://icons.getbootstrap.com"
download:
source: "https://github.com/twbs/bootstrap/archive/v4.5.3.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-dist.zip"
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-examples.zip"
cdn:
# See https://www.srihash.org for info on how to generate the hashes
css: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/css/bootstrap.min.css"
css_hash: "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
js: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/js/bootstrap.min.js"
js_hash: "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
jquery: "https://code.jquery.com/jquery-3.5.1.slim.min.js"
jquery_hash: "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
popper: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
popper_hash: "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
toc:
min_level: 2
max_level: 4
no_toc_section_class:
- "bd-callout"
- "bd-example"
+4 -4
View File
@@ -2,8 +2,8 @@
/*!
* Script to build our plugins to use them separately.
* Copyright 2020 The Bootstrap Authors
* Copyright 2020 Twitter, Inc.
* Copyright 2020-2022 The Bootstrap Authors
* Copyright 2020-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -19,8 +19,8 @@ const plugins = [
babel({
// Only transpile our source code
exclude: 'node_modules/**',
// Inline the required helpers in each file
babelHelpers: 'inline'
// Include the helpers in each file, at most one copy of each
babelHelpers: 'bundled'
})
]
const bsPlugins = {
Executable → Regular
+45 -74
View File
@@ -2,18 +2,28 @@
/*!
* Script to update version number references in the project.
* Copyright 2017-2020 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc.
* Copyright 2017-2022 The Bootstrap Authors
* Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
'use strict'
const fs = require('fs')
const fs = require('fs').promises
const path = require('path')
const sh = require('shelljs')
const globby = require('globby')
sh.config.fatal = true
const VERBOSE = process.argv.includes('--verbose')
const DRY_RUN = process.argv.includes('--dry') || process.argv.includes('--dry-run')
// These are the filetypes we only care about replacing the version
const GLOB = [
'**/*.{css,html,js,json,md,scss,txt,yml}'
]
const GLOBBY_OPTIONS = {
cwd: path.join(__dirname, '..'),
gitignore: true
}
// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
function regExpQuote(string) {
@@ -24,87 +34,48 @@ function regExpQuoteReplacement(string) {
return string.replace(/\$/g, '$$')
}
const DRY_RUN = false
async function replaceRecursively(file, oldVersion, newVersion) {
const originalString = await fs.readFile(file, 'utf8')
const newString = originalString.replace(
new RegExp(regExpQuote(oldVersion), 'g'), regExpQuoteReplacement(newVersion)
)
function walkAsync(directory, excludedDirectories, fileCallback, errback) {
if (excludedDirectories.has(path.parse(directory).base)) {
// No need to move any further if the strings are identical
if (originalString === newString) {
return
}
fs.readdir(directory, (err, names) => {
if (err) {
errback(err)
return
}
names.forEach(name => {
const filepath = path.join(directory, name)
fs.lstat(filepath, (err, stats) => {
if (err) {
process.nextTick(errback, err)
return
}
if (stats.isDirectory()) {
process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback)
} else if (stats.isFile()) {
process.nextTick(fileCallback, filepath)
}
})
})
})
}
function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) {
original = new RegExp(regExpQuote(original), 'g')
replacement = regExpQuoteReplacement(replacement)
const updateFile = DRY_RUN ? filepath => {
if (allowedExtensions.has(path.parse(filepath).ext)) {
console.log(`FILE: ${filepath}`)
} else {
console.log(`EXCLUDED:${filepath}`)
}
} : filepath => {
if (allowedExtensions.has(path.parse(filepath).ext)) {
sh.sed('-i', original, replacement, filepath)
}
if (VERBOSE) {
console.log(`FILE: ${file}`)
}
walkAsync(directory, excludedDirectories, updateFile, err => {
console.error('ERROR while traversing directory!:')
console.error(err)
process.exit(1)
})
if (DRY_RUN) {
return
}
await fs.writeFile(file, newString, 'utf8')
}
function main(args) {
if (args.length !== 2) {
console.error('USAGE: change-version old_version new_version')
async function main(args) {
let [oldVersion, newVersion] = args
if (!oldVersion || !newVersion) {
console.error('USAGE: change-version old_version new_version [--verbose] [--dry[-run]]')
console.error('Got arguments:', args)
process.exit(1)
}
const oldVersion = args[0]
const newVersion = args[1]
const EXCLUDED_DIRS = new Set([
'.git',
'_gh_pages',
'node_modules',
'vendor'
])
const INCLUDED_EXTENSIONS = new Set([
// This extension whitelist is how we avoid modifying binary files
'',
'.css',
'.html',
'.js',
'.json',
'.md',
'.scss',
'.txt',
'.yml'
])
replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion)
// Strip any leading `v` from arguments because otherwise we will end up with duplicate `v`s
[oldVersion, newVersion] = [oldVersion, newVersion].map(arg => arg.startsWith('v') ? arg.slice(1) : arg)
try {
const files = await globby(GLOB, GLOBBY_OPTIONS)
await Promise.all(files.map(file => replaceRecursively(file, oldVersion, newVersion)))
} catch (error) {
console.error(error)
process.exit(1)
}
}
main(process.argv.slice(2))
+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-2020 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc.
* Copyright 2017-2022 The Bootstrap Authors
* Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -21,11 +21,11 @@ const pkg = require('../package.json')
sh.config.fatal = true
const configFile = path.join(__dirname, '../_config.yml')
const configFile = path.join(__dirname, '../config.yml')
// Array of objects which holds the files to generate SRI hashes for.
// `file` is the path from the root folder
// `configPropertyName` is the _config.yml variable's name of the file
// `configPropertyName` is the config.yml variable's name of the file
const files = [
{
file: 'dist/css/bootstrap.min.css',
@@ -40,7 +40,7 @@ const files = [
configPropertyName: 'js_bundle_hash'
},
{
file: `site/docs/${pkg.version_short}/assets/js/vendor/jquery.slim.min.js`,
file: `site/static/docs/${pkg.config.version_short}/assets/js/vendor/jquery.slim.min.js`,
configPropertyName: 'jquery_hash'
},
{
@@ -61,6 +61,6 @@ files.forEach(file => {
console.log(`${file.configPropertyName}: ${integrity}`)
sh.sed('-i', new RegExp(`(\\s${file.configPropertyName}:\\s+"|')(\\S+)("|')`), `$1${integrity}$3`, configFile)
sh.sed('-i', new RegExp(`^(\\s+${file.configPropertyName}:\\s+["'])\\S*(["'])`), `$1${integrity}$2`, configFile)
})
})
+14 -10
View File
@@ -1,14 +1,18 @@
'use strict'
module.exports = ctx => ({
map: ctx.file.dirname.includes('examples') ? false : {
inline: false,
annotation: true,
sourcesContent: true
},
plugins: {
autoprefixer: {
cascade: false
module.exports = ctx => {
return {
map: ctx.file.dirname.includes('examples') ?
false :
{
inline: false,
annotation: true,
sourcesContent: true
},
plugins: {
autoprefixer: {
cascade: false
}
}
}
})
}
+1 -1
View File
@@ -31,7 +31,7 @@ if (BUNDLE) {
}
module.exports = {
input: path.resolve(__dirname, '../js/src/index.js'),
input: path.resolve(__dirname, '../js/index.js'),
output: {
banner,
file: path.resolve(__dirname, `../dist/js/${fileDest}`),
-55
View File
@@ -1,55 +0,0 @@
#!/usr/bin/env bash
set -e
#
# Usage
# ---------------
# 1. Clone second version of Bootstrap in sibling directory named `bs-docs`.
# 2. Within `bs-docs` copy, switch to `gh-pages` branch.
# 3. Pull latest, re-bundle, re-npm.
# 4. Run script.
red=$'\e[1;31m'
green=$'\e[1;32m'
#blue=$'\e[1;34m'
magenta=$'\e[1;35m'
#cyan=$'\e[1;36m'
end=$'\e[0m'
# Get current version from package.json
current_version=$(node -p "require('./package.json').version")
if [[ $# -lt 1 ]]; then
printf "\n%s⚠️ Shipping aborted. You must specify a version.\n%s" "$red" "$end"
exit 1
fi
# Pulling latest changes, just to be sure
printf "\n%s=======================================================%s" "$magenta" "$end"
printf "\n%sPulling latest changes...%s" "$magenta" "$end"
printf "\n%s=======================================================\n\n%s" "$magenta" "$end"
git pull origin v4-dev
# Update version number
printf "\n%s=======================================================%s" "$magenta" "$end"
printf "\n%sUpdating version number...%s" "$magenta" "$end"
printf "\n%s=======================================================\n%s" "$magenta" "$end"
npm run release-version "$current_version" "$1"
# Build release
printf "\n%s=======================================================%s" "$magenta" "$end"
printf "\n%sBuilding release...%s" "$magenta" "$end"
printf "\n%s=======================================================\n%s" "$magenta" "$end"
npm run release
# Copy the contents of the built docs site over to `bs-docs` repo
printf "\n%s=======================================================%s" "$magenta" "$end"
printf "\n%sCopy it over...%s" "$magenta" "$end"
printf "\n%s=======================================================\n%s" "$magenta" "$end"
cp -rf _gh_pages/. ../bs-docs/
printf "\nDone!\n"
printf "\n%s=======================================================%s" "$green" "$end"
printf "\n%sSuccess, $1 is ready to review and publish.%s" "$green" "$end"
printf "\n%s=======================================================\n\n%s" "$green" "$end"
-60
View File
@@ -1,60 +0,0 @@
# Usage:
# install svgo globally: `npm i -g svgo`
# svgo --config=build/svgo.yml --input=foo.svg
# https://github.com/svg/svgo/blob/master/docs/how-it-works/en.md
# replace default config
multipass: true
#full: true
# https://github.com/svg/svgo/blob/master/lib/svgo/js2svg.js#L6 for more config options
js2svg:
pretty: true
indent: 2
plugins:
# remove this with IE 11 is no longer supported
- addAttributesToSVGElement:
attributes:
- focusable: false
- cleanupAttrs: true
- cleanupEnableBackground: true
- cleanupIDs: true
- cleanupListOfValues: true
- cleanupNumericValues: true
- collapseGroups: true
- convertColors: true
- convertPathData: true
- convertShapeToPath: true
- convertStyleToAttrs: true
- convertTransform: true
- inlineStyles: true
- mergePaths: true
- minifyStyles: true
- moveElemsAttrsToGroup: true
- moveGroupAttrsToElems: true
- removeAttrs:
attrs:
- "data-name"
- removeComments: true
- removeDesc: true
- removeDoctype: true
- removeEditorsNSData: true
- removeEmptyAttrs: true
- removeEmptyContainers: true
- removeEmptyText: true
- removeHiddenElems: true
- removeMetadata: true
- removeNonInheritableGroupAttrs: true
- removeTitle: false
- removeUnknownsAndDefaults:
keepRoleAttr: true
- removeUnusedNS: true
- removeUselessDefs: true
- removeUselessStrokeAndFill: true
- removeViewBox: false
- removeXMLNS: false
- removeXMLProcInst: true
- sortAttrs: true
+13 -18
View File
@@ -2,17 +2,17 @@
/*!
* Script to run vnu-jar if Java is available.
* Copyright 2017-2020 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc.
* Copyright 2017-2022 The Bootstrap Authors
* Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
'use strict'
const childProcess = require('child_process')
const { execFile, spawn } = require('child_process')
const vnu = require('vnu-jar')
childProcess.exec('java -version', (error, stdout, stderr) => {
execFile('java', ['-version'], (error, stdout, stderr) => {
if (error) {
console.error('Skipping vnu-jar test; Java is missing.')
return
@@ -21,34 +21,29 @@ childProcess.exec('java -version', (error, stdout, stderr) => {
const is32bitJava = !/64-Bit/.test(stderr)
// vnu-jar accepts multiple ignores joined with a `|`.
// Also note that the ignores are regular expressions.
// Also note that the ignores are string regular expressions.
const ignores = [
// "autocomplete" is included in <button> and checkboxes and radio <input>s due to
// Firefox's non-standard autocomplete behavior - see https://bugzilla.mozilla.org/show_bug.cgi?id=654072
'Attribute “autocomplete” is only allowed when the input type is.*',
'Attribute “autocomplete” not allowed on element “button” at this point.',
// Markup used in Components → Forms → Layout → Form grid → Horizontal form is currently invalid,
// but used this way due to lack of support for flexbox layout on <fieldset> element in most browsers
'Element “legend” not allowed as child of element “div” in this context.*',
// Content → Reboot uses various date/time inputs as a visual example.
// Documentation does not rely on them being usable.
'The “date” input type is not supported in all browsers.*',
'The “time” input type is not supported in all browsers.*',
// IE11 doesn't recognise <main> / give the element an implicit "main" landmark.
// Explicit role="main" is redundant for other modern browsers, but still valid.
'The “main” role is unnecessary for element “main”.'
'The “main” role is unnecessary for element “main”.',
// Per https://www.w3.org/TR/html-aria/#docconformance having "aria-disabled" on a link is
// NOT RECOMMENDED, but it's still valid - we explain in the docs that it's not ideal,
// and offer more robust alternatives, but also need to show a less-than-ideal example
'An “aria-disabled” attribute whose value is “true” should not be specified on an “a” element that has an “href” attribute.'
].join('|')
const args = [
'-jar',
vnu,
`"${vnu}"`,
'--asciiquotes',
'--skip-non-html',
// Ignore the language code warnings
'--no-langdetect',
'--Werror',
`--filterpattern "${ignores}"`,
'_gh_pages/',
'_site/',
'js/tests/'
]
@@ -57,7 +52,7 @@ childProcess.exec('java -version', (error, stdout, stderr) => {
args.splice(0, 0, '-Xss512k')
}
return childProcess.spawn('java', args, {
return spawn('java', args, {
shell: true,
stdio: 'inherit'
})
+50 -25
View File
@@ -3,7 +3,7 @@
/*!
* Script to create the built examples zip archive;
* requires the `zip` command to be present!
* Copyright 2020 The Bootstrap Authors
* Copyright 2020-2022 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -12,38 +12,65 @@
const path = require('path')
const sh = require('shelljs')
const {
version, version_short: versionShort
} = require('../package.json')
const pkg = require('../package.json')
const folderName = `bootstrap-${version}-examples`
const versionShort = pkg.config.version_short
const distFolder = `bootstrap-${pkg.version}-examples`
const rootDocsDir = '_site'
const docsDir = `${rootDocsDir}/docs/${versionShort}/`
// these are the files we need in the examples
const cssFiles = [
'bootstrap.min.css',
'bootstrap.min.css.map'
]
const jsFiles = [
'bootstrap.bundle.min.js',
'bootstrap.bundle.min.js.map'
]
const imgFiles = [
'bootstrap-outline.svg',
'bootstrap-solid.svg'
]
sh.config.fatal = true
if (!sh.test('-d', '_gh_pages')) {
throw new Error('The "_gh_pages" folder does not exist, did you forget building the docs?')
if (!sh.test('-d', rootDocsDir)) {
throw new Error(`The "${rootDocsDir}" folder does not exist, did you forget building the docs?`)
}
// switch to the root dir
sh.cd(path.join(__dirname, '..'))
// remove any previously created folder with the same name
sh.rm('-rf', folderName)
// create any folders so that `cp` works
sh.mkdir('-p', folderName)
sh.mkdir('-p', `${folderName}/assets/brand/`)
// remove any previously created folder/zip with the same name
sh.rm('-rf', [distFolder, `${distFolder}.zip`])
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/examples/*`, folderName)
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/dist/`, `${folderName}/assets/`)
// also copy the two brand images we use in the examples
sh.cp('-f', [
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-outline.svg`,
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-solid.svg`
], `${folderName}/assets/brand/`)
sh.rm(`${folderName}/index.html`)
// create any folders so that `cp` works
sh.mkdir('-p', [
distFolder,
`${distFolder}/assets/brand/`,
`${distFolder}/assets/dist/css/`,
`${distFolder}/assets/dist/js/`
])
sh.cp('-Rf', `${docsDir}/examples/*`, distFolder)
cssFiles.forEach(file => {
sh.cp('-f', `${docsDir}/dist/css/${file}`, `${distFolder}/assets/dist/css/`)
})
jsFiles.forEach(file => {
sh.cp('-f', `${docsDir}/dist/js/${file}`, `${distFolder}/assets/dist/js/`)
})
imgFiles.forEach(file => {
sh.cp('-f', `${docsDir}/assets/brand/${file}`, `${distFolder}/assets/brand/`)
})
sh.rm(`${distFolder}/index.html`)
// get all examples' HTML files
sh.find(`${folderName}/**/*.html`).forEach(file => {
sh.find(`${distFolder}/**/*.html`).forEach(file => {
const fileContents = sh.cat(file)
.toString()
.replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
@@ -55,9 +82,7 @@ sh.find(`${folderName}/**/*.html`).forEach(file => {
})
// create the zip file
sh.exec(`zip -r9 "${folderName}.zip" "${folderName}"`, {
fatal: true
})
sh.exec(`zip -r9 "${distFolder}.zip" "${distFolder}"`)
// remove the folder we created
sh.rm('-rf', folderName)
sh.rm('-rf', distFolder)
+86
View File
@@ -0,0 +1,86 @@
languageCode: "en"
title: "Bootstrap"
baseURL: "https://getbootstrap.com"
enableInlineShortcodes: true
security:
enableInlineShortcodes: true
funcs:
getenv:
- ^HUGO_
- NETLIFY
markup:
goldmark:
renderer:
unsafe: true
highlight:
noClasses: false
tableOfContents:
startLevel: 2
endLevel: 6
buildDrafts: true
buildFuture: true
enableRobotsTXT: true
metaDataFormat: "yaml"
disableKinds: ["404", "taxonomy", "term", "RSS"]
publishDir: "_site"
module:
mounts:
- source: dist
target: static/docs/4.6/dist
- source: site/assets
target: assets
- source: site/content
target: content
- source: site/data
target: data
- source: site/layouts
target: layouts
- source: site/static
target: static
- source: site/static/docs/4.6/assets/img/favicons/apple-touch-icon.png
target: static/apple-touch-icon.png
- source: site/static/docs/4.6/assets/img/favicons/favicon.ico
target: static/favicon.ico
params:
description: "The most popular HTML, CSS, and JS library in the world."
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
social_image_path: /docs/4.6/assets/brand/bootstrap-social.png
social_logo_path: /docs/4.6/assets/brand/bootstrap-social-logo.png
current_version: "4.6.2"
current_ruby_version: "4.6.2"
docs_version: "4.6"
rfs_version: "v8.1.0"
github_org: "https://github.com/twbs"
repo: "https://github.com/twbs/bootstrap"
twitter: "getbootstrap"
opencollective: "https://opencollective.com/bootstrap"
blog: "https://blog.getbootstrap.com/"
expo: "https://expo.getbootstrap.com/"
themes: "https://themes.getbootstrap.com/"
icons: "https://icons.getbootstrap.com/"
download:
source: "https://github.com/twbs/bootstrap/archive/v4.6.2.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v4.6.2/bootstrap-4.6.2-dist.zip"
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v4.6.2/bootstrap-4.6.2-examples.zip"
cdn:
# See https://www.srihash.org for info on how to generate the hashes
css: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
css_hash: "sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N"
js: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js"
js_hash: "sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+"
js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
jquery: "https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
jquery_hash: "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
popper: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
popper_hash: "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
+3 -3
View File
@@ -1,7 +1,7 @@
/*!
* Bootstrap Grid v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Bootstrap Grid v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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
+6 -7
View File
@@ -1,7 +1,7 @@
/*!
* Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
@@ -24,7 +24,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation 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;
@@ -198,9 +198,8 @@ button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
button:focus:not(:focus-visible) {
outline: 0;
}
input,
+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.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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:not(:focus-visible){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([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}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;-ms-overflow-style:scrollbar}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;text-align:-webkit-match-parent}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}[role=button]{cursor:pointer}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}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","Liberation 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:not(:focus-visible){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([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}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;-ms-overflow-style:scrollbar}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;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}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}[role=button]{cursor:pointer}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}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
+137 -68
View File
@@ -1,7 +1,7 @@
/*!
* Bootstrap v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Bootstrap v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root {
@@ -31,7 +31,7 @@
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -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-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
@@ -54,7 +54,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation 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;
@@ -228,9 +228,8 @@ button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
button:focus:not(:focus-visible) {
outline: 0;
}
input,
@@ -423,7 +422,7 @@ hr {
small,
.small {
font-size: 80%;
font-size: 0.875em;
font-weight: 400;
}
@@ -463,7 +462,7 @@ mark,
.blockquote-footer {
display: block;
font-size: 80%;
font-size: 0.875em;
color: #6c757d;
}
@@ -2029,11 +2028,6 @@ pre code {
border: 0;
}
.form-control:-moz-focusring {
color: transparent;
text-shadow: 0 0 0 #495057;
}
.form-control:focus {
color: #495057;
background-color: #fff;
@@ -2081,6 +2075,11 @@ input[type="month"].form-control {
appearance: none;
}
select.form-control:-moz-focusring {
color: transparent;
text-shadow: 0 0 0 #495057;
}
select.form-control:focus::-ms-value {
color: #495057;
background-color: #fff;
@@ -2221,7 +2220,7 @@ textarea.form-control {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
font-size: 0.875em;
color: #28a745;
}
@@ -2241,6 +2240,11 @@ textarea.form-control {
border-radius: 0.25rem;
}
.form-row > .col > .valid-tooltip,
.form-row > [class*="col-"] > .valid-tooltip {
left: 5px;
}
.was-validated :valid ~ .valid-feedback,
.was-validated :valid ~ .valid-tooltip,
.is-valid ~ .valid-feedback,
@@ -2250,7 +2254,7 @@ textarea.form-control {
.was-validated .form-control:valid, .form-control.is-valid {
border-color: #28a745;
padding-right: calc(1.5em + 0.75rem);
padding-right: calc(1.5em + 0.75rem) !important;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right calc(0.375em + 0.1875rem) center;
@@ -2262,6 +2266,11 @@ textarea.form-control {
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
}
.was-validated select.form-control:valid, select.form-control.is-valid {
padding-right: 3rem !important;
background-position: right 1.5rem center;
}
.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
padding-right: calc(1.5em + 0.75rem);
background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
@@ -2269,8 +2278,8 @@ textarea.form-control {
.was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #28a745;
padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
padding-right: calc(0.75em + 2.3125rem) !important;
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;
}
.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
@@ -2322,7 +2331,7 @@ textarea.form-control {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
font-size: 0.875em;
color: #dc3545;
}
@@ -2342,6 +2351,11 @@ textarea.form-control {
border-radius: 0.25rem;
}
.form-row > .col > .invalid-tooltip,
.form-row > [class*="col-"] > .invalid-tooltip {
left: 5px;
}
.was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip,
.is-invalid ~ .invalid-feedback,
@@ -2351,7 +2365,7 @@ textarea.form-control {
.was-validated .form-control:invalid, .form-control.is-invalid {
border-color: #dc3545;
padding-right: calc(1.5em + 0.75rem);
padding-right: calc(1.5em + 0.75rem) !important;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right calc(0.375em + 0.1875rem) center;
@@ -2363,6 +2377,11 @@ textarea.form-control {
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
}
.was-validated select.form-control:invalid, select.form-control.is-invalid {
padding-right: 3rem !important;
background-position: right 1.5rem center;
}
.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
padding-right: calc(1.5em + 0.75rem);
background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
@@ -2370,8 +2389,8 @@ textarea.form-control {
.was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #dc3545;
padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
padding-right: calc(0.75em + 2.3125rem) !important;
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;
}
.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
@@ -3174,6 +3193,18 @@ input[type="button"].btn-block {
}
}
.collapsing.width {
width: 0;
height: auto;
transition: width 0.35s ease;
}
@media (prefers-reduced-motion: reduce) {
.collapsing.width {
transition: none;
}
}
.dropup,
.dropright,
.dropdown,
@@ -3388,7 +3419,7 @@ input[type="button"].btn-block {
.dropdown-item:hover, .dropdown-item:focus {
color: #16181b;
text-decoration: none;
background-color: #f8f9fa;
background-color: #e9ecef;
}
.dropdown-item.active, .dropdown-item:active {
@@ -3398,7 +3429,7 @@ input[type="button"].btn-block {
}
.dropdown-item.disabled, .dropdown-item:disabled {
color: #6c757d;
color: #adb5bd;
pointer-events: none;
background-color: transparent;
}
@@ -3597,12 +3628,6 @@ input[type="button"].btn-block {
z-index: 4;
}
.input-group > .form-control:not(:last-child),
.input-group > .custom-select:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group > .form-control:not(:first-child),
.input-group > .custom-select:not(:first-child) {
border-top-left-radius: 0;
@@ -3627,6 +3652,22 @@ input[type="button"].btn-block {
border-bottom-left-radius: 0;
}
.input-group:not(.has-validation) > .form-control:not(:last-child),
.input-group:not(.has-validation) > .custom-select:not(:last-child),
.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label,
.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group.has-validation > .form-control:nth-last-child(n + 3),
.input-group.has-validation > .custom-select:nth-last-child(n + 3),
.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label,
.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group-prepend,
.input-group-append {
display: -ms-flexbox;
@@ -3727,8 +3768,10 @@ input[type="button"].btn-block {
.input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text,
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
border-top-right-radius: 0;
@@ -3753,6 +3796,7 @@ input[type="button"].btn-block {
padding-left: 1.5rem;
-webkit-print-color-adjust: exact;
color-adjust: exact;
print-color-adjust: exact;
}
.custom-control-inline {
@@ -3814,7 +3858,7 @@ input[type="button"].btn-block {
pointer-events: none;
content: "";
background-color: #fff;
border: #adb5bd solid 1px;
border: 1px solid #adb5bd;
}
.custom-control-label::after {
@@ -3825,7 +3869,7 @@ input[type="button"].btn-block {
width: 1rem;
height: 1rem;
content: "";
background: no-repeat 50% / 50% 50%;
background: 50% / 50% 50% no-repeat;
}
.custom-checkbox .custom-control-label::before {
@@ -3914,7 +3958,7 @@ input[type="button"].btn-block {
line-height: 1.5;
color: #495057;
vertical-align: middle;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;
border: 1px solid #ced4da;
border-radius: 0.25rem;
-webkit-appearance: none;
@@ -3983,6 +4027,7 @@ input[type="button"].btn-block {
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
margin: 0;
overflow: hidden;
opacity: 0;
}
@@ -4012,6 +4057,7 @@ input[type="button"].btn-block {
z-index: 1;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
overflow: hidden;
font-weight: 400;
line-height: 1.5;
color: #495057;
@@ -4048,7 +4094,7 @@ input[type="button"].btn-block {
}
.custom-range:focus {
outline: none;
outline: 0;
}
.custom-range:focus::-webkit-slider-thumb {
@@ -4243,17 +4289,16 @@ input[type="button"].btn-block {
border-bottom: 1px solid #dee2e6;
}
.nav-tabs .nav-item {
margin-bottom: -1px;
}
.nav-tabs .nav-link {
margin-bottom: -1px;
background-color: transparent;
border: 1px solid transparent;
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
}
.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
isolation: isolate;
border-color: #e9ecef #e9ecef #dee2e6;
}
@@ -4277,6 +4322,8 @@ input[type="button"].btn-block {
}
.nav-pills .nav-link {
background: none;
border: 0;
border-radius: 0.25rem;
}
@@ -4403,8 +4450,12 @@ input[type="button"].btn-block {
height: 1.5em;
vertical-align: middle;
content: "";
background: no-repeat center center;
background-size: 100% 100%;
background: 50% / 100% 100% no-repeat;
}
.navbar-nav-scroll {
max-height: 75vh;
overflow-y: auto;
}
@media (max-width: 575.98px) {
@@ -4438,6 +4489,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-sm .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-sm .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4480,6 +4534,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-md .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-md .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4522,6 +4579,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-lg .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-lg .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4564,6 +4624,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-xl .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-xl .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4608,6 +4671,10 @@ input[type="button"].btn-block {
flex-wrap: nowrap;
}
.navbar-expand .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4972,17 +5039,12 @@ input[type="button"].btn-block {
border-radius: 0.25rem;
}
.breadcrumb-item {
display: -ms-flexbox;
display: flex;
}
.breadcrumb-item + .breadcrumb-item {
padding-left: 0.5rem;
}
.breadcrumb-item + .breadcrumb-item::before {
display: inline-block;
float: left;
padding-right: 0.5rem;
color: #6c757d;
content: "/";
@@ -5465,8 +5527,8 @@ a.badge-dark:focus, a.badge-dark.focus {
}
.progress-bar-animated {
-webkit-animation: progress-bar-stripes 1s linear infinite;
animation: progress-bar-stripes 1s linear infinite;
-webkit-animation: 1s linear infinite progress-bar-stripes;
animation: 1s linear infinite progress-bar-stripes;
}
@media (prefers-reduced-motion: reduce) {
@@ -6145,7 +6207,7 @@ a.close.disabled {
z-index: 1070;
display: block;
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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -6156,8 +6218,8 @@ a.close.disabled {
text-transform: none;
letter-spacing: normal;
word-break: normal;
word-spacing: normal;
white-space: normal;
word-spacing: normal;
line-break: auto;
font-size: 0.875rem;
word-wrap: break-word;
@@ -6258,7 +6320,7 @@ a.close.disabled {
z-index: 1060;
display: block;
max-width: 276px;
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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -6269,8 +6331,8 @@ a.close.disabled {
text-transform: none;
letter-spacing: normal;
word-break: normal;
word-spacing: normal;
white-space: normal;
word-spacing: normal;
line-break: auto;
font-size: 0.875rem;
word-wrap: break-word;
@@ -6511,8 +6573,11 @@ a.close.disabled {
-ms-flex-pack: center;
justify-content: center;
width: 15%;
padding: 0;
color: #fff;
text-align: center;
background: none;
border: 0;
opacity: 0.5;
transition: opacity 0.15s ease;
}
@@ -6546,7 +6611,7 @@ a.close.disabled {
display: inline-block;
width: 20px;
height: 20px;
background: no-repeat 50% / 100% 100%;
background: 50% / 100% 100% no-repeat;
}
.carousel-control-prev-icon {
@@ -6631,12 +6696,12 @@ a.close.disabled {
display: inline-block;
width: 2rem;
height: 2rem;
vertical-align: text-bottom;
border: 0.25em solid currentColor;
vertical-align: -0.125em;
border: 0.25em solid currentcolor;
border-right-color: transparent;
border-radius: 50%;
-webkit-animation: spinner-border .75s linear infinite;
animation: spinner-border .75s linear infinite;
-webkit-animation: .75s linear infinite spinner-border;
animation: .75s linear infinite spinner-border;
}
.spinner-border-sm {
@@ -6673,12 +6738,12 @@ a.close.disabled {
display: inline-block;
width: 2rem;
height: 2rem;
vertical-align: text-bottom;
background-color: currentColor;
vertical-align: -0.125em;
background-color: currentcolor;
border-radius: 50%;
opacity: 0;
-webkit-animation: spinner-grow .75s linear infinite;
animation: spinner-grow .75s linear infinite;
-webkit-animation: .75s linear infinite spinner-grow;
animation: .75s linear infinite spinner-grow;
}
.spinner-grow-sm {
@@ -6686,6 +6751,14 @@ a.close.disabled {
height: 1rem;
}
@media (prefers-reduced-motion: reduce) {
.spinner-border,
.spinner-grow {
-webkit-animation-duration: 1.5s;
animation-duration: 1.5s;
}
}
.align-baseline {
vertical-align: baseline !important;
}
@@ -7954,7 +8027,6 @@ button.bg-dark:focus {
.user-select-all {
-webkit-user-select: all !important;
-moz-user-select: all !important;
-ms-user-select: all !important;
user-select: all !important;
}
@@ -10203,9 +10275,6 @@ a.text-dark:hover, a.text-dark:focus {
border: 1px solid #adb5bd;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tr,
img {
page-break-inside: avoid;
+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
+861 -921
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
+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
+839 -901
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
+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
+47 -39
View File
@@ -1,45 +1,57 @@
/*!
* Bootstrap alert.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap alert.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var SELECTOR_DISMISS = '[data-dismiss="alert"]';
var EVENT_CLOSE = "close" + EVENT_KEY;
var EVENT_CLOSED = "closed" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_ALERT = 'alert';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var EVENT_CLOSE = "close" + EVENT_KEY;
var EVENT_CLOSED = "closed" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var SELECTOR_DISMISS = '[data-dismiss="alert"]';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Alert = /*#__PURE__*/function () {
@@ -68,13 +80,13 @@
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
this._element = null;
} // Private
;
_proto._getRootElement = function _getRootElement(element) {
var selector = Util__default['default'].getSelectorFromElement(element);
var selector = Util__default["default"].getSelectorFromElement(element);
var parent = false;
if (selector) {
@@ -82,43 +94,43 @@
}
if (!parent) {
parent = $__default['default'](element).closest("." + CLASS_NAME_ALERT)[0];
parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
}
return parent;
};
_proto._triggerCloseEvent = function _triggerCloseEvent(element) {
var closeEvent = $__default['default'].Event(EVENT_CLOSE);
$__default['default'](element).trigger(closeEvent);
var closeEvent = $__default["default"].Event(EVENT_CLOSE);
$__default["default"](element).trigger(closeEvent);
return closeEvent;
};
_proto._removeElement = function _removeElement(element) {
var _this = this;
$__default['default'](element).removeClass(CLASS_NAME_SHOW);
$__default["default"](element).removeClass(CLASS_NAME_SHOW);
if (!$__default['default'](element).hasClass(CLASS_NAME_FADE)) {
if (!$__default["default"](element).hasClass(CLASS_NAME_FADE)) {
this._destroyElement(element);
return;
}
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(element);
$__default['default'](element).one(Util__default['default'].TRANSITION_END, function (event) {
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(element);
$__default["default"](element).one(Util__default["default"].TRANSITION_END, function (event) {
return _this._destroyElement(element, event);
}).emulateTransitionEnd(transitionDuration);
};
_proto._destroyElement = function _destroyElement(element) {
$__default['default'](element).detach().trigger(EVENT_CLOSED).remove();
$__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
} // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var $element = $__default['default'](this);
var $element = $__default["default"](this);
var data = $element.data(DATA_KEY);
if (!data) {
@@ -152,28 +164,24 @@
return Alert;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Alert._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Alert;
$__default["default"].fn[NAME] = Alert._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Alert;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Alert._jQueryInterface;
};
return Alert;
})));
}));
//# sourceMappingURL=alert.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+46 -38
View File
@@ -1,36 +1,53 @@
/*!
* Bootstrap button.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap button.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.jQuery));
}(this, (function ($) { 'use strict';
})(this, (function ($) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'button';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_ACTIVE = 'active';
var CLASS_NAME_BUTTON = 'btn';
var CLASS_NAME_FOCUS = 'focus';
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY);
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
@@ -38,13 +55,8 @@
var SELECTOR_INPUT = 'input:not([type="hidden"])';
var SELECTOR_ACTIVE = '.active';
var SELECTOR_BUTTON = '.btn';
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY);
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Button = /*#__PURE__*/function () {
@@ -60,7 +72,7 @@
_proto.toggle = function toggle() {
var triggerChangeEvent = true;
var addAriaPressed = true;
var rootElement = $__default['default'](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
if (rootElement) {
var input = this._element.querySelector(SELECTOR_INPUT);
@@ -73,7 +85,7 @@
var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
if (activeElement) {
$__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);
$__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE);
}
}
}
@@ -85,7 +97,7 @@
}
if (!this.shouldAvoidTriggerChange) {
$__default['default'](input).trigger('change');
$__default["default"](input).trigger('change');
}
}
@@ -100,20 +112,20 @@
}
if (triggerChangeEvent) {
$__default['default'](this._element).toggleClass(CLASS_NAME_ACTIVE);
$__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE);
}
}
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
this._element = null;
} // Static
;
Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
return this.each(function () {
var $element = $__default['default'](this);
var $element = $__default["default"](this);
var data = $element.data(DATA_KEY);
if (!data) {
@@ -139,18 +151,16 @@
return Button;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
var button = event.target;
var initialButton = button;
if (!$__default['default'](button).hasClass(CLASS_NAME_BUTTON)) {
button = $__default['default'](button).closest(SELECTOR_BUTTON)[0];
if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
}
if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
@@ -165,14 +175,14 @@
}
if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
Button._jQueryInterface.call($__default['default'](button), 'toggle', initialButton.tagName === 'INPUT');
Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
}
}
}).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
var button = $__default['default'](event.target).closest(SELECTOR_BUTTON)[0];
$__default['default'](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
$__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
});
$__default['default'](window).on(EVENT_LOAD_DATA_API, function () {
$__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
// ensure correct active class is set to match the controls' actual values/states
// find all checkboxes/readio buttons inside data-toggle groups
var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
@@ -202,20 +212,18 @@
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Button._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Button;
$__default["default"].fn[NAME] = Button._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Button;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Button._jQueryInterface;
};
return Button;
})));
}));
//# sourceMappingURL=button.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+137 -107
View File
@@ -1,36 +1,65 @@
/*!
* Bootstrap carousel.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap carousel.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'carousel';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
@@ -38,22 +67,14 @@
var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
var SWIPE_THRESHOLD = 40;
var Default = {
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
};
var DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
};
var CLASS_NAME_CAROUSEL = 'carousel';
var CLASS_NAME_ACTIVE = 'active';
var CLASS_NAME_SLIDE = 'slide';
var CLASS_NAME_RIGHT = 'carousel-item-right';
var CLASS_NAME_LEFT = 'carousel-item-left';
var CLASS_NAME_NEXT = 'carousel-item-next';
var CLASS_NAME_PREV = 'carousel-item-prev';
var CLASS_NAME_POINTER_EVENT = 'pointer-event';
var DIRECTION_NEXT = 'next';
var DIRECTION_PREV = 'prev';
var DIRECTION_LEFT = 'left';
@@ -71,14 +92,6 @@
var EVENT_DRAG_START = "dragstart" + EVENT_KEY;
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_CAROUSEL = 'carousel';
var CLASS_NAME_ACTIVE = 'active';
var CLASS_NAME_SLIDE = 'slide';
var CLASS_NAME_RIGHT = 'carousel-item-right';
var CLASS_NAME_LEFT = 'carousel-item-left';
var CLASS_NAME_NEXT = 'carousel-item-next';
var CLASS_NAME_PREV = 'carousel-item-prev';
var CLASS_NAME_POINTER_EVENT = 'pointer-event';
var SELECTOR_ACTIVE = '.active';
var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
var SELECTOR_ITEM = '.carousel-item';
@@ -87,14 +100,28 @@
var SELECTOR_INDICATORS = '.carousel-indicators';
var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
var Default = {
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
};
var DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
};
var PointerType = {
TOUCH: 'touch',
PEN: 'pen'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Carousel = /*#__PURE__*/function () {
@@ -127,7 +154,7 @@
};
_proto.nextWhenVisible = function nextWhenVisible() {
var $element = $__default['default'](this._element); // Don't call next when the page isn't visible
var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
// or the carousel or its parent isn't visible
if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
@@ -147,7 +174,7 @@
}
if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
Util__default['default'].triggerTransitionEnd(this._element);
Util__default["default"].triggerTransitionEnd(this._element);
this.cycle(true);
}
@@ -166,6 +193,8 @@
}
if (this._config.interval && !this._isPaused) {
this._updateInterval();
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
}
};
@@ -182,7 +211,7 @@
}
if (this._isSliding) {
$__default['default'](this._element).one(EVENT_SLID, function () {
$__default["default"](this._element).one(EVENT_SLID, function () {
return _this.to(index);
});
return;
@@ -200,8 +229,8 @@
};
_proto.dispose = function dispose() {
$__default['default'](this._element).off(EVENT_KEY);
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"](this._element).off(EVENT_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
this._items = null;
this._config = null;
this._element = null;
@@ -215,7 +244,7 @@
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config);
Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
return config;
};
@@ -243,13 +272,13 @@
var _this2 = this;
if (this._config.keyboard) {
$__default['default'](this._element).on(EVENT_KEYDOWN, function (event) {
$__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
return _this2._keydown(event);
});
}
if (this._config.pause === 'hover') {
$__default['default'](this._element).on(EVENT_MOUSEENTER, function (event) {
$__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
return _this2.pause(event);
}).on(EVENT_MOUSELEAVE, function (event) {
return _this2.cycle(event);
@@ -278,11 +307,7 @@
var move = function move(event) {
// ensure swiping with one touch and not pinching
if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
_this3.touchDeltaX = 0;
} else {
_this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
}
_this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
};
var end = function end(event) {
@@ -312,27 +337,27 @@
}
};
$__default['default'](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
$__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
return e.preventDefault();
});
if (this._pointerEvent) {
$__default['default'](this._element).on(EVENT_POINTERDOWN, function (event) {
$__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
return start(event);
});
$__default['default'](this._element).on(EVENT_POINTERUP, function (event) {
$__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
return end(event);
});
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else {
$__default['default'](this._element).on(EVENT_TOUCHSTART, function (event) {
$__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
return start(event);
});
$__default['default'](this._element).on(EVENT_TOUCHMOVE, function (event) {
$__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
return move(event);
});
$__default['default'](this._element).on(EVENT_TOUCHEND, function (event) {
$__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
return end(event);
});
}
@@ -384,29 +409,46 @@
var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
var slideEvent = $__default['default'].Event(EVENT_SLIDE, {
var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
relatedTarget: relatedTarget,
direction: eventDirectionName,
from: fromIndex,
to: targetIndex
});
$__default['default'](this._element).trigger(slideEvent);
$__default["default"](this._element).trigger(slideEvent);
return slideEvent;
};
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
if (this._indicatorsElement) {
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE));
$__default['default'](indicators).removeClass(CLASS_NAME_ACTIVE);
$__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE);
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
if (nextIndicator) {
$__default['default'](nextIndicator).addClass(CLASS_NAME_ACTIVE);
$__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE);
}
}
};
_proto._updateInterval = function _updateInterval() {
var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
if (!element) {
return;
}
var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
if (elementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
this._config.interval = elementInterval;
} else {
this._config.interval = this._config.defaultInterval || this._config.interval;
}
};
_proto._slide = function _slide(direction, element) {
var _this4 = this;
@@ -433,7 +475,7 @@
eventDirectionName = DIRECTION_RIGHT;
}
if (nextElement && $__default['default'](nextElement).hasClass(CLASS_NAME_ACTIVE)) {
if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE)) {
this._isSliding = false;
return;
}
@@ -457,41 +499,33 @@
this._setActiveIndicatorElement(nextElement);
var slidEvent = $__default['default'].Event(EVENT_SLID, {
this._activeElement = nextElement;
var slidEvent = $__default["default"].Event(EVENT_SLID, {
relatedTarget: nextElement,
direction: eventDirectionName,
from: activeElementIndex,
to: nextElementIndex
});
if ($__default['default'](this._element).hasClass(CLASS_NAME_SLIDE)) {
$__default['default'](nextElement).addClass(orderClassName);
Util__default['default'].reflow(nextElement);
$__default['default'](activeElement).addClass(directionalClassName);
$__default['default'](nextElement).addClass(directionalClassName);
var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
if (nextElementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
this._config.interval = nextElementInterval;
} else {
this._config.interval = this._config.defaultInterval || this._config.interval;
}
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(activeElement);
$__default['default'](activeElement).one(Util__default['default'].TRANSITION_END, function () {
$__default['default'](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE);
$__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE + " " + orderClassName + " " + directionalClassName);
if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
$__default["default"](nextElement).addClass(orderClassName);
Util__default["default"].reflow(nextElement);
$__default["default"](activeElement).addClass(directionalClassName);
$__default["default"](nextElement).addClass(directionalClassName);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(activeElement);
$__default["default"](activeElement).one(Util__default["default"].TRANSITION_END, function () {
$__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE);
$__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE + " " + orderClassName + " " + directionalClassName);
_this4._isSliding = false;
setTimeout(function () {
return $__default['default'](_this4._element).trigger(slidEvent);
return $__default["default"](_this4._element).trigger(slidEvent);
}, 0);
}).emulateTransitionEnd(transitionDuration);
} else {
$__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);
$__default['default'](nextElement).addClass(CLASS_NAME_ACTIVE);
$__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE);
$__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE);
this._isSliding = false;
$__default['default'](this._element).trigger(slidEvent);
$__default["default"](this._element).trigger(slidEvent);
}
if (isCycling) {
@@ -502,9 +536,9 @@
Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $__default['default'](this).data(DATA_KEY);
var data = $__default["default"](this).data(DATA_KEY);
var _config = _extends({}, Default, $__default['default'](this).data());
var _config = _extends({}, Default, $__default["default"](this).data());
if (typeof config === 'object') {
_config = _extends({}, _config, config);
@@ -514,7 +548,7 @@
if (!data) {
data = new Carousel(this, _config);
$__default['default'](this).data(DATA_KEY, data);
$__default["default"](this).data(DATA_KEY, data);
}
if (typeof config === 'number') {
@@ -533,19 +567,19 @@
};
Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
var selector = Util__default['default'].getSelectorFromElement(this);
var selector = Util__default["default"].getSelectorFromElement(this);
if (!selector) {
return;
}
var target = $__default['default'](selector)[0];
var target = $__default["default"](selector)[0];
if (!target || !$__default['default'](target).hasClass(CLASS_NAME_CAROUSEL)) {
if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
return;
}
var config = _extends({}, $__default['default'](target).data(), $__default['default'](this).data());
var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
var slideIndex = this.getAttribute('data-slide-to');
@@ -553,10 +587,10 @@
config.interval = false;
}
Carousel._jQueryInterface.call($__default['default'](target), config);
Carousel._jQueryInterface.call($__default["default"](target), config);
if (slideIndex) {
$__default['default'](target).data(DATA_KEY).to(slideIndex);
$__default["default"](target).data(DATA_KEY).to(slideIndex);
}
event.preventDefault();
@@ -577,37 +611,33 @@
return Carousel;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
$__default['default'](window).on(EVENT_LOAD_DATA_API, function () {
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
$__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
for (var i = 0, len = carousels.length; i < len; i++) {
var $carousel = $__default['default'](carousels[i]);
var $carousel = $__default["default"](carousels[i]);
Carousel._jQueryInterface.call($carousel, $carousel.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Carousel._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Carousel;
$__default["default"].fn[NAME] = Carousel._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Carousel;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Carousel._jQueryInterface;
};
return Carousel;
})));
}));
//# sourceMappingURL=carousel.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+99 -76
View File
@@ -1,36 +1,78 @@
/*!
* Bootstrap collapse.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap collapse.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'collapse';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_COLLAPSE = 'collapse';
var CLASS_NAME_COLLAPSING = 'collapsing';
var CLASS_NAME_COLLAPSED = 'collapsed';
var DIMENSION_WIDTH = 'width';
var DIMENSION_HEIGHT = 'height';
var EVENT_SHOW = "show" + EVENT_KEY;
var EVENT_SHOWN = "shown" + EVENT_KEY;
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var SELECTOR_ACTIVES = '.show, .collapsing';
var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]';
var Default = {
toggle: true,
parent: ''
@@ -39,23 +81,8 @@
toggle: 'boolean',
parent: '(string|element)'
};
var EVENT_SHOW = "show" + EVENT_KEY;
var EVENT_SHOWN = "shown" + EVENT_KEY;
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_COLLAPSE = 'collapse';
var CLASS_NAME_COLLAPSING = 'collapsing';
var CLASS_NAME_COLLAPSED = 'collapsed';
var DIMENSION_WIDTH = 'width';
var DIMENSION_HEIGHT = 'height';
var SELECTOR_ACTIVES = '.show, .collapsing';
var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Collapse = /*#__PURE__*/function () {
@@ -68,7 +95,7 @@
for (var i = 0, len = toggleList.length; i < len; i++) {
var elem = toggleList[i];
var selector = Util__default['default'].getSelectorFromElement(elem);
var selector = Util__default["default"].getSelectorFromElement(elem);
var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
return foundElem === element;
});
@@ -96,7 +123,7 @@
// Public
_proto.toggle = function toggle() {
if ($__default['default'](this._element).hasClass(CLASS_NAME_SHOW)) {
if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
this.hide();
} else {
this.show();
@@ -106,7 +133,7 @@
_proto.show = function show() {
var _this = this;
if (this._isTransitioning || $__default['default'](this._element).hasClass(CLASS_NAME_SHOW)) {
if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
return;
}
@@ -128,64 +155,64 @@
}
if (actives) {
activesData = $__default['default'](actives).not(this._selector).data(DATA_KEY);
activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY);
if (activesData && activesData._isTransitioning) {
return;
}
}
var startEvent = $__default['default'].Event(EVENT_SHOW);
$__default['default'](this._element).trigger(startEvent);
var startEvent = $__default["default"].Event(EVENT_SHOW);
$__default["default"](this._element).trigger(startEvent);
if (startEvent.isDefaultPrevented()) {
return;
}
if (actives) {
Collapse._jQueryInterface.call($__default['default'](actives).not(this._selector), 'hide');
Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
if (!activesData) {
$__default['default'](actives).data(DATA_KEY, null);
$__default["default"](actives).data(DATA_KEY, null);
}
}
var dimension = this._getDimension();
$__default['default'](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
$__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
this._element.style[dimension] = 0;
if (this._triggerArray.length) {
$__default['default'](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
$__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
}
this.setTransitioning(true);
var complete = function complete() {
$__default['default'](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
$__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
_this._element.style[dimension] = '';
_this.setTransitioning(false);
$__default['default'](_this._element).trigger(EVENT_SHOWN);
$__default["default"](_this._element).trigger(EVENT_SHOWN);
};
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension;
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px";
};
_proto.hide = function hide() {
var _this2 = this;
if (this._isTransitioning || !$__default['default'](this._element).hasClass(CLASS_NAME_SHOW)) {
if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) {
return;
}
var startEvent = $__default['default'].Event(EVENT_HIDE);
$__default['default'](this._element).trigger(startEvent);
var startEvent = $__default["default"].Event(EVENT_HIDE);
$__default["default"](this._element).trigger(startEvent);
if (startEvent.isDefaultPrevented()) {
return;
@@ -194,20 +221,20 @@
var dimension = this._getDimension();
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
Util__default['default'].reflow(this._element);
$__default['default'](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
Util__default["default"].reflow(this._element);
$__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW);
var triggerArrayLength = this._triggerArray.length;
if (triggerArrayLength > 0) {
for (var i = 0; i < triggerArrayLength; i++) {
var trigger = this._triggerArray[i];
var selector = Util__default['default'].getSelectorFromElement(trigger);
var selector = Util__default["default"].getSelectorFromElement(trigger);
if (selector !== null) {
var $elem = $__default['default']([].slice.call(document.querySelectorAll(selector)));
var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
if (!$elem.hasClass(CLASS_NAME_SHOW)) {
$__default['default'](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
$__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
}
}
}
@@ -218,12 +245,12 @@
var complete = function complete() {
_this2.setTransitioning(false);
$__default['default'](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
$__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
};
this._element.style[dimension] = '';
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
};
_proto.setTransitioning = function setTransitioning(isTransitioning) {
@@ -231,7 +258,7 @@
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
this._config = null;
this._parent = null;
this._element = null;
@@ -244,12 +271,12 @@
config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // Coerce string values
Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
return config;
};
_proto._getDimension = function _getDimension() {
var hasWidth = $__default['default'](this._element).hasClass(DIMENSION_WIDTH);
var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
};
@@ -258,7 +285,7 @@
var parent;
if (Util__default['default'].isElement(this._config.parent)) {
if (Util__default["default"].isElement(this._config.parent)) {
parent = this._config.parent; // It's a jQuery object
if (typeof this._config.parent.jquery !== 'undefined') {
@@ -270,29 +297,29 @@
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
var children = [].slice.call(parent.querySelectorAll(selector));
$__default['default'](children).each(function (i, element) {
$__default["default"](children).each(function (i, element) {
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
});
return parent;
};
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
var isOpen = $__default['default'](element).hasClass(CLASS_NAME_SHOW);
var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW);
if (triggerArray.length) {
$__default['default'](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
$__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}
} // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util__default['default'].getSelectorFromElement(element);
var selector = Util__default["default"].getSelectorFromElement(element);
return selector ? document.querySelector(selector) : null;
};
Collapse._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var $element = $__default['default'](this);
var $element = $__default["default"](this);
var data = $element.data(DATA_KEY);
var _config = _extends({}, Default, $element.data(), typeof config === 'object' && config ? config : {});
@@ -331,23 +358,21 @@
return Collapse;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.currentTarget.tagName === 'A') {
event.preventDefault();
}
var $trigger = $__default['default'](this);
var selector = Util__default['default'].getSelectorFromElement(this);
var $trigger = $__default["default"](this);
var selector = Util__default["default"].getSelectorFromElement(this);
var selectors = [].slice.call(document.querySelectorAll(selector));
$__default['default'](selectors).each(function () {
var $target = $__default['default'](this);
$__default["default"](selectors).each(function () {
var $target = $__default["default"](this);
var data = $target.data(DATA_KEY);
var config = data ? 'toggle' : $trigger.data();
@@ -355,20 +380,18 @@
});
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Collapse._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Collapse;
$__default["default"].fn[NAME] = Collapse._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Collapse;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Collapse._jQueryInterface;
};
return Collapse;
})));
}));
//# sourceMappingURL=collapse.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+105 -85
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap dropdown.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap dropdown.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
}(this, (function ($, Popper, Util) { 'use strict';
})(this, (function ($, Popper, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -15,23 +15,52 @@
var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'dropdown';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
@@ -45,6 +74,13 @@
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
var CLASS_NAME_DISABLED = 'disabled';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_DROPUP = 'dropup';
var CLASS_NAME_DROPRIGHT = 'dropright';
var CLASS_NAME_DROPLEFT = 'dropleft';
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
var CLASS_NAME_POSITION_STATIC = 'position-static';
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_SHOW = "show" + EVENT_KEY;
@@ -53,13 +89,6 @@
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY;
var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_DISABLED = 'disabled';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_DROPUP = 'dropup';
var CLASS_NAME_DROPRIGHT = 'dropright';
var CLASS_NAME_DROPLEFT = 'dropleft';
var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
var CLASS_NAME_POSITION_STATIC = 'position-static';
var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
var SELECTOR_FORM_CHILD = '.dropdown form';
var SELECTOR_MENU = '.dropdown-menu';
@@ -88,9 +117,7 @@
popperConfig: '(null|object)'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Dropdown = /*#__PURE__*/function () {
@@ -109,11 +136,11 @@
// Public
_proto.toggle = function toggle() {
if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED)) {
return;
}
var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW);
var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW);
Dropdown._clearMenus();
@@ -129,38 +156,35 @@
usePopper = false;
}
if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW)) {
return;
}
var relatedTarget = {
relatedTarget: this._element
};
var showEvent = $__default['default'].Event(EVENT_SHOW, relatedTarget);
var showEvent = $__default["default"].Event(EVENT_SHOW, relatedTarget);
var parent = Dropdown._getParentFromElement(this._element);
$__default['default'](parent).trigger(showEvent);
$__default["default"](parent).trigger(showEvent);
if (showEvent.isDefaultPrevented()) {
return;
} // Disable totally Popper.js for Dropdown in Navbar
} // Totally disable Popper for Dropdowns in Navbar
if (!this._inNavbar && usePopper) {
/**
* Check for Popper dependency
* Popper - https://popper.js.org
*/
if (typeof Popper__default['default'] === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
// Check for Popper dependency
if (typeof Popper__default["default"] === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
}
var referenceElement = this._element;
if (this._config.reference === 'parent') {
referenceElement = parent;
} else if (Util__default['default'].isElement(this._config.reference)) {
} else if (Util__default["default"].isElement(this._config.reference)) {
referenceElement = this._config.reference; // Check if it's jQuery element
if (typeof this._config.reference.jquery !== 'undefined') {
@@ -172,41 +196,41 @@
if (this._config.boundary !== 'scrollParent') {
$__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);
$__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
}
this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
} // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
$__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);
if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
$__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
}
this._element.focus();
this._element.setAttribute('aria-expanded', true);
$__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
$__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_SHOWN, relatedTarget));
$__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW);
$__default["default"](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default["default"].Event(EVENT_SHOWN, relatedTarget));
};
_proto.hide = function hide() {
if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW)) {
return;
}
var relatedTarget = {
relatedTarget: this._element
};
var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
var hideEvent = $__default["default"].Event(EVENT_HIDE, relatedTarget);
var parent = Dropdown._getParentFromElement(this._element);
$__default['default'](parent).trigger(hideEvent);
$__default["default"](parent).trigger(hideEvent);
if (hideEvent.isDefaultPrevented()) {
return;
@@ -216,13 +240,13 @@
this._popper.destroy();
}
$__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
$__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
$__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW);
$__default["default"](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default["default"].Event(EVENT_HIDDEN, relatedTarget));
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default['default'](this._element).off(EVENT_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
$__default["default"](this._element).off(EVENT_KEY);
this._element = null;
this._menu = null;
@@ -245,7 +269,7 @@
_proto._addEventListeners = function _addEventListeners() {
var _this = this;
$__default['default'](this._element).on(EVENT_CLICK, function (event) {
$__default["default"](this._element).on(EVENT_CLICK, function (event) {
event.preventDefault();
event.stopPropagation();
@@ -254,8 +278,8 @@
};
_proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);
Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
Util__default["default"].typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config;
};
@@ -272,16 +296,16 @@
};
_proto._getPlacement = function _getPlacement() {
var $parentDropdown = $__default['default'](this._element.parentNode);
var $parentDropdown = $__default["default"](this._element.parentNode);
var placement = PLACEMENT_BOTTOM; // Handle dropup
if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
placement = PLACEMENT_RIGHT;
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
placement = PLACEMENT_LEFT;
} else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
} else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
placement = PLACEMENT_BOTTOMEND;
}
@@ -289,7 +313,7 @@
};
_proto._detectNavbar = function _detectNavbar() {
return $__default['default'](this._element).closest('.navbar').length > 0;
return $__default["default"](this._element).closest('.navbar').length > 0;
};
_proto._getOffset = function _getOffset() {
@@ -299,7 +323,7 @@
if (typeof this._config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
return data;
};
} else {
@@ -321,7 +345,7 @@
boundariesElement: this._config.boundary
}
}
}; // Disable Popper.js if we have a static display
}; // Disable Popper if we have a static display
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
@@ -335,13 +359,13 @@
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $__default['default'](this).data(DATA_KEY);
var data = $__default["default"](this).data(DATA_KEY);
var _config = typeof config === 'object' ? config : null;
if (!data) {
data = new Dropdown(this, _config);
$__default['default'](this).data(DATA_KEY, data);
$__default["default"](this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
@@ -364,7 +388,7 @@
for (var i = 0, len = toggles.length; i < len; i++) {
var parent = Dropdown._getParentFromElement(toggles[i]);
var context = $__default['default'](toggles[i]).data(DATA_KEY);
var context = $__default["default"](toggles[i]).data(DATA_KEY);
var relatedTarget = {
relatedTarget: toggles[i]
};
@@ -379,16 +403,16 @@
var dropdownMenu = context._menu;
if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW)) {
if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW)) {
continue;
}
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
continue;
}
var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
$__default['default'](parent).trigger(hideEvent);
var hideEvent = $__default["default"].Event(EVENT_HIDE, relatedTarget);
$__default["default"](parent).trigger(hideEvent);
if (hideEvent.isDefaultPrevented()) {
continue;
@@ -397,7 +421,7 @@
if ('ontouchstart' in document.documentElement) {
$__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);
$__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
}
toggles[i].setAttribute('aria-expanded', 'false');
@@ -406,14 +430,14 @@
context._popper.destroy();
}
$__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW);
$__default['default'](parent).removeClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
$__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW);
$__default["default"](parent).removeClass(CLASS_NAME_SHOW).trigger($__default["default"].Event(EVENT_HIDDEN, relatedTarget));
}
};
Dropdown._getParentFromElement = function _getParentFromElement(element) {
var parent;
var selector = Util__default['default'].getSelectorFromElement(element);
var selector = Util__default["default"].getSelectorFromElement(element);
if (selector) {
parent = document.querySelector(selector);
@@ -431,17 +455,17 @@
// - If key is other than escape
// - If key is not up or down => not a dropdown command
// - If trigger inside the menu => not a dropdown command
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
return;
}
if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {
if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED)) {
return;
}
var parent = Dropdown._getParentFromElement(this);
var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW);
var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW);
if (!isActive && event.which === ESCAPE_KEYCODE) {
return;
@@ -452,15 +476,15 @@
if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
if (event.which === ESCAPE_KEYCODE) {
$__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
$__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
}
$__default['default'](this).trigger('click');
$__default["default"](this).trigger('click');
return;
}
var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
return $__default['default'](item).is(':visible');
return $__default["default"](item).is(':visible');
});
if (items.length === 0) {
@@ -506,35 +530,31 @@
return Dropdown;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
$__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault();
event.stopPropagation();
Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');
Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
}).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
e.stopPropagation();
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Dropdown._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Dropdown;
$__default["default"].fn[NAME] = Dropdown._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Dropdown;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Dropdown._jQueryInterface;
};
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.5.3): index.js
* Bootstrap (v4.6.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
+171 -148
View File
@@ -1,50 +1,74 @@
/*!
* Bootstrap modal.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap modal.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'modal';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = {
backdrop: true,
keyboard: true,
focus: true,
show: true
};
var DefaultType = {
backdrop: '(boolean|string)',
keyboard: 'boolean',
focus: 'boolean',
show: 'boolean'
};
var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
var CLASS_NAME_BACKDROP = 'modal-backdrop';
var CLASS_NAME_OPEN = 'modal-open';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_STATIC = 'modal-static';
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
@@ -57,23 +81,26 @@
var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
var CLASS_NAME_BACKDROP = 'modal-backdrop';
var CLASS_NAME_OPEN = 'modal-open';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_STATIC = 'modal-static';
var SELECTOR_DIALOG = '.modal-dialog';
var SELECTOR_MODAL_BODY = '.modal-body';
var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
var SELECTOR_STICKY_CONTENT = '.sticky-top';
var Default = {
backdrop: true,
keyboard: true,
focus: true,
show: true
};
var DefaultType = {
backdrop: '(boolean|string)',
keyboard: 'boolean',
focus: 'boolean',
show: 'boolean'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Modal = /*#__PURE__*/function () {
@@ -104,21 +131,21 @@
return;
}
if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
this._isTransitioning = true;
}
var showEvent = $__default['default'].Event(EVENT_SHOW, {
var showEvent = $__default["default"].Event(EVENT_SHOW, {
relatedTarget: relatedTarget
});
$__default['default'](this._element).trigger(showEvent);
$__default["default"](this._element).trigger(showEvent);
if (this._isShown || showEvent.isDefaultPrevented()) {
if (showEvent.isDefaultPrevented()) {
return;
}
this._isShown = true;
if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
this._isTransitioning = true;
}
this._checkScrollbar();
this._setScrollbar();
@@ -129,12 +156,12 @@
this._setResizeEvent();
$__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
$__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
return _this.hide(event);
});
$__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
$__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
if ($__default['default'](event.target).is(_this._element)) {
$__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
$__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
if ($__default["default"](event.target).is(_this._element)) {
_this._ignoreBackdropClick = true;
}
});
@@ -156,15 +183,15 @@
return;
}
var hideEvent = $__default['default'].Event(EVENT_HIDE);
$__default['default'](this._element).trigger(hideEvent);
var hideEvent = $__default["default"].Event(EVENT_HIDE);
$__default["default"](this._element).trigger(hideEvent);
if (!this._isShown || hideEvent.isDefaultPrevented()) {
return;
}
this._isShown = false;
var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
if (transition) {
this._isTransitioning = true;
@@ -174,14 +201,14 @@
this._setResizeEvent();
$__default['default'](document).off(EVENT_FOCUSIN);
$__default['default'](this._element).removeClass(CLASS_NAME_SHOW);
$__default['default'](this._element).off(EVENT_CLICK_DISMISS);
$__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
$__default["default"](document).off(EVENT_FOCUSIN);
$__default["default"](this._element).removeClass(CLASS_NAME_SHOW);
$__default["default"](this._element).off(EVENT_CLICK_DISMISS);
$__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
if (transition) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function (event) {
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) {
return _this2._hideModal(event);
}).emulateTransitionEnd(transitionDuration);
} else {
@@ -191,7 +218,7 @@
_proto.dispose = function dispose() {
[window, this._element, this._dialog].forEach(function (htmlElement) {
return $__default['default'](htmlElement).off(EVENT_KEY);
return $__default["default"](htmlElement).off(EVENT_KEY);
});
/**
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
@@ -199,8 +226,8 @@
* It will remove `EVENT_CLICK_DATA_API` event that should remain
*/
$__default['default'](document).off(EVENT_FOCUSIN);
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"](document).off(EVENT_FOCUSIN);
$__default["default"].removeData(this._element, DATA_KEY);
this._config = null;
this._element = null;
this._dialog = null;
@@ -219,51 +246,47 @@
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config);
Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
return config;
};
_proto._triggerBackdropTransition = function _triggerBackdropTransition() {
var _this3 = this;
if (this._config.backdrop === 'static') {
var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);
$__default['default'](this._element).trigger(hideEventPrevented);
var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
$__default["default"](this._element).trigger(hideEventPrevented);
if (hideEventPrevented.isDefaultPrevented()) {
return;
}
if (hideEventPrevented.isDefaultPrevented()) {
return;
}
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
this._element.classList.add(CLASS_NAME_STATIC);
var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
$__default["default"](this._element).off(Util__default["default"].TRANSITION_END);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () {
_this3._element.classList.remove(CLASS_NAME_STATIC);
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
$__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () {
_this3._element.style.overflowY = '';
}).emulateTransitionEnd(_this3._element, modalTransitionDuration);
}
}).emulateTransitionEnd(modalTransitionDuration);
this._element.classList.add(CLASS_NAME_STATIC);
var modalTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
$__default['default'](this._element).off(Util__default['default'].TRANSITION_END);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function () {
_this3._element.classList.remove(CLASS_NAME_STATIC);
if (!isModalOverflowing) {
$__default['default'](_this3._element).one(Util__default['default'].TRANSITION_END, function () {
_this3._element.style.overflowY = '';
}).emulateTransitionEnd(_this3._element, modalTransitionDuration);
}
}).emulateTransitionEnd(modalTransitionDuration);
this._element.focus();
} else {
this.hide();
}
this._element.focus();
};
_proto._showElement = function _showElement(relatedTarget) {
var _this4 = this;
var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE);
var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
@@ -279,23 +302,23 @@
this._element.setAttribute('role', 'dialog');
if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
modalBody.scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) {
Util__default['default'].reflow(this._element);
Util__default["default"].reflow(this._element);
}
$__default['default'](this._element).addClass(CLASS_NAME_SHOW);
$__default["default"](this._element).addClass(CLASS_NAME_SHOW);
if (this._config.focus) {
this._enforceFocus();
}
var shownEvent = $__default['default'].Event(EVENT_SHOWN, {
var shownEvent = $__default["default"].Event(EVENT_SHOWN, {
relatedTarget: relatedTarget
});
@@ -305,12 +328,12 @@
}
_this4._isTransitioning = false;
$__default['default'](_this4._element).trigger(shownEvent);
$__default["default"](_this4._element).trigger(shownEvent);
};
if (transition) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
$__default['default'](this._dialog).one(Util__default['default'].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog);
$__default["default"](this._dialog).one(Util__default["default"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
} else {
transitionComplete();
}
@@ -319,9 +342,9 @@
_proto._enforceFocus = function _enforceFocus() {
var _this5 = this;
$__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
$__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
.on(EVENT_FOCUSIN, function (event) {
if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {
if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
_this5._element.focus();
}
});
@@ -331,7 +354,7 @@
var _this6 = this;
if (this._isShown) {
$__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
$__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
event.preventDefault();
@@ -341,7 +364,7 @@
}
});
} else if (!this._isShown) {
$__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);
$__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
}
};
@@ -349,11 +372,11 @@
var _this7 = this;
if (this._isShown) {
$__default['default'](window).on(EVENT_RESIZE, function (event) {
$__default["default"](window).on(EVENT_RESIZE, function (event) {
return _this7.handleUpdate(event);
});
} else {
$__default['default'](window).off(EVENT_RESIZE);
$__default["default"](window).off(EVENT_RESIZE);
}
};
@@ -371,19 +394,19 @@
this._isTransitioning = false;
this._showBackdrop(function () {
$__default['default'](document.body).removeClass(CLASS_NAME_OPEN);
$__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
_this8._resetAdjustments();
_this8._resetScrollbar();
$__default['default'](_this8._element).trigger(EVENT_HIDDEN);
$__default["default"](_this8._element).trigger(EVENT_HIDDEN);
});
};
_proto._removeBackdrop = function _removeBackdrop() {
if (this._backdrop) {
$__default['default'](this._backdrop).remove();
$__default["default"](this._backdrop).remove();
this._backdrop = null;
}
};
@@ -391,7 +414,7 @@
_proto._showBackdrop = function _showBackdrop(callback) {
var _this9 = this;
var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
if (this._isShown && this._config.backdrop) {
this._backdrop = document.createElement('div');
@@ -401,8 +424,8 @@
this._backdrop.classList.add(animate);
}
$__default['default'](this._backdrop).appendTo(document.body);
$__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {
$__default["default"](this._backdrop).appendTo(document.body);
$__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) {
if (_this9._ignoreBackdropClick) {
_this9._ignoreBackdropClick = false;
return;
@@ -412,14 +435,18 @@
return;
}
_this9._triggerBackdropTransition();
if (_this9._config.backdrop === 'static') {
_this9._triggerBackdropTransition();
} else {
_this9.hide();
}
});
if (animate) {
Util__default['default'].reflow(this._backdrop);
Util__default["default"].reflow(this._backdrop);
}
$__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW);
$__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW);
if (!callback) {
return;
@@ -430,10 +457,10 @@
return;
}
var backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
$__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
$__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
} else if (!this._isShown && this._backdrop) {
$__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW);
$__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW);
var callbackRemove = function callbackRemove() {
_this9._removeBackdrop();
@@ -443,10 +470,10 @@
}
};
if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
var _backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) {
var _backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop);
$__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
$__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
} else {
callbackRemove();
}
@@ -491,46 +518,46 @@
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
$__default['default'](fixedContent).each(function (index, element) {
$__default["default"](fixedContent).each(function (index, element) {
var actualPadding = element.style.paddingRight;
var calculatedPadding = $__default['default'](element).css('padding-right');
$__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
var calculatedPadding = $__default["default"](element).css('padding-right');
$__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
}); // Adjust sticky content margin
$__default['default'](stickyContent).each(function (index, element) {
$__default["default"](stickyContent).each(function (index, element) {
var actualMargin = element.style.marginRight;
var calculatedMargin = $__default['default'](element).css('margin-right');
$__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
var calculatedMargin = $__default["default"](element).css('margin-right');
$__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
}); // Adjust body padding
var actualPadding = document.body.style.paddingRight;
var calculatedPadding = $__default['default'](document.body).css('padding-right');
$__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
var calculatedPadding = $__default["default"](document.body).css('padding-right');
$__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
}
$__default['default'](document.body).addClass(CLASS_NAME_OPEN);
$__default["default"](document.body).addClass(CLASS_NAME_OPEN);
};
_proto._resetScrollbar = function _resetScrollbar() {
// Restore fixed content padding
var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
$__default['default'](fixedContent).each(function (index, element) {
var padding = $__default['default'](element).data('padding-right');
$__default['default'](element).removeData('padding-right');
$__default["default"](fixedContent).each(function (index, element) {
var padding = $__default["default"](element).data('padding-right');
$__default["default"](element).removeData('padding-right');
element.style.paddingRight = padding ? padding : '';
}); // Restore sticky content
var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
$__default['default'](elements).each(function (index, element) {
var margin = $__default['default'](element).data('margin-right');
$__default["default"](elements).each(function (index, element) {
var margin = $__default["default"](element).data('margin-right');
if (typeof margin !== 'undefined') {
$__default['default'](element).css('margin-right', margin).removeData('margin-right');
$__default["default"](element).css('margin-right', margin).removeData('margin-right');
}
}); // Restore body padding
var padding = $__default['default'](document.body).data('padding-right');
$__default['default'](document.body).removeData('padding-right');
var padding = $__default["default"](document.body).data('padding-right');
$__default["default"](document.body).removeData('padding-right');
document.body.style.paddingRight = padding ? padding : '';
};
@@ -547,13 +574,13 @@
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () {
var data = $__default['default'](this).data(DATA_KEY);
var data = $__default["default"](this).data(DATA_KEY);
var _config = _extends({}, Default, $__default['default'](this).data(), typeof config === 'object' && config ? config : {});
var _config = _extends({}, Default, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
if (!data) {
data = new Modal(this, _config);
$__default['default'](this).data(DATA_KEY, data);
$__default["default"](this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
@@ -583,58 +610,54 @@
return Modal;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
var _this11 = this;
var target;
var selector = Util__default['default'].getSelectorFromElement(this);
var selector = Util__default["default"].getSelectorFromElement(this);
if (selector) {
target = document.querySelector(selector);
}
var config = $__default['default'](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());
var config = $__default["default"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault();
}
var $target = $__default['default'](target).one(EVENT_SHOW, function (showEvent) {
var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) {
if (showEvent.isDefaultPrevented()) {
// Only register focus restorer if modal will actually get shown
return;
}
$target.one(EVENT_HIDDEN, function () {
if ($__default['default'](_this11).is(':visible')) {
if ($__default["default"](_this11).is(':visible')) {
_this11.focus();
}
});
});
Modal._jQueryInterface.call($__default['default'](target), config, this);
Modal._jQueryInterface.call($__default["default"](target), config, this);
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Modal._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Modal;
$__default["default"].fn[NAME] = Modal._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Modal;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Modal._jQueryInterface;
};
return Modal;
})));
}));
//# sourceMappingURL=modal.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+75 -37
View File
@@ -1,55 +1,97 @@
/*!
* Bootstrap popover.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap popover.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './tooltip'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.jQuery, global.Tooltip));
}(this, (function ($, Tooltip) { 'use strict';
})(this, (function ($, Tooltip) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'popover';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var SELECTOR_TITLE = '.popover-header';
var SELECTOR_CONTENT = '.popover-body';
var Default = _extends({}, Tooltip__default['default'].Default, {
var Default = _extends({}, Tooltip__default["default"].Default, {
placement: 'right',
trigger: 'click',
content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
});
var DefaultType = _extends({}, Tooltip__default['default'].DefaultType, {
var DefaultType = _extends({}, Tooltip__default["default"].DefaultType, {
content: '(string|element|function)'
});
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var SELECTOR_TITLE = '.popover-header';
var SELECTOR_CONTENT = '.popover-body';
var Event = {
HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY,
@@ -63,9 +105,7 @@
MOUSELEAVE: "mouseleave" + EVENT_KEY
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Popover = /*#__PURE__*/function (_Tooltip) {
@@ -83,16 +123,16 @@
};
_proto.addAttachmentClass = function addAttachmentClass(attachment) {
$__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
$__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
};
_proto.getTipElement = function getTipElement() {
this.tip = this.tip || $__default['default'](this.config.template)[0];
this.tip = this.tip || $__default["default"](this.config.template)[0];
return this.tip;
};
_proto.setContent = function setContent() {
var $tip = $__default['default'](this.getTipElement()); // We use append for html objects to maintain js events
var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
@@ -112,7 +152,7 @@
};
_proto._cleanTipClass = function _cleanTipClass() {
var $tip = $__default['default'](this.getTipElement());
var $tip = $__default["default"](this.getTipElement());
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
if (tabClass !== null && tabClass.length > 0) {
@@ -123,7 +163,7 @@
Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $__default['default'](this).data(DATA_KEY);
var data = $__default["default"](this).data(DATA_KEY);
var _config = typeof config === 'object' ? config : null;
@@ -133,7 +173,7 @@
if (!data) {
data = new Popover(this, _config);
$__default['default'](this).data(DATA_KEY, data);
$__default["default"](this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
@@ -148,8 +188,8 @@
_createClass(Popover, null, [{
key: "VERSION",
// Getters
get: function get() {
get: // Getters
function get() {
return VERSION;
}
}, {
@@ -185,23 +225,21 @@
}]);
return Popover;
}(Tooltip__default['default']);
}(Tooltip__default["default"]);
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Popover._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Popover;
$__default["default"].fn[NAME] = Popover._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Popover;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Popover._jQueryInterface;
};
return Popover;
})));
}));
//# sourceMappingURL=popover.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+79 -58
View File
@@ -1,36 +1,80 @@
/*!
* Bootstrap scrollspy.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap scrollspy.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'scrollspy';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
var CLASS_NAME_ACTIVE = 'active';
var EVENT_ACTIVATE = "activate" + EVENT_KEY;
var EVENT_SCROLL = "scroll" + EVENT_KEY;
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
var METHOD_OFFSET = 'offset';
var METHOD_POSITION = 'position';
var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
var SELECTOR_NAV_LINKS = '.nav-link';
var SELECTOR_NAV_ITEMS = '.nav-item';
var SELECTOR_LIST_ITEMS = '.list-group-item';
var SELECTOR_DROPDOWN = '.dropdown';
var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
var Default = {
offset: 10,
method: 'auto',
@@ -41,25 +85,8 @@
method: 'string',
target: '(string|element)'
};
var EVENT_ACTIVATE = "activate" + EVENT_KEY;
var EVENT_SCROLL = "scroll" + EVENT_KEY;
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
var CLASS_NAME_ACTIVE = 'active';
var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
var SELECTOR_NAV_LINKS = '.nav-link';
var SELECTOR_NAV_ITEMS = '.nav-item';
var SELECTOR_LIST_ITEMS = '.list-group-item';
var SELECTOR_DROPDOWN = '.dropdown';
var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
var METHOD_OFFSET = 'offset';
var METHOD_POSITION = 'position';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var ScrollSpy = /*#__PURE__*/function () {
@@ -74,7 +101,7 @@
this._targets = [];
this._activeTarget = null;
this._scrollHeight = 0;
$__default['default'](this._scrollElement).on(EVENT_SCROLL, function (event) {
$__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
return _this._process(event);
});
this.refresh();
@@ -98,7 +125,7 @@
var targets = [].slice.call(document.querySelectorAll(this._selector));
targets.map(function (element) {
var target;
var targetSelector = Util__default['default'].getSelectorFromElement(element);
var targetSelector = Util__default["default"].getSelectorFromElement(element);
if (targetSelector) {
target = document.querySelector(targetSelector);
@@ -109,14 +136,12 @@
if (targetBCR.width || targetBCR.height) {
// TODO (fat): remove sketch reliance on jQuery position/offset
return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];
return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
}
}
return null;
}).filter(function (item) {
return item;
}).sort(function (a, b) {
}).filter(Boolean).sort(function (a, b) {
return a[0] - b[0];
}).forEach(function (item) {
_this2._offsets.push(item[0]);
@@ -126,8 +151,8 @@
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default['default'](this._scrollElement).off(EVENT_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
$__default["default"](this._scrollElement).off(EVENT_KEY);
this._element = null;
this._scrollElement = null;
this._config = null;
@@ -142,18 +167,18 @@
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, typeof config === 'object' && config ? config : {});
if (typeof config.target !== 'string' && Util__default['default'].isElement(config.target)) {
var id = $__default['default'](config.target).attr('id');
if (typeof config.target !== 'string' && Util__default["default"].isElement(config.target)) {
var id = $__default["default"](config.target).attr('id');
if (!id) {
id = Util__default['default'].getUID(NAME);
$__default['default'](config.target).attr('id', id);
id = Util__default["default"].getUID(NAME);
$__default["default"](config.target).attr('id', id);
}
config.target = "#" + id;
}
Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
Util__default["default"].typeCheckConfig(NAME, config, DefaultType);
return config;
};
@@ -216,7 +241,7 @@
return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
});
var $link = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));
var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
$link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE);
@@ -231,7 +256,7 @@
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE);
}
$__default['default'](this._scrollElement).trigger(EVENT_ACTIVATE, {
$__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
relatedTarget: target
});
};
@@ -247,13 +272,13 @@
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $__default['default'](this).data(DATA_KEY);
var data = $__default["default"](this).data(DATA_KEY);
var _config = typeof config === 'object' && config;
if (!data) {
data = new ScrollSpy(this, _config);
$__default['default'](this).data(DATA_KEY, data);
$__default["default"](this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
@@ -281,37 +306,33 @@
return ScrollSpy;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](window).on(EVENT_LOAD_DATA_API, function () {
$__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
var scrollSpysLength = scrollSpys.length;
for (var i = scrollSpysLength; i--;) {
var $spy = $__default['default'](scrollSpys[i]);
var $spy = $__default["default"](scrollSpys[i]);
ScrollSpy._jQueryInterface.call($spy, $spy.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = ScrollSpy._jQueryInterface;
$__default['default'].fn[NAME].Constructor = ScrollSpy;
$__default["default"].fn[NAME] = ScrollSpy._jQueryInterface;
$__default["default"].fn[NAME].Constructor = ScrollSpy;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return ScrollSpy._jQueryInterface;
};
return ScrollSpy;
})));
}));
//# sourceMappingURL=scrollspy.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+70 -56
View File
@@ -1,44 +1,58 @@
/*!
* Bootstrap tab.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tab.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'tab';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_SHOW = "show" + EVENT_KEY;
var EVENT_SHOWN = "shown" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
var CLASS_NAME_ACTIVE = 'active';
var CLASS_NAME_DISABLED = 'disabled';
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_SHOW = "show" + EVENT_KEY;
var EVENT_SHOWN = "shown" + EVENT_KEY;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
var SELECTOR_DROPDOWN = '.dropdown';
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
var SELECTOR_ACTIVE = '.active';
@@ -47,9 +61,7 @@
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Tab = /*#__PURE__*/function () {
@@ -64,33 +76,33 @@
_proto.show = function show() {
var _this = this;
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default['default'](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {
return;
}
var target;
var previous;
var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
var selector = Util__default['default'].getSelectorFromElement(this._element);
var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
var selector = Util__default["default"].getSelectorFromElement(this._element);
if (listElement) {
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));
previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
previous = previous[previous.length - 1];
}
var hideEvent = $__default['default'].Event(EVENT_HIDE, {
var hideEvent = $__default["default"].Event(EVENT_HIDE, {
relatedTarget: this._element
});
var showEvent = $__default['default'].Event(EVENT_SHOW, {
var showEvent = $__default["default"].Event(EVENT_SHOW, {
relatedTarget: previous
});
if (previous) {
$__default['default'](previous).trigger(hideEvent);
$__default["default"](previous).trigger(hideEvent);
}
$__default['default'](this._element).trigger(showEvent);
$__default["default"](this._element).trigger(showEvent);
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
return;
@@ -103,14 +115,14 @@
this._activate(this._element, listElement);
var complete = function complete() {
var hiddenEvent = $__default['default'].Event(EVENT_HIDDEN, {
var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN, {
relatedTarget: _this._element
});
var shownEvent = $__default['default'].Event(EVENT_SHOWN, {
var shownEvent = $__default["default"].Event(EVENT_SHOWN, {
relatedTarget: previous
});
$__default['default'](previous).trigger(hiddenEvent);
$__default['default'](_this._element).trigger(shownEvent);
$__default["default"](previous).trigger(hiddenEvent);
$__default["default"](_this._element).trigger(shownEvent);
};
if (target) {
@@ -121,7 +133,7 @@
};
_proto.dispose = function dispose() {
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"].removeData(this._element, DATA_KEY);
this._element = null;
} // Private
;
@@ -129,17 +141,17 @@
_proto._activate = function _activate(element, container, callback) {
var _this2 = this;
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default['default'](container).find(SELECTOR_ACTIVE_UL) : $__default['default'](container).children(SELECTOR_ACTIVE);
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
var active = activeElements[0];
var isTransitioning = callback && active && $__default['default'](active).hasClass(CLASS_NAME_FADE);
var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE);
var complete = function complete() {
return _this2._transitionComplete(element, active, callback);
};
if (active && isTransitioning) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(active);
$__default['default'](active).removeClass(CLASS_NAME_SHOW).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(active);
$__default["default"](active).removeClass(CLASS_NAME_SHOW).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else {
complete();
}
@@ -147,11 +159,11 @@
_proto._transitionComplete = function _transitionComplete(element, active, callback) {
if (active) {
$__default['default'](active).removeClass(CLASS_NAME_ACTIVE);
var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
$__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) {
$__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
$__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
}
if (active.getAttribute('role') === 'tab') {
@@ -159,24 +171,30 @@
}
}
$__default['default'](element).addClass(CLASS_NAME_ACTIVE);
$__default["default"](element).addClass(CLASS_NAME_ACTIVE);
if (element.getAttribute('role') === 'tab') {
element.setAttribute('aria-selected', true);
}
Util__default['default'].reflow(element);
Util__default["default"].reflow(element);
if (element.classList.contains(CLASS_NAME_FADE)) {
element.classList.add(CLASS_NAME_SHOW);
}
if (element.parentNode && $__default['default'](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN)[0];
var parent = element.parentNode;
if (parent && parent.nodeName === 'LI') {
parent = parent.parentNode;
}
if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
if (dropdownElement) {
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
$__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
$__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
}
element.setAttribute('aria-expanded', true);
@@ -190,7 +208,7 @@
Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var $this = $__default['default'](this);
var $this = $__default["default"](this);
var data = $this.data(DATA_KEY);
if (!data) {
@@ -218,32 +236,28 @@
return Tab;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
$__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault();
Tab._jQueryInterface.call($__default['default'](this), 'show');
Tab._jQueryInterface.call($__default["default"](this), 'show');
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Tab._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Tab;
$__default["default"].fn[NAME] = Tab._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Tab;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Tab._jQueryInterface;
};
return Tab;
})));
}));
//# sourceMappingURL=tab.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+73 -48
View File
@@ -1,59 +1,86 @@
/*!
* Bootstrap toast.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap toast.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.jQuery, global.Util));
}(this, (function ($, Util) { 'use strict';
})(this, (function ($, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var $__default = /*#__PURE__*/_interopDefaultLegacy($);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'toast';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.toast';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_HIDE = 'hide';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_SHOWING = 'showing';
var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
var EVENT_HIDE = "hide" + EVENT_KEY;
var EVENT_HIDDEN = "hidden" + EVENT_KEY;
var EVENT_SHOW = "show" + EVENT_KEY;
var EVENT_SHOWN = "shown" + EVENT_KEY;
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_HIDE = 'hide';
var CLASS_NAME_SHOW = 'show';
var CLASS_NAME_SHOWING = 'showing';
var DefaultType = {
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
};
var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
var Default = {
animation: true,
autohide: true,
delay: 500
};
var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
var DefaultType = {
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Toast = /*#__PURE__*/function () {
@@ -72,8 +99,8 @@
_proto.show = function show() {
var _this = this;
var showEvent = $__default['default'].Event(EVENT_SHOW);
$__default['default'](this._element).trigger(showEvent);
var showEvent = $__default["default"].Event(EVENT_SHOW);
$__default["default"](this._element).trigger(showEvent);
if (showEvent.isDefaultPrevented()) {
return;
@@ -90,7 +117,7 @@
_this._element.classList.add(CLASS_NAME_SHOW);
$__default['default'](_this._element).trigger(EVENT_SHOWN);
$__default["default"](_this._element).trigger(EVENT_SHOWN);
if (_this._config.autohide) {
_this._timeout = setTimeout(function () {
@@ -101,13 +128,13 @@
this._element.classList.remove(CLASS_NAME_HIDE);
Util__default['default'].reflow(this._element);
Util__default["default"].reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOWING);
if (this._config.animation) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else {
complete();
}
@@ -118,8 +145,8 @@
return;
}
var hideEvent = $__default['default'].Event(EVENT_HIDE);
$__default['default'](this._element).trigger(hideEvent);
var hideEvent = $__default["default"].Event(EVENT_HIDE);
$__default["default"](this._element).trigger(hideEvent);
if (hideEvent.isDefaultPrevented()) {
return;
@@ -135,23 +162,23 @@
this._element.classList.remove(CLASS_NAME_SHOW);
}
$__default['default'](this._element).off(EVENT_CLICK_DISMISS);
$__default['default'].removeData(this._element, DATA_KEY);
$__default["default"](this._element).off(EVENT_CLICK_DISMISS);
$__default["default"].removeData(this._element, DATA_KEY);
this._element = null;
this._config = null;
} // Private
;
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, $__default['default'](this._element).data(), typeof config === 'object' && config ? config : {});
Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
Util__default["default"].typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config;
};
_proto._setListeners = function _setListeners() {
var _this2 = this;
$__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
$__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
return _this2.hide();
});
};
@@ -162,14 +189,14 @@
var complete = function complete() {
_this3._element.classList.add(CLASS_NAME_HIDE);
$__default['default'](_this3._element).trigger(EVENT_HIDDEN);
$__default["default"](_this3._element).trigger(EVENT_HIDDEN);
};
this._element.classList.remove(CLASS_NAME_SHOW);
if (this._config.animation) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
$__default['default'](this._element).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element);
$__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else {
complete();
}
@@ -183,7 +210,7 @@
Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var $element = $__default['default'](this);
var $element = $__default["default"](this);
var data = $element.data(DATA_KEY);
var _config = typeof config === 'object' && config;
@@ -223,21 +250,19 @@
return Toast;
}();
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Toast._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Toast;
$__default["default"].fn[NAME] = Toast._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Toast;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Toast._jQueryInterface;
};
return Toast;
})));
}));
//# sourceMappingURL=toast.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+146 -117
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap tooltip.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tooltip.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/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) :
typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));
}(this, (function ($, Popper, Util) { 'use strict';
})(this, (function ($, Popper, Util) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -15,9 +15,45 @@
var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): tools/sanitizer.js
* Bootstrap (v4.6.2): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -59,14 +95,14 @@
/**
* 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
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
/**
* 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
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/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,[\d+/a-z]+=*$/i;
@@ -76,7 +112,7 @@
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 Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
}
return true;
@@ -87,7 +123,7 @@
}); // Check if a regular expression validates the attribute.
for (var i = 0, len = regExp.length; i < len; i++) {
if (attrName.match(regExp[i])) {
if (regExp[i].test(attrName)) {
return true;
}
}
@@ -118,7 +154,8 @@
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
@@ -136,43 +173,28 @@
return createdDocument.body.innerHTML;
}
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'tooltip';
var VERSION = '4.5.3';
var VERSION = '4.6.2';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
var JQUERY_NO_CONFLICT = $__default["default"].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',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
popperConfig: '(null|object)'
};
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var HOVER_STATE_SHOW = 'show';
var HOVER_STATE_OUT = 'out';
var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
var SELECTOR_ARROW = '.arrow';
var TRIGGER_HOVER = 'hover';
var TRIGGER_FOCUS = 'focus';
var TRIGGER_CLICK = 'click';
var TRIGGER_MANUAL = 'manual';
var AttachmentMap = {
AUTO: 'auto',
TOP: 'top',
@@ -193,13 +215,31 @@
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent',
customClass: '',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist,
popperConfig: null
};
var HOVER_STATE_SHOW = 'show';
var HOVER_STATE_OUT = 'out';
var DefaultType = {
animation: 'boolean',
template: 'string',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
customClass: '(string|function)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
popperConfig: '(null|object)'
};
var Event = {
HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY,
@@ -212,25 +252,15 @@
MOUSEENTER: "mouseenter" + EVENT_KEY,
MOUSELEAVE: "mouseleave" + EVENT_KEY
};
var CLASS_NAME_FADE = 'fade';
var CLASS_NAME_SHOW = 'show';
var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
var SELECTOR_ARROW = '.arrow';
var TRIGGER_HOVER = 'hover';
var TRIGGER_FOCUS = 'focus';
var TRIGGER_CLICK = 'click';
var TRIGGER_MANUAL = 'manual';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
var Tooltip = /*#__PURE__*/function () {
function Tooltip(element, config) {
if (typeof Popper__default['default'] === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
} // private
if (typeof Popper__default["default"] === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
} // Private
this._isEnabled = true;
@@ -269,11 +299,11 @@
if (event) {
var dataKey = this.constructor.DATA_KEY;
var context = $__default['default'](event.currentTarget).data(dataKey);
var context = $__default["default"](event.currentTarget).data(dataKey);
if (!context) {
context = new this.constructor(event.currentTarget, this._getDelegateConfig());
$__default['default'](event.currentTarget).data(dataKey, context);
$__default["default"](event.currentTarget).data(dataKey, context);
}
context._activeTrigger.click = !context._activeTrigger.click;
@@ -284,7 +314,7 @@
context._leave(null, context);
}
} else {
if ($__default['default'](this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {
if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {
this._leave(null, this);
return;
@@ -296,12 +326,12 @@
_proto.dispose = function dispose() {
clearTimeout(this._timeout);
$__default['default'].removeData(this.element, this.constructor.DATA_KEY);
$__default['default'](this.element).off(this.constructor.EVENT_KEY);
$__default['default'](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
$__default["default"].removeData(this.element, this.constructor.DATA_KEY);
$__default["default"](this.element).off(this.constructor.EVENT_KEY);
$__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
if (this.tip) {
$__default['default'](this.tip).remove();
$__default["default"](this.tip).remove();
}
this._isEnabled = null;
@@ -322,29 +352,29 @@
_proto.show = function show() {
var _this = this;
if ($__default['default'](this.element).css('display') === 'none') {
if ($__default["default"](this.element).css('display') === 'none') {
throw new Error('Please use show on visible elements');
}
var showEvent = $__default['default'].Event(this.constructor.Event.SHOW);
var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
if (this.isWithContent() && this._isEnabled) {
$__default['default'](this.element).trigger(showEvent);
var shadowRoot = Util__default['default'].findShadowRoot(this.element);
var isInTheDom = $__default['default'].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
$__default["default"](this.element).trigger(showEvent);
var shadowRoot = Util__default["default"].findShadowRoot(this.element);
var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
if (showEvent.isDefaultPrevented() || !isInTheDom) {
return;
}
var tip = this.getTipElement();
var tipId = Util__default['default'].getUID(this.constructor.NAME);
var tipId = Util__default["default"].getUID(this.constructor.NAME);
tip.setAttribute('id', tipId);
this.element.setAttribute('aria-describedby', tipId);
this.setContent();
if (this.config.animation) {
$__default['default'](tip).addClass(CLASS_NAME_FADE);
$__default["default"](tip).addClass(CLASS_NAME_FADE);
}
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
@@ -355,21 +385,22 @@
var container = this._getContainer();
$__default['default'](tip).data(this.constructor.DATA_KEY, this);
$__default["default"](tip).data(this.constructor.DATA_KEY, this);
if (!$__default['default'].contains(this.element.ownerDocument.documentElement, this.tip)) {
$__default['default'](tip).appendTo(container);
if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
$__default["default"](tip).appendTo(container);
}
$__default['default'](this.element).trigger(this.constructor.Event.INSERTED);
this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));
$__default['default'](tip).addClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we add extra
$__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
$__default["default"](tip).addClass(CLASS_NAME_SHOW);
$__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) {
$__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);
$__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
}
var complete = function complete() {
@@ -379,16 +410,16 @@
var prevHoverState = _this._hoverState;
_this._hoverState = null;
$__default['default'](_this.element).trigger(_this.constructor.Event.SHOWN);
$__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
if (prevHoverState === HOVER_STATE_OUT) {
_this._leave(null, _this);
}
};
if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE)) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this.tip);
$__default['default'](this.tip).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE)) {
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this.tip);
$__default["default"](this.tip).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else {
complete();
}
@@ -399,7 +430,7 @@
var _this2 = this;
var tip = this.getTipElement();
var hideEvent = $__default['default'].Event(this.constructor.Event.HIDE);
var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
var complete = function complete() {
if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
@@ -410,7 +441,7 @@
_this2.element.removeAttribute('aria-describedby');
$__default['default'](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
$__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
if (_this2._popper !== null) {
_this2._popper.destroy();
@@ -421,26 +452,26 @@
}
};
$__default['default'](this.element).trigger(hideEvent);
$__default["default"](this.element).trigger(hideEvent);
if (hideEvent.isDefaultPrevented()) {
return;
}
$__default['default'](tip).removeClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
$__default["default"](tip).removeClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
$__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);
$__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
}
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE)) {
var transitionDuration = Util__default['default'].getTransitionDurationFromElement(tip);
$__default['default'](tip).one(Util__default['default'].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE)) {
var transitionDuration = Util__default["default"].getTransitionDurationFromElement(tip);
$__default["default"](tip).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else {
complete();
}
@@ -460,29 +491,29 @@
};
_proto.addAttachmentClass = function addAttachmentClass(attachment) {
$__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
$__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
};
_proto.getTipElement = function getTipElement() {
this.tip = this.tip || $__default['default'](this.config.template)[0];
this.tip = this.tip || $__default["default"](this.config.template)[0];
return this.tip;
};
_proto.setContent = function setContent() {
var tip = this.getTipElement();
this.setElementContent($__default['default'](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
$__default['default'](tip).removeClass(CLASS_NAME_FADE + " " + CLASS_NAME_SHOW);
this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
$__default["default"](tip).removeClass(CLASS_NAME_FADE + " " + CLASS_NAME_SHOW);
};
_proto.setElementContent = function setElementContent($element, content) {
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery
if (this.config.html) {
if (!$__default['default'](content).parent().is($element)) {
if (!$__default["default"](content).parent().is($element)) {
$element.empty().append(content);
}
} else {
$element.text($__default['default'](content).text());
$element.text($__default["default"](content).text());
}
return;
@@ -546,7 +577,7 @@
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});
data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
return data;
};
} else {
@@ -561,11 +592,11 @@
return document.body;
}
if (Util__default['default'].isElement(this.config.container)) {
return $__default['default'](this.config.container);
if (Util__default["default"].isElement(this.config.container)) {
return $__default["default"](this.config.container);
}
return $__default['default'](document).find(this.config.container);
return $__default["default"](document).find(this.config.container);
};
_proto._getAttachment = function _getAttachment(placement) {
@@ -578,13 +609,13 @@
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
$__default['default'](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
$__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
return _this5.toggle(event);
});
} else if (trigger !== TRIGGER_MANUAL) {
var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
$__default['default'](_this5.element).on(eventIn, _this5.config.selector, function (event) {
$__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
return _this5._enter(event);
}).on(eventOut, _this5.config.selector, function (event) {
return _this5._leave(event);
@@ -598,7 +629,7 @@
}
};
$__default['default'](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
$__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
if (this.config.selector) {
this.config = _extends({}, this.config, {
@@ -621,18 +652,18 @@
_proto._enter = function _enter(event, context) {
var dataKey = this.constructor.DATA_KEY;
context = context || $__default['default'](event.currentTarget).data(dataKey);
context = context || $__default["default"](event.currentTarget).data(dataKey);
if (!context) {
context = new this.constructor(event.currentTarget, this._getDelegateConfig());
$__default['default'](event.currentTarget).data(dataKey, context);
$__default["default"](event.currentTarget).data(dataKey, context);
}
if (event) {
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
}
if ($__default['default'](context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {
context._hoverState = HOVER_STATE_SHOW;
return;
}
@@ -654,11 +685,11 @@
_proto._leave = function _leave(event, context) {
var dataKey = this.constructor.DATA_KEY;
context = context || $__default['default'](event.currentTarget).data(dataKey);
context = context || $__default["default"](event.currentTarget).data(dataKey);
if (!context) {
context = new this.constructor(event.currentTarget, this._getDelegateConfig());
$__default['default'](event.currentTarget).data(dataKey, context);
$__default["default"](event.currentTarget).data(dataKey, context);
}
if (event) {
@@ -695,7 +726,7 @@
};
_proto._getConfig = function _getConfig(config) {
var dataAttributes = $__default['default'](this.element).data();
var dataAttributes = $__default["default"](this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
@@ -718,7 +749,7 @@
config.content = config.content.toString();
}
Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
Util__default["default"].typeCheckConfig(NAME, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
@@ -742,7 +773,7 @@
};
_proto._cleanTipClass = function _cleanTipClass() {
var $tip = $__default['default'](this.getTipElement());
var $tip = $__default["default"](this.getTipElement());
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
if (tabClass !== null && tabClass.length) {
@@ -766,7 +797,7 @@
return;
}
$__default['default'](tip).removeClass(CLASS_NAME_FADE);
$__default["default"](tip).removeClass(CLASS_NAME_FADE);
this.config.animation = false;
this.hide();
this.show();
@@ -776,7 +807,7 @@
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var $element = $__default['default'](this);
var $element = $__default["default"](this);
var data = $element.data(DATA_KEY);
var _config = typeof config === 'object' && config;
@@ -840,21 +871,19 @@
return Tooltip;
}();
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$__default['default'].fn[NAME] = Tooltip._jQueryInterface;
$__default['default'].fn[NAME].Constructor = Tooltip;
$__default["default"].fn[NAME] = Tooltip._jQueryInterface;
$__default["default"].fn[NAME].Constructor = Tooltip;
$__default['default'].fn[NAME].noConflict = function () {
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
$__default["default"].fn[NAME].noConflict = function () {
$__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
return Tooltip._jQueryInterface;
};
return Tooltip;
})));
}));
//# sourceMappingURL=tooltip.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+16 -19
View File
@@ -1,13 +1,13 @@
/*!
* Bootstrap util.js v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap util.js v4.6.2 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Util = factory(global.jQuery));
}(this, (function ($) { 'use strict';
})(this, (function ($) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -15,14 +15,12 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): util.js
* Bootstrap (v4.6.2): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* Private TransitionEnd Helpers
* ------------------------------------------------------------------------
*/
var TRANSITION_END = 'transitionend';
@@ -42,7 +40,7 @@
bindType: TRANSITION_END,
delegateType: TRANSITION_END,
handle: function handle(event) {
if ($__default['default'](event.target).is(this)) {
if ($__default["default"](event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
}
@@ -55,7 +53,7 @@
var _this = this;
var called = false;
$__default['default'](this).one(Util.TRANSITION_END, function () {
$__default["default"](this).one(Util.TRANSITION_END, function () {
called = true;
});
setTimeout(function () {
@@ -67,13 +65,11 @@
}
function setTransitionEndSupport() {
$__default['default'].fn.emulateTransitionEnd = transitionEndEmulator;
$__default['default'].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
$__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
$__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
}
/**
* --------------------------------------------------------------------------
* Public Util Api
* --------------------------------------------------------------------------
* Public Util API
*/
@@ -81,6 +77,7 @@
TRANSITION_END: 'bsTransitionEnd',
getUID: function getUID(prefix) {
do {
// eslint-disable-next-line no-bitwise
prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
} while (document.getElementById(prefix));
@@ -106,8 +103,8 @@
} // Get transition-duration of the element
var transitionDuration = $__default['default'](element).css('transition-duration');
var transitionDelay = $__default['default'](element).css('transition-delay');
var transitionDuration = $__default["default"](element).css('transition-duration');
var transitionDelay = $__default["default"](element).css('transition-delay');
var floatTransitionDuration = parseFloat(transitionDuration);
var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
@@ -124,7 +121,7 @@
return element.offsetHeight;
},
triggerTransitionEnd: function triggerTransitionEnd(element) {
$__default['default'](element).trigger(TRANSITION_END);
$__default["default"](element).trigger(TRANSITION_END);
},
supportsTransitionEnd: function supportsTransitionEnd() {
return Boolean(TRANSITION_END);
@@ -168,11 +165,11 @@
return Util.findShadowRoot(element.parentNode);
},
jQueryDetection: function jQueryDetection() {
if (typeof $__default['default'] === 'undefined') {
if (typeof $__default["default"] === 'undefined') {
throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
}
var version = $__default['default'].fn.jquery.split(' ')[0].split('.');
var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
var minMajor = 1;
var ltMajor = 2;
var minMinor = 9;
@@ -189,5 +186,5 @@
return Util;
})));
}));
//# sourceMappingURL=util.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+19
View File
@@ -0,0 +1,19 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.6.2): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
export { default as Alert } from './src/alert'
export { default as Button } from './src/button'
export { default as Carousel } from './src/carousel'
export { default as Collapse } from './src/collapse'
export { default as Dropdown } from './src/dropdown'
export { default as Modal } from './src/modal'
export { default as Popover } from './src/popover'
export { default as Scrollspy } from './src/scrollspy'
export { default as Tab } from './src/tab'
export { default as Toast } from './src/toast'
export { default as Tooltip } from './src/tooltip'
export { default as Util } from './src/util'
+8 -20
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): alert.js
* Bootstrap (v4.6.2): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,32 +9,28 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'alert'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.alert'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DISMISS = '[data-dismiss="alert"]'
const CLASS_NAME_ALERT = 'alert'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const EVENT_CLOSE = `close${EVENT_KEY}`
const EVENT_CLOSED = `closed${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_ALERT = 'alert'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const SELECTOR_DISMISS = '[data-dismiss="alert"]'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Alert {
@@ -43,13 +39,11 @@ class Alert {
}
// Getters
static get VERSION() {
return VERSION
}
// Public
close(element) {
let rootElement = this._element
if (element) {
@@ -71,7 +65,6 @@ class Alert {
}
// Private
_getRootElement(element) {
const selector = Util.getSelectorFromElement(element)
let parent = false
@@ -117,7 +110,6 @@ class Alert {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
const $element = $(this)
@@ -146,9 +138,7 @@ class Alert {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document).on(
@@ -158,9 +148,7 @@ $(document).on(
)
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Alert._jQueryInterface
+9 -20
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): button.js
* Bootstrap (v4.6.2): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -8,13 +8,11 @@
import $ from 'jquery'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'button'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.button'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -24,6 +22,11 @@ const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_BUTTON = 'btn'
const CLASS_NAME_FOCUS = 'focus'
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +
`blur${EVENT_KEY}${DATA_API_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'
const SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'
const SELECTOR_DATA_TOGGLE = '[data-toggle="button"]'
@@ -32,15 +35,8 @@ const SELECTOR_INPUT = 'input:not([type="hidden"])'
const SELECTOR_ACTIVE = '.active'
const SELECTOR_BUTTON = '.btn'
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +
`blur${EVENT_KEY}${DATA_API_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Button {
@@ -50,13 +46,11 @@ class Button {
}
// Getters
static get VERSION() {
return VERSION
}
// Public
toggle() {
let triggerChangeEvent = true
let addAriaPressed = true
@@ -111,7 +105,6 @@ class Button {
}
// Static
static _jQueryInterface(config, avoidTriggerChange) {
return this.each(function () {
const $element = $(this)
@@ -132,9 +125,7 @@ class Button {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document)
@@ -194,9 +185,7 @@ $(window).on(EVENT_LOAD_DATA_API, () => {
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Button._jQueryInterface
+54 -55
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): carousel.js
* Bootstrap (v4.6.2): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,13 +9,11 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'carousel'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.carousel'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -25,23 +23,14 @@ const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key
const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch
const SWIPE_THRESHOLD = 40
const Default = {
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
}
const DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
}
const CLASS_NAME_CAROUSEL = 'carousel'
const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_SLIDE = 'slide'
const CLASS_NAME_RIGHT = 'carousel-item-right'
const CLASS_NAME_LEFT = 'carousel-item-left'
const CLASS_NAME_NEXT = 'carousel-item-next'
const CLASS_NAME_PREV = 'carousel-item-prev'
const CLASS_NAME_POINTER_EVENT = 'pointer-event'
const DIRECTION_NEXT = 'next'
const DIRECTION_PREV = 'prev'
@@ -62,15 +51,6 @@ const EVENT_DRAG_START = `dragstart${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_CAROUSEL = 'carousel'
const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_SLIDE = 'slide'
const CLASS_NAME_RIGHT = 'carousel-item-right'
const CLASS_NAME_LEFT = 'carousel-item-left'
const CLASS_NAME_NEXT = 'carousel-item-next'
const CLASS_NAME_PREV = 'carousel-item-prev'
const CLASS_NAME_POINTER_EVENT = 'pointer-event'
const SELECTOR_ACTIVE = '.active'
const SELECTOR_ACTIVE_ITEM = '.active.carousel-item'
const SELECTOR_ITEM = '.carousel-item'
@@ -80,16 +60,33 @@ const SELECTOR_INDICATORS = '.carousel-indicators'
const SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'
const SELECTOR_DATA_RIDE = '[data-ride="carousel"]'
const Default = {
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
}
const DefaultType = {
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
}
const PointerType = {
TOUCH: 'touch',
PEN: 'pen'
}
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Carousel {
constructor(element, config) {
this._items = null
@@ -111,7 +108,6 @@ class Carousel {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -121,7 +117,6 @@ class Carousel {
}
// Public
next() {
if (!this._isSliding) {
this._slide(DIRECTION_NEXT)
@@ -169,6 +164,8 @@ class Carousel {
}
if (this._config.interval && !this._isPaused) {
this._updateInterval()
this._interval = setInterval(
(document.visibilityState ? this.nextWhenVisible : this.next).bind(this),
this._config.interval
@@ -218,7 +215,6 @@ class Carousel {
}
// Private
_getConfig(config) {
config = {
...Default,
@@ -281,11 +277,9 @@ class Carousel {
const move = event => {
// ensure swiping with one touch and not pinching
if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
this.touchDeltaX = 0
} else {
this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX
}
this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?
0 :
event.originalEvent.touches[0].clientX - this.touchStartX
}
const end = event => {
@@ -401,6 +395,23 @@ class Carousel {
}
}
_updateInterval() {
const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)
if (!element) {
return
}
const elementInterval = parseInt(element.getAttribute('data-interval'), 10)
if (elementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval
this._config.interval = elementInterval
} else {
this._config.interval = this._config.defaultInterval || this._config.interval
}
}
_slide(direction, element) {
const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)
const activeElementIndex = this._getItemIndex(activeElement)
@@ -445,6 +456,7 @@ class Carousel {
}
this._setActiveIndicatorElement(nextElement)
this._activeElement = nextElement
const slidEvent = $.Event(EVENT_SLID, {
relatedTarget: nextElement,
@@ -461,14 +473,6 @@ class Carousel {
$(activeElement).addClass(directionalClassName)
$(nextElement).addClass(directionalClassName)
const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)
if (nextElementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval
this._config.interval = nextElementInterval
} else {
this._config.interval = this._config.defaultInterval || this._config.interval
}
const transitionDuration = Util.getTransitionDurationFromElement(activeElement)
$(activeElement)
@@ -498,7 +502,6 @@ class Carousel {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
@@ -570,9 +573,7 @@ class Carousel {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)
@@ -586,9 +587,7 @@ $(window).on(EVENT_LOAD_DATA_API, () => {
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Carousel._jQueryInterface
+21 -33
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): collapse.js
* Bootstrap (v4.6.2): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,18 +9,33 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'collapse'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.collapse'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_COLLAPSE = 'collapse'
const CLASS_NAME_COLLAPSING = 'collapsing'
const CLASS_NAME_COLLAPSED = 'collapsed'
const DIMENSION_WIDTH = 'width'
const DIMENSION_HEIGHT = 'height'
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const SELECTOR_ACTIVES = '.show, .collapsing'
const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'
const Default = {
toggle: true,
parent: ''
@@ -31,27 +46,8 @@ const DefaultType = {
parent: '(string|element)'
}
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_COLLAPSE = 'collapse'
const CLASS_NAME_COLLAPSING = 'collapsing'
const CLASS_NAME_COLLAPSED = 'collapsed'
const DIMENSION_WIDTH = 'width'
const DIMENSION_HEIGHT = 'height'
const SELECTOR_ACTIVES = '.show, .collapsing'
const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Collapse {
@@ -89,7 +85,6 @@ class Collapse {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -99,7 +94,6 @@ class Collapse {
}
// Public
toggle() {
if ($(this._element).hasClass(CLASS_NAME_SHOW)) {
this.hide()
@@ -262,7 +256,6 @@ class Collapse {
}
// Private
_getConfig(config) {
config = {
...Default,
@@ -316,7 +309,6 @@ class Collapse {
}
// Static
static _getTargetFromElement(element) {
const selector = Util.getSelectorFromElement(element)
return selector ? document.querySelector(selector) : null
@@ -353,9 +345,7 @@ class Collapse {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
@@ -377,9 +367,7 @@ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Collapse._jQueryInterface
+17 -32
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): dropdown.js
* Bootstrap (v4.6.2): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -10,13 +10,11 @@ import Popper from 'popper.js'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'dropdown'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.dropdown'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
@@ -29,6 +27,14 @@ const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key
const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)
const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_DROPUP = 'dropup'
const CLASS_NAME_DROPRIGHT = 'dropright'
const CLASS_NAME_DROPLEFT = 'dropleft'
const CLASS_NAME_MENURIGHT = 'dropdown-menu-right'
const CLASS_NAME_POSITION_STATIC = 'position-static'
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
@@ -38,14 +44,6 @@ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_DROPUP = 'dropup'
const CLASS_NAME_DROPRIGHT = 'dropright'
const CLASS_NAME_DROPLEFT = 'dropleft'
const CLASS_NAME_MENURIGHT = 'dropdown-menu-right'
const CLASS_NAME_POSITION_STATIC = 'position-static'
const SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]'
const SELECTOR_FORM_CHILD = '.dropdown form'
const SELECTOR_MENU = '.dropdown-menu'
@@ -78,9 +76,7 @@ const DefaultType = {
}
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Dropdown {
@@ -95,7 +91,6 @@ class Dropdown {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -109,7 +104,6 @@ class Dropdown {
}
// Public
toggle() {
if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
return
@@ -143,14 +137,11 @@ class Dropdown {
return
}
// Disable totally Popper.js for Dropdown in Navbar
// Totally disable Popper for Dropdowns in Navbar
if (!this._inNavbar && usePopper) {
/**
* Check for Popper dependency
* Popper - https://popper.js.org
*/
// Check for Popper dependency
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)')
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)')
}
let referenceElement = this._element
@@ -240,7 +231,6 @@ class Dropdown {
}
// Private
_addEventListeners() {
$(this._element).on(EVENT_CLICK, event => {
event.preventDefault()
@@ -308,7 +298,7 @@ class Dropdown {
offset.fn = data => {
data.offsets = {
...data.offsets,
...(this._config.offset(data.offsets, this._element) || {})
...this._config.offset(data.offsets, this._element)
}
return data
@@ -334,7 +324,7 @@ class Dropdown {
}
}
// Disable Popper.js if we have a static display
// Disable Popper if we have a static display
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
enabled: false
@@ -348,7 +338,6 @@ class Dropdown {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
@@ -504,9 +493,7 @@ class Dropdown {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document)
@@ -523,9 +510,7 @@ $(document)
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Dropdown._jQueryInterface
-34
View File
@@ -1,34 +0,0 @@
import Alert from './alert'
import Button from './button'
import Carousel from './carousel'
import Collapse from './collapse'
import Dropdown from './dropdown'
import Modal from './modal'
import Popover from './popover'
import Scrollspy from './scrollspy'
import Tab from './tab'
import Toast from './toast'
import Tooltip from './tooltip'
import Util from './util'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
export {
Util,
Alert,
Button,
Carousel,
Collapse,
Dropdown,
Modal,
Popover,
Scrollspy,
Tab,
Toast,
Tooltip
}
+69 -81
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): modal.js
* Bootstrap (v4.6.2): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,19 +9,45 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'modal'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.modal'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key
const CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'
const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'
const CLASS_NAME_BACKDROP = 'modal-backdrop'
const CLASS_NAME_OPEN = 'modal-open'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_STATIC = 'modal-static'
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
const EVENT_RESIZE = `resize${EVENT_KEY}`
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const SELECTOR_DIALOG = '.modal-dialog'
const SELECTOR_MODAL_BODY = '.modal-body'
const SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]'
const SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
const SELECTOR_STICKY_CONTENT = '.sticky-top'
const Default = {
backdrop: true,
keyboard: true,
@@ -36,38 +62,8 @@ const DefaultType = {
show: 'boolean'
}
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
const EVENT_RESIZE = `resize${EVENT_KEY}`
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'
const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'
const CLASS_NAME_BACKDROP = 'modal-backdrop'
const CLASS_NAME_OPEN = 'modal-open'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_STATIC = 'modal-static'
const SELECTOR_DIALOG = '.modal-dialog'
const SELECTOR_MODAL_BODY = '.modal-body'
const SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]'
const SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
const SELECTOR_STICKY_CONTENT = '.sticky-top'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Modal {
@@ -84,7 +80,6 @@ class Modal {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -94,7 +89,6 @@ class Modal {
}
// Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget)
}
@@ -104,22 +98,22 @@ class Modal {
return
}
if ($(this._element).hasClass(CLASS_NAME_FADE)) {
this._isTransitioning = true
}
const showEvent = $.Event(EVENT_SHOW, {
relatedTarget
})
$(this._element).trigger(showEvent)
if (this._isShown || showEvent.isDefaultPrevented()) {
if (showEvent.isDefaultPrevented()) {
return
}
this._isShown = true
if ($(this._element).hasClass(CLASS_NAME_FADE)) {
this._isTransitioning = true
}
this._checkScrollbar()
this._setScrollbar()
@@ -219,7 +213,6 @@ class Modal {
}
// Private
_getConfig(config) {
config = {
...Default,
@@ -230,39 +223,35 @@ class Modal {
}
_triggerBackdropTransition() {
if (this._config.backdrop === 'static') {
const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)
const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)
$(this._element).trigger(hideEventPrevented)
if (hideEventPrevented.isDefaultPrevented()) {
return
}
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden'
}
this._element.classList.add(CLASS_NAME_STATIC)
const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)
$(this._element).off(Util.TRANSITION_END)
$(this._element).one(Util.TRANSITION_END, () => {
this._element.classList.remove(CLASS_NAME_STATIC)
if (!isModalOverflowing) {
$(this._element).one(Util.TRANSITION_END, () => {
this._element.style.overflowY = ''
})
.emulateTransitionEnd(this._element, modalTransitionDuration)
}
})
.emulateTransitionEnd(modalTransitionDuration)
this._element.focus()
} else {
this.hide()
$(this._element).trigger(hideEventPrevented)
if (hideEventPrevented.isDefaultPrevented()) {
return
}
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden'
}
this._element.classList.add(CLASS_NAME_STATIC)
const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)
$(this._element).off(Util.TRANSITION_END)
$(this._element).one(Util.TRANSITION_END, () => {
this._element.classList.remove(CLASS_NAME_STATIC)
if (!isModalOverflowing) {
$(this._element).one(Util.TRANSITION_END, () => {
this._element.style.overflowY = ''
})
.emulateTransitionEnd(this._element, modalTransitionDuration)
}
})
.emulateTransitionEnd(modalTransitionDuration)
this._element.focus()
}
_showElement(relatedTarget) {
@@ -400,7 +389,11 @@ class Modal {
return
}
this._triggerBackdropTransition()
if (this._config.backdrop === 'static') {
this._triggerBackdropTransition()
} else {
this.hide()
}
})
if (animate) {
@@ -545,7 +538,6 @@ class Modal {
}
// Static
static _jQueryInterface(config, relatedTarget) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
@@ -574,9 +566,7 @@ class Modal {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
@@ -614,9 +604,7 @@ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Modal._jQueryInterface
+9 -19
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): popover.js
* Bootstrap (v4.6.2): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,19 +9,23 @@ import $ from 'jquery'
import Tooltip from './tooltip'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'popover'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.popover'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_PREFIX = 'bs-popover'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const SELECTOR_TITLE = '.popover-header'
const SELECTOR_CONTENT = '.popover-body'
const Default = {
...Tooltip.Default,
placement: 'right',
@@ -38,12 +42,6 @@ const DefaultType = {
content: '(string|element|function)'
}
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const SELECTOR_TITLE = '.popover-header'
const SELECTOR_CONTENT = '.popover-body'
const Event = {
HIDE: `hide${EVENT_KEY}`,
HIDDEN: `hidden${EVENT_KEY}`,
@@ -58,14 +56,11 @@ const Event = {
}
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Popover extends Tooltip {
// Getters
static get VERSION() {
return VERSION
}
@@ -95,7 +90,6 @@ class Popover extends Tooltip {
}
// Overrides
isWithContent() {
return this.getTitle() || this._getContent()
}
@@ -125,7 +119,6 @@ class Popover extends Tooltip {
}
// Private
_getContent() {
return this.element.getAttribute('data-content') ||
this.config.content
@@ -140,7 +133,6 @@ class Popover extends Tooltip {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
@@ -167,9 +159,7 @@ class Popover extends Tooltip {
}
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Popover._jQueryInterface
+24 -36
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): scrollspy.js
* Bootstrap (v4.6.2): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,18 +9,35 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'scrollspy'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.scrollspy'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'
const CLASS_NAME_ACTIVE = 'active'
const EVENT_ACTIVATE = `activate${EVENT_KEY}`
const EVENT_SCROLL = `scroll${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const METHOD_OFFSET = 'offset'
const METHOD_POSITION = 'position'
const SELECTOR_DATA_SPY = '[data-spy="scroll"]'
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
const SELECTOR_NAV_LINKS = '.nav-link'
const SELECTOR_NAV_ITEMS = '.nav-item'
const SELECTOR_LIST_ITEMS = '.list-group-item'
const SELECTOR_DROPDOWN = '.dropdown'
const SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
const Default = {
offset: 10,
method: 'auto',
@@ -33,29 +50,8 @@ const DefaultType = {
target: '(string|element)'
}
const EVENT_ACTIVATE = `activate${EVENT_KEY}`
const EVENT_SCROLL = `scroll${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'
const CLASS_NAME_ACTIVE = 'active'
const SELECTOR_DATA_SPY = '[data-spy="scroll"]'
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
const SELECTOR_NAV_LINKS = '.nav-link'
const SELECTOR_NAV_ITEMS = '.nav-item'
const SELECTOR_LIST_ITEMS = '.list-group-item'
const SELECTOR_DROPDOWN = '.dropdown'
const SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
const METHOD_OFFSET = 'offset'
const METHOD_POSITION = 'position'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class ScrollSpy {
@@ -78,7 +74,6 @@ class ScrollSpy {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -88,7 +83,6 @@ class ScrollSpy {
}
// Public
refresh() {
const autoMethod = this._scrollElement === this._scrollElement.window ?
METHOD_OFFSET : METHOD_POSITION
@@ -128,7 +122,7 @@ class ScrollSpy {
return null
})
.filter(item => item)
.filter(Boolean)
.sort((a, b) => a[0] - b[0])
.forEach(item => {
this._offsets.push(item[0])
@@ -151,7 +145,6 @@ class ScrollSpy {
}
// Private
_getConfig(config) {
config = {
...Default,
@@ -270,7 +263,6 @@ class ScrollSpy {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
@@ -293,9 +285,7 @@ class ScrollSpy {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(window).on(EVENT_LOAD_DATA_API, () => {
@@ -309,9 +299,7 @@ $(window).on(EVENT_LOAD_DATA_API, () => {
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = ScrollSpy._jQueryInterface
+18 -24
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): tab.js
* Bootstrap (v4.6.2): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,30 +9,28 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'tab'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.tab'
const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'
const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const SELECTOR_DROPDOWN = '.dropdown'
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
const SELECTOR_ACTIVE = '.active'
@@ -42,9 +40,7 @@ const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
const SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Tab {
@@ -53,18 +49,17 @@ class Tab {
}
// Getters
static get VERSION() {
return VERSION
}
// Public
show() {
if (this._element.parentNode &&
this._element.parentNode.nodeType === Node.ELEMENT_NODE &&
$(this._element).hasClass(CLASS_NAME_ACTIVE) ||
$(this._element).hasClass(CLASS_NAME_DISABLED)) {
$(this._element).hasClass(CLASS_NAME_DISABLED) ||
this._element.hasAttribute('disabled')) {
return
}
@@ -133,7 +128,6 @@ class Tab {
}
// Private
_activate(element, container, callback) {
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?
$(container).find(SELECTOR_ACTIVE_UL) :
@@ -187,7 +181,12 @@ class Tab {
element.classList.add(CLASS_NAME_SHOW)
}
if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
let parent = element.parentNode
if (parent && parent.nodeName === 'LI') {
parent = parent.parentNode
}
if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]
if (dropdownElement) {
@@ -205,7 +204,6 @@ class Tab {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
const $this = $(this)
@@ -228,9 +226,7 @@ class Tab {
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
* Data API implementation
*/
$(document)
@@ -240,9 +236,7 @@ $(document)
})
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Tab._jQueryInterface
+14 -24
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): toast.js
* Bootstrap (v4.6.2): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,33 +9,27 @@ import $ from 'jquery'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'toast'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.toast'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_HIDE = 'hide'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_SHOWING = 'showing'
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_HIDE = 'hide'
const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_SHOWING = 'showing'
const DefaultType = {
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
}
const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'
const Default = {
animation: true,
@@ -43,12 +37,14 @@ const Default = {
delay: 500
}
const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'
const DefaultType = {
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
}
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Toast {
@@ -60,7 +56,6 @@ class Toast {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -74,7 +69,6 @@ class Toast {
}
// Public
show() {
const showEvent = $.Event(EVENT_SHOW)
@@ -146,7 +140,6 @@ class Toast {
}
// Private
_getConfig(config) {
config = {
...Default,
@@ -191,7 +184,6 @@ class Toast {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
const $element = $(this)
@@ -215,9 +207,7 @@ class Toast {
}
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Toast._jQueryInterface
+7 -6
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): tools/sanitizer.js
* Bootstrap (v4.6.2): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -55,14 +55,14 @@ export const DefaultWhitelist = {
/**
* 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
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i
/**
* 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
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/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,[\d+/a-z]+=*$/i
@@ -71,7 +71,7 @@ function allowedAttribute(attr, allowedAttributeList) {
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 Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))
}
return true
@@ -81,7 +81,7 @@ function allowedAttribute(attr, allowedAttributeList) {
// Check if a regular expression validates the attribute.
for (let i = 0, len = regExp.length; i < len; i++) {
if (attrName.match(regExp[i])) {
if (regExp[i].test(attrName)) {
return true
}
}
@@ -114,6 +114,7 @@ export function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
}
const attributeList = [].slice.call(el.attributes)
// eslint-disable-next-line unicorn/prefer-spread
const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
attributeList.forEach(attr => {
+41 -52
View File
@@ -1,26 +1,21 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): tooltip.js
* Bootstrap (v4.6.2): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import {
DefaultWhitelist,
sanitizeHtml
} from './tools/sanitizer'
import { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'
import $ from 'jquery'
import Popper from 'popper.js'
import Util from './util'
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'tooltip'
const VERSION = '4.5.3'
const VERSION = '4.6.2'
const DATA_KEY = 'bs.tooltip'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
@@ -28,24 +23,19 @@ 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',
template: 'string',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
popperConfig: '(null|object)'
}
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const HOVER_STATE_SHOW = 'show'
const HOVER_STATE_OUT = 'out'
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'
const SELECTOR_ARROW = '.arrow'
const TRIGGER_HOVER = 'hover'
const TRIGGER_FOCUS = 'focus'
const TRIGGER_CLICK = 'click'
const TRIGGER_MANUAL = 'manual'
const AttachmentMap = {
AUTO: 'auto',
@@ -70,14 +60,32 @@ const Default = {
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent',
customClass: '',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist,
popperConfig: null
}
const HOVER_STATE_SHOW = 'show'
const HOVER_STATE_OUT = 'out'
const DefaultType = {
animation: 'boolean',
template: 'string',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
customClass: '(string|function)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
popperConfig: '(null|object)'
}
const Event = {
HIDE: `hide${EVENT_KEY}`,
@@ -92,30 +100,17 @@ const Event = {
MOUSELEAVE: `mouseleave${EVENT_KEY}`
}
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'
const SELECTOR_ARROW = '.arrow'
const TRIGGER_HOVER = 'hover'
const TRIGGER_FOCUS = 'focus'
const TRIGGER_CLICK = 'click'
const TRIGGER_MANUAL = 'manual'
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
* Class definition
*/
class Tooltip {
constructor(element, config) {
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)')
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)')
}
// private
// Private
this._isEnabled = true
this._timeout = 0
this._hoverState = ''
@@ -131,7 +126,6 @@ class Tooltip {
}
// Getters
static get VERSION() {
return VERSION
}
@@ -161,7 +155,6 @@ class Tooltip {
}
// Public
enable() {
this._isEnabled = true
}
@@ -284,6 +277,7 @@ class Tooltip {
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))
$(tip).addClass(CLASS_NAME_SHOW)
$(tip).addClass(this.config.customClass)
// If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
@@ -378,7 +372,6 @@ class Tooltip {
}
// Protected
isWithContent() {
return Boolean(this.getTitle())
}
@@ -436,7 +429,6 @@ class Tooltip {
}
// Private
_getPopperConfig(attachment) {
const defaultBsConfig = {
placement: attachment,
@@ -473,7 +465,7 @@ class Tooltip {
offset.fn = data => {
data.offsets = {
...data.offsets,
...(this.config.offset(data.offsets, this.element) || {})
...this.config.offset(data.offsets, this.element)
}
return data
@@ -732,7 +724,6 @@ class Tooltip {
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
const $element = $(this)
@@ -760,9 +751,7 @@ class Tooltip {
}
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Tooltip._jQueryInterface
+3 -6
View File
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.3): util.js
* Bootstrap (v4.6.2): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -8,9 +8,7 @@
import $ from 'jquery'
/**
* ------------------------------------------------------------------------
* Private TransitionEnd Helpers
* ------------------------------------------------------------------------
*/
const TRANSITION_END = 'transitionend'
@@ -62,9 +60,7 @@ function setTransitionEndSupport() {
}
/**
* --------------------------------------------------------------------------
* Public Util Api
* --------------------------------------------------------------------------
* Public Util API
*/
const Util = {
@@ -72,6 +68,7 @@ const Util = {
getUID(prefix) {
do {
// eslint-disable-next-line no-bitwise
prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here
} while (document.getElementById(prefix))
+10 -3
View File
@@ -5,21 +5,21 @@ const browsers = {
safariMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'High Sierra',
os_version: 'Catalina',
browser: 'Safari',
browser_version: 'latest'
},
chromeMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'High Sierra',
os_version: 'Catalina',
browser: 'Chrome',
browser_version: 'latest'
},
firefoxMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'High Sierra',
os_version: 'Catalina',
browser: 'Firefox',
browser_version: 'latest'
},
@@ -65,6 +65,13 @@ const browsers = {
device: 'iPhone X',
real_mobile: true
},
iphone12: {
base: 'BrowserStack',
os: 'ios',
os_version: '14.0',
device: 'iPhone 12',
real_mobile: true
},
pixel2: {
base: 'BrowserStack',
os: 'android',
+49 -47
View File
@@ -1,15 +1,17 @@
/* eslint-env node */
'use strict'
const path = require('path')
const ip = require('ip')
const {
browsers,
browsersKeys
} = require('./browsers')
const { browsers, browsersKeys } = require('./browsers')
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'
const USE_OLD_JQUERY = Boolean(process.env.USE_OLD_JQUERY)
const BUNDLE = Boolean(process.env.BUNDLE)
const BROWSERSTACK = Boolean(process.env.BROWSERSTACK)
const JQUERY_FILE = USE_OLD_JQUERY ?
'https://cdn.jsdelivr.net/npm/jquery@1.9.1/jquery.min.js' :
'node_modules/jquery/dist/jquery.slim.min.js'
const frameworks = [
'qunit',
@@ -26,22 +28,24 @@ const reporters = ['dots']
const detectBrowsers = {
usePhantomJS: false,
postDetection(availableBrowser) {
if (process.env.CI === true || availableBrowser.includes('Chrome')) {
// On CI just use Chrome
if (process.env.CI === true) {
return ['ChromeHeadless']
}
if (availableBrowser.includes('Chrome')) {
return ['ChromeHeadless']
}
if (availableBrowser.includes('Chromium')) {
return ['ChromiumHeadless']
}
if (availableBrowser.includes('Firefox')) {
return ['FirefoxHeadless']
}
throw new Error('Please install Firefox or Chrome')
}
}
const customLaunchers = {
FirefoxHeadless: {
base: 'Firefox',
flags: ['-headless']
throw new Error('Please install Chrome, Chromium or Firefox')
}
}
@@ -64,25 +68,23 @@ const conf = {
}
}
if (bundle) {
if (BUNDLE) {
frameworks.push('detectBrowsers')
plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers'
)
conf.customLaunchers = customLaunchers
conf.detectBrowsers = detectBrowsers
files = files.concat([
jqueryFile,
'dist/js/bootstrap.js'
])
} else if (browserStack) {
files = [...files,
JQUERY_FILE,
'dist/js/bootstrap.js']
} else if (BROWSERSTACK) {
conf.hostname = ip.address()
conf.browserStack = {
username: process.env.BROWSER_STACK_USERNAME,
accessKey: process.env.BROWSER_STACK_ACCESS_KEY,
build: `bootstrap-${new Date().toISOString()}`,
build: `bootstrap-v4-${new Date().toISOString()}`,
project: 'Bootstrap',
retryLimit: 2
}
@@ -90,39 +92,40 @@ if (bundle) {
conf.customLaunchers = browsers
conf.browsers = browsersKeys
reporters.push('BrowserStack')
files = files.concat([
files = [...files,
'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
])
// include all of our js/dist files except util.js, index.js and tooltip.js
'js/dist/!(util|index|tooltip).js']
} else {
frameworks.push('detectBrowsers')
plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers',
'karma-coverage-istanbul-reporter'
'karma-detect-browsers'
)
files = files.concat([
jqueryFile,
files = [...files,
JQUERY_FILE,
'js/coverage/dist/util.js',
'js/coverage/dist/tooltip.js',
'js/coverage/dist/!(util|index|tooltip).js' // include all of our js/dist files except util.js, index.js and tooltip.js
])
reporters.push('coverage-istanbul')
conf.customLaunchers = customLaunchers
// include all of our js/dist files except util.js, index.js and tooltip.js
'js/coverage/dist/!(util|index|tooltip).js']
conf.detectBrowsers = detectBrowsers
conf.coverageIstanbulReporter = {
dir: path.resolve(__dirname, '../coverage/'),
reports: ['lcov', 'text-summary'],
thresholds: {
emitWarning: false,
global: {
statements: 90,
branches: 86,
functions: 89,
lines: 90
if (!USE_OLD_JQUERY) {
plugins.push('karma-coverage-istanbul-reporter')
reporters.push('coverage-istanbul')
conf.coverageIstanbulReporter = {
dir: path.resolve(__dirname, '../coverage/'),
reports: ['lcov', 'text-summary'],
thresholds: {
emitWarning: false,
global: {
statements: 90,
branches: 86,
functions: 89,
lines: 90
}
}
}
}
@@ -136,7 +139,6 @@ conf.reporters = reporters
conf.files = files
module.exports = karmaConfig => {
// possible values: karmaConfig.LOG_DISABLE || karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN || karmaConfig.LOG_INFO || karmaConfig.LOG_DEBUG
conf.logLevel = karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN
conf.logLevel = karmaConfig.LOG_ERROR
karmaConfig.set(conf)
}
+5 -2
View File
@@ -1,6 +1,7 @@
{
"extends": [
"../../../.eslintrc.json"
"../../../.eslintrc.json",
"plugin:qunit/recommended"
],
"parserOptions": {
"ecmaVersion": 5,
@@ -25,7 +26,9 @@
"no-var": "off",
"object-shorthand": "off",
"prefer-arrow-callback": "off",
"prefer-rest-params": "off",
"prefer-template": "off",
"prefer-rest-params": "off"
"unicorn/prefer-add-event-listener": "off",
"unicorn/prefer-spread": "off"
}
}
+7 -9
View File
@@ -1,6 +1,8 @@
$(function () {
'use strict'
window.Alert = typeof bootstrap !== 'undefined' ? bootstrap.Alert : Alert
QUnit.module('alert plugin')
QUnit.test('should be defined on jquery object', function (assert) {
@@ -29,7 +31,7 @@ $(function () {
assert.expect(2)
var $el = $('<div/>')
var $alert = $el.bootstrapAlert()
assert.ok($alert instanceof $, 'returns jquery collection')
assert.true($alert instanceof $, 'returns jquery collection')
assert.strictEqual($alert[0], $el[0], 'collection contains element')
})
@@ -44,7 +46,7 @@ $(function () {
$alert.find('.close').trigger('click')
assert.strictEqual($alert.hasClass('show'), false, 'remove .show class on .close click')
assert.false($alert.hasClass('show'), 'remove .show class on .close click')
})
QUnit.test('should remove element when clicking .close', function (assert) {
@@ -104,20 +106,16 @@ $(function () {
var $el = $('<div/>')
var $alert = $el.bootstrapAlert()
assert.ok(typeof $alert.data('bs.alert') !== 'undefined')
assert.notStrictEqual(typeof $alert.data('bs.alert'), 'undefined')
$alert.data('bs.alert').dispose()
assert.ok(typeof $alert.data('bs.button') === 'undefined')
assert.strictEqual(typeof $alert.data('bs.button'), 'undefined')
})
QUnit.test('should return alert version', function (assert) {
assert.expect(1)
if (typeof Alert !== 'undefined') {
assert.ok(typeof Alert.VERSION === 'string')
} else {
assert.notOk()
}
assert.strictEqual(typeof Alert.VERSION, 'string')
})
})
+65 -67
View File
@@ -1,6 +1,8 @@
$(function () {
'use strict'
window.Button = typeof bootstrap !== 'undefined' ? bootstrap.Button : Button
QUnit.module('button plugin')
QUnit.test('should be defined on jquery object', function (assert) {
@@ -29,16 +31,16 @@ $(function () {
assert.expect(2)
var $el = $('<div/>')
var $button = $el.bootstrapButton()
assert.ok($button instanceof $, 'returns jquery collection')
assert.true($button instanceof $, 'returns jquery collection')
assert.strictEqual($button[0], $el[0], 'collection contains element')
})
QUnit.test('should toggle active', function (assert) {
assert.expect(2)
var $btn = $('<button class="btn" data-toggle="button">mdo</button>')
assert.ok(!$btn.hasClass('active'), 'btn does not have active class')
assert.false($btn.hasClass('active'), 'btn does not have active class')
$btn.bootstrapButton('toggle')
assert.ok($btn.hasClass('active'), 'btn has class active')
assert.true($btn.hasClass('active'), 'btn has class active')
})
QUnit.test('should toggle active when btn children are clicked', function (assert) {
@@ -48,9 +50,9 @@ $(function () {
$btn
.append($inner)
.appendTo('#qunit-fixture')
assert.ok(!$btn.hasClass('active'), 'btn does not have active class')
assert.false($btn.hasClass('active'), 'btn does not have active class')
$inner.trigger('click')
assert.ok($btn.hasClass('active'), 'btn has class active')
assert.true($btn.hasClass('active'), 'btn has class active')
})
QUnit.test('should toggle aria-pressed', function (assert) {
@@ -107,7 +109,7 @@ $(function () {
$btn.appendTo('#qunit-fixture')
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.ok($btn.hasClass('active'), 'button with aria-pressed="true" has been given class active')
assert.true($btn.hasClass('active'), 'button with aria-pressed="true" has been given class active')
done()
}, 5)
})
@@ -125,7 +127,7 @@ $(function () {
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.ok($btn.hasClass('active'), 'checked checkbox button has been given class active')
assert.true($btn.hasClass('active'), 'checked checkbox button has been given class active')
done()
}, 5)
})
@@ -137,7 +139,7 @@ $(function () {
$btn.appendTo('#qunit-fixture')
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.ok(!$btn.hasClass('active'), 'button without aria-pressed="true" has had active class removed')
assert.false($btn.hasClass('active'), 'button without aria-pressed="true" has had active class removed')
done()
}, 5)
})
@@ -155,7 +157,7 @@ $(function () {
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.ok(!$btn.hasClass('active'), 'unchecked checkbox button has had active class removed')
assert.false($btn.hasClass('active'), 'unchecked checkbox button has had active class removed')
done()
}, 5)
})
@@ -199,7 +201,7 @@ $(function () {
})
setTimeout(function () {
assert.ok(countChangeEvent === 1, 'onchange event fired only once')
assert.strictEqual(countChangeEvent, 1, 'onchange event fired only once')
done()
}, 5)
@@ -224,28 +226,28 @@ $(function () {
var $btn1 = $group.children().eq(0)
var $btn2 = $group.children().eq(1)
assert.ok($btn1.hasClass('active'), 'btn1 has active class')
assert.ok($btn1.find('input').prop('checked'), 'btn1 is checked')
assert.ok(!$btn2.hasClass('active'), 'btn2 does not have active class')
assert.ok(!$btn2.find('input').prop('checked'), 'btn2 is not checked')
assert.true($btn1.hasClass('active'), 'btn1 has active class')
assert.true($btn1.find('input').prop('checked'), 'btn1 is checked')
assert.false($btn2.hasClass('active'), 'btn2 does not have active class')
assert.false($btn2.find('input').prop('checked'), 'btn2 is not checked')
$btn2.find('input').trigger('click')
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
assert.false($btn1.hasClass('active'), 'btn1 does not have active class')
assert.false($btn1.find('input').prop('checked'), 'btn1 is not checked')
assert.true($btn2.hasClass('active'), 'btn2 has active class')
assert.true($btn2.find('input').prop('checked'), 'btn2 is checked')
$btn2.find('input').trigger('click') // Clicking an already checked radio should not un-check it
assert.ok(!$btn1.hasClass('active'), 'btn1 does not have active class')
assert.ok(!$btn1.find('input').prop('checked'), 'btn1 is not checked')
assert.ok($btn2.hasClass('active'), 'btn2 has active class')
assert.ok($btn2.find('input').prop('checked'), 'btn2 is checked')
assert.false($btn1.hasClass('active'), 'btn1 does not have active class')
assert.false($btn1.find('input').prop('checked'), 'btn1 is not checked')
assert.true($btn2.hasClass('active'), 'btn2 has active class')
assert.true($btn2.find('input').prop('checked'), 'btn2 is checked')
$btn1.bootstrapButton('toggle')
assert.ok($btn1.hasClass('active'), 'btn1 has active class')
assert.ok($btn1.find('input').prop('checked'), 'btn1 prop is checked')
assert.ok($btn1.find('input')[0].checked, 'btn1 is checked with jquery')
assert.ok(!$btn2.hasClass('active'), 'btn2 does not have active class')
assert.ok(!$btn2.find('input').prop('checked'), 'btn2 is not checked')
assert.ok(!$btn2.find('input')[0].checked, 'btn2 is not checked')
assert.true($btn1.hasClass('active'), 'btn1 has active class')
assert.true($btn1.find('input').prop('checked'), 'btn1 prop is checked')
assert.true($btn1.find('input')[0].checked, 'btn1 is checked with jquery')
assert.false($btn2.hasClass('active'), 'btn2 does not have active class')
assert.false($btn2.find('input').prop('checked'), 'btn2 is not checked')
assert.false($btn2.find('input')[0].checked, 'btn2 is not checked')
})
QUnit.test('should fire click event on input', function (assert) {
@@ -300,10 +302,10 @@ $(function () {
var $btn2 = $group.children().eq(1)
$btn1.find('input').trigger('click')
assert.ok($btn1.is(':not([aria-pressed])'), 'label for nested checkbox input has not been given an aria-pressed attribute')
assert.true($btn1.is(':not([aria-pressed])'), 'label for nested checkbox input has not been given an aria-pressed attribute')
$btn2.find('input').trigger('click')
assert.ok($btn2.is(':not([aria-pressed])'), 'label for nested radio input has not been given an aria-pressed attribute')
assert.true($btn2.is(':not([aria-pressed])'), 'label for nested radio input has not been given an aria-pressed attribute')
})
QUnit.test('should handle disabled attribute on non-button elements', function (assert) {
@@ -318,11 +320,11 @@ $(function () {
var $btn = $group.children().eq(0)
var $input = $btn.children().eq(0)
assert.ok($btn.is(':not(.active)'), 'button is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox is initially not checked')
assert.true($btn.is(':not(.active)'), 'button is initially not active')
assert.false($input.prop('checked'), 'checkbox is initially not checked')
$btn[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok($btn.is(':not(.active)'), 'button did not become active')
assert.ok(!$input.prop('checked'), 'checkbox did not get checked')
assert.true($btn.is(':not(.active)'), 'button did not become active')
assert.false($input.prop('checked'), 'checkbox did not get checked')
})
QUnit.test('should not set active class if inner hidden checkbox is disabled but author forgot to set disabled class on outer button', function (assert) {
@@ -337,11 +339,11 @@ $(function () {
var $btn = $group.children().eq(0)
var $input = $btn.children().eq(0)
assert.ok($btn.is(':not(.active)'), 'button is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox is initially not checked')
assert.true($btn.is(':not(.active)'), 'button is initially not active')
assert.false($input.prop('checked'), 'checkbox is initially not checked')
$btn[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok($btn.is(':not(.active)'), 'button did not become active')
assert.ok(!$input.prop('checked'), 'checkbox did not get checked')
assert.true($btn.is(':not(.active)'), 'button did not become active')
assert.false($input.prop('checked'), 'checkbox did not get checked')
})
QUnit.test('should correctly set checked state on input and active class on label when using <label><input></label> structure', function (assert) {
@@ -356,11 +358,11 @@ $(function () {
var $label = $group.children().eq(0)
var $input = $label.children().eq(0)
assert.ok($label.is(':not(.active)'), 'label is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox is initially not checked')
assert.true($label.is(':not(.active)'), 'label is initially not active')
assert.false($input.prop('checked'), 'checkbox is initially not checked')
$label[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok($label.is('.active'), 'label is active after click')
assert.ok($input.prop('checked'), 'checkbox is checked after click')
assert.true($label.is('.active'), 'label is active after click')
assert.true($input.prop('checked'), 'checkbox is checked after click')
})
QUnit.test('should correctly set checked state on input and active class on the faked button when using <div><input></div> structure', function (assert) {
@@ -375,11 +377,11 @@ $(function () {
var $btn = $group.children().eq(0)
var $input = $btn.children().eq(0)
assert.ok($btn.is(':not(.active)'), '<div> is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox is initially not checked')
assert.true($btn.is(':not(.active)'), '<div> is initially not active')
assert.false($input.prop('checked'), 'checkbox is initially not checked')
$btn[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok($btn.is('.active'), '<div> is active after click')
assert.ok($input.prop('checked'), 'checkbox is checked after click')
assert.true($btn.is('.active'), '<div> is active after click')
assert.true($input.prop('checked'), 'checkbox is checked after click')
})
QUnit.test('should correctly set checked state on input and active class on the label when using button toggle', function (assert) {
@@ -394,13 +396,13 @@ $(function () {
var $btn = $group.children().eq(0)
var $input = $btn.children().eq(0)
assert.ok($btn.is(':not(.active)'), '<label> is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox property is initially not checked')
assert.ok(!$input[0].checked, 'checkbox is not checked by jquery after click')
assert.true($btn.is(':not(.active)'), '<label> is initially not active')
assert.false($input.prop('checked'), 'checkbox property is initially not checked')
assert.false($input[0].checked, 'checkbox is not checked by jquery after click')
$btn.bootstrapButton('toggle')
assert.ok($btn.is('.active'), '<label> is active after click')
assert.ok($input.prop('checked'), 'checkbox property is checked after click')
assert.ok($input[0].checked, 'checkbox is checked by jquery after click')
assert.true($btn.is('.active'), '<label> is active after click')
assert.true($input.prop('checked'), 'checkbox property is checked after click')
assert.true($input[0].checked, 'checkbox is checked by jquery after click')
})
QUnit.test('should not do anything if the click was just sent to the outer container with data-toggle', function (assert) {
@@ -415,11 +417,11 @@ $(function () {
var $label = $group.children().eq(0)
var $input = $label.children().eq(0)
assert.ok($label.is(':not(.active)'), 'label is initially not active')
assert.ok(!$input.prop('checked'), 'checkbox is initially not checked')
assert.true($label.is(':not(.active)'), 'label is initially not active')
assert.false($input.prop('checked'), 'checkbox is initially not checked')
$group[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok($label.is(':not(.active)'), 'label is not active after click')
assert.ok(!$input.prop('checked'), 'checkbox is not checked after click')
assert.true($label.is(':not(.active)'), 'label is not active after click')
assert.false($input.prop('checked'), 'checkbox is not checked after click')
})
QUnit.test('should not try and set checked property on an input of type="hidden"', function (assert) {
@@ -434,9 +436,9 @@ $(function () {
var $label = $group.children().eq(0)
var $input = $label.children().eq(0)
assert.ok(!$input.prop('checked'), 'hidden input initially has no checked property')
assert.false($input.prop('checked'), 'hidden input initially has no checked property')
$label[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok(!$input.prop('checked'), 'hidden input does not have a checked property')
assert.false($input.prop('checked'), 'hidden input does not have a checked property')
})
QUnit.test('should not try and set checked property on an input that is not a radio button or checkbox', function (assert) {
@@ -451,9 +453,9 @@ $(function () {
var $label = $group.children().eq(0)
var $input = $label.children().eq(0)
assert.ok(!$input.prop('checked'), 'text input initially has no checked property')
assert.false($input.prop('checked'), 'text input initially has no checked property')
$label[0].click() // fire a real click on the DOM node itself, not a click() on the jQuery object that just aliases to trigger('click')
assert.ok(!$input.prop('checked'), 'text input does not have a checked property')
assert.false($input.prop('checked'), 'text input does not have a checked property')
})
QUnit.test('dispose should remove data and the element', function (assert) {
@@ -462,20 +464,16 @@ $(function () {
var $el = $('<div/>')
var $button = $el.bootstrapButton()
assert.ok(typeof $button.data('bs.button') !== 'undefined')
assert.notStrictEqual(typeof $button.data('bs.button'), 'undefined')
$button.data('bs.button').dispose()
assert.ok(typeof $button.data('bs.button') === 'undefined')
assert.strictEqual(typeof $button.data('bs.button'), 'undefined')
})
QUnit.test('should return button version', function (assert) {
assert.expect(1)
if (typeof Button !== 'undefined') {
assert.ok(typeof Button.VERSION === 'string')
} else {
assert.notOk()
}
assert.strictEqual(typeof Button.VERSION, 'string')
})
})
+59 -46
View File
@@ -56,7 +56,7 @@ $(function () {
var defaultConfig = Carousel.Default
assert.strictEqual(defaultConfig.touch, true)
assert.true(defaultConfig.touch)
})
QUnit.test('should throw explicit error on undefined method', function (assert) {
@@ -74,7 +74,7 @@ $(function () {
assert.expect(2)
var $el = $('<div/>')
var $carousel = $el.bootstrapCarousel()
assert.ok($carousel instanceof $, 'returns jquery collection')
assert.true($carousel instanceof $, 'returns jquery collection')
assert.strictEqual($carousel[0], $el[0], 'collection contains element')
})
@@ -93,7 +93,7 @@ $(function () {
message = error.message
}
assert.ok(message === expectedMessage, 'correct error message')
assert.strictEqual(message, expectedMessage, 'correct error message')
config = {
keyboard: document.createElement('div')
@@ -106,7 +106,7 @@ $(function () {
message = error.message
}
assert.ok(message === expectedMessage, 'correct error message')
assert.strictEqual(message, expectedMessage, 'correct error message')
})
QUnit.test('should not fire slid when slide is prevented', function (assert) {
@@ -153,17 +153,17 @@ $(function () {
.one('slide.bs.carousel', function (e) {
e.preventDefault()
setTimeout(function () {
assert.ok($carousel.find('.carousel-item:nth-child(1)').is('.active'), 'first item still active')
assert.ok($carousel.find('.carousel-indicators li:nth-child(1)').is('.active'), 'first indicator still active')
assert.true($carousel.find('.carousel-item:nth-child(1)').is('.active'), 'first item still active')
assert.true($carousel.find('.carousel-indicators li:nth-child(1)').is('.active'), 'first indicator still active')
$carousel.bootstrapCarousel('next')
}, 0)
})
.one('slid.bs.carousel', function () {
setTimeout(function () {
assert.ok(!$carousel.find('.carousel-item:nth-child(1)').is('.active'), 'first item still active')
assert.ok(!$carousel.find('.carousel-indicators li:nth-child(1)').is('.active'), 'first indicator still active')
assert.ok($carousel.find('.carousel-item:nth-child(2)').is('.active'), 'second item active')
assert.ok($carousel.find('.carousel-indicators li:nth-child(2)').is('.active'), 'second indicator active')
assert.false($carousel.find('.carousel-item:nth-child(1)').is('.active'), 'first item still active')
assert.false($carousel.find('.carousel-indicators li:nth-child(1)').is('.active'), 'first indicator still active')
assert.true($carousel.find('.carousel-item:nth-child(2)').is('.active'), 'second item active')
assert.true($carousel.find('.carousel-indicators li:nth-child(2)').is('.active'), 'second indicator active')
done()
}, 0)
})
@@ -211,12 +211,12 @@ $(function () {
$carousel
.one('slide.bs.carousel', function (e) {
assert.ok(e.direction, 'direction present on next')
assert.notStrictEqual(e.direction, 'undefined', 'direction present on next')
assert.strictEqual(e.direction, 'left', 'direction is left on next')
$carousel
.one('slide.bs.carousel', function (e) {
assert.ok(e.direction, 'direction present on prev')
assert.notStrictEqual(e.direction, 'undefined', 'direction present on prev')
assert.strictEqual(e.direction, 'right', 'direction is right on prev')
done()
})
@@ -266,12 +266,12 @@ $(function () {
$carousel
.one('slid.bs.carousel', function (e) {
assert.ok(e.direction, 'direction present on next')
assert.notStrictEqual(e.direction, 'undefined', 'direction present on next')
assert.strictEqual(e.direction, 'left', 'direction is left on next')
$carousel
.one('slid.bs.carousel', function (e) {
assert.ok(e.direction, 'direction present on prev')
assert.notStrictEqual(e.direction, 'undefined', 'direction present on prev')
assert.strictEqual(e.direction, 'right', 'direction is right on prev')
done()
})
@@ -320,8 +320,8 @@ $(function () {
$(template)
.on('slide.bs.carousel', function (e) {
assert.ok(e.relatedTarget, 'relatedTarget present')
assert.ok($(e.relatedTarget).hasClass('carousel-item'), 'relatedTarget has class "item"')
assert.notStrictEqual(e.relatedTarget, 'undefined', 'relatedTarget present')
assert.true($(e.relatedTarget).hasClass('carousel-item'), 'relatedTarget has class "item"')
done()
})
.bootstrapCarousel('next')
@@ -367,8 +367,8 @@ $(function () {
$(template)
.on('slid.bs.carousel', function (e) {
assert.ok(e.relatedTarget, 'relatedTarget present')
assert.ok($(e.relatedTarget).hasClass('carousel-item'), 'relatedTarget has class "item"')
assert.notStrictEqual(e.relatedTarget, 'undefined', 'relatedTarget present')
assert.true($(e.relatedTarget).hasClass('carousel-item'), 'relatedTarget has class "item"')
done()
})
.bootstrapCarousel('next')
@@ -404,14 +404,14 @@ $(function () {
var done = assert.async()
$(template)
.on('slid.bs.carousel', function (e) {
assert.ok(typeof e.from !== 'undefined', 'from present')
assert.ok(typeof e.to !== 'undefined', 'to present')
assert.notStrictEqual(typeof e.from, 'undefined', 'from present')
assert.notStrictEqual(typeof e.to, 'undefined', 'to present')
$(this).off()
done()
})
.on('slide.bs.carousel', function (e) {
assert.ok(typeof e.from !== 'undefined', 'from present')
assert.ok(typeof e.to !== 'undefined', 'to present')
assert.notStrictEqual(typeof e.from, 'undefined', 'from present')
assert.notStrictEqual(typeof e.to, 'undefined', 'to present')
$(this).off('slide.bs.carousel')
})
.bootstrapCarousel('next')
@@ -475,12 +475,12 @@ $(function () {
$carousel.attr('data-interval', false)
$carousel.appendTo('body')
$carousel.bootstrapCarousel(1)
assert.strictEqual($carousel.data('bs.carousel')._config.interval, false, 'data attribute has higher priority than default options')
assert.false($carousel.data('bs.carousel')._config.interval, 'data attribute has higher priority than default options')
$carousel.remove()
})
QUnit.test('should set interval from data attribute on individual carousel-item', function (assert) {
assert.expect(2)
assert.expect(4)
var templateHTML = '<div id="myCarousel" class="carousel slide" data-interval="1814">' +
'<div class="carousel-inner">' +
'<div class="carousel-item active" data-interval="2814">' +
@@ -516,13 +516,26 @@ $(function () {
'</div>'
var $carousel = $(templateHTML)
$carousel.appendTo('body')
$carousel.bootstrapCarousel()
assert.strictEqual($carousel.data('bs.carousel')._config.interval, 1814)
$carousel.remove()
$carousel.appendTo('body')
$carousel.bootstrapCarousel(0)
$carousel.data('bs.carousel').cycle()
assert.strictEqual($carousel.data('bs.carousel')._config.interval, 2814)
$carousel.remove()
$carousel.appendTo('body')
$carousel.bootstrapCarousel(1)
$carousel.data('bs.carousel').cycle()
assert.strictEqual($carousel.data('bs.carousel')._config.interval, 3814)
$carousel.remove()
$carousel.appendTo('body')
$carousel.bootstrapCarousel(2)
$carousel.data('bs.carousel').cycle()
assert.strictEqual($carousel.data('bs.carousel')._config.interval, 1814, 'reverts to default interval if no data-interval is set')
$carousel.remove()
})
@@ -657,13 +670,13 @@ $(function () {
})
$template.one('keydown', function (event) {
assert.strictEqual(event.isDefaultPrevented(), false)
assert.false(event.isDefaultPrevented())
})
$template.trigger(eventArrowDown)
$template.one('keydown', function (event) {
assert.strictEqual(event.isDefaultPrevented(), false)
assert.false(event.isDefaultPrevented())
done()
})
@@ -937,12 +950,12 @@ $(function () {
which: 65
}) // 65 for "a"
$inputText.on('keydown', function (event) {
assert.strictEqual(event.isDefaultPrevented(), false)
assert.false(event.isDefaultPrevented())
})
$inputText.trigger(eventKeyDown)
$textArea.on('keydown', function (event) {
assert.strictEqual(event.isDefaultPrevented(), false)
assert.false(event.isDefaultPrevented())
done()
})
$textArea.trigger(eventKeyDown)
@@ -972,14 +985,14 @@ $(function () {
var $firstItem = $('#firstItem')
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
assert.true($firstItem.hasClass('active'))
$html
.bootstrapCarousel('dispose')
.attr('style', 'visibility: hidden;')
.bootstrapCarousel()
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
assert.true($firstItem.hasClass('active'))
done()
}, 80)
}, 80)
@@ -1012,13 +1025,13 @@ $(function () {
var $firstItem = $('#firstItem')
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
assert.true($firstItem.hasClass('active'))
$carousel.bootstrapCarousel('dispose')
$parent.attr('style', 'visibility: hidden;')
$carousel.bootstrapCarousel()
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
assert.true($firstItem.hasClass('active'))
done()
}, 80)
}, 80)
@@ -1056,8 +1069,8 @@ $(function () {
$carousel.one('slid.bs.carousel', function () {
assert.ok(true, 'slid event fired')
assert.ok($item.hasClass('active'))
assert.ok(spy.called)
assert.true($item.hasClass('active'))
assert.true(spy.called)
$styles.remove()
delete document.documentElement.ontouchstart
done()
@@ -1098,8 +1111,8 @@ $(function () {
$carousel.one('slid.bs.carousel', function () {
assert.ok(true, 'slid event fired')
assert.ok($item.hasClass('active'))
assert.ok(spy.called)
assert.true($item.hasClass('active'))
assert.true(spy.called)
delete document.documentElement.ontouchstart
restorePointerEvents()
done()
@@ -1145,8 +1158,8 @@ $(function () {
$carousel.one('slid.bs.carousel', function () {
assert.ok(true, 'slid event fired')
assert.ok(!$item.hasClass('active'))
assert.ok(spy.called)
assert.false($item.hasClass('active'))
assert.true(spy.called)
assert.strictEqual(carousel.touchDeltaX, 0)
$styles.remove()
delete document.documentElement.ontouchstart
@@ -1189,8 +1202,8 @@ $(function () {
$carousel.one('slid.bs.carousel', function () {
assert.ok(true, 'slid event fired')
assert.ok(!$item.hasClass('active'))
assert.ok(spy.called)
assert.false($item.hasClass('active'))
assert.true(spy.called)
assert.strictEqual(carousel.touchDeltaX, 0)
restorePointerEvents()
delete document.documentElement.ontouchstart
@@ -1245,7 +1258,7 @@ $(function () {
carousel.next()
assert.strictEqual(spy.called, false)
assert.false(spy.called)
})
QUnit.test('should call next when the page is visible', function (assert) {
@@ -1269,7 +1282,7 @@ $(function () {
carousel.nextWhenVisible()
assert.strictEqual(spy.called, true)
assert.true(spy.called)
sandbox.restore()
})
@@ -1283,7 +1296,7 @@ $(function () {
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, false)
assert.false(spy.called)
spy.restore()
})
@@ -1297,7 +1310,7 @@ $(function () {
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, true)
assert.true(spy.called)
spy.restore()
})
@@ -1314,7 +1327,7 @@ $(function () {
$(window).trigger($.Event('load'))
setTimeout(function () {
assert.strictEqual(spy.called, true)
assert.true(spy.called)
spy.restore()
done()
}, 5)
@@ -1329,7 +1342,7 @@ $(function () {
$carousel.appendTo('#qunit-fixture')
$carousel.bootstrapCarousel()
assert.strictEqual(spy.called, false)
assert.false(spy.called)
spy.restore()
})
})
+70 -66
View File
@@ -40,7 +40,7 @@ $(function () {
assert.expect(2)
var $el = $('<div/>')
var $collapse = $el.bootstrapCollapse()
assert.ok($collapse instanceof $, 'returns jquery collection')
assert.true($collapse instanceof $, 'returns jquery collection')
assert.strictEqual($collapse[0], $el[0], 'collection contains element')
})
@@ -50,8 +50,8 @@ $(function () {
var $el = $('<div class="collapse"/>')
$el.one('shown.bs.collapse', function () {
assert.ok($el.hasClass('show'), 'has class "show"')
assert.ok(!/height/i.test($el.attr('style')), 'has height reset')
assert.true($el.hasClass('show'), 'has class "show"')
assert.false(/height/i.test($el.attr('style')), 'has height reset')
done()
}).bootstrapCollapse('show')
})
@@ -63,12 +63,12 @@ $(function () {
var $el = $('<div class="collapse multi"/>').appendTo('#qunit-fixture')
var $el2 = $('<div class="collapse multi"/>').appendTo('#qunit-fixture')
$el.one('shown.bs.collapse', function () {
assert.ok($el.hasClass('show'), 'has class "show"')
assert.ok(!/height/i.test($el.attr('style')), 'has height reset')
assert.true($el.hasClass('show'), 'has class "show"')
assert.false(/height/i.test($el.attr('style')), 'has height reset')
})
$el2.one('shown.bs.collapse', function () {
assert.ok($el2.hasClass('show'), 'has class "show"')
assert.ok(!/height/i.test($el2.attr('style')), 'has height reset')
assert.true($el2.hasClass('show'), 'has class "show"')
assert.false(/height/i.test($el2.attr('style')), 'has height reset')
done()
})
$target.trigger('click')
@@ -93,8 +93,8 @@ $(function () {
var $el1 = $('#collapse1')
var $el2 = $('#collapse2')
$el1.one('shown.bs.collapse', function () {
assert.ok($el1.hasClass('show'))
assert.ok($el2.hasClass('show'))
assert.true($el1.hasClass('show'))
assert.true($el2.hasClass('show'))
done()
}).bootstrapCollapse('show')
})
@@ -103,7 +103,7 @@ $(function () {
assert.expect(1)
var $el = $('<div class="collapse"/>').bootstrapCollapse('hide')
assert.ok(!$el.hasClass('show'), 'does not have class "show"')
assert.false($el.hasClass('show'), 'does not have class "show"')
})
QUnit.test('should not fire shown when show is prevented', function (assert) {
@@ -161,7 +161,7 @@ $(function () {
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok(!$target.hasClass('collapsed'), 'target does not have collapsed class')
assert.false($target.hasClass('collapsed'), 'target does not have collapsed class')
done()
})
@@ -177,7 +177,7 @@ $(function () {
$('<div id="test1" class="show"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
assert.true($target.hasClass('collapsed'), 'target has collapsed class')
done()
})
@@ -194,8 +194,8 @@ $(function () {
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok(!$target.hasClass('collapsed'), 'target trigger does not have collapsed class')
assert.ok(!$alt.hasClass('collapsed'), 'alt trigger does not have collapsed class')
assert.false($target.hasClass('collapsed'), 'target trigger does not have collapsed class')
assert.false($alt.hasClass('collapsed'), 'alt trigger does not have collapsed class')
done()
})
@@ -212,14 +212,15 @@ $(function () {
$('<div id="test1" class="show"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
assert.ok($alt.hasClass('collapsed'), 'alt trigger has collapsed class')
assert.true($target.hasClass('collapsed'), 'target has collapsed class')
assert.true($alt.hasClass('collapsed'), 'alt trigger has collapsed class')
done()
})
$target.trigger('click')
})
// eslint-disable-next-line qunit/resolve-async
QUnit.test('should not close a collapse when initialized with "show" option if already shown', function (assert) {
assert.expect(0)
var done = assert.async()
@@ -235,6 +236,7 @@ $(function () {
setTimeout(done, 0)
})
// eslint-disable-next-line qunit/resolve-async
QUnit.test('should open a collapse when initialized with "show" option if not already shown', function (assert) {
assert.expect(1)
var done = assert.async()
@@ -250,6 +252,7 @@ $(function () {
setTimeout(done, 0)
})
// eslint-disable-next-line qunit/resolve-async
QUnit.test('should not show a collapse when initialized with "hide" option if already hidden', function (assert) {
assert.expect(0)
var done = assert.async()
@@ -264,6 +267,7 @@ $(function () {
setTimeout(done, 0)
})
// eslint-disable-next-line qunit/resolve-async
QUnit.test('should hide a collapse when initialized with "hide" option if not already hidden', function (assert) {
assert.expect(1)
var done = assert.async()
@@ -302,9 +306,9 @@ $(function () {
$('<div id="body3" data-parent="#accordion"/>')
.appendTo($groups.eq(2))
.on('shown.bs.collapse', function () {
assert.ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
assert.ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
assert.ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
assert.true($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
assert.true($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
assert.false($target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
done()
})
@@ -336,9 +340,9 @@ $(function () {
$('<div id="body3" data-parent=".accordion"/>')
.appendTo($groups.eq(2))
.on('shown.bs.collapse', function () {
assert.ok($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
assert.ok($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
assert.ok(!$target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
assert.true($target1.hasClass('collapsed'), 'inactive target 1 does have class "collapsed"')
assert.true($target2.hasClass('collapsed'), 'inactive target 2 does have class "collapsed"')
assert.false($target3.hasClass('collapsed'), 'active target 3 does not have class "collapsed"')
done()
})
@@ -479,7 +483,7 @@ $(function () {
$target1.trigger('click')
setTimeout(function () {
assert.ok(!showFired, 'show event did not fire')
assert.false(showFired, 'show event did not fire')
done()
}, 1)
})
@@ -493,7 +497,7 @@ $(function () {
$('<div id="test1" class="show"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.ok($target.hasClass('collapsed'))
assert.true($target.hasClass('collapsed'))
done()
})
.bootstrapCollapse('hide')
@@ -508,7 +512,7 @@ $(function () {
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok(!$target.hasClass('collapsed'))
assert.false($target.hasClass('collapsed'))
done()
})
.bootstrapCollapse('show')
@@ -534,11 +538,11 @@ $(function () {
var $collapseOne = $('#collapseOne')
var $collapseTwo = $('#collapseTwo')
$collapseOne.on('shown.bs.collapse', function () {
assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.true($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.false($collapseTwo.hasClass('show'), '#collapseTwo is not shown')
$collapseTwo.on('shown.bs.collapse', function () {
assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
assert.false($collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.true($collapseTwo.hasClass('show'), '#collapseTwo is shown')
done()
})
$triggerTwo.trigger($.Event('click'))
@@ -572,11 +576,11 @@ $(function () {
var $collapseOne = $('#collapseOne')
var $collapseTwo = $('#collapseTwo')
$collapseOne.on('shown.bs.collapse', function () {
assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.true($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.false($collapseTwo.hasClass('show'), '#collapseTwo is not shown')
$collapseTwo.on('shown.bs.collapse', function () {
assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
assert.false($collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.true($collapseTwo.hasClass('show'), '#collapseTwo is shown')
done()
})
$triggerTwo.trigger($.Event('click'))
@@ -609,18 +613,18 @@ $(function () {
}
function firstTest() {
assert.ok($collapseOneOne.hasClass('show'), '#collapseOneOne is shown')
assert.ok($collapseOneTwo.hasClass('show'), '#collapseOneTwo is shown')
assert.ok(!$collapseTwoOne.hasClass('show'), '#collapseTwoOne is not shown')
assert.ok(!$collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is not shown')
assert.true($collapseOneOne.hasClass('show'), '#collapseOneOne is shown')
assert.true($collapseOneTwo.hasClass('show'), '#collapseOneTwo is shown')
assert.false($collapseTwoOne.hasClass('show'), '#collapseTwoOne is not shown')
assert.false($collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is not shown')
$triggerTwo.trigger($.Event('click'))
}
function secondTest() {
assert.ok(!$collapseOneOne.hasClass('show'), '#collapseOneOne is not shown')
assert.ok(!$collapseOneTwo.hasClass('show'), '#collapseOneTwo is not shown')
assert.ok($collapseTwoOne.hasClass('show'), '#collapseTwoOne is shown')
assert.ok($collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is shown')
assert.false($collapseOneOne.hasClass('show'), '#collapseOneOne is not shown')
assert.false($collapseOneTwo.hasClass('show'), '#collapseOneTwo is not shown')
assert.true($collapseTwoOne.hasClass('show'), '#collapseTwoOne is shown')
assert.true($collapseTwoTwo.hasClass('show'), '#collapseTwoTwo is shown')
done()
}
@@ -688,17 +692,17 @@ $(function () {
var $nestedCollapseOne = $('#nestedCollapseOne')
$collapseOne.one('shown.bs.collapse', function () {
assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.ok(!$('#nestedCollapseOne').hasClass('show'), '#nestedCollapseOne is not shown')
assert.true($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.false($collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.false($('#nestedCollapseOne').hasClass('show'), '#nestedCollapseOne is not shown')
$nestedCollapseOne.one('shown.bs.collapse', function () {
assert.ok($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.ok(!$collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.ok($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
assert.true($collapseOne.hasClass('show'), '#collapseOne is shown')
assert.false($collapseTwo.hasClass('show'), '#collapseTwo is not shown')
assert.true($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
$collapseTwo.one('shown.bs.collapse', function () {
assert.ok(!$collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.ok($collapseTwo.hasClass('show'), '#collapseTwo is shown')
assert.ok($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
assert.false($collapseOne.hasClass('show'), '#collapseOne is not shown')
assert.true($collapseTwo.hasClass('show'), '#collapseTwo is shown')
assert.true($nestedCollapseOne.hasClass('show'), '#nestedCollapseOne is shown')
done()
})
$triggerTwo.trigger($.Event('click'))
@@ -716,9 +720,9 @@ $(function () {
$('<div id="collapsediv1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok($(this).hasClass('show'))
assert.ok($target.attr('aria-expanded') === 'true')
assert.ok($target.prop('checked'))
assert.true($(this).hasClass('show'))
assert.strictEqual($target.attr('aria-expanded'), 'true')
assert.true($target.prop('checked'))
done()
})
@@ -737,17 +741,17 @@ $(function () {
var $target2 = $('<div id="test2" class="multi"/>').appendTo('#qunit-fixture')
$target2.one('shown.bs.collapse', function () {
assert.ok(!$trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
assert.ok(!$trigger2.hasClass('collapsed'), 'trigger2 does not have collapsed class')
assert.ok(!$trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
assert.false($trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
assert.false($trigger2.hasClass('collapsed'), 'trigger2 does not have collapsed class')
assert.false($trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
$target2.one('hidden.bs.collapse', function () {
assert.ok(!$trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
assert.ok($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
assert.ok(!$trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
assert.false($trigger1.hasClass('collapsed'), 'trigger1 does not have collapsed class')
assert.true($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
assert.false($trigger3.hasClass('collapsed'), 'trigger3 does not have collapsed class')
$target1.one('hidden.bs.collapse', function () {
assert.ok($trigger1.hasClass('collapsed'), 'trigger1 has collapsed class')
assert.ok($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
assert.ok($trigger3.hasClass('collapsed'), 'trigger3 has collapsed class')
assert.true($trigger1.hasClass('collapsed'), 'trigger1 has collapsed class')
assert.true($trigger2.hasClass('collapsed'), 'trigger2 has collapsed class')
assert.true($trigger3.hasClass('collapsed'), 'trigger3 has collapsed class')
done()
})
$trigger1.trigger('click')
@@ -802,11 +806,11 @@ $(function () {
$(htmlCollapse)
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok($target.prop('checked'), '$trigger is checked')
assert.true($target.prop('checked'), '$trigger is checked')
var $testCheckbox = $('#testCheckbox')
$testCheckbox.trigger($.Event('click'))
setTimeout(function () {
assert.ok($testCheckbox.prop('checked'), '$testCheckbox is checked too')
assert.true($testCheckbox.prop('checked'), '$testCheckbox is checked too')
done()
}, 5)
})
@@ -882,8 +886,8 @@ $(function () {
})
$collapse2.on('shown.bs.collapse', function () {
assert.ok($collapse2.hasClass('show'))
assert.ok(!$('#collapse1').hasClass('show'))
assert.true($collapse2.hasClass('show'))
assert.false($('#collapse1').hasClass('show'))
done()
})
+94 -126
View File
@@ -40,7 +40,7 @@ $(function () {
assert.expect(2)
var $el = $('<div/>')
var $dropdown = $el.bootstrapDropdown()
assert.ok($dropdown instanceof $, 'returns jquery collection')
assert.true($dropdown instanceof $, 'returns jquery collection')
assert.strictEqual($dropdown[0], $el[0], 'collection contains element')
})
@@ -61,7 +61,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.on('click', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
assert.false($dropdown.parent('.dropdown').hasClass('show'))
done()
})
$dropdown.trigger($.Event('click'))
@@ -88,7 +88,7 @@ $(function () {
$button.trigger('focus').trigger($.Event('keydown', {
which: 27
}))
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown after escape pressed')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown after escape pressed')
done()
})
@@ -108,7 +108,7 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class not added')
assert.false($dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class not added')
done()
})
$dropdown.trigger('click')
@@ -130,7 +130,7 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class added')
assert.true($dropdown.parent('.dropdown').hasClass('position-static'), '"position-static" class added')
done()
})
$dropdown.trigger('click')
@@ -211,7 +211,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.on('click', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
assert.false($dropdown.parent('.dropdown').hasClass('show'))
done()
})
$dropdown.trigger($.Event('click'))
@@ -235,7 +235,7 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
assert.true($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
done()
})
$dropdown.trigger('click')
@@ -263,10 +263,10 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
assert.true($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
$(document.body).trigger('click')
}).on('hidden.bs.dropdown', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
assert.false($dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
done()
})
$dropdown.trigger('click')
@@ -293,12 +293,12 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
assert.true($dropdown.parent('.dropdown').hasClass('show'), '"show" class added on click')
var e = $.Event('keyup')
e.which = 9 // Tab
$(document.body).trigger(e)
}).on('hidden.bs.dropdown', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
assert.false($dropdown.parent('.dropdown').hasClass('show'), '"show" class removed')
done()
})
$dropdown.trigger('click')
@@ -520,10 +520,10 @@ $(function () {
$dropdown.parent('.dropdown')
.on('hide.bs.dropdown', function (e) {
assert.ok(e.clickEvent)
assert.notStrictEqual(e.clickEvent, 'undefined')
})
.on('hidden.bs.dropdown', function (e) {
assert.ok(e.clickEvent)
assert.notStrictEqual(e.clickEvent, 'undefined')
})
.on('shown.bs.dropdown', function () {
assert.ok(true, 'shown was fired')
@@ -553,10 +553,10 @@ $(function () {
$dropdown.parent('.dropdown')
.on('hide.bs.dropdown', function (e) {
assert.notOk(e.clickEvent)
assert.strictEqual(typeof e.clickEvent, 'undefined')
})
.on('hidden.bs.dropdown', function (e) {
assert.notOk(e.clickEvent)
assert.strictEqual(typeof e.clickEvent, 'undefined')
})
.on('shown.bs.dropdown', function () {
assert.ok(true, 'shown was fired')
@@ -601,12 +601,12 @@ $(function () {
$input.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok($(document.activeElement).is($input), 'input still focused')
assert.true($(document.activeElement).is($input), 'input still focused')
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok($(document.activeElement).is($textarea), 'textarea still focused')
assert.true($(document.activeElement).is($textarea), 'textarea still focused')
done()
})
@@ -642,8 +642,8 @@ $(function () {
$dropdown.trigger($.Event('keydown', {
which: 40
}))
assert.ok(!$(document.activeElement).is('.disabled'), '.disabled is not focused')
assert.ok(!$(document.activeElement).is(':disabled'), ':disabled is not focused')
assert.false($(document.activeElement).is('.disabled'), '.disabled is not focused')
assert.false($(document.activeElement).is(':disabled'), ':disabled is not focused')
done()
})
$dropdown.trigger('click')
@@ -673,17 +673,17 @@ $(function () {
$dropdown.trigger($.Event('keydown', {
which: 40
}))
assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
assert.true($(document.activeElement).is($('#item1')), 'item1 is focused')
$(document.activeElement).trigger($.Event('keydown', {
which: 40
}))
assert.ok($(document.activeElement).is($('#item2')), 'item2 is focused')
assert.true($(document.activeElement).is($('#item2')), 'item2 is focused')
$(document.activeElement).trigger($.Event('keydown', {
which: 38
}))
assert.ok($(document.activeElement).is($('#item1')), 'item1 is focused')
assert.true($(document.activeElement).is($('#item1')), 'item1 is focused')
done()
})
$dropdown.trigger('click')
@@ -705,14 +705,14 @@ $(function () {
var $textfield = $('#textField')
$textfield.on('click', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
done()
})
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
$textfield.trigger($.Event('click'))
})
$dropdown.trigger('click')
@@ -734,26 +734,26 @@ $(function () {
var $textarea = $('#textArea')
$textarea.on('click', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
done()
})
$dropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
$textarea.trigger($.Event('click'))
})
$dropdown.trigger('click')
})
QUnit.test('Dropdown should not use Popper.js in navbar', function (assert) {
QUnit.test('Dropdown should not use Popper in navbar', function (assert) {
assert.expect(1)
var done = assert.async()
var html = '<nav class="navbar navbar-expand-md navbar-light bg-light">' +
'<div class="dropdown">' +
' <a class="nav-link dropdown-toggle" href="#" id="dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>' +
' <div class="dropdown-menu" aria-labelledby="dropdown">' +
' <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-expanded="false">Dropdown</a>' +
' <div class="dropdown-menu">' +
' <a class="dropdown-item" href="#">Action</a>' +
' <a class="dropdown-item" href="#">Another action</a>' +
' <a class="dropdown-item" href="#">Something else here</a>' +
@@ -770,7 +770,7 @@ $(function () {
$triggerDropdown
.parent('.dropdown')
.on('shown.bs.dropdown', function () {
assert.ok(typeof $dropdownMenu.attr('style') === 'undefined', 'No inline style applied by Popper.js')
assert.strictEqual(typeof $dropdownMenu.attr('style'), 'undefined', 'No inline style applied by Popper')
done()
})
$triggerDropdown.trigger($.Event('click'))
@@ -800,15 +800,15 @@ $(function () {
.on('shown.bs.dropdown', function () {
// Forcibly focus first item
$item[0].focus()
assert.ok($(document.activeElement)[0] === $item[0], 'menu item initial focus set')
assert.strictEqual($(document.activeElement)[0], $item[0], 'menu item initial focus set')
// Key escape
$item.trigger('focus').trigger($.Event('keydown', {
which: 27
}))
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu was closed after escape')
assert.ok($(document.activeElement)[0] === $toggle[0], 'toggle has focus again once menu was closed after escape')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu was closed after escape')
assert.strictEqual($(document.activeElement)[0], $toggle[0], 'toggle has focus again once menu was closed after escape')
done()
})
@@ -847,37 +847,37 @@ $(function () {
$input.trigger('focus').trigger($.Event('keydown', {
which: 32
}))
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
assert.strictEqual($(document.activeElement)[0], $input[0], 'input still focused')
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 32
}))
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
assert.strictEqual($(document.activeElement)[0], $textarea[0], 'textarea still focused')
// Key up
$input.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
assert.strictEqual($(document.activeElement)[0], $input[0], 'input still focused')
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
assert.strictEqual($(document.activeElement)[0], $textarea[0], 'textarea still focused')
// Key down
$input.trigger('focus').trigger($.Event('keydown', {
which: 40
}))
assert.ok($(document.activeElement)[0] === $input[0], 'input still focused')
assert.strictEqual($(document.activeElement)[0], $input[0], 'input still focused')
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 40
}))
assert.ok($(document.activeElement)[0] === $textarea[0], 'textarea still focused')
assert.strictEqual($(document.activeElement)[0], $textarea[0], 'textarea still focused')
// Key escape
$input.trigger('focus').trigger($.Event('keydown', {
which: 27
}))
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
done()
})
@@ -917,14 +917,14 @@ $(function () {
$input.trigger('focus').trigger($.Event('keydown', {
which: 32
}))
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.ok($(document.activeElement).is($input), 'input is still focused')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($(document.activeElement).is($input), 'input is still focused')
// Key escape
$input.trigger('focus').trigger($.Event('keydown', {
which: 27
}))
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
$dropdown
.parent('.dropdown')
@@ -933,7 +933,7 @@ $(function () {
$input.trigger('focus').trigger($.Event('keydown', {
which: 40
}))
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
assert.strictEqual(document.activeElement, $('#item1')[0], 'item1 is focused')
$dropdown
.parent('.dropdown')
@@ -942,7 +942,7 @@ $(function () {
$input.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
assert.strictEqual(document.activeElement, $('#item1')[0], 'item1 is focused')
done()
}).bootstrapDropdown('toggle')
$input.trigger('click')
@@ -985,14 +985,14 @@ $(function () {
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 32
}))
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.ok($(document.activeElement).is($textarea), 'textarea is still focused')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($(document.activeElement).is($textarea), 'textarea is still focused')
// Key escape
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 27
}))
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is not shown')
$dropdown
.parent('.dropdown')
@@ -1001,7 +1001,7 @@ $(function () {
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 40
}))
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
assert.strictEqual(document.activeElement, $('#item1')[0], 'item1 is focused')
$dropdown
.parent('.dropdown')
@@ -1010,7 +1010,7 @@ $(function () {
$textarea.trigger('focus').trigger($.Event('keydown', {
which: 38
}))
assert.ok(document.activeElement === $('#item1')[0], 'item1 is focused')
assert.strictEqual(document.activeElement, $('#item1')[0], 'item1 is focused')
done()
}).bootstrapDropdown('toggle')
$textarea.trigger('click')
@@ -1048,7 +1048,7 @@ $(function () {
which: 27
}))
assert.ok($body.hasClass('event-handled'), 'ESC key event was propagated')
assert.true($body.hasClass('event-handled'), 'ESC key event was propagated')
done()
})
@@ -1080,11 +1080,11 @@ $(function () {
which: 27
}))
assert.ok($body.hasClass('event-handled'), 'ESC key event was propagated')
assert.true($body.hasClass('event-handled'), 'ESC key event was propagated')
done()
})
QUnit.test('should not use Popper.js if display set to static', function (assert) {
QUnit.test('should not use Popper if display set to static', function (assert) {
assert.expect(1)
var dropdownHTML =
'<div class="dropdown">' +
@@ -1106,7 +1106,7 @@ $(function () {
$dropdown.parent('.dropdown')
.on('shown.bs.dropdown', function () {
// Popper.js add this attribute when we use it
// Popper adds this attribute when we use it
assert.strictEqual(dropdownMenu.getAttribute('x-placement'), null)
done()
})
@@ -1114,7 +1114,7 @@ $(function () {
$dropdown.trigger('click')
})
QUnit.test('should call Popper.js and detect navbar on update', function (assert) {
QUnit.test('should call Popper and detect navbar on update', function (assert) {
assert.expect(3)
var dropdownHTML =
@@ -1132,14 +1132,14 @@ $(function () {
var dropdown = $dropdown.data('bs.dropdown')
dropdown.toggle()
assert.ok(dropdown._popper)
assert.notStrictEqual(dropdown._popper, null)
var spyPopper = sinon.spy(dropdown._popper, 'scheduleUpdate')
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
dropdown.update()
assert.ok(spyPopper.called)
assert.ok(spyDetectNavbar.called)
assert.true(spyPopper.called)
assert.true(spyDetectNavbar.called)
})
QUnit.test('should just detect navbar on update', function (assert) {
@@ -1163,8 +1163,8 @@ $(function () {
dropdown.update()
assert.notOk(dropdown._popper)
assert.ok(spyDetectNavbar.called)
assert.strictEqual(dropdown._popper, null)
assert.true(spyDetectNavbar.called)
})
QUnit.test('should dispose dropdown with Popper', function (assert) {
@@ -1186,16 +1186,16 @@ $(function () {
var dropdown = $dropdown.data('bs.dropdown')
dropdown.toggle()
assert.ok(dropdown._popper)
assert.ok(dropdown._menu !== null)
assert.ok(dropdown._element !== null)
assert.notStrictEqual(dropdown._popper, null)
assert.notStrictEqual(dropdown._menu, null)
assert.notStrictEqual(dropdown._element, null)
var spyDestroy = sinon.spy(dropdown._popper, 'destroy')
dropdown.dispose()
assert.ok(spyDestroy.called)
assert.ok(dropdown._menu === null)
assert.ok(dropdown._element === null)
assert.true(spyDestroy.called)
assert.strictEqual(dropdown._menu, null)
assert.strictEqual(dropdown._element, null)
})
QUnit.test('should dispose dropdown', function (assert) {
@@ -1216,18 +1216,18 @@ $(function () {
var dropdown = $dropdown.data('bs.dropdown')
assert.notOk(dropdown._popper)
assert.ok(dropdown._menu !== null)
assert.ok(dropdown._element !== null)
assert.strictEqual(dropdown._popper, null)
assert.notStrictEqual(dropdown._menu, null)
assert.notStrictEqual(dropdown._element, null)
dropdown.dispose()
assert.ok(dropdown._menu === null)
assert.ok(dropdown._element === null)
assert.strictEqual(dropdown._menu, null)
assert.strictEqual(dropdown._element, null)
})
QUnit.test('should show dropdown', function (assert) {
assert.expect(2)
assert.expect(3)
var dropdownHTML =
'<div class="dropdown">' +
@@ -1248,10 +1248,11 @@ $(function () {
$dropdown
.parent('.dropdown')
.on('show.bs.dropdown', function () {
assert.strictEqual(dropdown._popper, null)
assert.ok(true, 'show was fired')
})
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
done()
})
@@ -1284,7 +1285,7 @@ $(function () {
assert.ok(true, 'hide was fired')
})
.on('hidden.bs.dropdown', function () {
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
done()
})
@@ -1311,7 +1312,7 @@ $(function () {
$dropdown.trigger('click')
dropdown.show()
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still shown')
})
QUnit.test('should not show dropdown', function (assert) {
@@ -1332,40 +1333,7 @@ $(function () {
var dropdown = $dropdown.data('bs.dropdown')
dropdown.hide()
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still hidden')
})
QUnit.test('should show dropdown', function (assert) {
assert.expect(3)
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()
var dropdown = $dropdown.data('bs.dropdown')
var done = assert.async()
$dropdown
.parent('.dropdown')
.on('show.bs.dropdown', function () {
assert.ok(dropdown._popper === null)
assert.ok(true, 'show was fired')
})
.on('shown.bs.dropdown', function () {
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
done()
})
dropdown.show()
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is still hidden')
})
QUnit.test('should prevent default event on show method call', function (assert) {
@@ -1395,7 +1363,7 @@ $(function () {
})
dropdown.show()
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
assert.false($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is hidden')
})
QUnit.test('should prevent default event on hide method call', function (assert) {
@@ -1426,7 +1394,7 @@ $(function () {
})
dropdown.hide()
assert.ok($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
assert.true($dropdown.parent('.dropdown').hasClass('show'), 'dropdown menu is shown')
})
QUnit.test('should not open dropdown via show method if target is disabled via attribute', function (assert) {
@@ -1441,7 +1409,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.show()
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
assert.false($dropdown.parent('.dropdown').hasClass('show'))
})
QUnit.test('should not open dropdown via show method if target is disabled via class', function (assert) {
@@ -1457,7 +1425,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.show()
assert.ok(!$dropdown.parent('.dropdown').hasClass('show'))
assert.false($dropdown.parent('.dropdown').hasClass('show'))
})
QUnit.test('should not hide dropdown via hide method if target is disabled via attribute', function (assert) {
@@ -1472,7 +1440,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.hide()
assert.ok($dropdown.parent('.dropdown').hasClass('show'))
assert.true($dropdown.parent('.dropdown').hasClass('show'))
})
QUnit.test('should not hide dropdown via hide method if target is disabled via class', function (assert) {
@@ -1488,7 +1456,7 @@ $(function () {
$(dropdownHTML).appendTo('#qunit-fixture')
var $dropdown = $('#qunit-fixture').find('[data-toggle="dropdown"]').bootstrapDropdown()
$dropdown.hide()
assert.ok($dropdown.parent('.dropdown').hasClass('show'))
assert.true($dropdown.parent('.dropdown').hasClass('show'))
})
QUnit.test('should create offset modifier correctly when offset option is a function', function (assert) {
@@ -1516,8 +1484,8 @@ $(function () {
var dropdown = $dropdown.data('bs.dropdown')
var offset = dropdown._getOffset()
assert.ok(typeof offset.offset === 'undefined')
assert.ok(typeof offset.fn === 'function')
assert.strictEqual(typeof offset.offset, 'undefined')
assert.strictEqual(typeof offset.fn, 'function')
})
QUnit.test('should create offset modifier correctly when offset option is not a function', function (assert) {
@@ -1543,10 +1511,10 @@ $(function () {
var offset = dropdown._getOffset()
assert.strictEqual(offset.offset, myOffset)
assert.ok(typeof offset.fn === 'undefined')
assert.strictEqual(typeof offset.fn, 'undefined')
})
QUnit.test('should allow to pass config to popper.js with `popperConfig`', function (assert) {
QUnit.test('should allow to pass config to Popper with `popperConfig`', function (assert) {
assert.expect(1)
var dropdownHTML =
@@ -1602,14 +1570,14 @@ $(function () {
var spyPopper
$firstDropdownEl.one('shown.bs.dropdown', function () {
assert.strictEqual($firstDropdownEl.hasClass('show'), true)
assert.true($firstDropdownEl.hasClass('show'))
spyPopper = sinon.spy(dropdown1._popper, 'destroy')
dropdown2.toggle()
})
$secondDropdownEl.one('shown.bs.dropdown', function () {
assert.strictEqual($secondDropdownEl.hasClass('show'), true)
assert.ok(spyPopper.called)
assert.true($secondDropdownEl.hasClass('show'))
assert.true(spyPopper.called)
done()
})
@@ -1643,7 +1611,7 @@ $(function () {
})
$dropdownEl.one('hidden.bs.dropdown', function () {
assert.ok(spyPopper.called)
assert.true(spyPopper.called)
done()
})
@@ -1682,9 +1650,9 @@ $(function () {
which: 40
}))
assert.strictEqual($(document.activeElement).hasClass('d-none'), false, '.d-none not focused')
assert.strictEqual($(document.activeElement).css('display') === 'none', false, '"display: none" not focused')
assert.strictEqual(document.activeElement.style.visibility === 'hidden', false, '"visibility: hidden" not focused')
assert.false($(document.activeElement).hasClass('d-none'), '.d-none not focused')
assert.notStrictEqual($(document.activeElement).css('display'), 'none', '"display: none" not focused')
assert.notStrictEqual(document.activeElement.style.visibility, 'hidden', '"visibility: hidden" not focused')
done()
})

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