DarkMode.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. }
  46. toggle() {
  47. if ($('body').hasClass(this.options.class.dark)) {
  48. this.display(false)
  49. } else {
  50. this.display(true)
  51. }
  52. }
  53. display(show) {
  54. let $document = $(document),
  55. $body = $('body'),
  56. $sidebar = $('.main-menu .main-sidebar'),
  57. options = this.options,
  58. cls = options.class;
  59. if (show) {
  60. $body.addClass(cls.dark);
  61. $sidebar.removeClass(cls.sidebarLight).addClass(cls.sidebarDark);
  62. $document.trigger('dark-mode.shown');
  63. return;
  64. }
  65. $body.removeClass(cls.dark);
  66. if (! options.sidebar_dark) {
  67. $sidebar.addClass(cls.sidebarLight).removeClass(cls.sidebarDark);
  68. }
  69. $document.trigger('dark-mode.hide');
  70. }
  71. }