| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- export default class DarkMode {
- constructor(Dcat) {
- this.options = {
- sidebar_dark: Dcat.config.sidebar_dark,
- dark_mode: Dcat.config.dark_mode,
- class: {
- dark: 'dark-mode',
- sidebarLight: Dcat.config.sidebar_light_style || 'sidebar-light-primary',
- sidebarDark: 'sidebar-dark-white',
- }
- };
- Dcat.darkMode = this;
- }
- // 暗黑模式切换按钮
- initSwitcher (selector) {
- var storage = localStorage || {setItem:function () {}, getItem: function () {}},
- darkMode = this,
- key = 'dcat-admin-theme-mode',
- icon = '.dark-mode-switcher i';
- function switchMode(theme) {
- switch (theme) {
- case 'dark': {
- $(icon).addClass('icon-sun').removeClass('icon-moon');
- darkMode.display(true);
- break;
- }
- case 'def': {
- darkMode.display(false);
- $(icon).removeClass('icon-sun').addClass('icon-moon');
- break;
- }
- default: {
- break;
- }
- }
- }
- switchMode(storage.getItem(key));
- $(document).off('click', selector).on('click', selector, function () {
- $(icon).toggleClass('icon-sun icon-moon');
- if ($(icon).hasClass('icon-moon')) {
- switchMode('def');
- storage.setItem(key, 'def');
- } else {
- storage.setItem(key, 'dark');
- switchMode('dark')
- }
- })
- window.addEventListener('storage', function (event) {
- if (event.key === key) {
- switchMode(event.newValue);
- }
- });
- }
- toggle() {
- if ($('body').hasClass(this.options.class.dark)) {
- this.display(false)
- } else {
- this.display(true)
- }
- }
- display(show) {
- let $document = $(document),
- $body = $('body'),
- $sidebar = $('.main-menu .main-sidebar'),
- options = this.options,
- cls = options.class;
- if (show) {
- $body.addClass(cls.dark);
- $sidebar.removeClass(cls.sidebarLight).addClass(cls.sidebarDark);
- $document.trigger('dark-mode.shown');
- return;
- }
- $body.removeClass(cls.dark);
- if (! options.sidebar_dark) {
- $sidebar.addClass(cls.sidebarLight).removeClass(cls.sidebarDark);
- }
- $document.trigger('dark-mode.hide');
- }
- }
|