😎 Give your xaringan slides some style
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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();