From d05df27309bbd478a0e8673b7a422de7f5de4d69 Mon Sep 17 00:00:00 2001 From: actions-user Date: Sat, 8 Nov 2025 00:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=9E=20Sync=202025-11-08=2000:10:39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/view/bandix/connection.js | 102 +- .../resources/view/bandix/index.js | 275 +- .../luasrc/controller/passwall.lua | 3 +- .../view/passwall/node_list/link_add_node.htm | 207 +- .../view/passwall/node_list/node_list.htm | 9 +- .../root/usr/share/passwall/app.sh | 18 + .../root/usr/share/passwall/iptables.sh | 1 - .../root/usr/share/passwall/nftables.sh | 22 +- .../root/usr/share/passwall/subscribe.lua | 6 +- luci-app-quickstart/Makefile | 2 +- .../htdocs/luci-static/quickstart/index.js | 6 +- .../htdocs/luci-static/quickstart/style.css | 2 +- luci-theme-kucat/Makefile | 23 - .../luci-static/kucat/browserconfig.xml | 19 - .../htdocs/luci-static/kucat/css/style.css | 5074 ----------------- .../htdocs/luci-static/kucat/css/theme.css | 8 - .../htdocs/luci-static/kucat/favicon.ico | Bin 15406 -> 0 bytes .../htdocs/luci-static/kucat/fonts/kucat.eot | Bin 21516 -> 0 bytes .../htdocs/luci-static/kucat/fonts/kucat.svg | 100 - .../htdocs/luci-static/kucat/fonts/kucat.ttf | Bin 21324 -> 0 bytes .../htdocs/luci-static/kucat/fonts/kucat.woff | Bin 21400 -> 0 bytes .../htdocs/luci-static/kucat/img/bg1.jpg | Bin 808524 -> 0 bytes .../htdocs/luci-static/kucat/img/logo150.png | Bin 24223 -> 0 bytes .../htdocs/luci-static/kucat/img/logo180.png | Bin 13477 -> 0 bytes .../htdocs/luci-static/kucat/img/logo310.png | Bin 32850 -> 0 bytes .../htdocs/luci-static/kucat/img/logo512.png | Bin 22161 -> 0 bytes .../htdocs/luci-static/kucat/img/logo70.png | Bin 21971 -> 0 bytes .../htdocs/luci-static/kucat/img/logow.svg | 31 - .../luci-static/kucat/img/logow310x150.png | Bin 11704 -> 0 bytes .../htdocs/luci-static/kucat/js/footend.js | 42 - .../htdocs/luci-static/kucat/js/initMode.js | 87 - .../htdocs/luci-static/kucat/js/style.js | 60 - .../htdocs/luci-static/kucat/js/switcher.js | 120 - .../htdocs/luci-static/kucat/logo.png | Bin 9253 -> 0 bytes .../htdocs/luci-static/kucat/logo.svg | 31 - .../htdocs/luci-static/kucat/manifest.json | 50 - .../luci-static/resources/menu-kucat.js | 217 - luci-theme-kucat/luasrc/controller/api.lua | 74 - .../luasrc/view/themes/kucat/footer.htm | 25 - .../luasrc/view/themes/kucat/header.htm | 346 -- .../root/etc/uci-defaults/30_luci-kuacat | 13 - .../root/usr/libexec/kucat/kucat_wallpaper | 99 - .../root/usr/libexec/kucat/kucat_word | 96 - 43 files changed, 452 insertions(+), 6716 deletions(-) delete mode 100644 luci-theme-kucat/Makefile delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/browserconfig.xml delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/css/style.css delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/css/theme.css delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/favicon.ico delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/fonts/kucat.eot delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/fonts/kucat.svg delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/fonts/kucat.ttf delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/fonts/kucat.woff delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/bg1.jpg delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logo150.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logo180.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logo310.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logo512.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logo70.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logow.svg delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/img/logow310x150.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/js/footend.js delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/js/initMode.js delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/js/style.js delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/js/switcher.js delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/logo.png delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/logo.svg delete mode 100644 luci-theme-kucat/htdocs/luci-static/kucat/manifest.json delete mode 100644 luci-theme-kucat/htdocs/luci-static/resources/menu-kucat.js delete mode 100644 luci-theme-kucat/luasrc/controller/api.lua delete mode 100644 luci-theme-kucat/luasrc/view/themes/kucat/footer.htm delete mode 100644 luci-theme-kucat/luasrc/view/themes/kucat/header.htm delete mode 100644 luci-theme-kucat/root/etc/uci-defaults/30_luci-kuacat delete mode 100644 luci-theme-kucat/root/usr/libexec/kucat/kucat_wallpaper delete mode 100644 luci-theme-kucat/root/usr/libexec/kucat/kucat_word diff --git a/luci-app-bandix/htdocs/luci-static/resources/view/bandix/connection.js b/luci-app-bandix/htdocs/luci-static/resources/view/bandix/connection.js index 75ad8b3..4e7bb39 100644 --- a/luci-app-bandix/htdocs/luci-static/resources/view/bandix/connection.js +++ b/luci-app-bandix/htdocs/luci-static/resources/view/bandix/connection.js @@ -371,10 +371,10 @@ return view.extend({ var style = E('style', {}, ` .bandix-connection-container { margin: 0; - padding: 8px; - background-color: ${darkMode ? '#1E1E1E' : '#f8fafc'}; + padding: 16px; + background-color: ${darkMode ? '#1a1a1a' : '#f8fafc'}; min-height: calc(100vh - 100px); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: ${darkMode ? '#e2e8f0' : '#1f2937'}; border-radius: 8px; } @@ -383,54 +383,65 @@ return view.extend({ display: flex; align-items: center; justify-content: space-between; - margin-bottom: 12px; + margin-bottom: 20px; } .bandix-title { font-size: 1.5rem; - font-weight: 700; + font-weight: 600; color: ${darkMode ? '#f1f5f9' : '#1f2937'}; margin: 0; } .bandix-badge { - background-color: ${darkMode ? '#333333' : '#f3f4f6'}; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - border-radius: 6px; - padding: 4px 12px; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + border-radius: 4px; + padding: 4px 10px; font-size: 0.875rem; - color: ${darkMode ? '#e2e8f0' : '#374151'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; } .bandix-alert { - background-color: ${darkMode ? '#451a03' : '#fef3c7'}; - border: 1px solid ${darkMode ? '#92400e' : '#f59e0b'}; - border-radius: 8px; - padding: 8px; - margin-bottom: 12px; + background-color: ${darkMode ? '#2a2a2a' : '#eff6ff'}; + border-left: 3px solid ${darkMode ? '#3b82f6' : '#2563eb'}; + border-radius: 4px; + padding: 10px 12px; + margin-bottom: 16px; display: flex; align-items: center; - gap: 8px; - color: ${darkMode ? '#fbbf24' : '#92400e'}; + gap: 10px; + color: ${darkMode ? '#d0d0d0' : '#1e293b'}; + font-size: 0.875rem; } .bandix-alert-icon { - color: ${darkMode ? '#fbbf24' : '#f59e0b'}; - font-size: 1rem; + color: ${darkMode ? '#60a5fa' : '#2563eb'}; + font-size: 0.875rem; + font-weight: 700; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + border: 2px solid currentColor; + border-radius: 50%; + flex-shrink: 0; } .bandix-card { - background-color: ${darkMode ? '#252526' : 'white'}; - border-radius: 12px; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, ${darkMode ? '0.3' : '0.1'}); + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + border-radius: 8px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + box-shadow: 0 2px 8px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.08'}); margin-bottom: 24px; overflow: hidden; } .bandix-card-header { - padding: 20px 24px 16px; - border-bottom: 1px solid ${darkMode ? '#252526' : '#e5e7eb'}; - background-color: ${darkMode ? '#333333' : '#fafafa'}; + padding: 16px; + border-bottom: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; } .bandix-card-title { @@ -444,21 +455,22 @@ return view.extend({ } .bandix-card-body { - padding: 24px; + padding: 0; } .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); - gap: 20px; - margin-bottom: 32px; + gap: 16px; + margin-bottom: 24px; } .stats-card { - background-color: ${darkMode ? '#252526' : 'white'}; - border-radius: 12px; + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + border-radius: 8px; padding: 20px; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, ${darkMode ? '0.3' : '0.1'}); + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + box-shadow: 0 2px 8px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.08'}); display: flex; flex-direction: column; align-items: center; @@ -467,9 +479,11 @@ return view.extend({ .stats-card-title { font-size: 0.875rem; - font-weight: 500; - color: ${darkMode ? '#9ca3af' : '#6b7280'}; + font-weight: 600; + color: ${darkMode ? '#94a3b8' : '#64748b'}; margin: 0 0 12px 0; + text-transform: uppercase; + letter-spacing: 0.025em; } .stats-card-main-value { @@ -513,11 +527,11 @@ return view.extend({ } .bandix-table th { - background-color: ${darkMode ? '#333333' : '#f9fafb'}; - padding: 16px 20px; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; + padding: 12px 16px; text-align: left; font-weight: 600; - color: ${darkMode ? '#e2e8f0' : '#374151'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; border: none; font-size: 0.875rem; white-space: nowrap; @@ -530,12 +544,12 @@ return view.extend({ .bandix-table th:nth-child(5) { width: 15%; } .bandix-table td { - padding: 16px 20px; - border-bottom: 1px solid ${darkMode ? '#252526' : '#f1f5f9'}; + padding: 12px 16px; + border-bottom: 1px solid ${darkMode ? '#333333' : '#f1f5f9'}; vertical-align: middle; word-break: break-word; overflow-wrap: break-word; - color: ${darkMode ? '#cbd5e1' : 'inherit'}; + color: ${darkMode ? '#d0d0d0' : '#334155'}; } @@ -644,13 +658,13 @@ return view.extend({ align-items: center; gap: 8px; padding: 8px 16px; - border-radius: 6px; + border-radius: 4px; font-size: 0.875rem; font-weight: 500; text-decoration: none; border: none; cursor: pointer; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.15s ease; } .btn-primary { @@ -660,8 +674,6 @@ return view.extend({ .btn-primary:hover { background-color: #2563eb; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); } `); document.head.appendChild(style); @@ -677,7 +689,7 @@ return view.extend({ // 检查连接监控是否启用 if (!connectionEnabled) { var alertDiv = E('div', { 'class': 'bandix-alert' }, [ - E('span', { 'class': 'bandix-alert-icon' }, '⚠'), + E('span', { 'class': 'bandix-alert-icon' }, '!'), E('div', {}, [ E('strong', {}, getTranslation('连接监控未启用', language)), E('p', { 'style': 'margin: 4px 0 0 0;' }, @@ -700,7 +712,7 @@ return view.extend({ // 添加提示信息 var infoAlert = E('div', { 'class': 'bandix-alert' }, [ - E('span', { 'class': 'bandix-alert-icon' }, '⚠️'), + E('span', { 'class': 'bandix-alert-icon' }, '!'), E('span', {}, getTranslation('列表只显示局域网设备连接,数据可能和总连接数不一致。', language)) ]); container.appendChild(infoAlert); diff --git a/luci-app-bandix/htdocs/luci-static/resources/view/bandix/index.js b/luci-app-bandix/htdocs/luci-static/resources/view/bandix/index.js index 2fd9c13..0cda0ea 100644 --- a/luci-app-bandix/htdocs/luci-static/resources/view/bandix/index.js +++ b/luci-app-bandix/htdocs/luci-static/resources/view/bandix/index.js @@ -799,10 +799,10 @@ return view.extend({ // 添加现代化样式,支持暗黑模式 var style = E('style', {}, ` .bandix-container { - padding: 8px; - background-color: ${darkMode ? '#1E1E1E' : '#f8fafc'}; + padding: 16px; + background-color: ${darkMode ? '#1a1a1a' : '#f8fafc'}; min-height: 100vh; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: ${darkMode ? '#e2e8f0' : '#1f2937'}; } @@ -810,12 +810,12 @@ return view.extend({ display: flex; align-items: center; justify-content: space-between; - margin-bottom: 12px; + margin-bottom: 20px; } .bandix-title { font-size: 1.5rem; - font-weight: 700; + font-weight: 600; color: ${darkMode ? '#f1f5f9' : '#1f2937'}; margin: 0; } @@ -830,22 +830,22 @@ return view.extend({ display: inline-flex; border-radius: 4px; overflow: hidden; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; } .device-mode-btn { - background-color: ${darkMode ? '#333333' : '#ffffff'}; + background-color: ${darkMode ? '#2a2a2a' : '#ffffff'}; border: none; - border-right: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - padding: 0 8px; - font-size: 0.75rem; - line-height: 1.4; - color: ${darkMode ? '#94a3b8' : '#6b7280'}; + border-right: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + padding: 0 12px; + font-size: 0.8125rem; + line-height: 1.8; + color: ${darkMode ? '#a0a0a0' : '#64748b'}; cursor: pointer; user-select: none; transition: all 0.15s ease; white-space: nowrap; - height: 20px; + height: 28px; } .device-mode-btn:last-child { @@ -853,8 +853,8 @@ return view.extend({ } .device-mode-btn:hover:not(.active) { - background-color: ${darkMode ? '#3a3a3a' : '#f9fafb'}; - color: ${darkMode ? '#e2e8f0' : '#374151'}; + background-color: ${darkMode ? '#3a3a3a' : '#f1f5f9'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; } .device-mode-btn.active { @@ -863,48 +863,58 @@ return view.extend({ } .bandix-badge { - background-color: ${darkMode ? '#333333' : '#f3f4f6'}; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - border-radius: 6px; - padding: 4px 12px; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + border-radius: 4px; + padding: 4px 10px; font-size: 0.875rem; - color: ${darkMode ? '#e2e8f0' : '#374151'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; } .bandix-alert { - background-color: ${darkMode ? '#451a03' : '#fef3c7'}; - border: 1px solid ${darkMode ? '#92400e' : '#f59e0b'}; - border-radius: 8px; - padding: 8px; - margin-bottom: 12px; + background-color: ${darkMode ? '#2a2a2a' : '#eff6ff'}; + border-left: 3px solid ${darkMode ? '#3b82f6' : '#2563eb'}; + border-radius: 4px; + padding: 10px 12px; + margin-bottom: 16px; display: flex; align-items: center; - gap: 8px; - color: ${darkMode ? '#fbbf24' : '#92400e'}; + gap: 10px; + color: ${darkMode ? '#d0d0d0' : '#1e293b'}; + font-size: 0.875rem; } .bandix-alert-icon { - color: ${darkMode ? '#fbbf24' : '#f59e0b'}; - font-size: 1rem; + color: ${darkMode ? '#60a5fa' : '#2563eb'}; + font-size: 0.875rem; + font-weight: 700; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + border: 2px solid currentColor; + border-radius: 50%; + flex-shrink: 0; } .bandix-card { - background-color: ${darkMode ? '#252526' : 'white'}; - border-radius: 12px; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, ${darkMode ? '0.3' : '0.1'}); + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + border-radius: 8px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; overflow: hidden; - margin-bottom: 8px; - border: 1px solid ${darkMode ? '#252526' : '#3333331c'}; + margin-bottom: 16px; + box-shadow: 0 2px 8px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.08'}); } .bandix-card-header { - padding: 20px 12px; - border-bottom: 1px solid ${darkMode ? '#252526' : '#e5e7eb'}; - background-color: ${darkMode ? '#333333' : '#fafafa'}; + padding: 16px; + border-bottom: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; } .bandix-card-title { - font-size: 1.25rem; + font-size: 1.125rem; font-weight: 600; color: ${darkMode ? '#f1f5f9' : '#1f2937'}; margin: 0; @@ -920,21 +930,21 @@ return view.extend({ } .bandix-table th { - background-color: ${darkMode ? '#333333' : '#f9fafb'}; - padding: 6px 12px; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; + padding: 10px 16px; text-align: left; font-weight: 600; - color: ${darkMode ? '#e2e8f0' : '#374151'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; border: none; font-size: 0.875rem; cursor: pointer; user-select: none; position: relative; - transition: background-color 0.2s ease; + transition: background-color 0.15s ease; } .bandix-table th:hover { - background-color: ${darkMode ? '#3a3a3a' : '#f3f4f6'}; + background-color: ${darkMode ? '#3a3a3a' : '#f1f5f9'}; } .bandix-table th.sortable::after { @@ -1000,12 +1010,17 @@ return view.extend({ } .bandix-table td { - padding: 6px 12px; + padding: 12px 16px; border: none; vertical-align: middle; word-wrap: break-word; overflow-wrap: break-word; - color: ${darkMode ? '#cbd5e1' : 'inherit'}; + color: ${darkMode ? '#d0d0d0' : '#334155'}; + border-bottom: 1px solid ${darkMode ? '#333333' : '#f1f5f9'}; + } + + .bandix-table tr:last-child td { + border-bottom: none; } .bandix-table th:nth-child(1), @@ -1130,23 +1145,30 @@ return view.extend({ } .limit-badge { - background-color: ${darkMode ? '#333333' : '#f3f4f6'}; - color: ${darkMode ? '#94a3b8' : '#6b7280'}; - padding: 2px 8px; - border-radius: 4px; + background-color: ${darkMode ? '#1a1a1a' : '#f8fafc'}; + color: ${darkMode ? '#a0a0a0' : '#64748b'}; + padding: 3px 8px; + border-radius: 3px; font-size: 0.75rem; text-align: center; margin-top: 4px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; } .action-button { - background-color: ${darkMode ? '#333333' : '#f3f4f6'}; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - border-radius: 6px; - padding: 8px 12px; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + border-radius: 4px; + padding: 6px 12px; cursor: pointer; font-size: 0.875rem; - color: ${darkMode ? '#e2e8f0' : 'inherit'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; + transition: all 0.15s ease; + } + + .action-button:hover { + background-color: ${darkMode ? '#3a3a3a' : '#e2e8f0'}; + border-color: ${darkMode ? '#555555' : '#94a3b8'}; } @@ -1166,37 +1188,43 @@ return view.extend({ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 20px; - margin-bottom: 8px; + gap: 16px; + margin-bottom: 16px; } .stats-card { - background-color: ${darkMode ? '#252526' : 'white'}; - border-radius: 12px; - padding: 24px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.1'}), 0 2px 4px -1px rgba(0, 0, 0, ${darkMode ? '0.2' : '0.06'}); - border: 1px solid ${darkMode ? '#252526' : 'transparent'}; + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + border-radius: 8px; + padding: 20px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; position: relative; overflow: hidden; + box-shadow: 0 2px 8px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.08'}); } .stats-card-header { display: flex; justify-content: space-between; - align-items: flex-start; - margin-bottom: 20px; + align-items: center; + margin-bottom: 16px; } .stats-card-title { font-size: 0.875rem; - font-weight: 500; - color: ${darkMode ? '#9ca3af' : '#6b7280'}; + font-weight: 600; + color: ${darkMode ? '#94a3b8' : '#64748b'}; margin: 0; + text-transform: uppercase; + letter-spacing: 0.025em; } .stats-card-icon { - font-size: 1.5rem; - opacity: 0.8; + font-size: 0.875rem; + font-weight: 600; + padding: 4px 8px; + border-radius: 4px; + background-color: currentColor; + opacity: 0.1; } .stats-card-main-value { @@ -1276,28 +1304,25 @@ return view.extend({ } .modal { - background-color: ${darkMode ? '#252526' : 'white'}; - border-radius: 12px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, ${darkMode ? '0.4' : '0.1'}); + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + border-radius: 8px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; max-width: 500px; width: 90%; max-height: 90vh; overflow-y: auto; - transform: scale(0.9) translateY(20px); opacity: 0; - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); - border: 1px solid ${darkMode ? '#252526' : 'transparent'}; + transition: opacity 0.2s ease; + box-shadow: 0 10px 40px rgba(0, 0, 0, ${darkMode ? '0.5' : '0.15'}); } .modal-overlay.show .modal { - transform: scale(1) translateY(0); opacity: 1; } .modal-header { - padding: 24px 24px 0 24px; - border-bottom: 1px solid ${darkMode ? '#252526' : '#e5e7eb'}; - padding-bottom: 16px; + padding: 20px; + border-bottom: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; } .modal-title { @@ -1308,13 +1333,13 @@ return view.extend({ } .modal-body { - padding: 10px; + padding: 20px; } .modal-footer { - padding: 16px 24px 24px 24px; + padding: 16px 20px 20px 20px; display: flex; - gap: 12px; + gap: 10px; justify-content: flex-end; } @@ -1332,51 +1357,46 @@ return view.extend({ .form-input { width: 100%; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - border-radius: 6px; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + border-radius: 4px; + padding: 8px 12px; font-size: 0.875rem; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: border-color 0.15s ease; box-sizing: border-box; - transform: translateY(0); - background-color: ${darkMode ? '#333333' : 'white'}; - color: ${darkMode ? '#e2e8f0' : 'inherit'}; + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + color: ${darkMode ? '#e2e8f0' : '#1f2937'}; } .form-input:focus { outline: none; border-color: #3b82f6; - box-shadow: 0 0 0 3px rgba(59, 130, 246, ${darkMode ? '0.2' : '0.1'}); - transform: translateY(-1px); } .form-select { width: 100%; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; - border-radius: 6px; + border: 1px solid ${darkMode ? '#444444' : '#cbd5e1'}; + border-radius: 4px; + padding: 8px 12px; font-size: 0.875rem; - background-color: ${darkMode ? '#333333' : 'white'}; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + background-color: ${darkMode ? '#2a2a2a' : 'white'}; + transition: border-color 0.15s ease; box-sizing: border-box; - transform: translateY(0); - color: ${darkMode ? '#e2e8f0' : 'inherit'}; + color: ${darkMode ? '#e2e8f0' : '#1f2937'}; } .form-select:focus { outline: none; border-color: #3b82f6; - box-shadow: 0 0 0 3px rgba(59, 130, 246, ${darkMode ? '0.2' : '0.1'}); - transform: translateY(-1px); } .btn { - padding: 10px 20px; - border-radius: 6px; + padding: 8px 16px; + border-radius: 4px; font-size: 0.875rem; font-weight: 500; cursor: pointer; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.15s ease; border: none; - transform: translateY(0); } .btn-primary { @@ -1386,26 +1406,22 @@ return view.extend({ .btn-primary:hover { background-color: #2563eb; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); } .btn-secondary { - background-color: ${darkMode ? '#374151' : '#f3f4f6'}; - color: ${darkMode ? '#e2e8f0' : '#374151'}; - border: 1px solid ${darkMode ? '#252526' : '#d1d5db'}; + background-color: ${darkMode ? '#3a3a3a' : '#f1f5f9'}; + color: ${darkMode ? '#d0d0d0' : '#475569'}; + border: 1px solid ${darkMode ? '#555555' : '#cbd5e1'}; } .btn-secondary:hover { - background-color: ${darkMode ? '#252526' : '#e5e7eb'}; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(0, 0, 0, ${darkMode ? '0.3' : '0.1'}); + background-color: ${darkMode ? '#4a4a4a' : '#e2e8f0'}; } .device-summary { - background-color: ${darkMode ? '#333333' : '#f9fafb'}; - border: 1px solid ${darkMode ? '#252526' : '#e5e7eb'}; - border-radius: 6px; + background-color: ${darkMode ? '#1a1a1a' : '#f8fafc'}; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + border-radius: 4px; padding: 12px; margin-bottom: 16px; } @@ -1451,11 +1467,11 @@ return view.extend({ .history-controls { display: flex; flex-wrap: wrap; - gap: 8px; + gap: 12px; align-items: center; - padding: 8px 12px; /* 更窄的内边距 */ - border-bottom: 1px solid ${darkMode ? '#252526' : '#f1f5f9'}; /* 更轻的分割线 */ - background-color: ${darkMode ? '#333333' : '#fafafa'}; + padding: 12px 16px; + border-bottom: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + background-color: ${darkMode ? '#2a2a2a' : '#f8fafc'}; } .history-controls .form-select, .history-controls .form-input { @@ -1463,7 +1479,7 @@ return view.extend({ min-width: 160px; } .history-card-body { - padding: 8px 12px 12px 12px; /* 更紧凑 */ + padding: 16px; position: relative; } .history-legend { @@ -1482,16 +1498,16 @@ return view.extend({ display: none; width: 320px; box-sizing: border-box; - background-color: ${darkMode ? 'rgba(37, 37, 38, 0.95)' : 'rgba(255, 255, 255, 0.98)'}; + background-color: ${darkMode ? '#2a2a2a' : 'white'}; color: ${darkMode ? '#e2e8f0' : '#1f2937'}; - border: 1px solid ${darkMode ? '#3a3a3a' : '#e5e7eb'}; - border-radius: 8px; - box-shadow: 0 10px 15px -3px rgba(0,0,0,0.2), 0 4px 6px -4px rgba(0,0,0,0.2); - padding: 10px 12px; + border: 1px solid ${darkMode ? '#444444' : '#e2e8f0'}; + border-radius: 6px; + box-shadow: 0 6px 20px rgba(0,0,0,${darkMode ? '0.4' : '0.15'}); + padding: 12px; z-index: 10; pointer-events: none; - font-size: 12px; - line-height: 1.4; + font-size: 0.8125rem; + line-height: 1.5; white-space: nowrap; } .history-tooltip .ht-title { font-weight: 700; margin-bottom: 6px; } @@ -1520,7 +1536,7 @@ return view.extend({ // 警告提示 E('div', { 'class': 'bandix-alert' }, [ - E('span', { 'class': 'bandix-alert-icon' }, '⚠️'), + E('span', { 'class': 'bandix-alert-icon' }, '!'), E('span', {}, getTranslation('限速功能仅对 WAN 流量生效。', language)) ]), @@ -2912,8 +2928,7 @@ function formatRetentionSeconds(seconds, language) { // LAN 流量卡片 statsGrid.appendChild(E('div', { 'class': 'stats-card' }, [ E('div', { 'class': 'stats-card-header' }, [ - E('div', { 'class': 'stats-card-title' }, getTranslation('LAN 流量', language)), - E('div', { 'class': 'stats-card-icon', 'style': 'color: #3b82f6;' }, '🖥️') + E('div', { 'class': 'stats-card-title' }, getTranslation('LAN 流量', language)) ]), E('div', { 'style': 'margin-top: 12px; display: flex; flex-direction: column; gap: 8px;' }, [ // 上传行 @@ -2934,8 +2949,7 @@ function formatRetentionSeconds(seconds, language) { // WAN 流量卡片 statsGrid.appendChild(E('div', { 'class': 'stats-card' }, [ E('div', { 'class': 'stats-card-header' }, [ - E('div', { 'class': 'stats-card-title' }, getTranslation('WAN 流量', language)), - E('div', { 'class': 'stats-card-icon', 'style': 'color: #22c55e;' }, '🌐') + E('div', { 'class': 'stats-card-title' }, getTranslation('WAN 流量', language)) ]), E('div', { 'style': 'margin-top: 12px; display: flex; flex-direction: column; gap: 8px;' }, [ // 上传行 @@ -2956,8 +2970,7 @@ function formatRetentionSeconds(seconds, language) { // 总流量卡片 statsGrid.appendChild(E('div', { 'class': 'stats-card' }, [ E('div', { 'class': 'stats-card-header' }, [ - E('div', { 'class': 'stats-card-title' }, getTranslation('总流量', language)), - E('div', { 'class': 'stats-card-icon', 'style': 'color: ' + (darkMode ? '#f1f5f9' : '#1f2937') + ';' }, '⚡') + E('div', { 'class': 'stats-card-title' }, getTranslation('总流量', language)) ]), E('div', { 'style': 'margin-top: 12px; display: flex; flex-direction: column; gap: 8px;' }, [ // 上传行 @@ -3122,7 +3135,7 @@ function formatRetentionSeconds(seconds, language) { var actionButton = E('button', { 'class': 'action-button', 'title': getTranslation('设置', language) - }, '⚙️'); + }, getTranslation('设置', language)); // 绑定点击事件 actionButton.addEventListener('click', function () { diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua index 91b8c1a..d816135 100644 --- a/luci-app-passwall/luasrc/controller/passwall.lua +++ b/luci-app-passwall/luasrc/controller/passwall.lua @@ -140,6 +140,7 @@ function link_add_node() local chunk = http.formvalue("chunk") local chunk_index = tonumber(http.formvalue("chunk_index")) local total_chunks = tonumber(http.formvalue("total_chunks")) + local group = http.formvalue("group") or "default" if chunk and chunk_index ~= nil and total_chunks ~= nil then -- 按顺序拼接到文件 @@ -154,7 +155,7 @@ function link_add_node() end -- 如果是最后一片,才执行 if chunk_index + 1 == total_chunks then - luci.sys.call("lua /usr/share/passwall/subscribe.lua add log") + luci.sys.call("lua /usr/share/passwall/subscribe.lua add " .. group) end end end diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm b/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm index 1df9c78..5a83a78 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/link_add_node.htm @@ -4,7 +4,7 @@ local api = require "luci.passwall.api" @@ -93,6 +180,24 @@ local api = require "luci.passwall.api" + - - - - - - - \ No newline at end of file diff --git a/luci-theme-kucat/luasrc/view/themes/kucat/header.htm b/luci-theme-kucat/luasrc/view/themes/kucat/header.htm deleted file mode 100644 index 6ab364f..0000000 --- a/luci-theme-kucat/luasrc/view/themes/kucat/header.htm +++ /dev/null @@ -1,346 +0,0 @@ - <%# - Copyright (C) 2019-2025The Sirpdboy Team - luci-theme-material: - Copyright 2015 Lutty Yang - luci-theme-bootstrap: - Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich - Copyright 2012 David Menting - - MUI: - https://github.com/muicss/mui - - Licensed to the public under the Apache License 2.0 --%> - -<% -local sys = require "luci.sys" -local util = require "luci.util" -local http = require "luci.http" -local disp = require "luci.dispatcher" -local ver = require "luci.version" -local json = require "luci.jsonc" -local fs = require "nixio.fs" -local nutil = require "nixio.util" -local uci = require 'luci.model.uci'.cursor() -local urlencode = luci.http.protocol and luci.http.protocol.urlencode or luci.util.urlencode - -local boardinfo = util.ubus("system", "board") or {} -local node = disp.context.dispatched -local path = table.concat(disp.context.path, "-") -local bar = '/cgi-bin/luci/admin/' -local config_exists = false -local kucat = '' - -function glob(...) - local iter, code, msg = fs.glob(...) - if iter then - return nutil.consume(iter) - end - return nil, code, msg -end - -function getExtension(str) - return urlencode(str:match(".+%.(%w+)$") or "") -end - -http.prepare_content("text/html; charset=UTF-8") - -if fs.access("/etc/config/advancedplus") then - kucat = "advancedplus" - config_exists = true -elseif fs.access("/etc/config/kucat") then - kucat = "kucat" - config_exists = true -end - -local config = {} -local primary_rgbm, primary_rgbm_ts, primary_opacity, primary_rgbs, primary_rgbs_ts, mode -local gohome, gouser, gossr, bgqs, setbar, dayword -local background, bkuse, bklock, fontd, fontz, fontx - -if config_exists then - config = uci:get_all(kucat, "@basic[0]") or {} - primary_rgbm = config.primary_rgbm or '45,102,147' - primary_rgbm_ts = config.primary_rgbm_ts or '0.8' - primary_opacity = config.primary_opacity or '0' - primary_rgbs = config.primary_rgbs or '132,188,218' - primary_rgbs_ts = config.primary_rgbs_ts or '0.1' - mode = config.mode or 'light' - gohome = bar .. "status/" .. (config.gohome or "") - gouser = bar .. "system/" .. (config.gouser or "") - gossr = bar .. "services/" .. (config.gossr or "") - bgqs = config.bgqs or '0' - setbar = config.setbar or '1' - dayword = config.dayword or '0' - background = config.background or '0' - bkuse = config.bkuse or '0' - bklock = config.bklock or '1' - fontd = config.font_d or '1.2rem' - fontz = config.font_z or '0.92rem' - fontx = config.font_x or '0.875rem' -else - primary_rgbm = '45,102,147' - primary_rgbm_ts = '0.8' - primary_opacity = '0' - primary_rgbs = '132,188,218' - primary_rgbs_ts = '0.1' - mode = 'light' - gohome = bar .. "status/" - gouser = bar .. "system/" - gossr = bar .. "services/" - bgqs = '1' - setbar = '1' - dayword = '0' - background = '0' - bkuse = '0' - bklock = '1' - fontd = '1.2rem' - fontz = '0.92rem' - fontx = '0.875rem' -end - -local bk_use = 'background: rgba(var(--primary-rgbbody),1)' -local loginbk_use = 'background: linear-gradient(0deg, rgba(var(--primary-rgbm), 1) 0%, rgba(var(--primary-rgbbody), 1) 100%);display: block;' - - local ufilter = string.format("blur(%dpx)", tonumber(primary_opacity)) - if primary_opacity == '0' then - ufilter = 'none' - end - - local bg_url = media..'/img/bg1.jpg' - local bg_lock = bg_url - if background == '0' then - math.randomseed(os.time()) - - local theme_dir = resource .. '/background/' - if not fs.access('/www' .. resource .. '/background/') then - local theme_dir = media .. '/background/' - end - local bgcount = 0 - local currentBg = {} - local bgs,attr = {} - for i, f in ipairs(glob("/www" .. theme_dir .. "*")) do - attr = fs.stat(f) - if attr then - local ext = getExtension(fs.basename(f)) - if ext == "jfif" or ext == "pjp" or ext == "pjpeg" or ext == "jpeg" or ext == "jpg" or ext == "png" or ext == "gif" then - local bg = {} - bg.type = ext - bg.url = theme_dir .. fs.basename(f) - table.insert(bgs,bg) - bgcount = bgcount + 1 - end - end - end - if bgcount > 0 then - currentBg = bgs[math.random(1,bgcount)] - picurl = currentBg.url - end - else - picurl = sys.exec("/usr/libexec/kucat/kucat_wallpaper") - end - if (picurl and picurl ~= '') then - bg_url = picurl - end - if bklock == '0' then - math.randomseed(os.time()) - local bk_dir = media .. "/bg/" - local bkcount = 0 - local currentbk = {} - local bgs,attr = {} - for i, f in ipairs(glob("/www" .. bk_dir .. "*")) do - attr = fs.stat(f) - if attr then - local ext = getExtension(fs.basename(f)) - if ext == "jfif" or ext == "pjp" or ext == "pjpeg" or ext == "jpeg" or ext == "jpg" or ext == "png" or ext == "gif" then - local bg = {} - bg.type = ext - bg.url = bk_dir .. fs.basename(f) - table.insert(bgs,bg) - bkcount = bkcount + 1 - end - end - end - if bkcount > 0 then - currentbk = bgs[math.random(1,bkcount)] - bg_lock = currentbk.url - end - end - if dayword == '1' then - showword = sys.exec("/usr/libexec/kucat/kucat_word") - end - if bkuse == '1' then - if bklock == '0' then - bk_use = "background-image:url(" .. bg_lock .. ")" - loginbk_use = "background-image:url(" .. bg_url .. ")" - else - bk_use="background-image:url("..bg_url..")" - loginbk_use = "background-image:url(" .. bg_url .. ")" - end - else - if bklock == '0' then - loginbk_use = "background-image:url(" .. bg_url .. ")" - end - end --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI - - - - - - - - - <% if node and node.css then %> - - <% end -%> - - - - - - -node-<%= path %><% else %>node-main-login<% end %>" data-page="<%= pcdata(path) %>" style="<%=bk_use%>; " - <% if mode ~= 'auto' then %> - data-theme = "<%= mode %>" - <% end -%> -> -
- -
- -
-
-
-
-
- -
-
-
-
-
- - <%=striptags(boardinfo.hostname or "OpenWrt")%> - <% if dayword == '1' then %> - <%=showword%> - <% end -%> -
-
-
- - -
- - " title="<%:Log_out%>" > -
-
-
- -
- -
-
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
-

<%:No password set!%>

-

<%:There is no password set on this router. Please configure a root password to protect the web interface.%>

- <% if disp.lookup("admin/system/admin") then %> - - <% end %> -
- - <%- end -%> - - diff --git a/luci-theme-kucat/root/etc/uci-defaults/30_luci-kuacat b/luci-theme-kucat/root/etc/uci-defaults/30_luci-kuacat deleted file mode 100644 index 9edc049..0000000 --- a/luci-theme-kucat/root/etc/uci-defaults/30_luci-kuacat +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -if [ "$PKG_UPGRADE" != 1 ]; then - uci get luci.themes.KuCat >/dev/null 2>&1 || \ -uci batch <<-EOF - set luci.themes.KuCat=/luci-static/kucat - set luci.main.mediaurlbase=/luci-static/kucat - commit luci -EOF -fi -chmod +x /usr/libexec/kucat/kucat* - -rm -rf /tmp/luci-* -exit 0 diff --git a/luci-theme-kucat/root/usr/libexec/kucat/kucat_wallpaper b/luci-theme-kucat/root/usr/libexec/kucat/kucat_wallpaper deleted file mode 100644 index 00b60b9..0000000 --- a/luci-theme-kucat/root/usr/libexec/kucat/kucat_wallpaper +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/sh - -# luci-theme-kucat -# Copyright (C) 2019-2025 The Sirpdboy Team -# -# Have a bug? Please create an issue here on GitHub! -# https://github.com/sirpdboy/luci-theme-kucat/issues -# -# Licensed to the public under the Apache License 2.0 - -# author github@sirpdboy - -kucat='kucat' -[ -s "/etc/config/advancedplus" ] &&kucat='advancedplus' -background="$(uci -q get $kucat.@basic[0].background || echo '0')" -KUCATTMP="/var/kucat_date_${background}.tmp" -BGURL="/www/luci-static/kucat/img/down${background}.jpg" -REBGURL="/luci-static/kucat/img/down${background}.jpg" -DFBGURL="/luci-static/kucat/img/bg1.jpg" -WRLOCK="/var/lock/kucat_lock_${background}.lock" - -test_url() { - url=$1 - local status=$(/usr/bin/curl -I -o /dev/null -skL --connect-timeout 1 --retry 1 -w %{http_code} "$url") - case "$status" in - 204|\ - 200) - echo '1' - ;; - esac -} - -curl_bgurl() { - case "$background" in - 1) - local ppath=`curl -s 'https://open.iciba.com/dsapi/' | jsonfilter -qe '@.picture4'` - [ -n "${ppath}" ] && echo "$ppath" - ;; - 2) - curl -fks --max-time 3 \ - --header "Authorization: Client-ID kmFIroj2ELqXJPtC0XUoyww-Tr_lDU8Ho8uxjptIrCo" \ - "https://api.unsplash.com/photos/random?count=1&orientation=landscape" | - jsonfilter -e "@[0]['urls']['regular']" - ;; - 3) - local ppath=`curl -s "https://www.bing.com/HPImageArchive.aspx?format=js&n=1" |jsonfilter -qe '@.images[0].url'` - [ -n "${ppath}" ] && echo "https://www.bing.com${ppath}" - ;; - 4) - local i=`awk 'BEGIN{srand();print int(rand()*8)}'` - local j=`awk 'BEGIN{srand();print int(rand()*200)}'` - local ppath=`curl -s "http://wp.birdpaper.com.cn/intf/search?content=4k&pageno=$j&count=9" | awk -F '\"count\":9' '{print $2}' | awk -F ',\"processTime\"' '{print $1}' | sed 's#,#{#' | jsonfilter -e "@.list[$i].url"` - [ -n "${ppath}" ] && echo "$ppath" - ;; - 5) - curl -fks --max-time 3 \ - "https://wallhaven.cc/api/v1/search?resolutions=1920x1080&sorting=random" | - jsonfilter -qe '@.data[0].path' - ;; - - esac -} - -bgurl_down() { - local lock="$WRLOCK" - exec 200>$lock - if flock -n 200 >/dev/null 2>&1; then - local bgurl="$(curl_bgurl)" - if [ -n "$bgurl" ]; then - rm -rf $BGURL - curl -kLfsm 3 $bgurl -o $BGURL - date +%Y%m%d > $KUCATTMP - fi - - flock -u 200 >/dev/null 2>&1 - fi - [ -s "$BGURL" ] && echo -ne $REBGURL || echo -ne $DFBGURL -} - -check_url() { - if [ -s $KUCATTMP ]; then - localtime=`cat $KUCATTMP | grep $(date +%Y%m%d) ` - if [ $localtime ]; then - if [ -s $BGURL ] ; then - echo -ne $REBGURL - return - fi - fi - fi -# local checknet=$(test_url "https://www.baidu.com") -checknet=`ping -c 1 -W 1 223.5.5.5 > /dev/null 2>&1 &&echo 1 || echo 2` -if [ "x$checknet" == "x1" ]; then - bgurl_down -else - [ -s "$DFBGURL" ] && echo -ne $DFBGURL -fi -} - -check_url \ No newline at end of file diff --git a/luci-theme-kucat/root/usr/libexec/kucat/kucat_word b/luci-theme-kucat/root/usr/libexec/kucat/kucat_word deleted file mode 100644 index 61b3635..0000000 --- a/luci-theme-kucat/root/usr/libexec/kucat/kucat_word +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh - - -# luci-theme-kucat -# Copyright (C) 2019-2024 The Sirpdboy Team -# -# Have a bug? Please create an issue here on GitHub! -# https://github.com/sirpdboy/luci-theme-kucat/issues -# -# Licensed to the public under the Apache License 2.0 -LANG=`uci get luci.main.lang` -WORDDATETMP="/var/dayword_kucatword_date.tmp" -LOCK="/var/lock/dayword_kucatword.lock" -WORDTMP="/var/dayword_kucatword_$LANG.tmp" -test_url() { - url=$1 - status="$(/usr/bin/curl -I -o /dev/null -skL --connect-timeout 1 --retry 1 -w %{http_code} "$url")" - case "$status" in - 204|\ - 200) - echo '1' - ;; - esac -} - -get_word() { - kucat='kucat' - [ -s "/etc/config/advancedplus" ] &&kucat='advancedplus' - dayword="$(uci -q get $kucat.@basic[0].dayword || echo '0')" - case "$dayword" in - 1) - [ "X$LANG" == "Xen" ] && gwordjson=`curl -s 'https://open.iciba.com/dsapi/' | jsonfilter -qe '@.content'` || gwordjson=`curl -s 'https://open.iciba.com/dsapi/' | jsonfilter -qe '@.note'` - [ -n "${gwordjson}" ] && echo "$gwordjson" - ;; - 2) - # form iciba : https://api.vvhan.com/api/en - [ "X$LANG" == "Xen" ] && gwordjson=`curl -s 'https://api.vvhan.com/api/en?type=sj'| jsonfilter -qe '@.data.zh'` || gwordjson=`curl -s 'https://api.vvhan.com/api/en?type=sj'| jsonfilter -qe '@.data.en'` - [ -n "${gwordjson}" ] && echo "$gwordjson" - ;; - 3) - local gwordjson=`curl -s 'https://api.yixiangzhilv.com/yiyan/sentence/get/'` - local gword=`echo $gwordjson | jsonfilter -qe '@.content'` - local gfrom=`echo $gwordjson | jsonfilter -qe '@.author'` - [ -n "${gfrom}" ] && gfrom=$(echo " ---- $gfrom")|| gfrom='' - [ -n "${gword}" ] && echo "$gword $gfrom" - ;; - 4) - local gwordjson=`curl -s 'https://yijuzhan.com/api/word.php?m=json'` - local gword=`echo $gwordjson | jsonfilter -qe '@.content'` - local gfrom=`echo $gwordjson | jsonfilter -qe '@.source'` - [ -n "${gfrom}" ] && gfrom=$(echo " ---- $gfrom")|| gfrom='' - [ -n "${gword}" ] && echo "$gword $gfrom" - ;; - 5) - local gword=`curl -s https://v.api.aa1.cn/api/api-wenan-dujitang/index.php?aa1=json | sed 's/\[//g' | sed 's/\]//g'| jsonfilter -qe '@.dujitang'` - [ -n "${gword}" ] && echo "$gword" - ;; - - *) - local gwordjson=`curl -s 'https://v1.hitokoto.cn'` - local gword=`echo $gwordjson | jsonfilter -qe '@.hitokoto'` - local gfrom=`echo $gwordjson | jsonfilter -qe '@.from_who'` - [ -n "${gfrom}" ] && gfrom=$(echo " ---- $gfrom")|| gfrom='' - [ -n "${gword}" ] && echo "$gword $gfrom" - ;; - esac -} - -kucatword() { - lock="$LOCK" - exec 200>"$lock" - if flock -n 200 >"/dev/null" 2>&1; then - local localword="$(get_word)" - if [ -n "$localword" ]; then - echo "$localword" >$WORDTMP - date +%Y%m%d > $WORDDATETMP - fi - flock -u 200 >"/dev/null" 2>&1 - fi - [ -s "$WORDTMP" ] && cat $WORDTMP || echo -ne "Acquisition failed ,Please Issues:github@sirpdboy" -} -check_url() { -if [ -f "$WORDDATETMP" ]; then - localtime=`cat $WORDDATETMP | grep $(date +%Y%m%d) ` - if [ $localtime ]; then - [ -s "$WORDTMP" ] && cat $WORDTMP && return - fi - fi -local checknet=`ping -c 1 -W 1 223.5.5.5 > /dev/null 2>&1 &&echo 1 || echo 2` -if [ "x$checknet" == "x1" ]; then - kucatword -else - echo -ne "No internet connection, no information." -fi -} -check_url \ No newline at end of file