DarkMode.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. icon = '.dark-mode-switcher i';
  20. function switchMode(theme) {
  21. switch (theme) {
  22. case 'dark': {
  23. $(icon).addClass('icon-sun').removeClass('icon-moon');
  24. darkMode.display(true);
  25. break;
  26. }
  27. case 'def': {
  28. darkMode.display(false);
  29. $(icon).removeClass('icon-sun').addClass('icon-moon');
  30. break;
  31. }
  32. default: {
  33. break;
  34. }
  35. }
  36. }
  37. switchMode(storage.getItem(key));
  38. $(document).off('click', selector).on('click', selector, function () {
  39. $(icon).toggleClass('icon-sun icon-moon');
  40. if ($(icon).hasClass('icon-moon')) {
  41. switchMode('def');
  42. storage.setItem(key, 'def');
  43. } else {
  44. storage.setItem(key, 'dark');
  45. switchMode('dark')
  46. }
  47. })
  48. window.addEventListener('storage', function (event) {
  49. if (event.key === key) {
  50. switchMode(event.newValue);
  51. }
  52. });
  53. }
  54. toggle() {
  55. if ($('body').hasClass(this.options.class.dark)) {
  56. this.display(false)
  57. } else {
  58. this.display(true)
  59. }
  60. }
  61. display(show) {
  62. let $document = $(document),
  63. $body = $('body'),
  64. $sidebar = $('.main-menu .main-sidebar'),
  65. options = this.options,
  66. cls = options.class;
  67. if (show) {
  68. $body.addClass(cls.dark);
  69. $sidebar.removeClass(cls.sidebarLight).addClass(cls.sidebarDark);
  70. $document.trigger('dark-mode.shown');
  71. return;
  72. }
  73. $body.removeClass(cls.dark);
  74. if (! options.sidebar_dark) {
  75. $sidebar.addClass(cls.sidebarLight).removeClass(cls.sidebarDark);
  76. }
  77. $document.trigger('dark-mode.hide');
  78. }
  79. }