diff options
| author | XhmikosR <[email protected]> | 2022-12-18 23:32:17 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-12-18 14:32:17 -0700 |
| commit | e1315d11f2fb9a43b96dd48bf8f9aaf5305372b2 (patch) | |
| tree | a1f09437ae0d47979c6e157e8dffcd1867a0ca82 /site/static/docs | |
| parent | 6807008159012b9cf370db87dcd804c4cae3a1b5 (diff) | |
| download | bootstrap-e1315d11f2fb9a43b96dd48bf8f9aaf5305372b2.tar.xz bootstrap-e1315d11f2fb9a43b96dd48bf8f9aaf5305372b2.zip | |
docs: move color-mode script (#37658)
* docs: move color-mode script
* Move color-modes.js in static folder
* Async load color-modes.js
* Switch to DOMContentLoaded
* Revert async loading
Diffstat (limited to 'site/static/docs')
| -rw-r--r-- | site/static/docs/5.2/assets/js/color-modes.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/site/static/docs/5.2/assets/js/color-modes.js b/site/static/docs/5.2/assets/js/color-modes.js new file mode 100644 index 000000000..41b6b893e --- /dev/null +++ b/site/static/docs/5.2/assets/js/color-modes.js @@ -0,0 +1,62 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const storedTheme = localStorage.getItem('theme') + + const getPreferredTheme = () => { + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = function (theme) { + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = theme => { + 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') + }) + + btnToActive.classList.add('active') + activeThemeIcon.setAttribute('href', svgOfActiveBtn) + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + 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') + localStorage.setItem('theme', theme) + setTheme(theme) + showActiveTheme(theme) + }) + }) + }) +})() |
