diff --git a/client/css/phone.css b/client/css/phone.css index 4119563..1801151 100644 --- a/client/css/phone.css +++ b/client/css/phone.css @@ -70,11 +70,13 @@ * { touch-action: pan-y; - } .sidebar, + } + .sidebar, .rightbar, .settings-sidebar { position: fixed; top: 0; + width: 60vw !important; bottom: 0; z-index: 1000; height: 100dvh; @@ -85,7 +87,6 @@ .sidebar { left: 0; - max-width: 70vw; transform: translateX(-100%); border-right: 1px solid #e0e0e0; } @@ -95,9 +96,6 @@ } .settings-sidebar { - left: 0; - max-width: 80vw; - width: 80vw !important; transform: translateX(-100%); border-right: 1px solid #e0e0e0; z-index: 1001; /* Higher than normal sidebar */ @@ -206,4 +204,32 @@ .bubble.me.private-message .bubble-content { color: white !important; background-color: transparent !important; +} + +/* Mobile theme selector styles */ +/* 移动端主题选择器样式 */ +.theme-selector { + gap: 8px; + padding: 6px 2px; + /* Ensure scrollbars are hidden on mobile too */ + scrollbar-width: none; + -ms-overflow-style: none; + /* Improve touch scrolling */ + -webkit-overflow-scrolling: touch; +} + +.theme-selector::-webkit-scrollbar { + display: none; +} + +.theme-item { + width: 70px; + height: 70px; + /* Prevent text selection on mobile */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* Prevent touch callouts */ + -webkit-touch-callout: none; } \ No newline at end of file diff --git a/client/css/style.css b/client/css/style.css index 62660aa..3c76373 100644 --- a/client/css/style.css +++ b/client/css/style.css @@ -65,12 +65,12 @@ body { } .settings-header { - display: flex; - align-items: center; - padding: 17.2px 18px 10px 17px; - background: #fff; - border-bottom: 1px solid #dcdcdc; - position: relative; + display: flex; + align-items: center; + padding: 19.2px 18px 18px 12px; + background: #fff; + border-bottom: 1px solid #dcdcdc; + position: relative; } .settings-back-btn { @@ -138,6 +138,77 @@ body { margin-top: 4px; } +/* Theme selector styles */ +/* 主题选择器样式 */ +.theme-selector { + display: flex; + gap: 12px; + overflow-x: auto; + padding: 8px 4px; + border-radius: 8px; + background: #f8f9fa; + /* Hide scrollbars */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + cursor: grab; +} + +.theme-selector::-webkit-scrollbar { + display: none; /* Webkit browsers */ +} + +.theme-selector.dragging { + cursor: grabbing; + user-select: none; +} + +.theme-item { + flex-shrink: 0; + width: 70px; + height: 70px; + border-radius: 12px; + border: 3px solid transparent; + cursor: pointer; + transition: all 0.3s ease; + user-select: none; + background-size: cover !important; + background-position: center !important; + background-repeat: no-repeat !important; + position: relative; + overflow: hidden; +} + +.theme-item::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.1); + border-radius: 9px; + transition: all 0.3s ease; +} + +.theme-item:hover { + border-color: #30a8f7; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(48, 168, 247, 0.25); +} + +.theme-item:hover::before { + background: rgba(48, 168, 247, 0.1); +} + +.theme-item.active { + border-color: #30a8f7; + box-shadow: 0 0 0 2px rgba(48, 168, 247, 0.3); +} + +.theme-item.active::before { + background: rgba(48, 168, 247, 0.15); +} + /* Old settings panel - hide */ .settings-panel { display: none !important; @@ -348,7 +419,6 @@ body { .main { display: flex; flex-direction: column; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAI/0lEQVRoQ61Z24pcVRDtM52JX+sVRRAfBB8y0cmDTz75JKjxQhAVVAgoogRviYnRj0ky7a5atapW7XN6VDTSOed0eqZr7XWp2tvl3h/nh8Nu/Bl/+RW3O3uT14txd2HP4/VkvOz+YjzYPV6H3eMLXJ+M6+N4z+757/pz+Pnpe8Z38DtZAwtiXVFeXha5W34jkABAQMfAsAi7euF2HQ92NQCPxz1BOSAClAX4t0ASmCBRELvxMIDcCEKAW9lRMGBkMDM+AxDFgIMgGAPSngswmbwMiBbNWlg/mVmBGB9Y7v95w+pLUfE2pSUy00JUMpATmHBGgiUA+v+AdGkFHGODQLomh1ZnZkwWAYjeUFZSSg1QgaME/ysjBaSDsPedkUadCG3lkwCURpfVpjeKmW0gBorBYb/f7itgRN6pEa4qq9wAMThZHpi0hDM+gJdKL6YMTe7XYIAecWmlxCYgkWCagGS55HwESEomdGQMRM0Dgt+tgLB4/GzILBKHK8hVTSAC4FGaXQIgYjmlFUyoD5GWayCoo+ztRc8glmAkAZPOpHsNBP2AsVs9pJldmQnjs+fYz657CJinyHDbixfRxL8GEwaCjFwKxFeKTZDRi2JSUp5OFbs9vSCxVUMU2aoK5lpmAIDYQfg7l3lEza6NUBlJJqb4rRiWxhlsqtkjW3Kq+DsgMwh7HqR0IGr0zcTy1MIYog0xOzqZYQhwXIlmqR6x7zKz62hU4triYc3E4rIKIIzfAhEmD0n5F4q81Og+Y3nxGFNmQJAeGKEUjU1KlYu1VTYtEyLKj6B4gPL78TqxZ+3s+MXVED1VYuW4mtT6HL0seu7sGg4zI1uyWoMSKJsgBhB7v2atNQhlgmmTE2/IZWvOUpB2nz8bC5WpdURaACMTld9uMQEQCaQxITJSNpo8pBFyuj028ZIRHRQpr21G2kg46i9GyhMmJ4I4AZB7Y/pNOYWM6ItKqtL4PCxetgdRX+SsJrELIPb30lIroYSUnA1v6vREgdgbIycD1t2HNqLU/FPDITdRHcSFSKpJKBqfDpO+ENmDqrm6AsIMbT6iQZQF32xAVr7ywoSB2A8Q+2UA+fXh+YG53r840iajtvYfWuzWLlDlpAkFbwDCWlbzHBWe0Ih1EJCSFb8/4XW/W37+HUDmV47eU8/Q7S1B6CC5ycIkJ4JoCRWGTptPCeWmVjaCCWPkijHy44MCUtEq+3HZi8+JVR6IZEoZ1VgDGQULoSfKKtOpJnOkk/gBUjJ1kQmwYoxccTB7vy537p8fsO+uOQoJJPvteLb39dCBLNpnuQ1m0nGyTRmJLzoTHDoiYBPE8ATN7RErknJZgQm7np4MaX1/r4D4cCdF5+nIhryaFNkfREIKoO6x2vrHIpVyaiNHk1KxcDLoAYDBRLByxYB8e3cAib12dWc9TCA7JbfZT30iQGFdPiEiNjaRUgLhqMGxY+UJgCELKyC3fzk/5DaVhwc57BWgbuwYXaJ5tg1SW266AInkM1JIB8/Ufw1/7NS4lpzsGZ4IWc2MfPXTm4dHVvgTFO33MrV2v1S6aayuJthc8ZISBryp+PFcPog+EdFKQD1mxeQzkM/vAIhvUe3qgGIzFKAyzTymcSKInhAdmTqqlhxFGwNrAJZC3txiTuJzMYDOzWZX/YLSKn9k/N76YQAZlQIMgfBsqqdXNs409eTcsK2v/LT6iNAa8lg8Rww0OQXAZkc5lbTM3CmxkNpy87s3BpAAIdJCAFTc5tAXY4cb+jBHEOehLiHIBCxY6lTBUXh2abKgbFBOAOY+oVcChI8o734zgDgT4g/fKM0nhP3gGclUQBBIHCtUOrjX4skCZiUWKAxkxLJfdGBMrhxV7HvfuW1ABgh6Q/xRBwa1wdKdZNszCBDoPxggiGCiFe6ry75gq42C2R+w8j2tdFCsBRqMvP319RG/kBZPP7TT6z5iHbOdEW5D1chWKL/Qi2bxXjCfIZl6FSAHE5+1K8aTkmRurN768ro3RADRg4WQUiZUnT1Vs9OurPvoLTlhxRXIqRa/FyDiBWcpvbAGwEVbzr8AED2+4TC4mpuiAVbPCyDs2OMfmrHpAVlRA+IARuEEcqogFBxDICSmbCQT7svx39lnJi09OewjPcYPlJ5MZN8oRoyPithiRHXu0gkACuZ0v09QXWKQESRVgaHSzeng9U/PnJHcLNk9+8Q0gvRxj6Ne9QztHUwmSsOuXHmbVu3eX7yPKXb2SXV2OWgIj2DrG5J+7dYAEj4goBnI0SFwOumobSgbmyUSVrRA2P1+d1VAXBVG+LnqGf2QwftRnmlJ33r1k7PVDtFP4bdGkJkSWw5rH/G+dm72CI/SPUxeTAwg49kBDEAdiG2UpPlFE81hcgbh7Wss4SsfdyB5EBE0zEf6xJIQYqpFGyn6E0iY1zxBKTkbzkoxY+/Z6FGMALx6g78fU3RsyNiEX/4IQJBQ8r+IM6G25inwEGEVjKyboOd/RC6AoHAHMIpWQAS59sjkjQDBhUs1vPThmZ9rHfdFB6ItUIGk8SRdNIFQaIBQQC4vpBY/U/MUJGbzGXxRTCQjlPWLN6+BESYVY7Zt8aL8dlFG+qheIzjk4f4wJkI6kNR+95R6hGDi8z7KZP+IY1HKKHZpyYax9MIH17xNtPHjWOMLZ9MfxUjIKoyI6EViVe8oY6e86JOQXWuM0Qz7jlG+Wb1pQJ43IGQkDb6Kp0qnZKUmXZVV7exiXhKzd5MbI2V6SivluAGk/peCG0XCfzw+934wchSEBmxELZuQpAcSBRrGUFdG51jCqKW0mtml19TevLp5gjgmr2cDiO675xMQxd7ktAFk3murR6yPqKwSmMSuMcO009kqFypMn7kZElsciHhiPU9BZgSzCSQYUj1j39HNTiDaQxgA87zFPqS/s40kInH3/jPvQVqhrOmG2VZAkN8xGpCRCQjN3oCIoXsPgU/cI5lYSLp1M5T4nZhJICsmVn4vgWlnVe2q0bk3T2lJZ8+xRCLZ2LLJGJ+PPcjmeNLB5HnZ04ORZEPMsT7h+edA0Ee6tNTwLi1hyGewGPEdSAyaZLZFcDvkDtmPz/8FWbQaff2vbC4AAAAASUVORK5CYII=) !important; background-size: 100% 100%; position: relative; flex: 2.5; diff --git a/client/js/main.js b/client/js/main.js index e8e7d75..d097f63 100644 --- a/client/js/main.js +++ b/client/js/main.js @@ -25,6 +25,12 @@ import { notifyMessage // 通知信息提示 / Display notification message } from './util.settings.js'; +// 从 util.theme.js 中导入主题功能函数 +// Import theme functions from util.theme.js +import { + initTheme // 初始化主题 / Initialize theme +} from './util.theme.js'; + // 从 util.dom.js 中导入常用 DOM 操作函数 // Import common DOM manipulation functions from util.dom.js import { @@ -67,7 +73,8 @@ import { renderUserList, // 渲染用户列表 / Render user list // 设置全局配置参数 // Set global configuration parameters window.config = { - wsAddress: `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}`, // WebSocket 服务器地址 / WebSocket server address + //wsAddress: `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}`, // WebSocket 服务器地址 / WebSocket server address + wsAddress: `ws://127.0.0.1:8787`, debug: true // 是否开启调试模式 / Enable debug mode }; @@ -103,7 +110,6 @@ window.addEventListener('DOMContentLoaded', () => { preventSpaceInput($id('userName')); preventSpaceInput($id('roomName')); preventSpaceInput($id('password')); - // 初始化辅助功能和界面设置 // Initialize autofill, input placeholders, and menus autofillRoomPwd(); @@ -112,6 +118,7 @@ window.addEventListener('DOMContentLoaded', () => { setupImagePreview(); setupEmojiPicker(); initSettings(); + initTheme(); // 初始化主题 / Initialize theme const settingsBtn = $id('settings-btn'); // 设置按钮 / Settings button if (settingsBtn) { settingsBtn.onclick = (e) => { diff --git a/client/js/util.settings.js b/client/js/util.settings.js index eabb295..c9f281d 100644 --- a/client/js/util.settings.js +++ b/client/js/util.settings.js @@ -10,11 +10,16 @@ import { addClass, removeClass } from './util.dom.js'; + +// Import theme utilities +// 导入主题工具函数 +import { THEMES, getCurrentTheme, applyTheme } from './util.theme.js'; // Default settings // 默认设置 const DEFAULT_SETTINGS = { notify: false, - sound: false + sound: false, + theme: 'theme1' }; // Load settings from localStorage @@ -37,11 +42,13 @@ function loadSettings() { function saveSettings(settings) { const { notify, - sound + sound, + theme } = settings; localStorage.setItem('settings', JSON.stringify({ notify, - sound + sound, + theme })) } @@ -68,8 +75,7 @@ function setupSettingsPanel() { const settingsContent = $id('settings-content'); if (!settingsSidebar || !settingsContent) return; - const settings = loadSettings(); - // Create settings content HTML + const settings = loadSettings(); // Create settings content HTML settingsContent.innerHTML = `
通知设置
@@ -91,6 +97,14 @@ function setupSettingsPanel() {
+
+
主题设置
+
+ ${THEMES.map(theme => ` +
+
+ `).join('')} +
`; @@ -133,8 +147,7 @@ function setupSettingsPanel() { settingsSidebar._notificationShown = false; } } - }); - on(soundCheckbox, 'change', e => { + }); on(soundCheckbox, 'change', e => { settings.sound = e.target.checked; if (settings.sound) { settings.notify = false; @@ -143,6 +156,154 @@ function setupSettingsPanel() { saveSettings(settings); applySettings(settings) }); + // Theme selection event handlers + // 主题选择事件处理 + const themeSelector = $('#theme-selector', settingsContent); + if (themeSelector) { + // Custom scrolling functionality + // 自定义滚动功能 + let isDragging = false; + let startX = 0; + let scrollLeft = 0; + + // Mouse wheel scrolling (vertical -> horizontal) + // 鼠标滚轮滚动(垂直转水平) + on(themeSelector, 'wheel', e => { + e.preventDefault(); + const scrollAmount = e.deltaY * 0.5; // Adjust scroll sensitivity + themeSelector.scrollLeft += scrollAmount; + }); + // Mouse drag scrolling + // 鼠标拖拽滚动 + let dragStartTime = 0; + let hasDragged = false; + + on(themeSelector, 'mousedown', e => { + isDragging = true; + hasDragged = false; + dragStartTime = Date.now(); + startX = e.pageX - themeSelector.offsetLeft; + scrollLeft = themeSelector.scrollLeft; + themeSelector.classList.add('dragging'); + e.preventDefault(); // Prevent text selection + }); + on(document, 'mousemove', e => { + if (!isDragging) return; + e.preventDefault(); + const x = e.pageX - themeSelector.offsetLeft; + const walk = (x - startX) * 2; // Scroll speed multiplier + const moved = Math.abs(walk); + + // If moved more than 5px, consider it a drag + if (moved > 5) { + hasDragged = true; + } + + themeSelector.scrollLeft = scrollLeft - walk; + }); + + on(document, 'mouseup', () => { + if (isDragging) { + isDragging = false; + themeSelector.classList.remove('dragging'); + } + }); + // Touch support for mobile + // 移动端触摸支持 + let touchStartX = 0; + let touchScrollLeft = 0; + let touchStartTime = 0; + let touchHasMoved = false; + + on(themeSelector, 'touchstart', e => { + touchStartX = e.touches[0].clientX; + touchScrollLeft = themeSelector.scrollLeft; + touchStartTime = Date.now(); + touchHasMoved = false; + }); + + on(themeSelector, 'touchmove', e => { + e.preventDefault(); + const touchX = e.touches[0].clientX; + const walk = (touchStartX - touchX) * 1.5; // Touch scroll sensitivity + + // If moved more than 10px, consider it a swipe + if (Math.abs(walk) > 10) { + touchHasMoved = true; + } + + themeSelector.scrollLeft = touchScrollLeft + walk; + }); + + // Handle touch end for theme selection + // 处理触摸结束的主题选择 + on(themeSelector, 'touchend', e => { + // If user swiped, don't trigger theme selection + // 如果用户滑动过,不触发主题选择 + if (touchHasMoved) { + touchHasMoved = false; + return; + } + + // Check if it was a quick tap + // 检查是否是快速点击 + const tapDuration = Date.now() - touchStartTime; + if (tapDuration > 300) { + return; + } + + const themeItem = e.target.closest('.theme-item'); + if (themeItem) { + const themeId = themeItem.dataset.themeId; + if (themeId && themeId !== settings.theme) { + // Update active state + $$('.theme-item', themeSelector).forEach(item => { + item.classList.remove('active'); + }); + themeItem.classList.add('active'); + + // Apply theme and save settings + settings.theme = themeId; + applyTheme(themeId); + saveSettings(settings); + } + } + }); + // Theme selection click handler + // 主题选择点击处理器 + on(themeSelector, 'click', e => { + // If user just dragged, don't trigger theme selection + // 如果用户刚刚拖拽过,不触发主题选择 + if (hasDragged) { + hasDragged = false; + return; + } + + // Also check if it was a quick click (less than 200ms and minimal movement) + // 同时检查是否是快速点击(少于200ms且移动很少) + const clickDuration = Date.now() - dragStartTime; + if (clickDuration > 200) { + return; + } + + const themeItem = e.target.closest('.theme-item'); + if (themeItem) { + const themeId = themeItem.dataset.themeId; + if (themeId && themeId !== settings.theme) { + // Update active state + $$('.theme-item', themeSelector).forEach(item => { + item.classList.remove('active'); + }); + themeItem.classList.add('active'); + + // Apply theme and save settings + settings.theme = themeId; + applyTheme(themeId); + saveSettings(settings); + } + } + }); + } } // Check if device is mobile @@ -207,7 +368,13 @@ function closeSettingsPanel() { // 页面加载时初始化设置 function initSettings() { const settings = loadSettings(); - applySettings(settings) + applySettings(settings); + + // Apply theme from settings + // 从设置中应用主题 + if (settings.theme) { + applyTheme(settings.theme); + } } // Maximum notification text length diff --git a/client/js/util.theme.js b/client/js/util.theme.js new file mode 100644 index 0000000..b1a57d9 --- /dev/null +++ b/client/js/util.theme.js @@ -0,0 +1,123 @@ +// Theme utility functions +// 主题工具函数 + +// Theme data - simplified structure +// 主题数据 - 简化结构 +export const THEMES = [ + { + id: 'theme1', + background: 'url(data:image/png;base64,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)' + }, + { + id: 'theme2', + background: 'url(data:image/png;base64,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)' + }, + { + id: 'theme3', + background: 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAILElEQVRoQ7WZiY4cRRBEt3f//2O86wODkcH4QkhISEhICCFukK8vsHeozIzIjMqumV0jYWnonp6j81VEZNYs29d33h3O7N9m/znEgU/9GNfyuNXzc1w/H9fOx/vsYe+dn4/r46J9nq/zu/w++D7cFvePkrSOvCAn9a7xPS8BQoAz+eKCWsNEYVbgXDxBWPxNIPPCxYLeBKIQ/nmCTPS3hEkFDEZUmc4BGSoEtB1DDTnfKXAcpkPY8wnkNAxVGatvRQGWljoFYu9V6I8FWdlKry1BTsFMeRmrWbmYFblIdcJylQ9RxNXYK1L37+u+xuG7thcjI5kPea9fkwYQ70GYXZEKsAM1a12YpXD9/wIhhCtiIJMKCgPCtAJWkJ2pwozAN6CLYyBTBqVpTjk5rYhC2JImyBIG8lOJbMM7Ncpmx7MCi+Gz2hFX96YDuqEUj0swKcIPTDZbgUxzJCzlCo3Vr2xci9W6xWomBcBekSq+5tqqU/HTx0GERrPhiiiIBNlmhVvpTCHmGaPtV7/3mLUDaG8x4tkr/rAFZ0b8M6lArUneUCzh3Qtdy4tj0McxYPDQ7tXmSAc5DTMjaT4MYlYkgz270qWXVslutQ48QLSDcfLfAmQFs7QUiqci1xn2nZUCxoqe9l9iqxhyYbWuQKoiiuhei8PRvzsHQY/1/HzuUqHCNaqz4/biEptGfM5r721XgDIjJ0ASLG2mw3PeiN5kqd6lMhcCsQeZMhI5yBtRDTnGVuVI69Ws+NpgmzIqsc/xe9m1TukxZcIBwicG4I9RRCmi9oICFX5Mcga+wews1iBcocO8acw54lXePPz4DstDZePs7MOACEWuxFpUgMalQlJ4wNVvjOpa2ExOEDLxHQTv8f7R50e8vp4XoYAChBrb2QccAySXh0HBJR8cda75mFow8lK/T9AAYCO/PkC4hbd18q/28o4LsrIUAx4AQxGDscV9frd+IbJL4S5ou2i/uDsBdBvft+m0Uv6CJIQcA8Qgah2ZE3Wbhlu7lBVvirwHzPb8nvzUraWKoKvFTBkq1LKivxRzI0k1aCk7JsisRgZefNW7U7XbUIFqGMh7myPP76u1/O7QPfUPe+0gUAyh0v/IhRcdc8KCrudcIwfAbVwNgHRLuRLjoikQANGpqIaDPHsAEKrRQc5pLeSFMyVVqdXNzgQ1EmJSxdYFvzbtq7uPJDJRfGu1CLhnA2oY0Pbs4bvDoUOg+GgzR5SxD+ukd04E2o7oTK6GF1xHvx2uTWEPgUIcnNNSqgYh7GhqOMjTT4ci404HKtHOM/jjOgckrVZ/1iEA1GnFu1ITDFRhEFg57OWXx25wzgXa7bg4g4yM2ED86tFbr8JB/Cg50XNpBPUno/qDhEOlClUoIc6HR9xSVIK24tIzI6qEwHxARsxOaivaa3vy+O2BEKlMB3KzownYDXW2SGDL+2KjAUBrOcQ1YQIspxzUCTWwKfQjAn4CxMC2L58QBPYafzXwzFClXU5i6dzbDD5jZBUwVrb6rgKUoCJyzTsWAeSoIJ4Nh5C22+xlqmxfPB0gFwLhFmuZ4fSqKZabgeAJgCnEKLIUCDAvHlBoSamKA6gaUMFAvOUOq00T3eDGNd9rPX5piozCTQmFMEWWaqBiLz3+sYXm/GwWsiUNW8FOAuTOtHUY15YgtBRU8f2V2Ix7ru3zb95ERhwESqStYDHdiy02R3lJ5kOsPH44wU4Eyv03AIwgIa6HviwakLQXVfHiqVaswdn26NsAMUVoqQz/WEZXJS2Fc9ch7KSnVMT3T1x1L7aA7K7x2vhuvEePVqCDWMcSIHteANGK83UL+2ffEWSvxjEIR/A9d9vwIbAR4DA7gUqF9EjZibYSe/mKEwYfsdlCmBITGXn4/ZsYiMzIKDCGo1WBnLBwHEWLUCbeWq3UzlMRKZxZCGOHIgLhauB5KYMWnDaDYmgxbA7bJz+8zoHI6e5DEXbK1VeY2VFIK0MvQIChGofyQhSsjw4xskIYuBMi47qum5X74McBAhVym6LZ6Cow+JWQigvmiO4t2JESRpUgiImm5wrlLo08TPMzjBBJHa9v938qkACiTxa26koojFoLd0wIFEY77dQAhMOw4HHOjGTkWDy8HSBW9FDk/s+vDbg2jVTjZC46Qbqrlgl+yBmxUCJVSBCsfMsJQRDHmDs5huPe271fAiSCXdmAYvuK5cocejEtVtVvLC32MEzvaoyBEKqMwm3lJSsa+FQHSgRIwNIAnALb3V9hLYG4VcAJ1Gj8JnjMEBJugEwAPfi0WB4jnJGJiiXPt7u/mSKlRP7vqxbq3eovws6b7LYdvUN9FEgFnSRaC9XZrn5/lT8q/hOEd5XZb1RlpYir0EHG8wx6zpW5U6UKcq9cOEvG1R8BsoJY/s/FbqXUWyQXa7nPmyLXmREAEIzvtXYLoCngRyA8+ld/voqwa5eymlbzouUiv5cnGkq7plsPbbGqCNXw9xYAQVJdWbBpLfFku/xrKKIQ0ZZP/9Ow6Q3YTW5QxKzFoJfVsAmkEjJT/BZ9sdqiBogociOEdI6kFSXSy224qb1YfHWt1oZ1IdiljoHg9e3y71LkNhApQA84XzAoPNi9dhAIvIJMw5Eg+j2rLIpvAuSYnXyrvneZdgt/tWfjNiA2CD0rezWy2/F7uip6T8bbQHbBPrUxXFhr8u9qNTXoOsVlunPCTz955btW7VcH43b5zwDRRT/WrXrrW4Q8B2G31y1BslNp613lb2Hr7c4ASY5TLXfV/rRLqfwrELvW9lXxHC2XSuF9mS+qohnUvKD4fwGp+WO7kGoa+gAAAABJRU5ErkJggg==)' + }, + { + id: 'theme4', + background: 'url(data:image/png;base64,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)' + }, + { + id: 'theme5', + background: 'url(data:image/png;base64,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)' + }, + { + id: 'theme6', + background: 'url(data:image/png;base64,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)' + }, + { + id: 'theme7', + background: 'url(data:image/png;base64,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)' + }, { + id: 'theme8', + background: 'url(data:image/png;base64,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)' + } +]; + +// Get current theme from settings +// 从设置中获取当前主题 +export function getCurrentTheme() { + try { + const settings = JSON.parse(localStorage.getItem('settings') || '{}'); + + // If no theme is set (first-time visitor), randomly select one + // 如果没有设置主题(首次访问),随机选择一个 + if (!settings.theme) { + const randomIndex = Math.floor(Math.random() * THEMES.length); + const randomTheme = THEMES[randomIndex]; + + // Save the randomly selected theme to settings + // 将随机选择的主题保存到设置中 + settings.theme = randomTheme.id; + localStorage.setItem('settings', JSON.stringify(settings)); + + return randomTheme; + } + + const themeId = settings.theme; + return THEMES.find(theme => theme.id === themeId) || THEMES[0]; + } catch { + // If there's an error, select a random theme for fallback + // 如果出现错误,随机选择一个主题作为备选 + const randomIndex = Math.floor(Math.random() * THEMES.length); + return THEMES[randomIndex]; + } +} + +// Apply theme to the document +// 应用主题到文档 +export function applyTheme(themeId) { + const theme = THEMES.find(t => t.id === themeId); + if (!theme) { + console.warn(`Theme with id "${themeId}" not found`); + return false; + } + + const mainElement = document.querySelector('.main'); + if (mainElement) { + // Clear any existing background + mainElement.style.backgroundImage = ''; + mainElement.style.background = ''; + + // Apply new background + if (theme.background.startsWith('url(')) { + mainElement.style.backgroundImage = theme.background; + mainElement.style.backgroundSize = '100% 100%'; + mainElement.style.backgroundRepeat = 'no-repeat'; + mainElement.style.backgroundPosition = 'center'; + } else { + mainElement.style.background = theme.background; + } + // Add transition effect for smooth theme switching + // 添加过渡效果,实现平滑的主题切换 + mainElement.style.transition = 'background 0.5s ease-in-out, background-image 0.5s ease-in-out'; + + console.log(`Applied theme: ${themeId}`); + return true; + } else { + console.warn('Main element not found'); + return false; + } +} + +// Initialize theme on page load +// 页面加载时初始化主题 +export function initTheme() { + const currentTheme = getCurrentTheme(); + applyTheme(currentTheme.id); +} + +// Get theme by ID +// 根据ID获取主题 +export function getThemeById(themeId) { + return THEMES.find(theme => theme.id === themeId); +} + +// Get all available themes +// 获取所有可用主题 +export function getAllThemes() { + return THEMES; +}