😎 Give your xaringan slides some style
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

86 lines
2.4KB

  1. /*!
  2. * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
  3. * Copyright 2011-2023 The Bootstrap Authors
  4. * Licensed under the Creative Commons Attribution 3.0 Unported License.
  5. * Updates for {pkgdown} by the {bslib} authors, also licensed under CC-BY-3.0.
  6. */
  7. const getStoredTheme = () => localStorage.getItem('theme')
  8. const setStoredTheme = theme => localStorage.setItem('theme', theme)
  9. const getPreferredTheme = () => {
  10. const storedTheme = getStoredTheme()
  11. if (storedTheme) {
  12. return storedTheme
  13. }
  14. return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
  15. }
  16. const setTheme = theme => {
  17. if (theme === 'auto') {
  18. document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'))
  19. } else {
  20. document.documentElement.setAttribute('data-bs-theme', theme)
  21. }
  22. }
  23. function bsSetupThemeToggle () {
  24. 'use strict'
  25. const showActiveTheme = (theme, focus = false) => {
  26. var activeLabel, activeIcon;
  27. document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
  28. const buttonTheme = element.getAttribute('data-bs-theme-value')
  29. const isActive = buttonTheme == theme
  30. element.classList.toggle('active', isActive)
  31. element.setAttribute('aria-pressed', isActive)
  32. if (isActive) {
  33. activeLabel = element.textContent;
  34. activeIcon = element.querySelector('span').classList.value;
  35. }
  36. })
  37. const themeSwitcher = document.querySelector('#dropdown-lightswitch')
  38. if (!themeSwitcher) {
  39. return
  40. }
  41. themeSwitcher.setAttribute('aria-label', activeLabel)
  42. themeSwitcher.querySelector('span').classList.value = activeIcon;
  43. if (focus) {
  44. themeSwitcher.focus()
  45. }
  46. }
  47. window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
  48. const storedTheme = getStoredTheme()
  49. if (storedTheme !== 'light' && storedTheme !== 'dark') {
  50. setTheme(getPreferredTheme())
  51. }
  52. })
  53. window.addEventListener('DOMContentLoaded', () => {
  54. showActiveTheme(getPreferredTheme())
  55. document
  56. .querySelectorAll('[data-bs-theme-value]')
  57. .forEach(toggle => {
  58. toggle.addEventListener('click', () => {
  59. const theme = toggle.getAttribute('data-bs-theme-value')
  60. setTheme(theme)
  61. setStoredTheme(theme)
  62. showActiveTheme(theme, true)
  63. })
  64. })
  65. })
  66. }
  67. setTheme(getPreferredTheme());
  68. bsSetupThemeToggle();