DarkMode.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. export default class DarkMode {
  2. constructor(Dcat) {
  3. this.options = {
  4. sidebar_dark: Dcat.config.sidebar_dark,
  5. dark_mode: Dcat.config.dark_mode,
  6. class: {
  7. dark: 'dark-mode',
  8. sidebarLight: Dcat.config.sidebar_light_style || 'sidebar-light-primary',
  9. sidebarDark: 'sidebar-dark-white',
  10. }
  11. };
  12. Dcat.darkMode = this;
  13. }
  14. // 暗黑模式切换按钮
  15. initSwitcher (selector) {
  16. var storage = localStorage || {setItem:function () {}, getItem: function () {}},
  17. darkMode = this,
  18. key = 'dcat-admin-theme-mode',
  19. mode = storage.getItem(key),
  20. icon = '.dark-mode-switcher i';
  21. function switchMode(dark) {
  22. if (dark) {
  23. $(icon).addClass('icon-sun').removeClass('icon-moon');
  24. darkMode.display(true);
  25. return;
  26. }
  27. darkMode.display(false);
  28. $(icon).removeClass('icon-sun').addClass('icon-moon');
  29. }
  30. if (mode === 'dark') {
  31. switchMode(true);
  32. } else if (mode === 'def') {
  33. switchMode(false)
  34. }
  35. $(document).off('click', selector).on('click', selector, function () {
  36. $(icon).toggleClass('icon-sun icon-moon');
  37. if ($(icon).hasClass('icon-moon')) {
  38. switchMode(false);
  39. storage.setItem(key, 'def');
  40. } else {
  41. storage.setItem(key, 'dark');
  42. switchMode(true)
  43. }
  44. })
  45. window.addEventListener('storage', function (event) {
  46. if (event.key === key) {
  47. if (event.newValue === 'dark') {
  48. switchMode(true);
  49. } else if (event.newValue === 'def') {
  50. switchMode(false)
  51. }
  52. }
  53. });
  54. }
  55. toggle() {
  56. if ($('body').hasClass(this.options.class.dark)) {
  57. this.display(false)
  58. } else {
  59. this.display(true)
  60. }
  61. }
  62. display(show) {
  63. let $document = $(document),
  64. $body = $('body'),
  65. $sidebar = $('.main-menu .main-sidebar'),
  66. options = this.options,
  67. cls = options.class;
  68. if (show) {
  69. $body.addClass(cls.dark);
  70. $sidebar.removeClass(cls.sidebarLight).addClass(cls.sidebarDark);
  71. $document.trigger('dark-mode.shown');
  72. return;
  73. }
  74. $body.removeClass(cls.dark);
  75. if (! options.sidebar_dark) {
  76. $sidebar.addClass(cls.sidebarLight).removeClass(cls.sidebarDark);
  77. }
  78. $document.trigger('dark-mode.hide');
  79. }
  80. }