2
0
mirror of https://github.com/tenrok/bootstrap.git synced 2026-06-17 19:21:23 +03:00

Merge branch 'main' into jo-docs-thanks-page

This commit is contained in:
Patrick H. Lauke
2021-05-04 12:46:06 +01:00
committed by GitHub
408 changed files with 25091 additions and 19943 deletions
+2 -6
View File
@@ -5,11 +5,7 @@ last 2 major versions
not dead not dead
Chrome >= 60 Chrome >= 60
Firefox >= 60 Firefox >= 60
# needed since Legacy Edge still has usage; 79 was the first Chromium Edge version
# should be removed in the future when its usage drops or when it's moved to dead browsers
not Edge < 79
Firefox ESR Firefox ESR
iOS >= 10 iOS >= 12
Safari >= 10 Safari >= 12
Android >= 6
not Explorer <= 11 not Explorer <= 11
+7 -7
View File
@@ -18,23 +18,23 @@
}, },
{ {
"path": "./dist/css/bootstrap-utilities.css", "path": "./dist/css/bootstrap-utilities.css",
"maxSize": "7 kB" "maxSize": "7.5 kB"
}, },
{ {
"path": "./dist/css/bootstrap-utilities.min.css", "path": "./dist/css/bootstrap-utilities.min.css",
"maxSize": "6.25 kB" "maxSize": "6.75 kB"
}, },
{ {
"path": "./dist/css/bootstrap.css", "path": "./dist/css/bootstrap.css",
"maxSize": "24 kB" "maxSize": "24.25 kB"
}, },
{ {
"path": "./dist/css/bootstrap.min.css", "path": "./dist/css/bootstrap.min.css",
"maxSize": "22 kB" "maxSize": "22.25 kB"
}, },
{ {
"path": "./dist/js/bootstrap.bundle.js", "path": "./dist/js/bootstrap.bundle.js",
"maxSize": "50 kB" "maxSize": "41.25 kB"
}, },
{ {
"path": "./dist/js/bootstrap.bundle.min.js", "path": "./dist/js/bootstrap.bundle.min.js",
@@ -46,11 +46,11 @@
}, },
{ {
"path": "./dist/js/bootstrap.esm.min.js", "path": "./dist/js/bootstrap.esm.min.js",
"maxSize": "18 kB" "maxSize": "18.25 kB"
}, },
{ {
"path": "./dist/js/bootstrap.js", "path": "./dist/js/bootstrap.js",
"maxSize": "28 kB" "maxSize": "27.25 kB"
}, },
{ {
"path": "./dist/js/bootstrap.min.js", "path": "./dist/js/bootstrap.min.js",
+1 -1
View File
@@ -1,6 +1,6 @@
**/*.min.js **/*.min.js
**/dist/ **/dist/
**/vendor/ **/vendor/
/_gh_pages/ /_site/
/js/coverage/ /js/coverage/
/site/static/sw.js /site/static/sw.js
+6 -7
View File
@@ -36,24 +36,23 @@
"error", "error",
"always" "always"
], ],
"prefer-named-capture-group": "off",
"semi": [ "semi": [
"error", "error",
"never" "never"
], ],
"unicorn/consistent-function-scoping": "off", "unicorn/consistent-function-scoping": "off",
"unicorn/explicit-length-check": "off", "unicorn/explicit-length-check": "off",
"unicorn/import-index": "off", "unicorn/no-array-callback-reference": "off",
"unicorn/no-fn-reference-in-iterator": "off", "unicorn/no-array-for-each": "off",
"unicorn/no-for-loop": "off", "unicorn/no-for-loop": "off",
"unicorn/no-null": "off", "unicorn/no-null": "off",
"unicorn/no-unused-properties": "error", "unicorn/no-unused-properties": "error",
"unicorn/no-useless-undefined": "off", "unicorn/no-useless-undefined": "off",
"unicorn/prefer-dataset": "off", "unicorn/prefer-dom-node-append": "off",
"unicorn/prefer-node-append": "off", "unicorn/prefer-dom-node-dataset": "off",
"unicorn/prefer-node-remove": "off", "unicorn/prefer-dom-node-remove": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-query-selector": "off", "unicorn/prefer-query-selector": "off",
"unicorn/prefer-spread": "off",
"unicorn/prevent-abbreviations": "off" "unicorn/prevent-abbreviations": "off"
} }
} }
+9 -9
View File
@@ -101,12 +101,12 @@ Example:
Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se. Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se.
| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes | | 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. | | 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. | | 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. | | 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 | | Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser |
## Feature requests ## Feature requests
@@ -134,9 +134,9 @@ Please adhere to the [coding guidelines](#code-guidelines) used throughout the
project (indentation, accurate comments, etc.) and any other requirements project (indentation, accurate comments, etc.) and any other requirements
(such as test coverage). (such as test coverage).
**Do not edit `bootstrap.css`, or `bootstrap.js` **Do not edit `bootstrap.css` or `bootstrap.js`, and do not commit
directly!** Those files are automatically generated. You should edit the any dist files (`dist/` or `js/dist`).** Those files are automatically generated by our build tools. You should
source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/main/scss) edit the source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/main/scss)
and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/main/js/src) instead. and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/main/js/src) instead.
Similarly, when contributing to Bootstrap's documentation, you should edit the Similarly, when contributing to Bootstrap's documentation, you should edit the
+7
View File
@@ -15,3 +15,10 @@ updates:
- v5 - v5
versioning-strategy: increase versioning-strategy: increase
rebase-strategy: disabled rebase-strategy: disabled
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: weekly
day: tuesday
time: "12:00"
timezone: Europe/Athens
+14
View File
@@ -4,6 +4,9 @@ prerelease: true
exclude-labels: exclude-labels:
- 'skip-changelog' - 'skip-changelog'
categories: categories:
- title: '❗ Breaking Changes'
labels:
- 'breaking-change'
- title: '🚀 Features' - title: '🚀 Features'
labels: labels:
- 'new-feature' - 'new-feature'
@@ -14,6 +17,9 @@ categories:
- 'fix' - 'fix'
- 'bugfix' - 'bugfix'
- 'bug' - 'bug'
- title: '⚡ Performance Improvements'
labels:
- 'performance'
- title: '🎨 CSS' - title: '🎨 CSS'
labels: labels:
- 'css' - 'css'
@@ -26,11 +32,19 @@ categories:
- title: '🌎 Accessibility' - title: '🌎 Accessibility'
labels: labels:
- 'accessibility' - 'accessibility'
- title: '🔧 Utility API'
labels:
- 'utility API'
- 'utilities'
- title: '🏭 Tests'
labels:
- 'tests'
- title: '🧰 Misc' - title: '🧰 Misc'
labels: labels:
- 'build' - 'build'
- 'meta' - 'meta'
- 'chore' - 'chore'
- 'CI'
- title: '📦 Dependencies' - title: '📦 Dependencies'
labels: labels:
- 'dependencies' - 'dependencies'
+5 -6
View File
@@ -4,21 +4,21 @@ on:
push: push:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
browserstack: browserstack:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')) 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: steps:
- name: Clone repository - name: Clone repository
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
@@ -26,10 +26,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} key: ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
+4 -8
View File
@@ -2,14 +2,11 @@ name: Bundlewatch
on: on:
push: push:
branches-ignore:
- "dependabot/**"
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
bundlewatch: bundlewatch:
@@ -20,7 +17,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
@@ -28,10 +25,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} key: ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
+1 -9
View File
@@ -11,6 +11,7 @@ on:
branches: branches:
- main - main
- v4-dev - v4-dev
- "!dependabot/**"
schedule: schedule:
- cron: "0 2 * * 5" - cron: "0 2 * * 5"
@@ -22,15 +23,6 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
+4 -6
View File
@@ -7,9 +7,8 @@ on:
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
css: css:
@@ -20,7 +19,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
@@ -28,10 +27,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} key: ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
+4 -6
View File
@@ -7,9 +7,8 @@ on:
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
docs: docs:
@@ -20,7 +19,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
@@ -30,10 +29,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} key: ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
+5 -7
View File
@@ -7,7 +7,6 @@ on:
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
jobs: jobs:
@@ -18,14 +17,14 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
node: [10, 12, 14] node: [10, 12, 14, 16]
steps: steps:
- name: Clone repository - name: Clone repository
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: ${{ matrix.node }} node-version: ${{ matrix.node }}
@@ -33,10 +32,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}} key: ${{ runner.os }}-node-${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ matrix.node }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
@@ -48,7 +46,7 @@ jobs:
run: npm run js-test run: npm run js-test
- name: Run Coveralls - name: Run Coveralls
uses: coverallsapp/github-action@master uses: coverallsapp/github-action@v1.1.2
if: matrix.node == 14 if: matrix.node == 14
with: with:
github-token: "${{ secrets.GITHUB_TOKEN }}" github-token: "${{ secrets.GITHUB_TOKEN }}"
+4 -6
View File
@@ -7,9 +7,8 @@ on:
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
lint: lint:
@@ -20,7 +19,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
@@ -28,10 +27,9 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: ~/.npm path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} key: ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: | restore-keys: |
${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} ${{ runner.os }}-node-${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
+2 -3
View File
@@ -7,9 +7,8 @@ on:
pull_request: pull_request:
env: env:
CI: true
FORCE_COLOR: 2 FORCE_COLOR: 2
NODE: 14.x NODE: 14
jobs: jobs:
css: css:
@@ -20,7 +19,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v2
with: with:
node-version: "${{ env.NODE }}" node-version: "${{ env.NODE }}"
+1
View File
@@ -8,6 +8,7 @@ on:
jobs: jobs:
update_release_draft: update_release_draft:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.repository == 'twbs/bootstrap'
steps: steps:
- uses: release-drafter/release-drafter@v5 - uses: release-drafter/release-drafter@v5
env: env:
+1 -12
View File
@@ -1,19 +1,8 @@
# Ignore docs files # Ignore docs files
/_gh_pages/ /_site/
# This is the old Jekyll docs dist folder;
# keeping it here so that when we switch branches it doesn't show up
/site/docs/**/dist/
# Jekyll's cache folder; keeping it for the same reason as above
/site/.jekyll-cache/
# Hugo resources folder # Hugo resources folder
/resources/ /resources/
# Ignore ruby/bundler files;
# keeping them here so that when we switch branches they don't show up
/.bundle/
/vendor/
/.ruby-version
# Numerous always-ignore extensions # Numerous always-ignore extensions
*.diff *.diff
*.err *.err
+1 -1
View File
@@ -1,5 +1,5 @@
**/*.min.css **/*.min.css
**/dist/ **/dist/
**/vendor/ **/vendor/
/_gh_pages/ /_site/
/js/coverage/ /js/coverage/
+4
View File
@@ -3,6 +3,10 @@
"stylelint-config-twbs-bootstrap/scss" "stylelint-config-twbs-bootstrap/scss"
], ],
"rules": { "rules": {
"declaration-property-value-disallowed-list": {
"border": "none",
"outline": "none"
},
"function-disallowed-list": [ "function-disallowed-list": [
"calc", "calc",
"lighten", "lighten",
+2 -2
View File
@@ -1,7 +1,7 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2011-2020 Twitter, Inc. Copyright (c) 2011-2021 Twitter, Inc.
Copyright (c) 2011-2020 The Bootstrap Authors Copyright (c) 2011-2021 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
+10 -10
View File
@@ -1,6 +1,6 @@
<p align="center"> <p align="center">
<a href="https://v5.getbootstrap.com/"> <a href="https://getbootstrap.com/">
<img src="https://v5.getbootstrap.com/docs/5.0/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165"> <img src="https://getbootstrap.com/docs/5.0/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165">
</a> </a>
</p> </p>
@@ -9,7 +9,7 @@
<p align="center"> <p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development. Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br> <br>
<a href="https://v5.getbootstrap.com/docs/5.0/"><strong>Explore Bootstrap docs »</strong></a> <a href="https://getbootstrap.com/docs/5.0/"><strong>Explore Bootstrap docs »</strong></a>
<br> <br>
<br> <br>
<a href="https://github.com/twbs/bootstrap/issues/new?template=bug_report.md">Report bug</a> <a href="https://github.com/twbs/bootstrap/issues/new?template=bug_report.md">Report bug</a>
@@ -46,20 +46,20 @@ Our default branch is for development of our upcoming Bootstrap 5 release. Head
Several quick start options are available: Several quick start options are available:
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.0.0-alpha3.zip) - [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.0.0-beta3.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git` - Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@next` - Install with [npm](https://www.npmjs.com/): `npm install bootstrap@next`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@next` - Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@next`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.0.0-alpha3` - Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.0.0-beta3`
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass` - Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
Read the [Getting started page](https://v5.getbootstrap.com/docs/5.0/getting-started/introduction/) for information on the framework contents, templates and examples, and more. Read the [Getting started page](https://getbootstrap.com/docs/5.0/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
## Status ## Status
[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/) [![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=main)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Amain) [![Build Status](https://img.shields.io/github/workflow/status/twbs/bootstrap/JS%20Tests/main?label=JS%20Tests&logo=github)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Amain)
[![npm version](https://img.shields.io/npm/v/bootstrap)](https://www.npmjs.com/package/bootstrap) [![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) [![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) [![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue)](https://atmospherejs.com/twbs/bootstrap)
@@ -141,7 +141,7 @@ Have a bug or a feature request? Please first read the [issue guidelines](https:
## Documentation ## Documentation
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://v5.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/assets/js/search.js`. 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`.
@@ -156,7 +156,7 @@ Learn more about using Hugo by reading its [documentation](https://gohugo.io/doc
### Documentation for previous releases ### Documentation for previous releases
You can find all our previous releases docs on <https://v5.getbootstrap.com/docs/versions/>. You can find all our previous releases docs on <https://getbootstrap.com/docs/versions/>.
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. [Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
@@ -236,4 +236,4 @@ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com
## Copyright and license ## Copyright and license
Code and documentation copyright 20112020 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 20112021 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/).
+19 -10
View File
@@ -2,8 +2,8 @@
/*! /*!
* Script to build our plugins to use them separately. * Script to build our plugins to use them separately.
* Copyright 2020 The Bootstrap Authors * Copyright 2020-2021 The Bootstrap Authors
* Copyright 2020 Twitter, Inc. * Copyright 2020-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -14,12 +14,13 @@ const rollup = require('rollup')
const { babel } = require('@rollup/plugin-babel') const { babel } = require('@rollup/plugin-babel')
const banner = require('./banner.js') const banner = require('./banner.js')
const rootPath = path.resolve(__dirname, '../js/dist/')
const plugins = [ const plugins = [
babel({ babel({
// Only transpile our source code // Only transpile our source code
exclude: 'node_modules/**', exclude: 'node_modules/**',
// Inline the required helpers in each file // Include the helpers in each file, at most one copy of each
babelHelpers: 'inline' babelHelpers: 'bundled'
}) })
] ]
const bsPlugins = { const bsPlugins = {
@@ -28,27 +29,30 @@ const bsPlugins = {
Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'), Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'), SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
Alert: path.resolve(__dirname, '../js/src/alert.js'), Alert: path.resolve(__dirname, '../js/src/alert.js'),
Base: path.resolve(__dirname, '../js/src/base-component.js'),
Button: path.resolve(__dirname, '../js/src/button.js'), Button: path.resolve(__dirname, '../js/src/button.js'),
Carousel: path.resolve(__dirname, '../js/src/carousel.js'), Carousel: path.resolve(__dirname, '../js/src/carousel.js'),
Collapse: path.resolve(__dirname, '../js/src/collapse.js'), Collapse: path.resolve(__dirname, '../js/src/collapse.js'),
Dropdown: path.resolve(__dirname, '../js/src/dropdown.js'), Dropdown: path.resolve(__dirname, '../js/src/dropdown.js'),
Modal: path.resolve(__dirname, '../js/src/modal.js'), Modal: path.resolve(__dirname, '../js/src/modal.js'),
Offcanvas: path.resolve(__dirname, '../js/src/offcanvas.js'),
Popover: path.resolve(__dirname, '../js/src/popover.js'), Popover: path.resolve(__dirname, '../js/src/popover.js'),
ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy.js'), ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy.js'),
Tab: path.resolve(__dirname, '../js/src/tab.js'), Tab: path.resolve(__dirname, '../js/src/tab.js'),
Toast: path.resolve(__dirname, '../js/src/toast.js'), Toast: path.resolve(__dirname, '../js/src/toast.js'),
Tooltip: path.resolve(__dirname, '../js/src/tooltip.js') Tooltip: path.resolve(__dirname, '../js/src/tooltip.js')
} }
const rootPath = path.resolve(__dirname, '../js/dist/')
const defaultPluginConfig = { const defaultPluginConfig = {
external: [ external: [
bsPlugins.Data, bsPlugins.Data,
bsPlugins.Base,
bsPlugins.EventHandler, bsPlugins.EventHandler,
bsPlugins.SelectorEngine bsPlugins.SelectorEngine
], ],
globals: { globals: {
[bsPlugins.Data]: 'Data', [bsPlugins.Data]: 'Data',
[bsPlugins.Base]: 'Base',
[bsPlugins.EventHandler]: 'EventHandler', [bsPlugins.EventHandler]: 'EventHandler',
[bsPlugins.SelectorEngine]: 'SelectorEngine' [bsPlugins.SelectorEngine]: 'SelectorEngine'
} }
@@ -61,18 +65,20 @@ const getConfigByPluginKey = pluginKey => {
pluginKey === 'EventHandler' || pluginKey === 'EventHandler' ||
pluginKey === 'SelectorEngine' || pluginKey === 'SelectorEngine' ||
pluginKey === 'Util' || pluginKey === 'Util' ||
pluginKey === 'Sanitizer' pluginKey === 'Sanitizer' ||
pluginKey === 'Backdrop'
) { ) {
return { return {
external: [] external: []
} }
} }
if (pluginKey === 'Alert' || pluginKey === 'Tab') { if (pluginKey === 'Alert' || pluginKey === 'Tab' || pluginKey === 'Offcanvas') {
return defaultPluginConfig return defaultPluginConfig
} }
if ( if (
pluginKey === 'Base' ||
pluginKey === 'Button' || pluginKey === 'Button' ||
pluginKey === 'Carousel' || pluginKey === 'Carousel' ||
pluginKey === 'Collapse' || pluginKey === 'Collapse' ||
@@ -87,9 +93,9 @@ const getConfigByPluginKey = pluginKey => {
if (pluginKey === 'Dropdown' || pluginKey === 'Tooltip') { if (pluginKey === 'Dropdown' || pluginKey === 'Tooltip') {
const config = Object.assign(defaultPluginConfig) const config = Object.assign(defaultPluginConfig)
config.external.push(bsPlugins.Manipulator, 'popper.js') config.external.push(bsPlugins.Manipulator, '@popperjs/core')
config.globals[bsPlugins.Manipulator] = 'Manipulator' config.globals[bsPlugins.Manipulator] = 'Manipulator'
config.globals['popper.js'] = 'Popper' config.globals['@popperjs/core'] = 'Popper'
return config return config
} }
@@ -112,11 +118,13 @@ const getConfigByPluginKey = pluginKey => {
return { return {
external: [ external: [
bsPlugins.Data, bsPlugins.Data,
bsPlugins.Base,
bsPlugins.EventHandler, bsPlugins.EventHandler,
bsPlugins.Manipulator bsPlugins.Manipulator
], ],
globals: { globals: {
[bsPlugins.Data]: 'Data', [bsPlugins.Data]: 'Data',
[bsPlugins.Base]: 'Base',
[bsPlugins.EventHandler]: 'EventHandler', [bsPlugins.EventHandler]: 'EventHandler',
[bsPlugins.Manipulator]: 'Manipulator' [bsPlugins.Manipulator]: 'Manipulator'
} }
@@ -126,7 +134,8 @@ const getConfigByPluginKey = pluginKey => {
const utilObjects = new Set([ const utilObjects = new Set([
'Util', 'Util',
'Sanitizer' 'Sanitizer',
'Backdrop'
]) ])
const domObjects = new Set([ const domObjects = new Set([
+44 -75
View File
@@ -2,18 +2,28 @@
/*! /*!
* Script to update version number references in the project. * Script to update version number references in the project.
* Copyright 2017-2020 The Bootstrap Authors * Copyright 2017-2021 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc. * Copyright 2017-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
'use strict' 'use strict'
const fs = require('fs') const fs = require('fs').promises
const path = require('path') 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 // Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
function regExpQuote(string) { function regExpQuote(string) {
@@ -24,89 +34,48 @@ function regExpQuoteReplacement(string) {
return string.replace(/\$/g, '$$') 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) { // No need to move any further if the strings are identical
if (excludedDirectories.has(path.parse(directory).base)) { if (originalString === newString) {
return return
} }
fs.readdir(directory, (err, names) => { if (VERBOSE) {
if (err) { console.log(`FILE: ${file}`)
errback(err) }
return
}
names.forEach(name => { if (DRY_RUN) {
const filepath = path.join(directory, name) return
fs.lstat(filepath, (err, stats) => { }
if (err) {
process.nextTick(errback, err)
return
}
if (stats.isDirectory()) { await fs.writeFile(file, newString, 'utf8')
process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback)
} else if (stats.isFile()) {
process.nextTick(fileCallback, filepath)
}
})
})
})
} }
function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) { async function main(args) {
original = new RegExp(regExpQuote(original), 'g') const [oldVersion, newVersion] = args
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)
}
}
walkAsync(directory, excludedDirectories, updateFile, err => { if (!oldVersion || !newVersion) {
console.error('ERROR while traversing directory!:') console.error('USAGE: change-version old_version new_version [--verbose] [--dry[-run]]')
console.error(err)
process.exit(1)
})
}
function main(args) {
if (args.length !== 2) {
console.error('USAGE: change-version old_version new_version')
console.error('Got arguments:', args) console.error('Got arguments:', args)
process.exit(1) process.exit(1)
} }
const oldVersion = args[0] // Strip any leading `v` from arguments because otherwise we will end up with duplicate `v`s
const newVersion = args[1] [oldVersion, newVersion].map(arg => arg.startsWith('v') ? arg.slice(1) : arg)
const EXCLUDED_DIRS = new Set([
'.git', try {
'_gh_pages', const files = await globby(GLOB, GLOBBY_OPTIONS)
'node_modules',
'vendor' await Promise.all(files.map(file => replaceRecursively(file, oldVersion, newVersion)))
]) } catch (error) {
const INCLUDED_EXTENSIONS = new Set([ console.error(error)
// This extension allowlist is how we avoid modifying binary files process.exit(1)
'', }
'.css',
'.html',
'.js',
'.json',
'.md',
'.scss',
'.txt',
'.yml'
])
replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion)
} }
main(process.argv.slice(2)) main(process.argv.slice(2))
+3 -3
View File
@@ -5,8 +5,8 @@
* Remember to use the same vendor files as the CDN ones, * Remember to use the same vendor files as the CDN ones,
* otherwise the hashes won't match! * otherwise the hashes won't match!
* *
* Copyright 2017-2020 The Bootstrap Authors * Copyright 2017-2021 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc. * Copyright 2017-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -42,7 +42,7 @@ const files = [
configPropertyName: 'js_bundle_hash' configPropertyName: 'js_bundle_hash'
}, },
{ {
file: 'node_modules/popper.js/dist/umd/popper.min.js', file: 'node_modules/@popperjs/core/dist/umd/popper.min.js',
configPropertyName: 'popper_hash' configPropertyName: 'popper_hash'
} }
] ]
+11 -4
View File
@@ -3,13 +3,14 @@
const path = require('path') const path = require('path')
const { babel } = require('@rollup/plugin-babel') const { babel } = require('@rollup/plugin-babel')
const { nodeResolve } = require('@rollup/plugin-node-resolve') const { nodeResolve } = require('@rollup/plugin-node-resolve')
const replace = require('@rollup/plugin-replace')
const banner = require('./banner.js') const banner = require('./banner.js')
const BUNDLE = process.env.BUNDLE === 'true' const BUNDLE = process.env.BUNDLE === 'true'
const ESM = process.env.ESM === 'true' const ESM = process.env.ESM === 'true'
let fileDest = `bootstrap${ESM ? '.esm' : ''}` let fileDest = `bootstrap${ESM ? '.esm' : ''}`
const external = ['popper.js'] const external = ['@popperjs/core']
const plugins = [ const plugins = [
babel({ babel({
// Only transpile our source code // Only transpile our source code
@@ -19,15 +20,21 @@ const plugins = [
}) })
] ]
const globals = { const globals = {
'popper.js': 'Popper' '@popperjs/core': 'Popper'
} }
if (BUNDLE) { if (BUNDLE) {
fileDest += '.bundle' fileDest += '.bundle'
// Remove last entry in external array to bundle Popper // Remove last entry in external array to bundle Popper
external.pop() external.pop()
delete globals['popper.js'] delete globals['@popperjs/core']
plugins.push(nodeResolve()) plugins.push(
replace({
'process.env.NODE_ENV': '"production"',
preventAssignment: true
}),
nodeResolve()
)
} }
const rollupConfig = { const rollupConfig = {
-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 main
# 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"
+4 -4
View File
@@ -2,8 +2,8 @@
/*! /*!
* Script to run vnu-jar if Java is available. * Script to run vnu-jar if Java is available.
* Copyright 2017-2020 The Bootstrap Authors * Copyright 2017-2021 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc. * Copyright 2017-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -42,14 +42,14 @@ childProcess.exec('java -version', (error, stdout, stderr) => {
const args = [ const args = [
'-jar', '-jar',
vnu, `"${vnu}"`,
'--asciiquotes', '--asciiquotes',
'--skip-non-html', '--skip-non-html',
// Ignore the language code warnings // Ignore the language code warnings
'--no-langdetect', '--no-langdetect',
'--Werror', '--Werror',
`--filterpattern "${ignores}"`, `--filterpattern "${ignores}"`,
'_gh_pages/', '_site/',
'js/tests/' 'js/tests/'
] ]
+52 -21
View File
@@ -3,7 +3,7 @@
/*! /*!
* Script to create the built examples zip archive; * Script to create the built examples zip archive;
* requires the `zip` command to be present! * requires the `zip` command to be present!
* Copyright 2020 The Bootstrap Authors * Copyright 2020-2021 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -12,36 +12,67 @@
const path = require('path') const path = require('path')
const sh = require('shelljs') 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',
'bootstrap.rtl.min.css',
'bootstrap.rtl.min.css.map'
]
const jsFiles = [
'bootstrap.bundle.min.js',
'bootstrap.bundle.min.js.map'
]
const imgFiles = [
'bootstrap-logo.svg',
'bootstrap-logo-white.svg'
]
sh.config.fatal = true sh.config.fatal = true
if (!sh.test('-d', '_gh_pages')) { if (!sh.test('-d', rootDocsDir)) {
throw new Error('The "_gh_pages" folder does not exist, did you forget building the docs?') throw new Error(`The "${rootDocsDir}" folder does not exist, did you forget building the docs?`)
} }
// switch to the root dir // switch to the root dir
sh.cd(path.join(__dirname, '..')) sh.cd(path.join(__dirname, '..'))
// remove any previously created folder with the same name // remove any previously created folder/zip with the same name
sh.rm('-rf', folderName) sh.rm('-rf', [distFolder, `${distFolder}.zip`])
// create any folders so that `cp` works
sh.mkdir('-p', folderName)
sh.mkdir('-p', `${folderName}/assets/brand/`)
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/examples/*`, folderName) // create any folders so that `cp` works
sh.cp('-Rf', `_gh_pages/docs/${versionShort}/dist/`, `${folderName}/assets/`) sh.mkdir('-p', [
// also copy the two brand images we use in the examples distFolder,
sh.cp('-f', [ `${distFolder}/assets/brand/`,
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-logo.svg`, `${distFolder}/assets/dist/css/`,
`_gh_pages/docs/${versionShort}/assets/brand/bootstrap-logo-white.svg` `${distFolder}/assets/dist/js/`
], `${folderName}/assets/brand/`) ])
sh.rm(`${folderName}/index.html`)
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 // get all examples' HTML files
sh.find(`${folderName}/**/*.html`).forEach(file => { sh.find(`${distFolder}/**/*.html`).forEach(file => {
const fileContents = sh.cat(file) const fileContents = sh.cat(file)
.toString() .toString()
.replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../') .replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
@@ -53,7 +84,7 @@ sh.find(`${folderName}/**/*.html`).forEach(file => {
}) })
// create the zip 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 // remove the folder we created
sh.rm('-rf', folderName) sh.rm('-rf', distFolder)
+17 -17
View File
@@ -1,6 +1,6 @@
languageCode: "en" languageCode: "en"
title: "Bootstrap" title: "Bootstrap"
baseURL: "https://v5.getbootstrap.com" baseURL: "https://getbootstrap.com"
enableInlineShortcodes: true enableInlineShortcodes: true
markup: markup:
@@ -20,7 +20,7 @@ enableRobotsTXT: true
metaDataFormat: "yaml" metaDataFormat: "yaml"
disableKinds: ["404", "taxonomy", "taxonomyTerm", "RSS"] disableKinds: ["404", "taxonomy", "taxonomyTerm", "RSS"]
publishDir: "_gh_pages" publishDir: "_site"
module: module:
mounts: mounts:
@@ -47,8 +47,8 @@ params:
social_image_path: /docs/5.0/assets/brand/bootstrap-social.png social_image_path: /docs/5.0/assets/brand/bootstrap-social.png
social_logo_path: /docs/5.0/assets/brand/bootstrap-social-logo.png social_logo_path: /docs/5.0/assets/brand/bootstrap-social-logo.png
current_version: "5.0.0-alpha3" current_version: "5.0.0-beta3"
current_ruby_version: "5.0.0.alpha3" current_ruby_version: "5.0.0.beta3"
docs_version: "5.0" docs_version: "5.0"
rfs_version: "9.0.3" rfs_version: "9.0.3"
github_org: "https://github.com/twbs" github_org: "https://github.com/twbs"
@@ -61,19 +61,19 @@ params:
icons: "https://icons.getbootstrap.com/" icons: "https://icons.getbootstrap.com/"
download: download:
source: "https://github.com/twbs/bootstrap/archive/v5.0.0-alpha3.zip" source: "https://github.com/twbs/bootstrap/archive/v5.0.0-beta3.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v5.0.0-alpha3/bootstrap-5.0.0-alpha3-dist.zip" dist: "https://github.com/twbs/bootstrap/releases/download/v5.0.0-beta3/bootstrap-5.0.0-beta3-dist.zip"
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.0.0-alpha3/bootstrap-5.0.0-alpha3-examples.zip" dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.0.0-beta3/bootstrap-5.0.0-beta3-examples.zip"
cdn: cdn:
# See https://www.srihash.org for info on how to generate the hashes # See https://www.srihash.org for info on how to generate the hashes
css: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-alpha3/dist/css/bootstrap.min.css" css: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css"
css_hash: "sha384-xNSaKzL9Rjah2RV0MGhtlyVs2areDxovNJCBVnI5Jmo4fWjMx5mx1zyOiddHs4kQ" css_hash: "sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6"
css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-alpha3/dist/css/bootstrap.rtl.min.css" css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.rtl.min.css"
css_rtl_hash: "sha384-eWxmXwoY7jtZGBMpINmwuxW6Bfzjqsh1pjhGbl58bWpKmsbpGOFaMIthSFY2izhq" css_rtl_hash: "sha384-trxYGD5BY4TyBTvU5H23FalSCYwpLA0vWEvXXGm5eytyztxb+97WzzY+IWDOSbav"
js: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-alpha3/dist/js/bootstrap.min.js" js: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.min.js"
js_hash: "sha384-supZtwqjyYg6XvvTCi4/w6J6Hm6IKqXaaeoyGhIhonCdkSvA70sSucW7OqXIo4lZ" js_hash: "sha384-j0CNLUeiqtyaRmlzUHCPZ+Gy5fQu0dQ6eZ/xAww941Ai1SxSY+0EQqNXNE6DZiVc"
js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-alpha3/dist/js/bootstrap.bundle.min.js" js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-G/J8d6sz9bTod37AsZzNtTwT77J24FKjJEO1YsU2vW7iPcmYP3/tznu+LcK824t9" js_bundle_hash: "sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf"
popper: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"
popper_hash: "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" popper_hash: "sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p"
+3 -3
View File
@@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Grid v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Grid v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.container, .container,
+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
+3 -3
View File
@@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Grid v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Grid v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.container, .container,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+8 -11
View File
@@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Reboot v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Reboot v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * 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) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/ */
@@ -29,10 +29,6 @@ body {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
[tabindex="-1"]:focus:not(:focus-visible) {
outline: 0 !important;
}
hr { hr {
margin: 1rem 0; margin: 1rem 0;
color: inherit; color: inherit;
@@ -103,7 +99,6 @@ p {
abbr[title], abbr[title],
abbr[data-bs-original-title] { abbr[data-bs-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted; -webkit-text-decoration: underline dotted;
text-decoration: underline dotted; text-decoration: underline dotted;
cursor: help; cursor: help;
@@ -282,9 +277,8 @@ button {
border-radius: 0; border-radius: 0;
} }
button:focus { button:focus:not(:focus-visible) {
outline: dotted 1px; outline: 0;
outline: -webkit-focus-ring-color auto 5px;
} }
input, input,
@@ -310,6 +304,9 @@ select {
select { select {
word-wrap: normal; word-wrap: normal;
} }
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator { [list]::-webkit-calendar-picker-indicator {
display: none; display: none;
+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 v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Reboot v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * 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) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"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;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}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:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),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;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[list]::-webkit-calendar-picker-indicator{display:none}[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}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important} */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"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;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}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:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),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;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}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,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[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}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */ /*# sourceMappingURL=bootstrap-reboot.min.css.map */
File diff suppressed because one or more lines are too long
+8 -11
View File
@@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Reboot v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Reboot v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * 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) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/ */
@@ -29,10 +29,6 @@ body {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
[tabindex="-1"]:focus:not(:focus-visible) {
outline: 0 !important;
}
hr { hr {
margin: 1rem 0; margin: 1rem 0;
color: inherit; color: inherit;
@@ -103,7 +99,6 @@ p {
abbr[title], abbr[title],
abbr[data-bs-original-title] { abbr[data-bs-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted; -webkit-text-decoration: underline dotted;
text-decoration: underline dotted; text-decoration: underline dotted;
cursor: help; cursor: help;
@@ -282,9 +277,8 @@ button {
border-radius: 0; border-radius: 0;
} }
button:focus { button:focus:not(:focus-visible) {
outline: dotted 1px; outline: 0;
outline: -webkit-focus-ring-color auto 5px;
} }
input, input,
@@ -310,6 +304,9 @@ select {
select { select {
word-wrap: normal; word-wrap: normal;
} }
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator { [list]::-webkit-calendar-picker-indicator {
display: none; display: none;
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -1,8 +1,8 @@
/*! /*!
* Bootstrap Reboot v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Reboot v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * 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) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"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;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}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-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),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;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[list]::-webkit-calendar-picker-indicator{display:none}[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}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important} */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"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;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}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-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),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;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}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,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[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}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */ /*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */
File diff suppressed because one or more lines are too long
+252 -109
View File
@@ -1,9 +1,196 @@
/*! /*!
* Bootstrap Utilities v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Utilities v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.clearfix::after {
display: block;
clear: both;
content: "";
}
.link-primary {
color: #0d6efd;
}
.link-primary:hover, .link-primary:focus {
color: #0a58ca;
}
.link-secondary {
color: #6c757d;
}
.link-secondary:hover, .link-secondary:focus {
color: #565e64;
}
.link-success {
color: #198754;
}
.link-success:hover, .link-success:focus {
color: #146c43;
}
.link-info {
color: #0dcaf0;
}
.link-info:hover, .link-info:focus {
color: #3dd5f3;
}
.link-warning {
color: #ffc107;
}
.link-warning:hover, .link-warning:focus {
color: #ffcd39;
}
.link-danger {
color: #dc3545;
}
.link-danger:hover, .link-danger:focus {
color: #b02a37;
}
.link-light {
color: #f8f9fa;
}
.link-light:hover, .link-light:focus {
color: #f9fafb;
}
.link-dark {
color: #212529;
}
.link-dark:hover, .link-dark:focus {
color: #1a1e21;
}
.ratio {
position: relative;
width: 100%;
}
.ratio::before {
display: block;
padding-top: var(--bs-aspect-ratio);
content: "";
}
.ratio > * {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.ratio-1x1 {
--bs-aspect-ratio: 100%;
}
.ratio-4x3 {
--bs-aspect-ratio: calc(3 / 4 * 100%);
}
.ratio-16x9 {
--bs-aspect-ratio: calc(9 / 16 * 100%);
}
.ratio-21x9 {
--bs-aspect-ratio: calc(9 / 21 * 100%);
}
.fixed-top {
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: 1030;
}
.fixed-bottom {
position: fixed;
right: 0;
bottom: 0;
left: 0;
z-index: 1030;
}
.sticky-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
@media (min-width: 576px) {
.sticky-sm-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 768px) {
.sticky-md-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 992px) {
.sticky-lg-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 1200px) {
.sticky-xl-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 1400px) {
.sticky-xxl-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
.visually-hidden,
.visually-hidden-focusable:not(:focus):not(:focus-within) {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
.stretched-link::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
content: "";
}
.text-truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.align-baseline { .align-baseline {
vertical-align: baseline !important; vertical-align: baseline !important;
} }
@@ -182,7 +369,15 @@
} }
.translate-middle { .translate-middle {
transform: translateX(-50%) translateY(-50%) !important; transform: translate(-50%, -50%) !important;
}
.translate-middle-x {
transform: translateX(-50%) !important;
}
.translate-middle-y {
transform: translateY(-50%) !important;
} }
.border { .border {
@@ -261,10 +456,6 @@
border-color: #fff !important; border-color: #fff !important;
} }
.border-0 {
border-width: 0 !important;
}
.border-1 { .border-1 {
border-width: 1px !important; border-width: 1px !important;
} }
@@ -935,6 +1126,10 @@
padding-left: 3rem !important; padding-left: 3rem !important;
} }
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
.fs-1 { .fs-1 {
font-size: calc(1.375rem + 1.5vw) !important; font-size: calc(1.375rem + 1.5vw) !important;
} }
@@ -987,16 +1182,20 @@
font-weight: bolder !important; font-weight: bolder !important;
} }
.text-lowercase { .lh-1 {
text-transform: lowercase !important; line-height: 1 !important;
} }
.text-uppercase { .lh-sm {
text-transform: uppercase !important; line-height: 1.25 !important;
} }
.text-capitalize { .lh-base {
text-transform: capitalize !important; line-height: 1.5 !important;
}
.lh-lg {
line-height: 2 !important;
} }
.text-start { .text-start {
@@ -1011,6 +1210,45 @@
text-align: center !important; text-align: center !important;
} }
.text-decoration-none {
text-decoration: none !important;
}
.text-decoration-underline {
text-decoration: underline !important;
}
.text-decoration-line-through {
text-decoration: line-through !important;
}
.text-lowercase {
text-transform: lowercase !important;
}
.text-uppercase {
text-transform: uppercase !important;
}
.text-capitalize {
text-transform: capitalize !important;
}
.text-wrap {
white-space: normal !important;
}
.text-nowrap {
white-space: nowrap !important;
}
/* rtl:begin:remove */
.text-break {
word-wrap: break-word !important;
word-break: break-word !important;
}
/* rtl:end:remove */
.text-primary { .text-primary {
color: #0d6efd !important; color: #0d6efd !important;
} }
@@ -1067,22 +1305,6 @@
color: inherit !important; color: inherit !important;
} }
.lh-1 {
line-height: 1 !important;
}
.lh-sm {
line-height: 1.25 !important;
}
.lh-base {
line-height: 1.5 !important;
}
.lh-lg {
line-height: 2 !important;
}
.bg-primary { .bg-primary {
background-color: #0d6efd !important; background-color: #0d6efd !important;
} }
@@ -1131,37 +1353,6 @@
background-image: var(--bs-gradient) !important; background-image: var(--bs-gradient) !important;
} }
.text-wrap {
white-space: normal !important;
}
.text-nowrap {
white-space: nowrap !important;
}
.text-decoration-none {
text-decoration: none !important;
}
.text-decoration-underline {
text-decoration: underline !important;
}
.text-decoration-line-through {
text-decoration: line-through !important;
}
/* rtl:begin:remove */
.text-break {
word-wrap: break-word !important;
word-break: break-word !important;
}
/* rtl:end:remove */
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
.user-select-all { .user-select-all {
-webkit-user-select: all !important; -webkit-user-select: all !important;
-moz-user-select: all !important; -moz-user-select: all !important;
@@ -4515,54 +4706,6 @@
.fs-4 { .fs-4 {
font-size: 1.5rem !important; font-size: 1.5rem !important;
} }
.fs-sm-1 {
font-size: 2.5rem !important;
}
.fs-sm-2 {
font-size: 2rem !important;
}
.fs-sm-3 {
font-size: 1.75rem !important;
}
.fs-sm-4 {
font-size: 1.5rem !important;
}
.fs-md-1 {
font-size: 2.5rem !important;
}
.fs-md-2 {
font-size: 2rem !important;
}
.fs-md-3 {
font-size: 1.75rem !important;
}
.fs-md-4 {
font-size: 1.5rem !important;
}
.fs-lg-1 {
font-size: 2.5rem !important;
}
.fs-lg-2 {
font-size: 2rem !important;
}
.fs-lg-3 {
font-size: 1.75rem !important;
}
.fs-lg-4 {
font-size: 1.5rem !important;
}
} }
@media print { @media print {
.d-print-inline { .d-print-inline {
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+244 -101
View File
@@ -1,9 +1,196 @@
/*! /*!
* Bootstrap Utilities v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap Utilities v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
.clearfix::after {
display: block;
clear: both;
content: "";
}
.link-primary {
color: #0d6efd;
}
.link-primary:hover, .link-primary:focus {
color: #0a58ca;
}
.link-secondary {
color: #6c757d;
}
.link-secondary:hover, .link-secondary:focus {
color: #565e64;
}
.link-success {
color: #198754;
}
.link-success:hover, .link-success:focus {
color: #146c43;
}
.link-info {
color: #0dcaf0;
}
.link-info:hover, .link-info:focus {
color: #3dd5f3;
}
.link-warning {
color: #ffc107;
}
.link-warning:hover, .link-warning:focus {
color: #ffcd39;
}
.link-danger {
color: #dc3545;
}
.link-danger:hover, .link-danger:focus {
color: #b02a37;
}
.link-light {
color: #f8f9fa;
}
.link-light:hover, .link-light:focus {
color: #f9fafb;
}
.link-dark {
color: #212529;
}
.link-dark:hover, .link-dark:focus {
color: #1a1e21;
}
.ratio {
position: relative;
width: 100%;
}
.ratio::before {
display: block;
padding-top: var(--bs-aspect-ratio);
content: "";
}
.ratio > * {
position: absolute;
top: 0;
right: 0;
width: 100%;
height: 100%;
}
.ratio-1x1 {
--bs-aspect-ratio: 100%;
}
.ratio-4x3 {
--bs-aspect-ratio: calc(3 / 4 * 100%);
}
.ratio-16x9 {
--bs-aspect-ratio: calc(9 / 16 * 100%);
}
.ratio-21x9 {
--bs-aspect-ratio: calc(9 / 21 * 100%);
}
.fixed-top {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1030;
}
.fixed-bottom {
position: fixed;
left: 0;
bottom: 0;
right: 0;
z-index: 1030;
}
.sticky-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
@media (min-width: 576px) {
.sticky-sm-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 768px) {
.sticky-md-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 992px) {
.sticky-lg-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 1200px) {
.sticky-xl-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
@media (min-width: 1400px) {
.sticky-xxl-top {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1020;
}
}
.visually-hidden,
.visually-hidden-focusable:not(:focus):not(:focus-within) {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
.stretched-link::after {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
content: "";
}
.text-truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.align-baseline { .align-baseline {
vertical-align: baseline !important; vertical-align: baseline !important;
} }
@@ -182,7 +369,15 @@
} }
.translate-middle { .translate-middle {
transform: translateX(50%) translateY(-50%) !important; transform: translate(50%, -50%) !important;
}
.translate-middle-x {
transform: translateX(50%) !important;
}
.translate-middle-y {
transform: translateY(-50%) !important;
} }
.border { .border {
@@ -261,10 +456,6 @@
border-color: #fff !important; border-color: #fff !important;
} }
.border-0 {
border-width: 0 !important;
}
.border-1 { .border-1 {
border-width: 1px !important; border-width: 1px !important;
} }
@@ -935,6 +1126,10 @@
padding-right: 3rem !important; padding-right: 3rem !important;
} }
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
.fs-1 { .fs-1 {
font-size: calc(1.375rem + 1.5vw) !important; font-size: calc(1.375rem + 1.5vw) !important;
} }
@@ -987,16 +1182,20 @@
font-weight: bolder !important; font-weight: bolder !important;
} }
.text-lowercase { .lh-1 {
text-transform: lowercase !important; line-height: 1 !important;
} }
.text-uppercase { .lh-sm {
text-transform: uppercase !important; line-height: 1.25 !important;
} }
.text-capitalize { .lh-base {
text-transform: capitalize !important; line-height: 1.5 !important;
}
.lh-lg {
line-height: 2 !important;
} }
.text-start { .text-start {
@@ -1011,6 +1210,37 @@
text-align: center !important; text-align: center !important;
} }
.text-decoration-none {
text-decoration: none !important;
}
.text-decoration-underline {
text-decoration: underline !important;
}
.text-decoration-line-through {
text-decoration: line-through !important;
}
.text-lowercase {
text-transform: lowercase !important;
}
.text-uppercase {
text-transform: uppercase !important;
}
.text-capitalize {
text-transform: capitalize !important;
}
.text-wrap {
white-space: normal !important;
}
.text-nowrap {
white-space: nowrap !important;
}
.text-primary { .text-primary {
color: #0d6efd !important; color: #0d6efd !important;
} }
@@ -1067,22 +1297,6 @@
color: inherit !important; color: inherit !important;
} }
.lh-1 {
line-height: 1 !important;
}
.lh-sm {
line-height: 1.25 !important;
}
.lh-base {
line-height: 1.5 !important;
}
.lh-lg {
line-height: 2 !important;
}
.bg-primary { .bg-primary {
background-color: #0d6efd !important; background-color: #0d6efd !important;
} }
@@ -1131,29 +1345,6 @@
background-image: var(--bs-gradient) !important; background-image: var(--bs-gradient) !important;
} }
.text-wrap {
white-space: normal !important;
}
.text-nowrap {
white-space: nowrap !important;
}
.text-decoration-none {
text-decoration: none !important;
}
.text-decoration-underline {
text-decoration: underline !important;
}
.text-decoration-line-through {
text-decoration: line-through !important;
}
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
.user-select-all { .user-select-all {
-webkit-user-select: all !important; -webkit-user-select: all !important;
-moz-user-select: all !important; -moz-user-select: all !important;
@@ -4507,54 +4698,6 @@
.fs-4 { .fs-4 {
font-size: 1.5rem !important; font-size: 1.5rem !important;
} }
.fs-sm-1 {
font-size: 2.5rem !important;
}
.fs-sm-2 {
font-size: 2rem !important;
}
.fs-sm-3 {
font-size: 1.75rem !important;
}
.fs-sm-4 {
font-size: 1.5rem !important;
}
.fs-md-1 {
font-size: 2.5rem !important;
}
.fs-md-2 {
font-size: 2rem !important;
}
.fs-md-3 {
font-size: 1.75rem !important;
}
.fs-md-4 {
font-size: 1.5rem !important;
}
.fs-lg-1 {
font-size: 2.5rem !important;
}
.fs-lg-2 {
font-size: 2rem !important;
}
.fs-lg-3 {
font-size: 1.75rem !important;
}
.fs-lg-4 {
font-size: 1.5rem !important;
}
} }
@media print { @media print {
.d-print-inline { .d-print-inline {
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+392 -268
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+384 -260
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+3893 -4816
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
+2293 -2346
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
+2326 -2360
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
+108 -150
View File
@@ -1,56 +1,70 @@
/*! /*!
* Bootstrap alert.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap alert.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler'], factory) : typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.Data, global.EventHandler)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.Data, global.EventHandler, global.Base));
}(this, (function (Data, EventHandler) { 'use strict'; }(this, (function (Data, EventHandler, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data); var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var MILLISECONDS_MULTIPLIER = 1000; const MILLISECONDS_MULTIPLIER = 1000;
var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
var getSelector = function getSelector(element) { const getSelector = element => {
var selector = element.getAttribute('data-bs-target'); let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') { if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href'); let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
} }
return selector; return selector;
}; };
var getElementFromSelector = function getElementFromSelector(element) { const getElementFromSelector = element => {
var selector = getSelector(element); const selector = getSelector(element);
return selector ? document.querySelector(selector) : null; return selector ? document.querySelector(selector) : null;
}; };
var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) { const getTransitionDurationFromElement = element => {
if (!element) { if (!element) {
return 0; return 0;
} // Get transition-duration of the element } // Get transition-duration of the element
var _window$getComputedSt = window.getComputedStyle(element), let {
transitionDuration = _window$getComputedSt.transitionDuration, transitionDuration,
transitionDelay = _window$getComputedSt.transitionDelay; transitionDelay
} = window.getComputedStyle(element);
var floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDuration = Number.parseFloat(transitionDuration);
var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) { if (!floatTransitionDuration && !floatTransitionDelay) {
return 0; return 0;
@@ -62,14 +76,14 @@
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
}; };
var triggerTransitionEnd = function triggerTransitionEnd(element) { const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END)); element.dispatchEvent(new Event(TRANSITION_END));
}; };
var emulateTransitionEnd = function emulateTransitionEnd(element, duration) { const emulateTransitionEnd = (element, duration) => {
var called = false; let called = false;
var durationPadding = 5; const durationPadding = 5;
var emulatedDuration = duration + durationPadding; const emulatedDuration = duration + durationPadding;
function listener() { function listener() {
called = true; called = true;
@@ -77,16 +91,17 @@
} }
element.addEventListener(TRANSITION_END, listener); element.addEventListener(TRANSITION_END, listener);
setTimeout(function () { setTimeout(() => {
if (!called) { if (!called) {
triggerTransitionEnd(element); triggerTransitionEnd(element);
} }
}, emulatedDuration); }, emulatedDuration);
}; };
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -95,7 +110,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -103,94 +118,64 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
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); } } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var VERSION = '5.0.0-alpha3'; const NAME = 'alert';
const DATA_KEY = 'bs.alert';
var BaseComponent = /*#__PURE__*/function () { const EVENT_KEY = `.${DATA_KEY}`;
function BaseComponent(element) { const DATA_API_KEY = '.data-api';
if (!element) { const SELECTOR_DISMISS = '[data-bs-dismiss="alert"]';
return; const EVENT_CLOSE = `close${EVENT_KEY}`;
} const EVENT_CLOSED = `closed${EVENT_KEY}`;
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
this._element = element; const CLASS_NAME_ALERT = 'alert';
Data__default['default'].setData(element, this.constructor.DATA_KEY, this); const CLASS_NAME_FADE = 'fade';
} const CLASS_NAME_SHOW = 'show';
var _proto = BaseComponent.prototype;
_proto.dispose = function dispose() {
Data__default['default'].removeData(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
;
BaseComponent.getInstance = function getInstance(element) {
return Data__default['default'].getData(element, this.DATA_KEY);
};
_createClass(BaseComponent, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return BaseComponent;
}();
function _defineProperties$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var SELECTOR_DISMISS = '[data-bs-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 CLASSNAME_ALERT = 'alert';
var CLASSNAME_FADE = 'fade';
var CLASSNAME_SHOW = 'show';
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var Alert = /*#__PURE__*/function (_BaseComponent) { class Alert extends BaseComponent__default['default'] {
_inheritsLoose(Alert, _BaseComponent); // Getters
static get DATA_KEY() {
return DATA_KEY;
} // Public
function Alert() {
return _BaseComponent.apply(this, arguments) || this;
}
var _proto = Alert.prototype; close(element) {
const rootElement = element ? this._getRootElement(element) : this._element;
// Public const customEvent = this._triggerCloseEvent(rootElement);
_proto.close = function close(element) {
var rootElement = element ? this._getRootElement(element) : this._element;
var customEvent = this._triggerCloseEvent(rootElement);
if (customEvent === null || customEvent.defaultPrevented) { if (customEvent === null || customEvent.defaultPrevented) {
return; return;
@@ -198,46 +183,42 @@
this._removeElement(rootElement); this._removeElement(rootElement);
} // Private } // Private
;
_proto._getRootElement = function _getRootElement(element) {
return getElementFromSelector(element) || element.closest("." + CLASSNAME_ALERT);
};
_proto._triggerCloseEvent = function _triggerCloseEvent(element) { _getRootElement(element) {
return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);
}
_triggerCloseEvent(element) {
return EventHandler__default['default'].trigger(element, EVENT_CLOSE); return EventHandler__default['default'].trigger(element, EVENT_CLOSE);
}; }
_proto._removeElement = function _removeElement(element) { _removeElement(element) {
var _this = this; element.classList.remove(CLASS_NAME_SHOW);
element.classList.remove(CLASSNAME_SHOW); if (!element.classList.contains(CLASS_NAME_FADE)) {
if (!element.classList.contains(CLASSNAME_FADE)) {
this._destroyElement(element); this._destroyElement(element);
return; return;
} }
var transitionDuration = getTransitionDurationFromElement(element); const transitionDuration = getTransitionDurationFromElement(element);
EventHandler__default['default'].one(element, TRANSITION_END, function () { EventHandler__default['default'].one(element, 'transitionend', () => this._destroyElement(element));
return _this._destroyElement(element);
});
emulateTransitionEnd(element, transitionDuration); emulateTransitionEnd(element, transitionDuration);
}; }
_proto._destroyElement = function _destroyElement(element) { _destroyElement(element) {
if (element.parentNode) { if (element.parentNode) {
element.parentNode.removeChild(element); element.parentNode.removeChild(element);
} }
EventHandler__default['default'].trigger(element, EVENT_CLOSED); EventHandler__default['default'].trigger(element, EVENT_CLOSED);
} // Static } // Static
;
Alert.jQueryInterface = function jQueryInterface(config) {
static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
var data = Data__default['default'].getData(this, DATA_KEY); let data = Data__default['default'].get(this, DATA_KEY);
if (!data) { if (!data) {
data = new Alert(this); data = new Alert(this);
@@ -247,9 +228,9 @@
data[config](this); data[config](this);
} }
}); });
}; }
Alert.handleDismiss = function handleDismiss(alertInstance) { static handleDismiss(alertInstance) {
return function (event) { return function (event) {
if (event) { if (event) {
event.preventDefault(); event.preventDefault();
@@ -257,18 +238,9 @@
alertInstance.close(this); alertInstance.close(this);
}; };
}; }
_createClass$1(Alert, null, [{ }
key: "DATA_KEY",
// Getters
get: function get() {
return DATA_KEY;
}
}]);
return Alert;
}(BaseComponent);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Data Api implementation * Data Api implementation
@@ -284,21 +256,7 @@
* add .Alert to jQuery only if jQuery is present * add .Alert to jQuery only if jQuery is present
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, Alert);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = Alert.jQueryInterface;
$.fn[NAME].Constructor = Alert;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Alert.jQueryInterface;
};
}
});
return Alert; return Alert;
+1 -1
View File
File diff suppressed because one or more lines are too long
+62
View File
@@ -0,0 +1,62 @@
/*!
* Bootstrap base-component.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2021 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('./dom/data.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Base = factory(global.Data));
}(this, (function (Data) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const VERSION = '5.0.0-beta3';
class BaseComponent {
constructor(element) {
element = typeof element === 'string' ? document.querySelector(element) : element;
if (!element) {
return;
}
this._element = element;
Data__default['default'].set(this._element, this.constructor.DATA_KEY, this);
}
dispose() {
Data__default['default'].remove(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
static getInstance(element) {
return Data__default['default'].get(element, this.DATA_KEY);
}
static get VERSION() {
return VERSION;
}
}
return BaseComponent;
})));
//# sourceMappingURL=base-component.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.0-beta3'\n\nclass BaseComponent {\n constructor(element) {\n element = typeof element === 'string' ? document.querySelector(element) : element\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n this._element = null\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.get(element, this.DATA_KEY)\n }\n\n static get VERSION() {\n return VERSION\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","constructor","element","document","querySelector","_element","Data","set","DATA_KEY","dispose","remove","getInstance","get"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;;EAEA,MAAMA,OAAO,GAAG,aAAhB;;EAEA,MAAMC,aAAN,CAAoB;EAClBC,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnBA,IAAAA,OAAO,GAAG,OAAOA,OAAP,KAAmB,QAAnB,GAA8BC,QAAQ,CAACC,aAAT,CAAuBF,OAAvB,CAA9B,GAAgEA,OAA1E;;EAEA,QAAI,CAACA,OAAL,EAAc;EACZ;EACD;;EAED,SAAKG,QAAL,GAAgBH,OAAhB;EACAI,IAAAA,wBAAI,CAACC,GAAL,CAAS,KAAKF,QAAd,EAAwB,KAAKJ,WAAL,CAAiBO,QAAzC,EAAmD,IAAnD;EACD;;EAEDC,EAAAA,OAAO,GAAG;EACRH,IAAAA,wBAAI,CAACI,MAAL,CAAY,KAAKL,QAAjB,EAA2B,KAAKJ,WAAL,CAAiBO,QAA5C;EACA,SAAKH,QAAL,GAAgB,IAAhB;EACD;EAED;;;EAEkB,SAAXM,WAAW,CAACT,OAAD,EAAU;EAC1B,WAAOI,wBAAI,CAACM,GAAL,CAASV,OAAT,EAAkB,KAAKM,QAAvB,CAAP;EACD;;EAEiB,aAAPT,OAAO,GAAG;EACnB,WAAOA,OAAP;EACD;;EAzBiB;;;;;;;;"}
+57 -108
View File
@@ -1,29 +1,31 @@
/*! /*!
* Bootstrap button.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap button.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler'], factory) : typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.Data, global.EventHandler)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.Data, global.EventHandler, global.Base));
}(this, (function (Data, EventHandler) { 'use strict'; }(this, (function (Data, EventHandler, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data); var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -32,7 +34,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -40,95 +42,65 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
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); } } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var VERSION = '5.0.0-alpha3'; const NAME = 'button';
const DATA_KEY = 'bs.button';
var BaseComponent = /*#__PURE__*/function () { const EVENT_KEY = `.${DATA_KEY}`;
function BaseComponent(element) { const DATA_API_KEY = '.data-api';
if (!element) { const CLASS_NAME_ACTIVE = 'active';
return; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
} const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
this._element = element;
Data__default['default'].setData(element, this.constructor.DATA_KEY, this);
}
var _proto = BaseComponent.prototype;
_proto.dispose = function dispose() {
Data__default['default'].removeData(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
;
BaseComponent.getInstance = function getInstance(element) {
return Data__default['default'].getData(element, this.DATA_KEY);
};
_createClass(BaseComponent, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return BaseComponent;
}();
function _defineProperties$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'button';
var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var CLASS_NAME_ACTIVE = 'active';
var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var Button = /*#__PURE__*/function (_BaseComponent) { class Button extends BaseComponent__default['default'] {
_inheritsLoose(Button, _BaseComponent); // Getters
static get DATA_KEY() {
return DATA_KEY;
} // Public
function Button() {
return _BaseComponent.apply(this, arguments) || this;
}
var _proto = Button.prototype; toggle() {
// Public
_proto.toggle = function toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE)); this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
} // Static } // Static
;
Button.jQueryInterface = function jQueryInterface(config) {
static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
var data = Data__default['default'].getData(this, DATA_KEY); let data = Data__default['default'].get(this, DATA_KEY);
if (!data) { if (!data) {
data = new Button(this); data = new Button(this);
@@ -138,18 +110,9 @@
data[config](); data[config]();
} }
}); });
}; }
_createClass$1(Button, null, [{ }
key: "DATA_KEY",
// Getters
get: function get() {
return DATA_KEY;
}
}]);
return Button;
}(BaseComponent);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Data Api implementation * Data Api implementation
@@ -157,10 +120,10 @@
*/ */
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
event.preventDefault(); event.preventDefault();
var button = event.target.closest(SELECTOR_DATA_TOGGLE); const button = event.target.closest(SELECTOR_DATA_TOGGLE);
var data = Data__default['default'].getData(button, DATA_KEY); let data = Data__default['default'].get(button, DATA_KEY);
if (!data) { if (!data) {
data = new Button(button); data = new Button(button);
@@ -175,21 +138,7 @@
* add .Button to jQuery only if jQuery is present * add .Button to jQuery only if jQuery is present
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, Button);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = Button.jQueryInterface;
$.fn[NAME].Constructor = Button;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Button.jQueryInterface;
};
}
});
return Button; return Button;
+1 -1
View File
File diff suppressed because one or more lines are too long
+330 -389
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
+212 -264
View File
@@ -1,13 +1,13 @@
/*! /*!
* Bootstrap collapse.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap collapse.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine'], factory) : typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
}(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict'; }(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -15,37 +15,51 @@
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator); var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine); var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var MILLISECONDS_MULTIPLIER = 1000; const MILLISECONDS_MULTIPLIER = 1000;
var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
var toType = function toType(obj) { const toType = obj => {
if (obj === null || obj === undefined) { if (obj === null || obj === undefined) {
return "" + obj; return `${obj}`;
} }
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
}; };
var getSelector = function getSelector(element) { const getSelector = element => {
var selector = element.getAttribute('data-bs-target'); let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') { if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href'); let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
} }
return selector; return selector;
}; };
var getSelectorFromElement = function getSelectorFromElement(element) { const getSelectorFromElement = element => {
var selector = getSelector(element); const selector = getSelector(element);
if (selector) { if (selector) {
return document.querySelector(selector) ? selector : null; return document.querySelector(selector) ? selector : null;
@@ -54,23 +68,23 @@
return null; return null;
}; };
var getElementFromSelector = function getElementFromSelector(element) { const getElementFromSelector = element => {
var selector = getSelector(element); const selector = getSelector(element);
return selector ? document.querySelector(selector) : null; return selector ? document.querySelector(selector) : null;
}; };
var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) { const getTransitionDurationFromElement = element => {
if (!element) { if (!element) {
return 0; return 0;
} // Get transition-duration of the element } // Get transition-duration of the element
var _window$getComputedSt = window.getComputedStyle(element), let {
transitionDuration = _window$getComputedSt.transitionDuration, transitionDuration,
transitionDelay = _window$getComputedSt.transitionDelay; transitionDelay
} = window.getComputedStyle(element);
var floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDuration = Number.parseFloat(transitionDuration);
var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) { if (!floatTransitionDuration && !floatTransitionDelay) {
return 0; return 0;
@@ -82,18 +96,16 @@
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
}; };
var triggerTransitionEnd = function triggerTransitionEnd(element) { const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END)); element.dispatchEvent(new Event(TRANSITION_END));
}; };
var isElement = function isElement(obj) { const isElement = obj => (obj[0] || obj).nodeType;
return (obj[0] || obj).nodeType;
};
var emulateTransitionEnd = function emulateTransitionEnd(element, duration) { const emulateTransitionEnd = (element, duration) => {
var called = false; let called = false;
var durationPadding = 5; const durationPadding = 5;
var emulatedDuration = duration + durationPadding; const emulatedDuration = duration + durationPadding;
function listener() { function listener() {
called = true; called = true;
@@ -101,32 +113,31 @@
} }
element.addEventListener(TRANSITION_END, listener); element.addEventListener(TRANSITION_END, listener);
setTimeout(function () { setTimeout(() => {
if (!called) { if (!called) {
triggerTransitionEnd(element); triggerTransitionEnd(element);
} }
}, emulatedDuration); }, emulatedDuration);
}; };
var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) { const typeCheckConfig = (componentName, config, configTypes) => {
Object.keys(configTypes).forEach(function (property) { Object.keys(configTypes).forEach(property => {
var expectedTypes = configTypes[property]; const expectedTypes = configTypes[property];
var value = config[property]; const value = config[property];
var valueType = value && isElement(value) ? 'element' : toType(value); const valueType = value && isElement(value) ? 'element' : toType(value);
if (!new RegExp(expectedTypes).test(valueType)) { if (!new RegExp(expectedTypes).test(valueType)) {
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
} }
}); });
}; };
var reflow = function reflow(element) { const reflow = element => element.offsetHeight;
return element.offsetHeight;
};
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -135,7 +146,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -143,161 +154,128 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
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); } } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var VERSION = '5.0.0-alpha3'; const NAME = 'collapse';
const DATA_KEY = 'bs.collapse';
var BaseComponent = /*#__PURE__*/function () { const EVENT_KEY = `.${DATA_KEY}`;
function BaseComponent(element) { const DATA_API_KEY = '.data-api';
if (!element) { const Default = {
return;
}
this._element = element;
Data__default['default'].setData(element, this.constructor.DATA_KEY, this);
}
var _proto = BaseComponent.prototype;
_proto.dispose = function dispose() {
Data__default['default'].removeData(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
;
BaseComponent.getInstance = function getInstance(element) {
return Data__default['default'].getData(element, this.DATA_KEY);
};
_createClass(BaseComponent, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return BaseComponent;
}();
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$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'collapse';
var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var Default = {
toggle: true, toggle: true,
parent: '' parent: ''
}; };
var DefaultType = { const DefaultType = {
toggle: 'boolean', toggle: 'boolean',
parent: '(string|element)' parent: '(string|element)'
}; };
var EVENT_SHOW = "show" + EVENT_KEY; const EVENT_SHOW = `show${EVENT_KEY}`;
var EVENT_SHOWN = "shown" + EVENT_KEY; const EVENT_SHOWN = `shown${EVENT_KEY}`;
var EVENT_HIDE = "hide" + EVENT_KEY; const EVENT_HIDE = `hide${EVENT_KEY}`;
var EVENT_HIDDEN = "hidden" + EVENT_KEY; const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
var CLASS_NAME_SHOW = 'show'; const CLASS_NAME_SHOW = 'show';
var CLASS_NAME_COLLAPSE = 'collapse'; const CLASS_NAME_COLLAPSE = 'collapse';
var CLASS_NAME_COLLAPSING = 'collapsing'; const CLASS_NAME_COLLAPSING = 'collapsing';
var CLASS_NAME_COLLAPSED = 'collapsed'; const CLASS_NAME_COLLAPSED = 'collapsed';
var WIDTH = 'width'; const WIDTH = 'width';
var HEIGHT = 'height'; const HEIGHT = 'height';
var SELECTOR_ACTIVES = '.show, .collapsing'; const SELECTOR_ACTIVES = '.show, .collapsing';
var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]';
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var Collapse = /*#__PURE__*/function (_BaseComponent) { class Collapse extends BaseComponent__default['default'] {
_inheritsLoose(Collapse, _BaseComponent); constructor(element, config) {
super(element);
this._isTransitioning = false;
this._config = this._getConfig(config);
this._triggerArray = SelectorEngine__default['default'].find(`${SELECTOR_DATA_TOGGLE}[href="#${this._element.id}"],` + `${SELECTOR_DATA_TOGGLE}[data-bs-target="#${this._element.id}"]`);
const toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
function Collapse(element, config) { for (let i = 0, len = toggleList.length; i < len; i++) {
var _this; const elem = toggleList[i];
const selector = getSelectorFromElement(elem);
_this = _BaseComponent.call(this, element) || this; const filterElement = SelectorEngine__default['default'].find(selector).filter(foundElem => foundElem === this._element);
_this._isTransitioning = false;
_this._config = _this._getConfig(config);
_this._triggerArray = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE + "[href=\"#" + element.id + "\"]," + (SELECTOR_DATA_TOGGLE + "[data-bs-target=\"#" + element.id + "\"]"));
var toggleList = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
for (var i = 0, len = toggleList.length; i < len; i++) {
var elem = toggleList[i];
var selector = getSelectorFromElement(elem);
var filterElement = SelectorEngine__default['default'].find(selector).filter(function (foundElem) {
return foundElem === element;
});
if (selector !== null && filterElement.length) { if (selector !== null && filterElement.length) {
_this._selector = selector; this._selector = selector;
_this._triggerArray.push(elem); this._triggerArray.push(elem);
} }
} }
_this._parent = _this._config.parent ? _this._getParent() : null; this._parent = this._config.parent ? this._getParent() : null;
if (!_this._config.parent) { if (!this._config.parent) {
_this._addAriaAndCollapsedClass(_this._element, _this._triggerArray); this._addAriaAndCollapsedClass(this._element, this._triggerArray);
} }
if (_this._config.toggle) { if (this._config.toggle) {
_this.toggle(); this.toggle();
} }
return _this;
} // Getters } // Getters
var _proto = Collapse.prototype; static get Default() {
return Default;
}
// Public static get DATA_KEY() {
_proto.toggle = function toggle() { return DATA_KEY;
} // Public
toggle() {
if (this._element.classList.contains(CLASS_NAME_SHOW)) { if (this._element.classList.contains(CLASS_NAME_SHOW)) {
this.hide(); this.hide();
} else { } else {
this.show(); this.show();
} }
}; }
_proto.show = function show() {
var _this2 = this;
show() {
if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) { if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) {
return; return;
} }
var actives; let actives;
var activesData; let activesData;
if (this._parent) { if (this._parent) {
actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(function (elem) { actives = SelectorEngine__default['default'].find(SELECTOR_ACTIVES, this._parent).filter(elem => {
if (typeof _this2._config.parent === 'string') { if (typeof this._config.parent === 'string') {
return elem.getAttribute('data-bs-parent') === _this2._config.parent; return elem.getAttribute('data-bs-parent') === this._config.parent;
} }
return elem.classList.contains(CLASS_NAME_COLLAPSE); return elem.classList.contains(CLASS_NAME_COLLAPSE);
@@ -308,38 +286,36 @@
} }
} }
var container = SelectorEngine__default['default'].findOne(this._selector); const container = SelectorEngine__default['default'].findOne(this._selector);
if (actives) { if (actives) {
var tempActiveData = actives.find(function (elem) { const tempActiveData = actives.find(elem => container !== elem);
return container !== elem; activesData = tempActiveData ? Data__default['default'].get(tempActiveData, DATA_KEY) : null;
});
activesData = tempActiveData ? Data__default['default'].getData(tempActiveData, DATA_KEY) : null;
if (activesData && activesData._isTransitioning) { if (activesData && activesData._isTransitioning) {
return; return;
} }
} }
var startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW); const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW);
if (startEvent.defaultPrevented) { if (startEvent.defaultPrevented) {
return; return;
} }
if (actives) { if (actives) {
actives.forEach(function (elemActive) { actives.forEach(elemActive => {
if (container !== elemActive) { if (container !== elemActive) {
Collapse.collapseInterface(elemActive, 'hide'); Collapse.collapseInterface(elemActive, 'hide');
} }
if (!activesData) { if (!activesData) {
Data__default['default'].setData(elemActive, DATA_KEY, null); Data__default['default'].set(elemActive, DATA_KEY, null);
} }
}); });
} }
var dimension = this._getDimension(); const dimension = this._getDimension();
this._element.classList.remove(CLASS_NAME_COLLAPSE); this._element.classList.remove(CLASS_NAME_COLLAPSE);
@@ -348,7 +324,7 @@
this._element.style[dimension] = 0; this._element.style[dimension] = 0;
if (this._triggerArray.length) { if (this._triggerArray.length) {
this._triggerArray.forEach(function (element) { this._triggerArray.forEach(element => {
element.classList.remove(CLASS_NAME_COLLAPSED); element.classList.remove(CLASS_NAME_COLLAPSED);
element.setAttribute('aria-expanded', true); element.setAttribute('aria-expanded', true);
}); });
@@ -356,54 +332,50 @@
this.setTransitioning(true); this.setTransitioning(true);
var complete = function complete() { const complete = () => {
_this2._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSING);
_this2._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
_this2._element.style[dimension] = ''; this._element.style[dimension] = '';
this.setTransitioning(false);
_this2.setTransitioning(false); EventHandler__default['default'].trigger(this._element, EVENT_SHOWN);
EventHandler__default['default'].trigger(_this2._element, EVENT_SHOWN);
}; };
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension; const scrollSize = `scroll${capitalizedDimension}`;
var transitionDuration = getTransitionDurationFromElement(this._element); const transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler__default['default'].one(this._element, TRANSITION_END, complete); EventHandler__default['default'].one(this._element, 'transitionend', complete);
emulateTransitionEnd(this._element, transitionDuration); emulateTransitionEnd(this._element, transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px"; this._element.style[dimension] = `${this._element[scrollSize]}px`;
}; }
_proto.hide = function hide() {
var _this3 = this;
hide() {
if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) { if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) {
return; return;
} }
var startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE); const startEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
if (startEvent.defaultPrevented) { if (startEvent.defaultPrevented) {
return; return;
} }
var dimension = this._getDimension(); const dimension = this._getDimension();
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
reflow(this._element); reflow(this._element);
this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSING);
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
var triggerArrayLength = this._triggerArray.length; const triggerArrayLength = this._triggerArray.length;
if (triggerArrayLength > 0) { if (triggerArrayLength > 0) {
for (var i = 0; i < triggerArrayLength; i++) { for (let i = 0; i < triggerArrayLength; i++) {
var trigger = this._triggerArray[i]; const trigger = this._triggerArray[i];
var elem = getElementFromSelector(trigger); const elem = getElementFromSelector(trigger);
if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) { if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) {
trigger.classList.add(CLASS_NAME_COLLAPSED); trigger.classList.add(CLASS_NAME_COLLAPSED);
@@ -414,52 +386,53 @@
this.setTransitioning(true); this.setTransitioning(true);
var complete = function complete() { const complete = () => {
_this3.setTransitioning(false); this.setTransitioning(false);
_this3._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSING);
_this3._element.classList.add(CLASS_NAME_COLLAPSE); this._element.classList.add(CLASS_NAME_COLLAPSE);
EventHandler__default['default'].trigger(_this3._element, EVENT_HIDDEN); EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
var transitionDuration = getTransitionDurationFromElement(this._element); const transitionDuration = getTransitionDurationFromElement(this._element);
EventHandler__default['default'].one(this._element, TRANSITION_END, complete); EventHandler__default['default'].one(this._element, 'transitionend', complete);
emulateTransitionEnd(this._element, transitionDuration); emulateTransitionEnd(this._element, transitionDuration);
}; }
_proto.setTransitioning = function setTransitioning(isTransitioning) { setTransitioning(isTransitioning) {
this._isTransitioning = isTransitioning; this._isTransitioning = isTransitioning;
}; }
_proto.dispose = function dispose() {
_BaseComponent.prototype.dispose.call(this);
dispose() {
super.dispose();
this._config = null; this._config = null;
this._parent = null; this._parent = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
} // Private } // Private
;
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); _getConfig(config) {
config = { ...Default,
...config
};
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
typeCheckConfig(NAME, config, DefaultType); typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; }
_proto._getDimension = function _getDimension() { _getDimension() {
return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT; return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;
}; }
_proto._getParent = function _getParent() { _getParent() {
var _this4 = this; let {
parent
var parent = this._config.parent; } = this._config;
if (isElement(parent)) { if (isElement(parent)) {
// it's a jQuery object // it's a jQuery object
@@ -470,22 +443,22 @@
parent = SelectorEngine__default['default'].findOne(parent); parent = SelectorEngine__default['default'].findOne(parent);
} }
var selector = SELECTOR_DATA_TOGGLE + "[data-bs-parent=\"" + parent + "\"]"; const selector = `${SELECTOR_DATA_TOGGLE}[data-bs-parent="${parent}"]`;
SelectorEngine__default['default'].find(selector, parent).forEach(function (element) { SelectorEngine__default['default'].find(selector, parent).forEach(element => {
var selected = getElementFromSelector(element); const selected = getElementFromSelector(element);
_this4._addAriaAndCollapsedClass(selected, [element]); this._addAriaAndCollapsedClass(selected, [element]);
}); });
return parent; return parent;
}; }
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { _addAriaAndCollapsedClass(element, triggerArray) {
if (!element || !triggerArray.length) { if (!element || !triggerArray.length) {
return; return;
} }
var isOpen = element.classList.contains(CLASS_NAME_SHOW); const isOpen = element.classList.contains(CLASS_NAME_SHOW);
triggerArray.forEach(function (elem) { triggerArray.forEach(elem => {
if (isOpen) { if (isOpen) {
elem.classList.remove(CLASS_NAME_COLLAPSED); elem.classList.remove(CLASS_NAME_COLLAPSED);
} else { } else {
@@ -495,12 +468,14 @@
elem.setAttribute('aria-expanded', isOpen); elem.setAttribute('aria-expanded', isOpen);
}); });
} // Static } // Static
;
Collapse.collapseInterface = function collapseInterface(element, config) {
var data = Data__default['default'].getData(element, DATA_KEY);
var _config = _extends({}, Default, Manipulator__default['default'].getDataAttributes(element), typeof config === 'object' && config ? config : {}); static collapseInterface(element, config) {
let data = Data__default['default'].get(element, DATA_KEY);
const _config = { ...Default,
...Manipulator__default['default'].getDataAttributes(element),
...(typeof config === 'object' && config ? config : {})
};
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@@ -512,33 +487,20 @@
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\""); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}; }
Collapse.jQueryInterface = function jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
Collapse.collapseInterface(this, config); Collapse.collapseInterface(this, config);
}); });
}; }
_createClass$1(Collapse, null, [{ }
key: "Default",
get: function get() {
return Default;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY;
}
}]);
return Collapse;
}(BaseComponent);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Data Api implementation * Data Api implementation
@@ -548,16 +510,16 @@
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A') { if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault(); event.preventDefault();
} }
var triggerData = Manipulator__default['default'].getDataAttributes(this); const triggerData = Manipulator__default['default'].getDataAttributes(this);
var selector = getSelectorFromElement(this); const selector = getSelectorFromElement(this);
var selectorElements = SelectorEngine__default['default'].find(selector); const selectorElements = SelectorEngine__default['default'].find(selector);
selectorElements.forEach(function (element) { selectorElements.forEach(element => {
var data = Data__default['default'].getData(element, DATA_KEY); const data = Data__default['default'].get(element, DATA_KEY);
var config; let config;
if (data) { if (data) {
// update parent attribute // update parent attribute
@@ -581,21 +543,7 @@
* add .Collapse to jQuery only if jQuery is present * add .Collapse to jQuery only if jQuery is present
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, Collapse);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = Collapse.jQueryInterface;
$.fn[NAME].Constructor = Collapse;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Collapse.jQueryInterface;
};
}
});
return Collapse; return Collapse;
+1 -1
View File
File diff suppressed because one or more lines are too long
+39 -52
View File
@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap data.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap data.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -11,7 +11,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): dom/data.js * Bootstrap (v5.0.0-beta3): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@@ -21,62 +21,49 @@
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var mapData = function () { const elementMap = new Map();
var storeData = {}; var data = {
var id = 1; set(element, key, instance) {
return { if (!elementMap.has(element)) {
set: function set(element, key, data) { elementMap.set(element, new Map());
if (typeof element.bsKey === 'undefined') {
element.bsKey = {
key: key,
id: id
};
id++;
}
storeData[element.bsKey.id] = data;
},
get: function get(element, key) {
if (!element || typeof element.bsKey === 'undefined') {
return null;
}
var keyProperties = element.bsKey;
if (keyProperties.key === key) {
return storeData[keyProperties.id];
}
return null;
},
delete: function _delete(element, key) {
if (typeof element.bsKey === 'undefined') {
return;
}
var keyProperties = element.bsKey;
if (keyProperties.key === key) {
delete storeData[keyProperties.id];
delete element.bsKey;
}
} }
};
}();
var Data = { const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
setData: function setData(instance, key, data) { // can be removed later when multiple key/instances are fine to be used
mapData.set(instance, key, data);
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return;
}
instanceMap.set(key, instance);
}, },
getData: function getData(instance, key) {
return mapData.get(instance, key); get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
return null;
}, },
removeData: function removeData(instance, key) {
mapData.delete(instance, key); remove(element, key) {
if (!elementMap.has(element)) {
return;
}
const instanceMap = elementMap.get(element);
instanceMap.delete(key); // free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element);
}
} }
}; };
return Data; return data;
}))); })));
//# sourceMappingURL=data.js.map //# sourceMappingURL=data.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-alpha3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst mapData = (() => {\n const storeData = {}\n let id = 1\n return {\n set(element, key, data) {\n if (typeof element.bsKey === 'undefined') {\n element.bsKey = {\n key,\n id\n }\n id++\n }\n\n storeData[element.bsKey.id] = data\n },\n get(element, key) {\n if (!element || typeof element.bsKey === 'undefined') {\n return null\n }\n\n const keyProperties = element.bsKey\n if (keyProperties.key === key) {\n return storeData[keyProperties.id]\n }\n\n return null\n },\n delete(element, key) {\n if (typeof element.bsKey === 'undefined') {\n return\n }\n\n const keyProperties = element.bsKey\n if (keyProperties.key === key) {\n delete storeData[keyProperties.id]\n delete element.bsKey\n }\n }\n }\n})()\n\nconst Data = {\n setData(instance, key, data) {\n mapData.set(instance, key, data)\n },\n getData(instance, key) {\n return mapData.get(instance, key)\n },\n removeData(instance, key) {\n mapData.delete(instance, key)\n }\n}\n\nexport default Data\n"],"names":["mapData","storeData","id","set","element","key","data","bsKey","get","keyProperties","delete","Data","setData","instance","getData","removeData"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EAEA,IAAMA,OAAO,GAAI,YAAM;EACrB,MAAMC,SAAS,GAAG,EAAlB;EACA,MAAIC,EAAE,GAAG,CAAT;EACA,SAAO;EACLC,IAAAA,GADK,eACDC,OADC,EACQC,GADR,EACaC,IADb,EACmB;EACtB,UAAI,OAAOF,OAAO,CAACG,KAAf,KAAyB,WAA7B,EAA0C;EACxCH,QAAAA,OAAO,CAACG,KAAR,GAAgB;EACdF,UAAAA,GAAG,EAAHA,GADc;EAEdH,UAAAA,EAAE,EAAFA;EAFc,SAAhB;EAIAA,QAAAA,EAAE;EACH;;EAEDD,MAAAA,SAAS,CAACG,OAAO,CAACG,KAAR,CAAcL,EAAf,CAAT,GAA8BI,IAA9B;EACD,KAXI;EAYLE,IAAAA,GAZK,eAYDJ,OAZC,EAYQC,GAZR,EAYa;EAChB,UAAI,CAACD,OAAD,IAAY,OAAOA,OAAO,CAACG,KAAf,KAAyB,WAAzC,EAAsD;EACpD,eAAO,IAAP;EACD;;EAED,UAAME,aAAa,GAAGL,OAAO,CAACG,KAA9B;;EACA,UAAIE,aAAa,CAACJ,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACQ,aAAa,CAACP,EAAf,CAAhB;EACD;;EAED,aAAO,IAAP;EACD,KAvBI;EAwBLQ,IAAAA,MAxBK,mBAwBEN,OAxBF,EAwBWC,GAxBX,EAwBgB;EACnB,UAAI,OAAOD,OAAO,CAACG,KAAf,KAAyB,WAA7B,EAA0C;EACxC;EACD;;EAED,UAAME,aAAa,GAAGL,OAAO,CAACG,KAA9B;;EACA,UAAIE,aAAa,CAACJ,GAAd,KAAsBA,GAA1B,EAA+B;EAC7B,eAAOJ,SAAS,CAACQ,aAAa,CAACP,EAAf,CAAhB;EACA,eAAOE,OAAO,CAACG,KAAf;EACD;EACF;EAlCI,GAAP;EAoCD,CAvCe,EAAhB;;MAyCMI,IAAI,GAAG;EACXC,EAAAA,OADW,mBACHC,QADG,EACOR,GADP,EACYC,IADZ,EACkB;EAC3BN,IAAAA,OAAO,CAACG,GAAR,CAAYU,QAAZ,EAAsBR,GAAtB,EAA2BC,IAA3B;EACD,GAHU;EAIXQ,EAAAA,OAJW,mBAIHD,QAJG,EAIOR,GAJP,EAIY;EACrB,WAAOL,OAAO,CAACQ,GAAR,CAAYK,QAAZ,EAAsBR,GAAtB,CAAP;EACD,GANU;EAOXU,EAAAA,UAPW,sBAOAF,QAPA,EAOUR,GAPV,EAOe;EACxBL,IAAAA,OAAO,CAACU,MAAR,CAAeG,QAAf,EAAyBR,GAAzB;EACD;EATU;;;;;;;;"} {"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AAEA,aAAe;EACbC,EAAAA,GAAG,CAACC,OAAD,EAAUC,GAAV,EAAeC,QAAf,EAAyB;EAC1B,QAAI,CAACL,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5BH,MAAAA,UAAU,CAACE,GAAX,CAAeC,OAAf,EAAwB,IAAIF,GAAJ,EAAxB;EACD;;EAED,UAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAL0B;EAQ1B;;EACA,QAAI,CAACI,WAAW,CAACD,GAAZ,CAAgBF,GAAhB,CAAD,IAAyBG,WAAW,CAACE,IAAZ,KAAqB,CAAlD,EAAqD;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAR,CAAe,+EAA8EC,KAAK,CAACC,IAAN,CAAWN,WAAW,CAACO,IAAZ,EAAX,EAA+B,CAA/B,CAAkC,GAA/H;EACA;EACD;;EAEDP,IAAAA,WAAW,CAACL,GAAZ,CAAgBE,GAAhB,EAAqBC,QAArB;EACD,GAjBY;;EAmBbG,EAAAA,GAAG,CAACL,OAAD,EAAUC,GAAV,EAAe;EAChB,QAAIJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAJ,EAA6B;EAC3B,aAAOH,UAAU,CAACQ,GAAX,CAAeL,OAAf,EAAwBK,GAAxB,CAA4BJ,GAA5B,KAAoC,IAA3C;EACD;;EAED,WAAO,IAAP;EACD,GAzBY;;EA2BbW,EAAAA,MAAM,CAACZ,OAAD,EAAUC,GAAV,EAAe;EACnB,QAAI,CAACJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5B;EACD;;EAED,UAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB;EAEAI,IAAAA,WAAW,CAACS,MAAZ,CAAmBZ,GAAnB,EAPmB;;EAUnB,QAAIG,WAAW,CAACE,IAAZ,KAAqB,CAAzB,EAA4B;EAC1BT,MAAAA,UAAU,CAACgB,MAAX,CAAkBb,OAAlB;EACD;EACF;;EAxCY,CAAf;;;;;;;;"}
+73 -78
View File
@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap event-handler.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap event-handler.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -11,14 +11,15 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -27,11 +28,9 @@
return null; return null;
}; };
var isRTL = document.documentElement.dir === 'rtl';
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): dom/event-handler.js * Bootstrap (v5.0.0-beta3): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@@ -41,17 +40,17 @@
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var namespaceRegex = /[^.]*(?=\..*)\.|.*/; const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
var stripNameRegex = /\..*/; const stripNameRegex = /\..*/;
var stripUidRegex = /::\d+$/; const stripUidRegex = /::\d+$/;
var eventRegistry = {}; // Events storage const eventRegistry = {}; // Events storage
var uidEvent = 1; let uidEvent = 1;
var customEvents = { const customEvents = {
mouseenter: 'mouseover', mouseenter: 'mouseover',
mouseleave: 'mouseout' mouseleave: 'mouseout'
}; };
var nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Private methods * Private methods
@@ -59,11 +58,11 @@
*/ */
function getUidEvent(element, uid) { function getUidEvent(element, uid) {
return uid && uid + "::" + uidEvent++ || element.uidEvent || uidEvent++; return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
} }
function getEvent(element) { function getEvent(element) {
var uid = getUidEvent(element); const uid = getUidEvent(element);
element.uidEvent = uid; element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {}; eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid]; return eventRegistry[uid];
@@ -83,14 +82,17 @@
function bootstrapDelegationHandler(element, selector, fn) { function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) { return function handler(event) {
var domElements = element.querySelectorAll(selector); const domElements = element.querySelectorAll(selector);
for (var target = event.target; target && target !== this; target = target.parentNode) { for (let {
for (var i = domElements.length; i--;) { target
} = event; target && target !== this; target = target.parentNode) {
for (let i = domElements.length; i--;) {
if (domElements[i] === target) { if (domElements[i] === target) {
event.delegateTarget = target; event.delegateTarget = target;
if (handler.oneOff) { if (handler.oneOff) {
// eslint-disable-next-line unicorn/consistent-destructuring
EventHandler.off(element, event.type, fn); EventHandler.off(element, event.type, fn);
} }
@@ -104,15 +106,11 @@
}; };
} }
function findHandler(events, handler, delegationSelector) { function findHandler(events, handler, delegationSelector = null) {
if (delegationSelector === void 0) { const uidEventList = Object.keys(events);
delegationSelector = null;
}
var uidEventList = Object.keys(events); for (let i = 0, len = uidEventList.length; i < len; i++) {
const event = events[uidEventList[i]];
for (var i = 0, len = uidEventList.length; i < len; i++) {
var event = events[uidEventList[i]];
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
return event; return event;
@@ -123,17 +121,17 @@
} }
function normalizeParams(originalTypeEvent, handler, delegationFn) { function normalizeParams(originalTypeEvent, handler, delegationFn) {
var delegation = typeof handler === 'string'; const delegation = typeof handler === 'string';
var originalHandler = delegation ? delegationFn : handler; // allow to get the native events from namespaced events ('click.bs.button' --> 'click') const originalHandler = delegation ? delegationFn : handler; // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
var typeEvent = originalTypeEvent.replace(stripNameRegex, ''); let typeEvent = originalTypeEvent.replace(stripNameRegex, '');
var custom = customEvents[typeEvent]; const custom = customEvents[typeEvent];
if (custom) { if (custom) {
typeEvent = custom; typeEvent = custom;
} }
var isNative = nativeEvents.has(typeEvent); const isNative = nativeEvents.has(typeEvent);
if (!isNative) { if (!isNative) {
typeEvent = originalTypeEvent; typeEvent = originalTypeEvent;
@@ -152,22 +150,18 @@
delegationFn = null; delegationFn = null;
} }
var _normalizeParams = normalizeParams(originalTypeEvent, handler, delegationFn), const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
delegation = _normalizeParams[0], const events = getEvent(element);
originalHandler = _normalizeParams[1], const handlers = events[typeEvent] || (events[typeEvent] = {});
typeEvent = _normalizeParams[2]; const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
var events = getEvent(element);
var handlers = events[typeEvent] || (events[typeEvent] = {});
var previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
if (previousFn) { if (previousFn) {
previousFn.oneOff = previousFn.oneOff && oneOff; previousFn.oneOff = previousFn.oneOff && oneOff;
return; return;
} }
var uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')); const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
var fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler); const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
fn.delegationSelector = delegation ? handler : null; fn.delegationSelector = delegation ? handler : null;
fn.originalHandler = originalHandler; fn.originalHandler = originalHandler;
fn.oneOff = oneOff; fn.oneOff = oneOff;
@@ -177,7 +171,7 @@
} }
function removeHandler(element, events, typeEvent, handler, delegationSelector) { function removeHandler(element, events, typeEvent, handler, delegationSelector) {
var fn = findHandler(events[typeEvent], handler, delegationSelector); const fn = findHandler(events[typeEvent], handler, delegationSelector);
if (!fn) { if (!fn) {
return; return;
@@ -188,35 +182,33 @@
} }
function removeNamespacedHandlers(element, events, typeEvent, namespace) { function removeNamespacedHandlers(element, events, typeEvent, namespace) {
var storeElementEvent = events[typeEvent] || {}; const storeElementEvent = events[typeEvent] || {};
Object.keys(storeElementEvent).forEach(function (handlerKey) { Object.keys(storeElementEvent).forEach(handlerKey => {
if (handlerKey.includes(namespace)) { if (handlerKey.includes(namespace)) {
var event = storeElementEvent[handlerKey]; const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
} }
}); });
} }
var EventHandler = { const EventHandler = {
on: function on(element, event, handler, delegationFn) { on(element, event, handler, delegationFn) {
addHandler(element, event, handler, delegationFn, false); addHandler(element, event, handler, delegationFn, false);
}, },
one: function one(element, event, handler, delegationFn) {
one(element, event, handler, delegationFn) {
addHandler(element, event, handler, delegationFn, true); addHandler(element, event, handler, delegationFn, true);
}, },
off: function off(element, originalTypeEvent, handler, delegationFn) {
off(element, originalTypeEvent, handler, delegationFn) {
if (typeof originalTypeEvent !== 'string' || !element) { if (typeof originalTypeEvent !== 'string' || !element) {
return; return;
} }
var _normalizeParams2 = normalizeParams(originalTypeEvent, handler, delegationFn), const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
delegation = _normalizeParams2[0], const inNamespace = typeEvent !== originalTypeEvent;
originalHandler = _normalizeParams2[1], const events = getEvent(element);
typeEvent = _normalizeParams2[2]; const isNamespace = originalTypeEvent.startsWith('.');
var inNamespace = typeEvent !== originalTypeEvent;
var events = getEvent(element);
var isNamespace = originalTypeEvent.startsWith('.');
if (typeof originalHandler !== 'undefined') { if (typeof originalHandler !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY. // Simplest case: handler is passed, remove that listener ONLY.
@@ -229,35 +221,36 @@
} }
if (isNamespace) { if (isNamespace) {
Object.keys(events).forEach(function (elementEvent) { Object.keys(events).forEach(elementEvent => {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
}); });
} }
var storeElementEvent = events[typeEvent] || {}; const storeElementEvent = events[typeEvent] || {};
Object.keys(storeElementEvent).forEach(function (keyHandlers) { Object.keys(storeElementEvent).forEach(keyHandlers => {
var handlerKey = keyHandlers.replace(stripUidRegex, ''); const handlerKey = keyHandlers.replace(stripUidRegex, '');
if (!inNamespace || originalTypeEvent.includes(handlerKey)) { if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
var event = storeElementEvent[keyHandlers]; const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
} }
}); });
}, },
trigger: function trigger(element, event, args) {
trigger(element, event, args) {
if (typeof event !== 'string' || !element) { if (typeof event !== 'string' || !element) {
return null; return null;
} }
var $ = getjQuery(); const $ = getjQuery();
var typeEvent = event.replace(stripNameRegex, ''); const typeEvent = event.replace(stripNameRegex, '');
var inNamespace = event !== typeEvent; const inNamespace = event !== typeEvent;
var isNative = nativeEvents.has(typeEvent); const isNative = nativeEvents.has(typeEvent);
var jQueryEvent; let jQueryEvent;
var bubbles = true; let bubbles = true;
var nativeDispatch = true; let nativeDispatch = true;
var defaultPrevented = false; let defaultPrevented = false;
var evt = null; let evt = null;
if (inNamespace && $) { if (inNamespace && $) {
jQueryEvent = $.Event(event, args); jQueryEvent = $.Event(event, args);
@@ -272,18 +265,19 @@
evt.initEvent(typeEvent, bubbles, true); evt.initEvent(typeEvent, bubbles, true);
} else { } else {
evt = new CustomEvent(event, { evt = new CustomEvent(event, {
bubbles: bubbles, bubbles,
cancelable: true cancelable: true
}); });
} // merge custom information in our event } // merge custom information in our event
if (typeof args !== 'undefined') { if (typeof args !== 'undefined') {
Object.keys(args).forEach(function (key) { Object.keys(args).forEach(key => {
Object.defineProperty(evt, key, { Object.defineProperty(evt, key, {
get: function get() { get() {
return args[key]; return args[key];
} }
}); });
}); });
} }
@@ -302,6 +296,7 @@
return evt; return evt;
} }
}; };
return EventHandler; return EventHandler;
+1 -1
View File
File diff suppressed because one or more lines are too long
+24 -22
View File
@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap manipulator.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap manipulator.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -11,7 +11,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): dom/manipulator.js * Bootstrap (v5.0.0-beta3): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@@ -36,49 +36,51 @@
} }
function normalizeDataKey(key) { function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, function (chr) { return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
return "-" + chr.toLowerCase();
});
} }
var Manipulator = { const Manipulator = {
setDataAttribute: function setDataAttribute(element, key, value) { setDataAttribute(element, key, value) {
element.setAttribute("data-bs-" + normalizeDataKey(key), value); element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
}, },
removeDataAttribute: function removeDataAttribute(element, key) {
element.removeAttribute("data-bs-" + normalizeDataKey(key)); removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
}, },
getDataAttributes: function getDataAttributes(element) {
getDataAttributes(element) {
if (!element) { if (!element) {
return {}; return {};
} }
var attributes = {}; const attributes = {};
Object.keys(element.dataset).filter(function (key) { Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
return key.startsWith('bs'); let pureKey = key.replace(/^bs/, '');
}).forEach(function (key) {
var pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]); attributes[pureKey] = normalizeData(element.dataset[key]);
}); });
return attributes; return attributes;
}, },
getDataAttribute: function getDataAttribute(element, key) {
return normalizeData(element.getAttribute("data-bs-" + normalizeDataKey(key))); getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
}, },
offset: function offset(element) {
var rect = element.getBoundingClientRect(); offset(element) {
const rect = element.getBoundingClientRect();
return { return {
top: rect.top + document.body.scrollTop, top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft left: rect.left + document.body.scrollLeft
}; };
}, },
position: function position(element) {
position(element) {
return { return {
top: element.offsetTop, top: element.offsetTop,
left: element.offsetLeft left: element.offsetLeft
}; };
} }
}; };
return Manipulator; return Manipulator;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-alpha3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","val","Number","toString","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","value","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","Object","keys","dataset","filter","startsWith","forEach","pureKey","charAt","slice","length","getDataAttribute","getAttribute","offset","rect","getBoundingClientRect","top","document","body","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAEA,SAASA,aAAT,CAAuBC,GAAvB,EAA4B;EAC1B,MAAIA,GAAG,KAAK,MAAZ,EAAoB;EAClB,WAAO,IAAP;EACD;;EAED,MAAIA,GAAG,KAAK,OAAZ,EAAqB;EACnB,WAAO,KAAP;EACD;;EAED,MAAIA,GAAG,KAAKC,MAAM,CAACD,GAAD,CAAN,CAAYE,QAAZ,EAAZ,EAAoC;EAClC,WAAOD,MAAM,CAACD,GAAD,CAAb;EACD;;EAED,MAAIA,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,MAA1B,EAAkC;EAChC,WAAO,IAAP;EACD;;EAED,SAAOA,GAAP;EACD;;EAED,SAASG,gBAAT,CAA0BC,GAA1B,EAA+B;EAC7B,SAAOA,GAAG,CAACC,OAAJ,CAAY,QAAZ,EAAsB,UAAAC,GAAG;EAAA,iBAAQA,GAAG,CAACC,WAAJ,EAAR;EAAA,GAAzB,CAAP;EACD;;MAEKC,WAAW,GAAG;EAClBC,EAAAA,gBADkB,4BACDC,OADC,EACQN,GADR,EACaO,KADb,EACoB;EACpCD,IAAAA,OAAO,CAACE,YAAR,cAAgCT,gBAAgB,CAACC,GAAD,CAAhD,EAAyDO,KAAzD;EACD,GAHiB;EAKlBE,EAAAA,mBALkB,+BAKEH,OALF,EAKWN,GALX,EAKgB;EAChCM,IAAAA,OAAO,CAACI,eAAR,cAAmCX,gBAAgB,CAACC,GAAD,CAAnD;EACD,GAPiB;EASlBW,EAAAA,iBATkB,6BASAL,OATA,EASS;EACzB,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,EAAP;EACD;;EAED,QAAMM,UAAU,GAAG,EAAnB;EAEAC,IAAAA,MAAM,CAACC,IAAP,CAAYR,OAAO,CAACS,OAApB,EACGC,MADH,CACU,UAAAhB,GAAG;EAAA,aAAIA,GAAG,CAACiB,UAAJ,CAAe,IAAf,CAAJ;EAAA,KADb,EAEGC,OAFH,CAEW,UAAAlB,GAAG,EAAI;EACd,UAAImB,OAAO,GAAGnB,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAd;EACAkB,MAAAA,OAAO,GAAGA,OAAO,CAACC,MAAR,CAAe,CAAf,EAAkBjB,WAAlB,KAAkCgB,OAAO,CAACE,KAAR,CAAc,CAAd,EAAiBF,OAAO,CAACG,MAAzB,CAA5C;EACAV,MAAAA,UAAU,CAACO,OAAD,CAAV,GAAsBxB,aAAa,CAACW,OAAO,CAACS,OAAR,CAAgBf,GAAhB,CAAD,CAAnC;EACD,KANH;EAQA,WAAOY,UAAP;EACD,GAzBiB;EA2BlBW,EAAAA,gBA3BkB,4BA2BDjB,OA3BC,EA2BQN,GA3BR,EA2Ba;EAC7B,WAAOL,aAAa,CAACW,OAAO,CAACkB,YAAR,cAAgCzB,gBAAgB,CAACC,GAAD,CAAhD,CAAD,CAApB;EACD,GA7BiB;EA+BlByB,EAAAA,MA/BkB,kBA+BXnB,OA/BW,EA+BF;EACd,QAAMoB,IAAI,GAAGpB,OAAO,CAACqB,qBAAR,EAAb;EAEA,WAAO;EACLC,MAAAA,GAAG,EAAEF,IAAI,CAACE,GAAL,GAAWC,QAAQ,CAACC,IAAT,CAAcC,SADzB;EAELC,MAAAA,IAAI,EAAEN,IAAI,CAACM,IAAL,GAAYH,QAAQ,CAACC,IAAT,CAAcG;EAF3B,KAAP;EAID,GAtCiB;EAwClBC,EAAAA,QAxCkB,oBAwCT5B,OAxCS,EAwCA;EAChB,WAAO;EACLsB,MAAAA,GAAG,EAAEtB,OAAO,CAAC6B,SADR;EAELH,MAAAA,IAAI,EAAE1B,OAAO,CAAC8B;EAFT,KAAP;EAID;EA7CiB;;;;;;;;"} {"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","val","Number","toString","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","value","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","Object","keys","dataset","filter","startsWith","forEach","pureKey","charAt","slice","length","getDataAttribute","getAttribute","offset","rect","getBoundingClientRect","top","document","body","scrollTop","left","scrollLeft","position","offsetTop","offsetLeft"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAEA,SAASA,aAAT,CAAuBC,GAAvB,EAA4B;EAC1B,MAAIA,GAAG,KAAK,MAAZ,EAAoB;EAClB,WAAO,IAAP;EACD;;EAED,MAAIA,GAAG,KAAK,OAAZ,EAAqB;EACnB,WAAO,KAAP;EACD;;EAED,MAAIA,GAAG,KAAKC,MAAM,CAACD,GAAD,CAAN,CAAYE,QAAZ,EAAZ,EAAoC;EAClC,WAAOD,MAAM,CAACD,GAAD,CAAb;EACD;;EAED,MAAIA,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,MAA1B,EAAkC;EAChC,WAAO,IAAP;EACD;;EAED,SAAOA,GAAP;EACD;;EAED,SAASG,gBAAT,CAA0BC,GAA1B,EAA+B;EAC7B,SAAOA,GAAG,CAACC,OAAJ,CAAY,QAAZ,EAAsBC,GAAG,IAAK,IAAGA,GAAG,CAACC,WAAJ,EAAkB,EAAnD,CAAP;EACD;;QAEKC,WAAW,GAAG;EAClBC,EAAAA,gBAAgB,CAACC,OAAD,EAAUN,GAAV,EAAeO,KAAf,EAAsB;EACpCD,IAAAA,OAAO,CAACE,YAAR,CAAsB,WAAUT,gBAAgB,CAACC,GAAD,CAAM,EAAtD,EAAyDO,KAAzD;EACD,GAHiB;;EAKlBE,EAAAA,mBAAmB,CAACH,OAAD,EAAUN,GAAV,EAAe;EAChCM,IAAAA,OAAO,CAACI,eAAR,CAAyB,WAAUX,gBAAgB,CAACC,GAAD,CAAM,EAAzD;EACD,GAPiB;;EASlBW,EAAAA,iBAAiB,CAACL,OAAD,EAAU;EACzB,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,EAAP;EACD;;EAED,UAAMM,UAAU,GAAG,EAAnB;EAEAC,IAAAA,MAAM,CAACC,IAAP,CAAYR,OAAO,CAACS,OAApB,EACGC,MADH,CACUhB,GAAG,IAAIA,GAAG,CAACiB,UAAJ,CAAe,IAAf,CADjB,EAEGC,OAFH,CAEWlB,GAAG,IAAI;EACd,UAAImB,OAAO,GAAGnB,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAd;EACAkB,MAAAA,OAAO,GAAGA,OAAO,CAACC,MAAR,CAAe,CAAf,EAAkBjB,WAAlB,KAAkCgB,OAAO,CAACE,KAAR,CAAc,CAAd,EAAiBF,OAAO,CAACG,MAAzB,CAA5C;EACAV,MAAAA,UAAU,CAACO,OAAD,CAAV,GAAsBxB,aAAa,CAACW,OAAO,CAACS,OAAR,CAAgBf,GAAhB,CAAD,CAAnC;EACD,KANH;EAQA,WAAOY,UAAP;EACD,GAzBiB;;EA2BlBW,EAAAA,gBAAgB,CAACjB,OAAD,EAAUN,GAAV,EAAe;EAC7B,WAAOL,aAAa,CAACW,OAAO,CAACkB,YAAR,CAAsB,WAAUzB,gBAAgB,CAACC,GAAD,CAAM,EAAtD,CAAD,CAApB;EACD,GA7BiB;;EA+BlByB,EAAAA,MAAM,CAACnB,OAAD,EAAU;EACd,UAAMoB,IAAI,GAAGpB,OAAO,CAACqB,qBAAR,EAAb;EAEA,WAAO;EACLC,MAAAA,GAAG,EAAEF,IAAI,CAACE,GAAL,GAAWC,QAAQ,CAACC,IAAT,CAAcC,SADzB;EAELC,MAAAA,IAAI,EAAEN,IAAI,CAACM,IAAL,GAAYH,QAAQ,CAACC,IAAT,CAAcG;EAF3B,KAAP;EAID,GAtCiB;;EAwClBC,EAAAA,QAAQ,CAAC5B,OAAD,EAAU;EAChB,WAAO;EACLsB,MAAAA,GAAG,EAAEtB,OAAO,CAAC6B,SADR;EAELH,MAAAA,IAAI,EAAE1B,OAAO,CAAC8B;EAFT,KAAP;EAID;;EA7CiB;;;;;;;;"}
+23 -36
View File
@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap selector-engine.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap selector-engine.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -11,7 +11,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): dom/selector-engine.js * Bootstrap (v5.0.0-beta3): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@@ -21,42 +21,26 @@
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NODE_TEXT = 3; const NODE_TEXT = 3;
var SelectorEngine = { const SelectorEngine = {
matches: function matches(element, selector) { find(selector, element = document.documentElement) {
return element.matches(selector); return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
}, },
find: function find(selector, element) {
var _ref;
if (element === void 0) {
element = document.documentElement;
}
return (_ref = []).concat.apply(_ref, Element.prototype.querySelectorAll.call(element, selector));
},
findOne: function findOne(selector, element) {
if (element === void 0) {
element = document.documentElement;
}
findOne(selector, element = document.documentElement) {
return Element.prototype.querySelector.call(element, selector); return Element.prototype.querySelector.call(element, selector);
}, },
children: function children(element, selector) {
var _ref2;
var children = (_ref2 = []).concat.apply(_ref2, element.children); children(element, selector) {
return [].concat(...element.children).filter(child => child.matches(selector));
return children.filter(function (child) {
return child.matches(selector);
});
}, },
parents: function parents(element, selector) {
var parents = []; parents(element, selector) {
var ancestor = element.parentNode; const parents = [];
let ancestor = element.parentNode;
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
if (this.matches(ancestor, selector)) { if (ancestor.matches(selector)) {
parents.push(ancestor); parents.push(ancestor);
} }
@@ -65,8 +49,9 @@
return parents; return parents;
}, },
prev: function prev(element, selector) {
var previous = element.previousElementSibling; prev(element, selector) {
let previous = element.previousElementSibling;
while (previous) { while (previous) {
if (previous.matches(selector)) { if (previous.matches(selector)) {
@@ -78,11 +63,12 @@
return []; return [];
}, },
next: function next(element, selector) {
var next = element.nextElementSibling; next(element, selector) {
let next = element.nextElementSibling;
while (next) { while (next) {
if (this.matches(next, selector)) { if (next.matches(selector)) {
return [next]; return [next];
} }
@@ -91,6 +77,7 @@
return []; return [];
} }
}; };
return SelectorEngine; return SelectorEngine;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"selector-engine.js","sources":["../../src/dom/selector-engine.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-alpha3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n matches(element, selector) {\n return element.matches(selector)\n },\n\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n const children = [].concat(...element.children)\n\n return children.filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (this.matches(ancestor, selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (this.matches(next, selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n }\n}\n\nexport default SelectorEngine\n"],"names":["NODE_TEXT","SelectorEngine","matches","element","selector","find","document","documentElement","concat","Element","prototype","querySelectorAll","call","findOne","querySelector","children","filter","child","parents","ancestor","parentNode","nodeType","Node","ELEMENT_NODE","push","prev","previous","previousElementSibling","next","nextElementSibling"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EAEA,IAAMA,SAAS,GAAG,CAAlB;MAEMC,cAAc,GAAG;EACrBC,EAAAA,OADqB,mBACbC,OADa,EACJC,QADI,EACM;EACzB,WAAOD,OAAO,CAACD,OAAR,CAAgBE,QAAhB,CAAP;EACD,GAHoB;EAKrBC,EAAAA,IALqB,gBAKhBD,QALgB,EAKND,OALM,EAK8B;EAAA;;EAAA,QAApCA,OAAoC;EAApCA,MAAAA,OAAoC,GAA1BG,QAAQ,CAACC,eAAiB;EAAA;;EACjD,WAAO,YAAGC,MAAH,aAAaC,OAAO,CAACC,SAAR,CAAkBC,gBAAlB,CAAmCC,IAAnC,CAAwCT,OAAxC,EAAiDC,QAAjD,CAAb,CAAP;EACD,GAPoB;EASrBS,EAAAA,OATqB,mBASbT,QATa,EASHD,OATG,EASiC;EAAA,QAApCA,OAAoC;EAApCA,MAAAA,OAAoC,GAA1BG,QAAQ,CAACC,eAAiB;EAAA;;EACpD,WAAOE,OAAO,CAACC,SAAR,CAAkBI,aAAlB,CAAgCF,IAAhC,CAAqCT,OAArC,EAA8CC,QAA9C,CAAP;EACD,GAXoB;EAarBW,EAAAA,QAbqB,oBAaZZ,OAbY,EAaHC,QAbG,EAaO;EAAA;;EAC1B,QAAMW,QAAQ,GAAG,aAAGP,MAAH,cAAaL,OAAO,CAACY,QAArB,CAAjB;;EAEA,WAAOA,QAAQ,CAACC,MAAT,CAAgB,UAAAC,KAAK;EAAA,aAAIA,KAAK,CAACf,OAAN,CAAcE,QAAd,CAAJ;EAAA,KAArB,CAAP;EACD,GAjBoB;EAmBrBc,EAAAA,OAnBqB,mBAmBbf,OAnBa,EAmBJC,QAnBI,EAmBM;EACzB,QAAMc,OAAO,GAAG,EAAhB;EAEA,QAAIC,QAAQ,GAAGhB,OAAO,CAACiB,UAAvB;;EAEA,WAAOD,QAAQ,IAAIA,QAAQ,CAACE,QAAT,KAAsBC,IAAI,CAACC,YAAvC,IAAuDJ,QAAQ,CAACE,QAAT,KAAsBrB,SAApF,EAA+F;EAC7F,UAAI,KAAKE,OAAL,CAAaiB,QAAb,EAAuBf,QAAvB,CAAJ,EAAsC;EACpCc,QAAAA,OAAO,CAACM,IAAR,CAAaL,QAAb;EACD;;EAEDA,MAAAA,QAAQ,GAAGA,QAAQ,CAACC,UAApB;EACD;;EAED,WAAOF,OAAP;EACD,GAjCoB;EAmCrBO,EAAAA,IAnCqB,gBAmChBtB,OAnCgB,EAmCPC,QAnCO,EAmCG;EACtB,QAAIsB,QAAQ,GAAGvB,OAAO,CAACwB,sBAAvB;;EAEA,WAAOD,QAAP,EAAiB;EACf,UAAIA,QAAQ,CAACxB,OAAT,CAAiBE,QAAjB,CAAJ,EAAgC;EAC9B,eAAO,CAACsB,QAAD,CAAP;EACD;;EAEDA,MAAAA,QAAQ,GAAGA,QAAQ,CAACC,sBAApB;EACD;;EAED,WAAO,EAAP;EACD,GA/CoB;EAiDrBC,EAAAA,IAjDqB,gBAiDhBzB,OAjDgB,EAiDPC,QAjDO,EAiDG;EACtB,QAAIwB,IAAI,GAAGzB,OAAO,CAAC0B,kBAAnB;;EAEA,WAAOD,IAAP,EAAa;EACX,UAAI,KAAK1B,OAAL,CAAa0B,IAAb,EAAmBxB,QAAnB,CAAJ,EAAkC;EAChC,eAAO,CAACwB,IAAD,CAAP;EACD;;EAEDA,MAAAA,IAAI,GAAGA,IAAI,CAACC,kBAAZ;EACD;;EAED,WAAO,EAAP;EACD;EA7DoB;;;;;;;;"} {"version":3,"file":"selector-engine.js","sources":["../../src/dom/selector-engine.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children)\n .filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (ancestor.matches(selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n }\n}\n\nexport default SelectorEngine\n"],"names":["NODE_TEXT","SelectorEngine","find","selector","element","document","documentElement","concat","Element","prototype","querySelectorAll","call","findOne","querySelector","children","filter","child","matches","parents","ancestor","parentNode","nodeType","Node","ELEMENT_NODE","push","prev","previous","previousElementSibling","next","nextElementSibling"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EAEA,MAAMA,SAAS,GAAG,CAAlB;QAEMC,cAAc,GAAG;EACrBC,EAAAA,IAAI,CAACC,QAAD,EAAWC,OAAO,GAAGC,QAAQ,CAACC,eAA9B,EAA+C;EACjD,WAAO,GAAGC,MAAH,CAAU,GAAGC,OAAO,CAACC,SAAR,CAAkBC,gBAAlB,CAAmCC,IAAnC,CAAwCP,OAAxC,EAAiDD,QAAjD,CAAb,CAAP;EACD,GAHoB;;EAKrBS,EAAAA,OAAO,CAACT,QAAD,EAAWC,OAAO,GAAGC,QAAQ,CAACC,eAA9B,EAA+C;EACpD,WAAOE,OAAO,CAACC,SAAR,CAAkBI,aAAlB,CAAgCF,IAAhC,CAAqCP,OAArC,EAA8CD,QAA9C,CAAP;EACD,GAPoB;;EASrBW,EAAAA,QAAQ,CAACV,OAAD,EAAUD,QAAV,EAAoB;EAC1B,WAAO,GAAGI,MAAH,CAAU,GAAGH,OAAO,CAACU,QAArB,EACJC,MADI,CACGC,KAAK,IAAIA,KAAK,CAACC,OAAN,CAAcd,QAAd,CADZ,CAAP;EAED,GAZoB;;EAcrBe,EAAAA,OAAO,CAACd,OAAD,EAAUD,QAAV,EAAoB;EACzB,UAAMe,OAAO,GAAG,EAAhB;EAEA,QAAIC,QAAQ,GAAGf,OAAO,CAACgB,UAAvB;;EAEA,WAAOD,QAAQ,IAAIA,QAAQ,CAACE,QAAT,KAAsBC,IAAI,CAACC,YAAvC,IAAuDJ,QAAQ,CAACE,QAAT,KAAsBrB,SAApF,EAA+F;EAC7F,UAAImB,QAAQ,CAACF,OAAT,CAAiBd,QAAjB,CAAJ,EAAgC;EAC9Be,QAAAA,OAAO,CAACM,IAAR,CAAaL,QAAb;EACD;;EAEDA,MAAAA,QAAQ,GAAGA,QAAQ,CAACC,UAApB;EACD;;EAED,WAAOF,OAAP;EACD,GA5BoB;;EA8BrBO,EAAAA,IAAI,CAACrB,OAAD,EAAUD,QAAV,EAAoB;EACtB,QAAIuB,QAAQ,GAAGtB,OAAO,CAACuB,sBAAvB;;EAEA,WAAOD,QAAP,EAAiB;EACf,UAAIA,QAAQ,CAACT,OAAT,CAAiBd,QAAjB,CAAJ,EAAgC;EAC9B,eAAO,CAACuB,QAAD,CAAP;EACD;;EAEDA,MAAAA,QAAQ,GAAGA,QAAQ,CAACC,sBAApB;EACD;;EAED,WAAO,EAAP;EACD,GA1CoB;;EA4CrBC,EAAAA,IAAI,CAACxB,OAAD,EAAUD,QAAV,EAAoB;EACtB,QAAIyB,IAAI,GAAGxB,OAAO,CAACyB,kBAAnB;;EAEA,WAAOD,IAAP,EAAa;EACX,UAAIA,IAAI,CAACX,OAAL,CAAad,QAAb,CAAJ,EAA4B;EAC1B,eAAO,CAACyB,IAAD,CAAP;EACD;;EAEDA,MAAAA,IAAI,GAAGA,IAAI,CAACC,kBAAZ;EACD;;EAED,WAAO,EAAP;EACD;;EAxDoB;;;;;;;;"}
+313 -317
View File
@@ -1,90 +1,121 @@
/*! /*!
* Bootstrap dropdown.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap dropdown.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('popper.js'), require('./dom/selector-engine.js')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', 'popper.js', './dom/selector-engine'], factory) : typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Data, global.EventHandler, global.Manipulator, global.Popper, global.SelectorEngine)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
}(this, (function (Data, EventHandler, Manipulator, Popper, SelectorEngine) { 'use strict'; }(this, (function (Popper, Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () {
return e[k];
}
});
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data); var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator); var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine); var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var toType = function toType(obj) { const toType = obj => {
if (obj === null || obj === undefined) { if (obj === null || obj === undefined) {
return "" + obj; return `${obj}`;
} }
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
}; };
var getSelector = function getSelector(element) { const getSelector = element => {
var selector = element.getAttribute('data-bs-target'); let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') { if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href'); let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
} }
return selector; return selector;
}; };
var getElementFromSelector = function getElementFromSelector(element) { const getElementFromSelector = element => {
var selector = getSelector(element); const selector = getSelector(element);
return selector ? document.querySelector(selector) : null; return selector ? document.querySelector(selector) : null;
}; };
var isElement = function isElement(obj) { const isElement = obj => (obj[0] || obj).nodeType;
return (obj[0] || obj).nodeType;
};
var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) { const typeCheckConfig = (componentName, config, configTypes) => {
Object.keys(configTypes).forEach(function (property) { Object.keys(configTypes).forEach(property => {
var expectedTypes = configTypes[property]; const expectedTypes = configTypes[property];
var value = config[property]; const value = config[property];
var valueType = value && isElement(value) ? 'element' : toType(value); const valueType = value && isElement(value) ? 'element' : toType(value);
if (!new RegExp(expectedTypes).test(valueType)) { if (!new RegExp(expectedTypes).test(valueType)) {
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
} }
}); });
}; };
var isVisible = function isVisible(element) { const isVisible = element => {
if (!element) { if (!element) {
return false; return false;
} }
if (element.style && element.parentNode && element.parentNode.style) { if (element.style && element.parentNode && element.parentNode.style) {
var elementStyle = getComputedStyle(element); const elementStyle = getComputedStyle(element);
var parentNodeStyle = getComputedStyle(element.parentNode); const parentNodeStyle = getComputedStyle(element.parentNode);
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden'; return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
} }
return false; return false;
}; };
var noop = function noop() { const noop = () => function () {};
return function () {};
};
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -93,7 +124,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -101,119 +132,87 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const isRTL = () => document.documentElement.dir === 'rtl';
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); } } const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var VERSION = '5.0.0-alpha3'; const NAME = 'dropdown';
const DATA_KEY = 'bs.dropdown';
const EVENT_KEY = `.${DATA_KEY}`;
const DATA_API_KEY = '.data-api';
const ESCAPE_KEY = 'Escape';
const SPACE_KEY = 'Space';
const TAB_KEY = 'Tab';
const ARROW_UP_KEY = 'ArrowUp';
const ARROW_DOWN_KEY = 'ArrowDown';
const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
var BaseComponent = /*#__PURE__*/function () { const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`);
function BaseComponent(element) { const EVENT_HIDE = `hide${EVENT_KEY}`;
if (!element) { const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
return; const EVENT_SHOW = `show${EVENT_KEY}`;
} const EVENT_SHOWN = `shown${EVENT_KEY}`;
const EVENT_CLICK = `click${EVENT_KEY}`;
this._element = element; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
Data__default['default'].setData(element, this.constructor.DATA_KEY, this); 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';
var _proto = BaseComponent.prototype; const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_DROPUP = 'dropup';
_proto.dispose = function dispose() { const CLASS_NAME_DROPEND = 'dropend';
Data__default['default'].removeData(this._element, this.constructor.DATA_KEY); const CLASS_NAME_DROPSTART = 'dropstart';
this._element = null; const CLASS_NAME_NAVBAR = 'navbar';
} const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]';
/** Static */ const SELECTOR_MENU = '.dropdown-menu';
; const SELECTOR_NAVBAR_NAV = '.navbar-nav';
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
BaseComponent.getInstance = function getInstance(element) { const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
return Data__default['default'].getData(element, this.DATA_KEY); const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
}; const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
_createClass(BaseComponent, null, [{ const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
key: "VERSION", const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
get: function get() { const Default = {
return VERSION; offset: [0, 2],
} boundary: 'clippingParents',
}]);
return BaseComponent;
}();
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$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'dropdown';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var ESCAPE_KEY = 'Escape';
var SPACE_KEY = 'Space';
var TAB_KEY = 'Tab';
var ARROW_UP_KEY = 'ArrowUp';
var ARROW_DOWN_KEY = 'ArrowDown';
var RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEY + "|" + ARROW_DOWN_KEY + "|" + ESCAPE_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 EVENT_CLICK = "click" + EVENT_KEY;
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_DROPEND = 'dropend';
var CLASS_NAME_DROPSTART = 'dropstart';
var CLASS_NAME_MENUEND = 'dropdown-menu-end';
var CLASS_NAME_NAVBAR = 'navbar';
var CLASS_NAME_POSITION_STATIC = 'position-static';
var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]';
var SELECTOR_FORM_CHILD = '.dropdown form';
var SELECTOR_MENU = '.dropdown-menu';
var SELECTOR_NAVBAR_NAV = '.navbar-nav';
var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
var PLACEMENT_TOP = isRTL ? 'top-end' : 'top-start';
var PLACEMENT_TOPEND = isRTL ? 'top-start' : 'top-end';
var PLACEMENT_BOTTOM = isRTL ? 'bottom-end' : 'bottom-start';
var PLACEMENT_BOTTOMEND = isRTL ? 'bottom-start' : 'bottom-end';
var PLACEMENT_RIGHT = isRTL ? 'left-start' : 'right-start';
var PLACEMENT_LEFT = isRTL ? 'right-start' : 'left-start';
var Default = {
offset: 0,
flip: true,
boundary: 'scrollParent',
reference: 'toggle', reference: 'toggle',
display: 'dynamic', display: 'dynamic',
popperConfig: null popperConfig: null
}; };
var DefaultType = { const DefaultType = {
offset: '(number|string|function)', offset: '(array|string|function)',
flip: 'boolean',
boundary: '(string|element)', boundary: '(string|element)',
reference: '(string|element)', reference: '(string|element|object)',
display: 'string', display: 'string',
popperConfig: '(null|object)' popperConfig: '(null|object|function)'
}; };
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
@@ -221,33 +220,37 @@
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var Dropdown = /*#__PURE__*/function (_BaseComponent) { class Dropdown extends BaseComponent__default['default'] {
_inheritsLoose(Dropdown, _BaseComponent); constructor(element, config) {
super(element);
this._popper = null;
this._config = this._getConfig(config);
this._menu = this._getMenuElement();
this._inNavbar = this._detectNavbar();
function Dropdown(element, config) { this._addEventListeners();
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._popper = null;
_this._config = _this._getConfig(config);
_this._menu = _this._getMenuElement();
_this._inNavbar = _this._detectNavbar();
_this._addEventListeners();
return _this;
} // Getters } // Getters
var _proto = Dropdown.prototype; static get Default() {
return Default;
}
// Public static get DefaultType() {
_proto.toggle = function toggle() { return DefaultType;
}
static get DATA_KEY() {
return DATA_KEY;
} // Public
toggle() {
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) { if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED)) {
return; return;
} }
var isActive = this._element.classList.contains(CLASS_NAME_SHOW); const isActive = this._element.classList.contains(CLASS_NAME_SHOW);
Dropdown.clearMenus(); Dropdown.clearMenus();
@@ -256,30 +259,32 @@
} }
this.show(); this.show();
}; }
_proto.show = function show() { show() {
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) { if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
return; return;
} }
var parent = Dropdown.getParentFromElement(this._element); const parent = Dropdown.getParentFromElement(this._element);
var relatedTarget = { const relatedTarget = {
relatedTarget: this._element relatedTarget: this._element
}; };
var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, relatedTarget); const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, relatedTarget);
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
return; return;
} // Totally disable Popper for Dropdowns in Navbar } // Totally disable Popper for Dropdowns in Navbar
if (!this._inNavbar) { if (this._inNavbar) {
if (typeof Popper__default['default'] === 'undefined') { Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'none');
} else {
if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
} }
var referenceElement = this._element; let referenceElement = this._element;
if (this._config.reference === 'parent') { if (this._config.reference === 'parent') {
referenceElement = parent; referenceElement = parent;
@@ -289,16 +294,18 @@
if (typeof this._config.reference.jquery !== 'undefined') { if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0]; referenceElement = this._config.reference[0];
} }
} // If boundary is not `scrollParent`, then set position to `static` } else if (typeof this._config.reference === 'object') {
// to allow the menu to "escape" the scroll parent's boundaries referenceElement = this._config.reference;
// https://github.com/twbs/bootstrap/issues/24251
if (this._config.boundary !== 'scrollParent') {
parent.classList.add(CLASS_NAME_POSITION_STATIC);
} }
this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig()); const popperConfig = this._getPopperConfig();
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
if (isDisplayStatic) {
Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
}
} // If this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
@@ -306,11 +313,7 @@
if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) { if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
var _ref; [].concat(...document.body.children).forEach(elem => EventHandler__default['default'].on(elem, 'mouseover', null, noop()));
(_ref = []).concat.apply(_ref, document.body.children).forEach(function (elem) {
return EventHandler__default['default'].on(elem, 'mouseover', null, noop());
});
} }
this._element.focus(); this._element.focus();
@@ -321,19 +324,18 @@
this._element.classList.toggle(CLASS_NAME_SHOW); this._element.classList.toggle(CLASS_NAME_SHOW);
EventHandler__default['default'].trigger(parent, EVENT_SHOWN, relatedTarget); EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
}; }
_proto.hide = function hide() { hide() {
if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) { if (this._element.disabled || this._element.classList.contains(CLASS_NAME_DISABLED) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
return; return;
} }
var parent = Dropdown.getParentFromElement(this._element); const relatedTarget = {
var relatedTarget = {
relatedTarget: this._element relatedTarget: this._element
}; };
var hideEvent = EventHandler__default['default'].trigger(parent, EVENT_HIDE, relatedTarget); const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
@@ -347,12 +349,11 @@
this._element.classList.toggle(CLASS_NAME_SHOW); this._element.classList.toggle(CLASS_NAME_SHOW);
EventHandler__default['default'].trigger(parent, EVENT_HIDDEN, relatedTarget); Manipulator__default['default'].removeDataAttribute(this._menu, 'popper');
}; EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN, relatedTarget);
}
_proto.dispose = function dispose() {
_BaseComponent.prototype.dispose.call(this);
dispose() {
EventHandler__default['default'].off(this._element, EVENT_KEY); EventHandler__default['default'].off(this._element, EVENT_KEY);
this._menu = null; this._menu = null;
@@ -361,104 +362,119 @@
this._popper = null; this._popper = null;
} }
};
_proto.update = function update() { super.dispose();
}
update() {
this._inNavbar = this._detectNavbar(); this._inNavbar = this._detectNavbar();
if (this._popper) { if (this._popper) {
this._popper.scheduleUpdate(); this._popper.update();
} }
} // Private } // Private
;
_proto._addEventListeners = function _addEventListeners() {
var _this2 = this;
EventHandler__default['default'].on(this._element, EVENT_CLICK, function (event) { _addEventListeners() {
EventHandler__default['default'].on(this._element, EVENT_CLICK, event => {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); this.toggle();
_this2.toggle();
}); });
}; }
_proto._getConfig = function _getConfig(config) { _getConfig(config) {
config = _extends({}, this.constructor.Default, Manipulator__default['default'].getDataAttributes(this._element), config); config = { ...this.constructor.Default,
...Manipulator__default['default'].getDataAttributes(this._element),
...config
};
typeCheckConfig(NAME, config, this.constructor.DefaultType); typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config;
};
_proto._getMenuElement = function _getMenuElement() { if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0]; // Popper virtual elements require a getBoundingClientRect method
}; throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
_proto._getPlacement = function _getPlacement() {
var parentDropdown = this._element.parentNode;
var placement = PLACEMENT_BOTTOM; // Handle dropup
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
placement = this._menu.classList.contains(CLASS_NAME_MENUEND) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
placement = PLACEMENT_RIGHT;
} else if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
placement = PLACEMENT_LEFT;
} else if (this._menu.classList.contains(CLASS_NAME_MENUEND)) {
placement = PLACEMENT_BOTTOMEND;
} }
return placement; return config;
}; }
_proto._detectNavbar = function _detectNavbar() { _getMenuElement() {
return Boolean(this._element.closest("." + CLASS_NAME_NAVBAR)); return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
}; }
_proto._getOffset = function _getOffset() { _getPlacement() {
var _this3 = this; const parentDropdown = this._element.parentNode;
var offset = {}; if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
}
if (typeof this._config.offset === 'function') { if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
offset.fn = function (data) { return PLACEMENT_LEFT;
data.offsets = _extends({}, data.offsets, _this3._config.offset(data.offsets, _this3._element) || {}); } // We need to trim the value because custom properties can also include spaces
return data;
};
} else { const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
offset.offset = this._config.offset;
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
}
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
}
_detectNavbar() {
return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
}
_getOffset() {
const {
offset
} = this._config;
if (typeof offset === 'string') {
return offset.split(',').map(val => Number.parseInt(val, 10));
}
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
} }
return offset; return offset;
}; }
_proto._getPopperConfig = function _getPopperConfig() { _getPopperConfig() {
var popperConfig = { const defaultBsPopperConfig = {
placement: this._getPlacement(), placement: this._getPlacement(),
modifiers: { modifiers: [{
offset: this._getOffset(), name: 'preventOverflow',
flip: { options: {
enabled: this._config.flip boundary: this._config.boundary
},
preventOverflow: {
boundariesElement: this._config.boundary
} }
} }, {
name: 'offset',
options: {
offset: this._getOffset()
}
}]
}; // Disable Popper if we have a static display }; // Disable Popper if we have a static display
if (this._config.display === 'static') { if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = { defaultBsPopperConfig.modifiers = [{
name: 'applyStyles',
enabled: false enabled: false
}; }];
} }
return _extends({}, popperConfig, this._config.popperConfig); return { ...defaultBsPopperConfig,
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
};
} // Static } // Static
;
Dropdown.dropdownInterface = function dropdownInterface(element, config) {
var data = Data__default['default'].getData(element, DATA_KEY);
var _config = typeof config === 'object' ? config : null; static dropdownInterface(element, config) {
let data = Data__default['default'].get(element, DATA_KEY);
const _config = typeof config === 'object' ? config : null;
if (!data) { if (!data) {
data = new Dropdown(element, _config); data = new Dropdown(element, _config);
@@ -466,30 +482,35 @@
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\""); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}; }
Dropdown.jQueryInterface = function jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
Dropdown.dropdownInterface(this, config); Dropdown.dropdownInterface(this, config);
}); });
}; }
Dropdown.clearMenus = function clearMenus(event) { static clearMenus(event) {
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) { if (event) {
return; if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
return;
}
if (/input|select|textarea|form/i.test(event.target.tagName)) {
return;
}
} }
var toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE); const toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
for (var i = 0, len = toggles.length; i < len; i++) { for (let i = 0, len = toggles.length; i < len; i++) {
var parent = Dropdown.getParentFromElement(toggles[i]); const context = Data__default['default'].get(toggles[i], DATA_KEY);
var context = Data__default['default'].getData(toggles[i], DATA_KEY); const relatedTarget = {
var relatedTarget = {
relatedTarget: toggles[i] relatedTarget: toggles[i]
}; };
@@ -501,17 +522,25 @@
continue; continue;
} }
var dropdownMenu = context._menu; const dropdownMenu = context._menu;
if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) { if (!toggles[i].classList.contains(CLASS_NAME_SHOW)) {
continue; continue;
} }
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.key === TAB_KEY) && dropdownMenu.contains(event.target)) { if (event) {
continue; // Don't close the menu if the clicked element or one of its parents is the dropdown button
if ([context._element].some(element => event.composedPath().includes(element))) {
continue;
} // Tab navigation through the dropdown menu shouldn't close the menu
if (event.type === 'keyup' && event.key === TAB_KEY && dropdownMenu.contains(event.target)) {
continue;
}
} }
var hideEvent = EventHandler__default['default'].trigger(parent, EVENT_HIDE, relatedTarget); const hideEvent = EventHandler__default['default'].trigger(toggles[i], EVENT_HIDE, relatedTarget);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
continue; continue;
@@ -520,11 +549,7 @@
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
var _ref2; [].concat(...document.body.children).forEach(elem => EventHandler__default['default'].off(elem, 'mouseover', null, noop()));
(_ref2 = []).concat.apply(_ref2, document.body.children).forEach(function (elem) {
return EventHandler__default['default'].off(elem, 'mouseover', null, noop());
});
} }
toggles[i].setAttribute('aria-expanded', 'false'); toggles[i].setAttribute('aria-expanded', 'false');
@@ -535,15 +560,16 @@
dropdownMenu.classList.remove(CLASS_NAME_SHOW); dropdownMenu.classList.remove(CLASS_NAME_SHOW);
toggles[i].classList.remove(CLASS_NAME_SHOW); toggles[i].classList.remove(CLASS_NAME_SHOW);
EventHandler__default['default'].trigger(parent, EVENT_HIDDEN, relatedTarget); Manipulator__default['default'].removeDataAttribute(dropdownMenu, 'popper');
EventHandler__default['default'].trigger(toggles[i], EVENT_HIDDEN, relatedTarget);
} }
}; }
Dropdown.getParentFromElement = function getParentFromElement(element) { static getParentFromElement(element) {
return getElementFromSelector(element) || element.parentNode; return getElementFromSelector(element) || element.parentNode;
}; }
Dropdown.dataApiKeydownHandler = function dataApiKeydownHandler(event) { static dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
// - And not a key in REGEXP_KEYDOWN => not a dropdown command // - And not a key in REGEXP_KEYDOWN => not a dropdown command
// If input/textarea: // If input/textarea:
@@ -562,28 +588,34 @@
return; return;
} }
var parent = Dropdown.getParentFromElement(this); const parent = Dropdown.getParentFromElement(this);
var isActive = this.classList.contains(CLASS_NAME_SHOW); const isActive = this.classList.contains(CLASS_NAME_SHOW);
if (event.key === ESCAPE_KEY) { if (event.key === ESCAPE_KEY) {
var button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0]; const button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
button.focus(); button.focus();
Dropdown.clearMenus(); Dropdown.clearMenus();
return; return;
} }
if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {
const button = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
button.click();
return;
}
if (!isActive || event.key === SPACE_KEY) { if (!isActive || event.key === SPACE_KEY) {
Dropdown.clearMenus(); Dropdown.clearMenus();
return; return;
} }
var items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible); const items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, parent).filter(isVisible);
if (!items.length) { if (!items.length) {
return; return;
} }
var index = items.indexOf(event.target); // Up let index = items.indexOf(event.target); // Up
if (event.key === ARROW_UP_KEY && index > 0) { if (event.key === ARROW_UP_KEY && index > 0) {
index--; index--;
@@ -597,27 +629,9 @@
index = index === -1 ? 0 : index; index = index === -1 ? 0 : index;
items[index].focus(); items[index].focus();
}; }
_createClass$1(Dropdown, null, [{ }
key: "Default",
get: function get() {
return Default;
}
}, {
key: "DefaultType",
get: function get() {
return DefaultType;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY;
}
}]);
return Dropdown;
}(BaseComponent);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Data Api implementation * Data Api implementation
@@ -631,11 +645,7 @@
EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); Dropdown.dropdownInterface(this);
Dropdown.dropdownInterface(this, 'toggle');
});
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
return e.stopPropagation();
}); });
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
@@ -644,21 +654,7 @@
* add .Dropdown to jQuery only if jQuery is present * add .Dropdown to jQuery only if jQuery is present
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, Dropdown);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = Dropdown.jQueryInterface;
$.fn[NAME].Constructor = Dropdown;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Dropdown.jQueryInterface;
};
}
});
return Dropdown; return Dropdown;
+1 -1
View File
File diff suppressed because one or more lines are too long
+307 -388
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
+509
View File
@@ -0,0 +1,509 @@
/*!
* Bootstrap offcanvas.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2021 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('./dom/selector-engine.js'), require('./dom/manipulator.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/manipulator', './dom/data', './dom/event-handler', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.SelectorEngine, global.Manipulator, global.Data, global.EventHandler, global.Base));
}(this, (function (SelectorEngine, Manipulator, Data, EventHandler, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
const MILLISECONDS_MULTIPLIER = 1000;
const toType = obj => {
if (obj === null || obj === undefined) {
return `${obj}`;
}
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
};
const getSelector = element => {
let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') {
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
}
return selector;
};
const getSelectorFromElement = element => {
const selector = getSelector(element);
if (selector) {
return document.querySelector(selector) ? selector : null;
}
return null;
};
const getElementFromSelector = element => {
const selector = getSelector(element);
return selector ? document.querySelector(selector) : null;
};
const getTransitionDurationFromElement = element => {
if (!element) {
return 0;
} // Get transition-duration of the element
let {
transitionDuration,
transitionDelay
} = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration);
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
};
const isElement = obj => (obj[0] || obj).nodeType;
const typeCheckConfig = (componentName, config, configTypes) => {
Object.keys(configTypes).forEach(property => {
const expectedTypes = configTypes[property];
const value = config[property];
const valueType = value && isElement(value) ? 'element' : toType(value);
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
}
});
};
const isVisible = element => {
if (!element) {
return false;
}
if (element.style && element.parentNode && element.parentNode.style) {
const elementStyle = getComputedStyle(element);
const parentNodeStyle = getComputedStyle(element.parentNode);
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
}
return false;
};
const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true;
}
if (element.classList.contains('disabled')) {
return true;
}
if (typeof element.disabled !== 'undefined') {
return element.disabled;
}
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
};
const getjQuery = () => {
const {
jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery;
}
return null;
};
const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback);
} else {
callback();
}
};
const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed';
const SELECTOR_STICKY_CONTENT = '.sticky-top';
const getWidth = () => {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth);
};
const hide = (width = getWidth()) => {
document.body.style.overflow = 'hidden';
_setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
_setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
_setElementAttributes('body', 'paddingRight', calculatedValue => calculatedValue + width);
};
const _setElementAttributes = (selector, styleProp, callback) => {
const scrollbarWidth = getWidth();
SelectorEngine__default['default'].find(selector).forEach(element => {
if (element !== document.body && window.innerWidth > element.clientWidth + scrollbarWidth) {
return;
}
const actualValue = element.style[styleProp];
const calculatedValue = window.getComputedStyle(element)[styleProp];
Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
});
};
const reset = () => {
document.body.style.overflow = 'auto';
_resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
_resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
_resetElementAttributes('body', 'paddingRight');
};
const _resetElementAttributes = (selector, styleProp) => {
SelectorEngine__default['default'].find(selector).forEach(element => {
const value = Manipulator__default['default'].getDataAttribute(element, styleProp);
if (typeof value === 'undefined' && element === document.body) {
element.style.removeProperty(styleProp);
} else {
Manipulator__default['default'].removeDataAttribute(element, styleProp);
element.style[styleProp] = value;
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
const NAME = 'offcanvas';
const DATA_KEY = 'bs.offcanvas';
const EVENT_KEY = `.${DATA_KEY}`;
const DATA_API_KEY = '.data-api';
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
const ESCAPE_KEY = 'Escape';
const Default = {
backdrop: true,
keyboard: true,
scroll: false
};
const DefaultType = {
backdrop: 'boolean',
keyboard: 'boolean',
scroll: 'boolean'
};
const CLASS_NAME_BACKDROP_BODY = 'offcanvas-backdrop';
const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_TOGGLING = 'offcanvas-toggling';
const OPEN_SELECTOR = '.offcanvas.show';
const ACTIVE_SELECTOR = `${OPEN_SELECTOR}, .${CLASS_NAME_TOGGLING}`;
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_FOCUSIN = `focusin${EVENT_KEY}`;
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="offcanvas"]';
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="offcanvas"]';
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
class Offcanvas extends BaseComponent__default['default'] {
constructor(element, config) {
super(element);
this._config = this._getConfig(config);
this._isShown = false;
this._addEventListeners();
} // Getters
static get Default() {
return Default;
}
static get DATA_KEY() {
return DATA_KEY;
} // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
show(relatedTarget) {
if (this._isShown) {
return;
}
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
relatedTarget
});
if (showEvent.defaultPrevented) {
return;
}
this._isShown = true;
this._element.style.visibility = 'visible';
if (this._config.backdrop) {
document.body.classList.add(CLASS_NAME_BACKDROP_BODY);
}
if (!this._config.scroll) {
hide();
}
this._element.classList.add(CLASS_NAME_TOGGLING);
this._element.removeAttribute('aria-hidden');
this._element.setAttribute('aria-modal', true);
this._element.setAttribute('role', 'dialog');
this._element.classList.add(CLASS_NAME_SHOW);
const completeCallBack = () => {
this._element.classList.remove(CLASS_NAME_TOGGLING);
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
relatedTarget
});
this._enforceFocusOnElement(this._element);
};
setTimeout(completeCallBack, getTransitionDurationFromElement(this._element));
}
hide() {
if (!this._isShown) {
return;
}
const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) {
return;
}
this._element.classList.add(CLASS_NAME_TOGGLING);
EventHandler__default['default'].off(document, EVENT_FOCUSIN);
this._element.blur();
this._isShown = false;
this._element.classList.remove(CLASS_NAME_SHOW);
const completeCallback = () => {
this._element.setAttribute('aria-hidden', true);
this._element.removeAttribute('aria-modal');
this._element.removeAttribute('role');
this._element.style.visibility = 'hidden';
if (this._config.backdrop) {
document.body.classList.remove(CLASS_NAME_BACKDROP_BODY);
}
if (!this._config.scroll) {
reset();
}
EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN);
this._element.classList.remove(CLASS_NAME_TOGGLING);
};
setTimeout(completeCallback, getTransitionDurationFromElement(this._element));
} // Private
_getConfig(config) {
config = { ...Default,
...Manipulator__default['default'].getDataAttributes(this._element),
...(typeof config === 'object' ? config : {})
};
typeCheckConfig(NAME, config, DefaultType);
return config;
}
_enforceFocusOnElement(element) {
EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => {
if (document !== event.target && element !== event.target && !element.contains(event.target)) {
element.focus();
}
});
element.focus();
}
_addEventListeners() {
EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());
EventHandler__default['default'].on(document, 'keydown', event => {
if (this._config.keyboard && event.key === ESCAPE_KEY) {
this.hide();
}
});
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, event => {
const target = SelectorEngine__default['default'].findOne(getSelectorFromElement(event.target));
if (!this._element.contains(event.target) && target !== this._element) {
this.hide();
}
});
} // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Data__default['default'].get(this, DATA_KEY) || new Offcanvas(this, typeof config === 'object' ? config : {});
if (typeof config !== 'string') {
return;
}
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
data[config](this);
});
}
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
const target = getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
if (isDisabled(this)) {
return;
}
EventHandler__default['default'].one(target, EVENT_HIDDEN, () => {
// focus on trigger when it is closed
if (isVisible(this)) {
this.focus();
}
}); // avoid conflict when clicking a toggler of an offcanvas, while another is open
const allReadyOpen = SelectorEngine__default['default'].findOne(ACTIVE_SELECTOR);
if (allReadyOpen && allReadyOpen !== target) {
return;
}
const data = Data__default['default'].get(target, DATA_KEY) || new Offcanvas(target);
data.toggle(this);
});
EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
SelectorEngine__default['default'].find(OPEN_SELECTOR).forEach(el => (Data__default['default'].get(el, DATA_KEY) || new Offcanvas(el)).show());
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
defineJQueryPlugin(NAME, Offcanvas);
return Offcanvas;
})));
//# sourceMappingURL=offcanvas.js.map
+1
View File
File diff suppressed because one or more lines are too long
+103 -124
View File
@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap popover.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap popover.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
@@ -17,14 +17,15 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -33,7 +34,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -41,80 +42,110 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
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); } } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } /**
* --------------------------------------------------------------------------
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); } * Bootstrap (v5.0.0-beta3): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; const NAME = 'popover';
var DATA_KEY = 'bs.popover'; const DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; const EVENT_KEY = `.${DATA_KEY}`;
var CLASS_PREFIX = 'bs-popover'; const CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g');
const Default = { ...Tooltip__default['default'].Default,
var Default = _extends({}, Tooltip__default['default'].Default, {
placement: 'right', placement: 'right',
offset: [0, 8],
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>' template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
});
var DefaultType = _extends({}, Tooltip__default['default'].DefaultType, {
content: '(string|element|function)'
});
var Event = {
HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY,
SHOW: "show" + EVENT_KEY,
SHOWN: "shown" + EVENT_KEY,
INSERTED: "inserted" + EVENT_KEY,
CLICK: "click" + EVENT_KEY,
FOCUSIN: "focusin" + EVENT_KEY,
FOCUSOUT: "focusout" + EVENT_KEY,
MOUSEENTER: "mouseenter" + EVENT_KEY,
MOUSELEAVE: "mouseleave" + EVENT_KEY
}; };
var CLASS_NAME_FADE = 'fade'; const DefaultType = { ...Tooltip__default['default'].DefaultType,
var CLASS_NAME_SHOW = 'show'; content: '(string|element|function)'
var SELECTOR_TITLE = '.popover-header'; };
var SELECTOR_CONTENT = '.popover-body'; const Event = {
HIDE: `hide${EVENT_KEY}`,
HIDDEN: `hidden${EVENT_KEY}`,
SHOW: `show${EVENT_KEY}`,
SHOWN: `shown${EVENT_KEY}`,
INSERTED: `inserted${EVENT_KEY}`,
CLICK: `click${EVENT_KEY}`,
FOCUSIN: `focusin${EVENT_KEY}`,
FOCUSOUT: `focusout${EVENT_KEY}`,
MOUSEENTER: `mouseenter${EVENT_KEY}`,
MOUSELEAVE: `mouseleave${EVENT_KEY}`
};
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_SHOW = 'show';
const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body';
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var Popover = /*#__PURE__*/function (_Tooltip) { class Popover extends Tooltip__default['default'] {
_inheritsLoose(Popover, _Tooltip); // Getters
static get Default() {
function Popover() { return Default;
return _Tooltip.apply(this, arguments) || this;
} }
var _proto = Popover.prototype; static get NAME() {
return NAME;
}
// Overrides static get DATA_KEY() {
_proto.isWithContent = function isWithContent() { return DATA_KEY;
}
static get Event() {
return Event;
}
static get EVENT_KEY() {
return EVENT_KEY;
}
static get DefaultType() {
return DefaultType;
} // Overrides
isWithContent() {
return this.getTitle() || this._getContent(); return this.getTitle() || this._getContent();
}; }
_proto.setContent = function setContent() { setContent() {
var tip = this.getTipElement(); // we use append for html objects to maintain js events const tip = this.getTipElement(); // we use append for html objects to maintain js events
this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle()); this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_TITLE, tip), this.getTitle());
var content = this._getContent(); let content = this._getContent();
if (typeof content === 'function') { if (typeof content === 'function') {
content = content.call(this._element); content = content.call(this._element);
@@ -123,35 +154,31 @@
this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content); this.setElementContent(SelectorEngine__default['default'].findOne(SELECTOR_CONTENT, tip), content);
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW); tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
} // Private } // Private
;
_proto._addAttachmentClass = function _addAttachmentClass(attachment) {
this.getTipElement().classList.add(CLASS_PREFIX + "-" + this.updateAttachment(attachment));
};
_proto._getContent = function _getContent() { _addAttachmentClass(attachment) {
this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);
}
_getContent() {
return this._element.getAttribute('data-bs-content') || this.config.content; return this._element.getAttribute('data-bs-content') || this.config.content;
}; }
_proto._cleanTipClass = function _cleanTipClass() { _cleanTipClass() {
var tip = this.getTipElement(); const tip = this.getTipElement();
var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX); const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
tabClass.map(function (token) { tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
return token.trim();
}).forEach(function (tClass) {
return tip.classList.remove(tClass);
});
} }
} // Static } // Static
;
Popover.jQueryInterface = function jQueryInterface(config) {
static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
var data = Data__default['default'].getData(this, DATA_KEY); let data = Data__default['default'].get(this, DATA_KEY);
var _config = typeof config === 'object' ? config : null; const _config = typeof config === 'object' ? config : null;
if (!data && /dispose|hide/.test(config)) { if (!data && /dispose|hide/.test(config)) {
return; return;
@@ -159,54 +186,20 @@
if (!data) { if (!data) {
data = new Popover(this, _config); data = new Popover(this, _config);
Data__default['default'].setData(this, DATA_KEY, data); Data__default['default'].set(this, DATA_KEY, data);
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\""); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}); });
}; }
_createClass(Popover, null, [{ }
key: "Default",
// Getters
get: function get() {
return Default;
}
}, {
key: "NAME",
get: function get() {
return NAME;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY;
}
}, {
key: "Event",
get: function get() {
return Event;
}
}, {
key: "EVENT_KEY",
get: function get() {
return EVENT_KEY;
}
}, {
key: "DefaultType",
get: function get() {
return DefaultType;
}
}]);
return Popover;
}(Tooltip__default['default']);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* jQuery * jQuery
@@ -215,21 +208,7 @@
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, Popover);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = Popover.jQueryInterface;
$.fn[NAME].Constructor = Popover;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Popover.jQueryInterface;
};
}
});
return Popover; return Popover;
+1 -1
View File
File diff suppressed because one or more lines are too long
+163 -224
View File
@@ -1,13 +1,13 @@
/*! /*!
* Bootstrap scrollspy.js v5.0.0-alpha3 (https://getbootstrap.com/) * Bootstrap scrollspy.js v5.0.0-beta3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine'], factory) : typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
}(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict'; }(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -15,18 +15,19 @@
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator); var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine); var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.0.0-alpha3): util/index.js * Bootstrap (v5.0.0-beta3): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
var MAX_UID = 1000000; const MAX_UID = 1000000;
var toType = function toType(obj) { const toType = obj => {
if (obj === null || obj === undefined) { if (obj === null || obj === undefined) {
return "" + obj; return `${obj}`;
} }
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
@@ -38,7 +39,7 @@
*/ */
var getUID = function getUID(prefix) { const getUID = prefix => {
do { do {
prefix += Math.floor(Math.random() * MAX_UID); prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix)); } while (document.getElementById(prefix));
@@ -46,19 +47,32 @@
return prefix; return prefix;
}; };
var getSelector = function getSelector(element) { const getSelector = element => {
var selector = element.getAttribute('data-bs-target'); let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') { if (!selector || selector === '#') {
var hrefAttr = element.getAttribute('href'); let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
hrefAttr = '#' + hrefAttr.split('#')[1];
}
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
} }
return selector; return selector;
}; };
var getSelectorFromElement = function getSelectorFromElement(element) { const getSelectorFromElement = element => {
var selector = getSelector(element); const selector = getSelector(element);
if (selector) { if (selector) {
return document.querySelector(selector) ? selector : null; return document.querySelector(selector) ? selector : null;
@@ -67,25 +81,24 @@
return null; return null;
}; };
var isElement = function isElement(obj) { const isElement = obj => (obj[0] || obj).nodeType;
return (obj[0] || obj).nodeType;
};
var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) { const typeCheckConfig = (componentName, config, configTypes) => {
Object.keys(configTypes).forEach(function (property) { Object.keys(configTypes).forEach(property => {
var expectedTypes = configTypes[property]; const expectedTypes = configTypes[property];
var value = config[property]; const value = config[property];
var valueType = value && isElement(value) ? 'element' : toType(value); const valueType = value && isElement(value) ? 'element' : toType(value);
if (!new RegExp(expectedTypes).test(valueType)) { if (!new RegExp(expectedTypes).test(valueType)) {
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`);
} }
}); });
}; };
var getjQuery = function getjQuery() { const getjQuery = () => {
var _window = window, const {
jQuery = _window.jQuery; jQuery
} = window;
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return jQuery; return jQuery;
@@ -94,7 +107,7 @@
return null; return null;
}; };
var onDOMContentLoaded = function onDOMContentLoaded(callback) { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callback); document.addEventListener('DOMContentLoaded', callback);
} else { } else {
@@ -102,144 +115,110 @@
} }
}; };
var isRTL = document.documentElement.dir === 'rtl'; const defineJQueryPlugin = (name, plugin) => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
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); } } if ($) {
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
};
}
});
};
/**
* --------------------------------------------------------------------------
* Bootstrap (v5.0.0-beta3): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var VERSION = '5.0.0-alpha3'; const NAME = 'scrollspy';
const DATA_KEY = 'bs.scrollspy';
var BaseComponent = /*#__PURE__*/function () { const EVENT_KEY = `.${DATA_KEY}`;
function BaseComponent(element) { const DATA_API_KEY = '.data-api';
if (!element) { const Default = {
return;
}
this._element = element;
Data__default['default'].setData(element, this.constructor.DATA_KEY, this);
}
var _proto = BaseComponent.prototype;
_proto.dispose = function dispose() {
Data__default['default'].removeData(this._element, this.constructor.DATA_KEY);
this._element = null;
}
/** Static */
;
BaseComponent.getInstance = function getInstance(element) {
return Data__default['default'].getData(element, this.DATA_KEY);
};
_createClass(BaseComponent, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return BaseComponent;
}();
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$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'scrollspy';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var Default = {
offset: 10, offset: 10,
method: 'auto', method: 'auto',
target: '' target: ''
}; };
var DefaultType = { const DefaultType = {
offset: 'number', offset: 'number',
method: 'string', method: 'string',
target: '(string|element)' target: '(string|element)'
}; };
var EVENT_ACTIVATE = "activate" + EVENT_KEY; const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
var EVENT_SCROLL = "scroll" + EVENT_KEY; const EVENT_SCROLL = `scroll${EVENT_KEY}`;
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY; const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
var CLASS_NAME_ACTIVE = 'active'; const CLASS_NAME_ACTIVE = 'active';
var SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
var SELECTOR_NAV_LINKS = '.nav-link'; const SELECTOR_NAV_LINKS = '.nav-link';
var SELECTOR_NAV_ITEMS = '.nav-item'; const SELECTOR_NAV_ITEMS = '.nav-item';
var SELECTOR_LIST_ITEMS = '.list-group-item'; const SELECTOR_LIST_ITEMS = '.list-group-item';
var SELECTOR_DROPDOWN = '.dropdown'; const SELECTOR_DROPDOWN = '.dropdown';
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
var METHOD_OFFSET = 'offset'; const METHOD_OFFSET = 'offset';
var METHOD_POSITION = 'position'; const METHOD_POSITION = 'position';
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var ScrollSpy = /*#__PURE__*/function (_BaseComponent) { class ScrollSpy extends BaseComponent__default['default'] {
_inheritsLoose(ScrollSpy, _BaseComponent); constructor(element, config) {
super(element);
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
this._config = this._getConfig(config);
this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;
this._offsets = [];
this._targets = [];
this._activeTarget = null;
this._scrollHeight = 0;
EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
this.refresh();
function ScrollSpy(element, config) { this._process();
var _this;
_this = _BaseComponent.call(this, element) || this;
_this._scrollElement = element.tagName === 'BODY' ? window : element;
_this._config = _this._getConfig(config);
_this._selector = _this._config.target + " " + SELECTOR_NAV_LINKS + ", " + _this._config.target + " " + SELECTOR_LIST_ITEMS + ", " + _this._config.target + " ." + CLASS_NAME_DROPDOWN_ITEM;
_this._offsets = [];
_this._targets = [];
_this._activeTarget = null;
_this._scrollHeight = 0;
EventHandler__default['default'].on(_this._scrollElement, EVENT_SCROLL, function (event) {
return _this._process(event);
});
_this.refresh();
_this._process();
return _this;
} // Getters } // Getters
var _proto = ScrollSpy.prototype; static get Default() {
return Default;
}
// Public static get DATA_KEY() {
_proto.refresh = function refresh() { return DATA_KEY;
var _this2 = this; } // Public
var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; refresh() {
var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
this._offsets = []; this._offsets = [];
this._targets = []; this._targets = [];
this._scrollHeight = this._getScrollHeight(); this._scrollHeight = this._getScrollHeight();
var targets = SelectorEngine__default['default'].find(this._selector); const targets = SelectorEngine__default['default'].find(this._selector);
targets.map(function (element) { targets.map(element => {
var targetSelector = getSelectorFromElement(element); const targetSelector = getSelectorFromElement(element);
var target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null; const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
if (target) { if (target) {
var targetBCR = target.getBoundingClientRect(); const targetBCR = target.getBoundingClientRect();
if (targetBCR.width || targetBCR.height) { if (targetBCR.width || targetBCR.height) {
return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector]; return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
@@ -247,20 +226,15 @@
} }
return null; return null;
}).filter(function (item) { }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
return item; this._offsets.push(item[0]);
}).sort(function (a, b) {
return a[0] - b[0];
}).forEach(function (item) {
_this2._offsets.push(item[0]);
_this2._targets.push(item[1]); this._targets.push(item[1]);
}); });
}; }
_proto.dispose = function dispose() {
_BaseComponent.prototype.dispose.call(this);
dispose() {
super.dispose();
EventHandler__default['default'].off(this._scrollElement, EVENT_KEY); EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
this._scrollElement = null; this._scrollElement = null;
this._config = null; this._config = null;
@@ -270,51 +244,55 @@
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
} // Private } // Private
;
_proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, typeof config === 'object' && config ? config : {}); _getConfig(config) {
config = { ...Default,
...(typeof config === 'object' && config ? config : {})
};
if (typeof config.target !== 'string' && isElement(config.target)) { if (typeof config.target !== 'string' && isElement(config.target)) {
var id = config.target.id; let {
id
} = config.target;
if (!id) { if (!id) {
id = getUID(NAME); id = getUID(NAME);
config.target.id = id; config.target.id = id;
} }
config.target = "#" + id; config.target = `#${id}`;
} }
typeCheckConfig(NAME, config, DefaultType); typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; }
_proto._getScrollTop = function _getScrollTop() { _getScrollTop() {
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
}; }
_proto._getScrollHeight = function _getScrollHeight() { _getScrollHeight() {
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
}; }
_proto._getOffsetHeight = function _getOffsetHeight() { _getOffsetHeight() {
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
}; }
_proto._process = function _process() { _process() {
var scrollTop = this._getScrollTop() + this._config.offset; const scrollTop = this._getScrollTop() + this._config.offset;
var scrollHeight = this._getScrollHeight(); const scrollHeight = this._getScrollHeight();
var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
if (this._scrollHeight !== scrollHeight) { if (this._scrollHeight !== scrollHeight) {
this.refresh(); this.refresh();
} }
if (scrollTop >= maxScroll) { if (scrollTop >= maxScroll) {
var target = this._targets[this._targets.length - 1]; const target = this._targets[this._targets.length - 1];
if (this._activeTarget !== target) { if (this._activeTarget !== target) {
this._activate(target); this._activate(target);
@@ -331,25 +309,23 @@
return; return;
} }
for (var i = this._offsets.length; i--;) { for (let i = this._offsets.length; i--;) {
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
if (isActiveTarget) { if (isActiveTarget) {
this._activate(this._targets[i]); this._activate(this._targets[i]);
} }
} }
}; }
_proto._activate = function _activate(target) { _activate(target) {
this._activeTarget = target; this._activeTarget = target;
this._clear(); this._clear();
var queries = this._selector.split(',').map(function (selector) { const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
return selector + "[data-bs-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
});
var link = SelectorEngine__default['default'].findOne(queries.join(',')); const link = SelectorEngine__default['default'].findOne(queries.join(','));
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE); SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
@@ -357,17 +333,13 @@
} else { } else {
// Set triggered link as active // Set triggered link as active
link.classList.add(CLASS_NAME_ACTIVE); link.classList.add(CLASS_NAME_ACTIVE);
SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(function (listGroup) { SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
// Set triggered links parents as active // Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).forEach(function (item) { SelectorEngine__default['default'].prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
return item.classList.add(CLASS_NAME_ACTIVE);
}); // Handle special case when .nav-link is inside .nav-item
SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(function (navItem) { SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(function (item) { SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
return item.classList.add(CLASS_NAME_ACTIVE);
});
}); });
}); });
} }
@@ -375,22 +347,18 @@
EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, { EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
relatedTarget: target relatedTarget: target
}); });
}; }
_proto._clear = function _clear() { _clear() {
SelectorEngine__default['default'].find(this._selector).filter(function (node) { SelectorEngine__default['default'].find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
return node.classList.contains(CLASS_NAME_ACTIVE);
}).forEach(function (node) {
return node.classList.remove(CLASS_NAME_ACTIVE);
});
} // Static } // Static
;
ScrollSpy.jQueryInterface = function jQueryInterface(config) {
static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
var data = Data__default['default'].getData(this, DATA_KEY); let data = Data__default['default'].get(this, DATA_KEY);
var _config = typeof config === 'object' && config; const _config = typeof config === 'object' && config;
if (!data) { if (!data) {
data = new ScrollSpy(this, _config); data = new ScrollSpy(this, _config);
@@ -398,28 +366,15 @@
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\""); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}); });
}; }
_createClass$1(ScrollSpy, null, [{ }
key: "Default",
get: function get() {
return Default;
}
}, {
key: "DATA_KEY",
get: function get() {
return DATA_KEY;
}
}]);
return ScrollSpy;
}(BaseComponent);
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Data Api implementation * Data Api implementation
@@ -427,10 +382,8 @@
*/ */
EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, function () { EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(function (spy) { SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy, Manipulator__default['default'].getDataAttributes(spy)));
return new ScrollSpy(spy, Manipulator__default['default'].getDataAttributes(spy));
});
}); });
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
@@ -439,21 +392,7 @@
* add .ScrollSpy to jQuery only if jQuery is present * add .ScrollSpy to jQuery only if jQuery is present
*/ */
onDOMContentLoaded(function () { defineJQueryPlugin(NAME, ScrollSpy);
var $ = getjQuery();
/* istanbul ignore if */
if ($) {
var JQUERY_NO_CONFLICT = $.fn[NAME];
$.fn[NAME] = ScrollSpy.jQueryInterface;
$.fn[NAME].Constructor = ScrollSpy;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return ScrollSpy.jQueryInterface;
};
}
});
return ScrollSpy; return ScrollSpy;

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