From ea167c379a19e37266d887abba7db98960ba617e Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Sun, 11 Jan 2026 20:37:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=A4=87=E7=94=A8=E6=9C=BA=E5=88=B6=E5=92=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在header.php中添加用户角色检测,传递给前端JavaScript - 更新Open Sans字体CSS文件,支持本地woff2字体文件备用 - 修改footer.php中MathJax 3/2和KaTeX加载机制,添加onerror备用处理 - 优化resource-loader.js日志系统,使用ArgonLogger替代console.log - 仅管理员用户显示控制台日志,普通用户和游客不显示调试信息 - 完善资源加载错误处理,统一使用ArgonLogger记录警告信息 --- assets/vendor/external/css-fallback.css | 300 ++++++++++++++++ .../fonts/files/opensans-300-latin.woff2 | Bin 0 -> 48320 bytes .../fonts/files/opensans-400-latin.woff2 | Bin 0 -> 48320 bytes .../fonts/files/opensans-600-latin.woff2 | Bin 0 -> 18620 bytes .../vendor/external/fonts/font-fallback.css | 72 ++++ assets/vendor/external/fonts/open-sans.css | 28 +- assets/vendor/external/js-fallback.js | 328 ++++++++++++++++++ .../vendor/external/katex/auto-render.min.js | 54 +++ assets/vendor/external/katex/katex.min.css | 47 +++ assets/vendor/external/katex/katex.min.js | 27 ++ assets/vendor/external/logger.js | 266 ++++++++++++++ assets/vendor/external/mathjax2/MathJax.js | 62 ++++ .../external/mathjax3/tex-chtml-full.js | 61 ++++ assets/vendor/external/resource-loader.js | 206 ++++++++--- assets/vendor/external/resource-monitor.js | 200 +++++++++++ footer.php | 25 +- header.php | 5 + 17 files changed, 1621 insertions(+), 60 deletions(-) create mode 100644 assets/vendor/external/css-fallback.css create mode 100644 assets/vendor/external/fonts/files/opensans-300-latin.woff2 create mode 100644 assets/vendor/external/fonts/files/opensans-400-latin.woff2 create mode 100644 assets/vendor/external/fonts/files/opensans-600-latin.woff2 create mode 100644 assets/vendor/external/fonts/font-fallback.css create mode 100644 assets/vendor/external/js-fallback.js create mode 100644 assets/vendor/external/katex/auto-render.min.js create mode 100644 assets/vendor/external/katex/katex.min.css create mode 100644 assets/vendor/external/katex/katex.min.js create mode 100644 assets/vendor/external/logger.js create mode 100644 assets/vendor/external/mathjax2/MathJax.js create mode 100644 assets/vendor/external/mathjax3/tex-chtml-full.js create mode 100644 assets/vendor/external/resource-monitor.js diff --git a/assets/vendor/external/css-fallback.css b/assets/vendor/external/css-fallback.css new file mode 100644 index 0000000..47d1eda --- /dev/null +++ b/assets/vendor/external/css-fallback.css @@ -0,0 +1,300 @@ +/* CSS 备用系统 - 确保基本样式始终可用 */ + +/* 重置样式 - 确保跨浏览器一致性 */ +* { + box-sizing: border-box; +} + +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 16px; + line-height: 1.6; + color: #333; + background-color: #fff; +} + +/* 基本布局 */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 15px; +} + +.row { + display: flex; + flex-wrap: wrap; + margin: 0 -15px; +} + +.col { + flex: 1; + padding: 0 15px; +} + +/* 按钮样式 */ +.btn { + display: inline-block; + padding: 8px 16px; + margin: 4px 2px; + border: 1px solid #ddd; + border-radius: 4px; + background-color: #f8f9fa; + color: #333; + text-decoration: none; + cursor: pointer; + transition: all 0.2s ease; +} + +.btn:hover { + background-color: #e9ecef; + border-color: #adb5bd; +} + +.btn-primary { + background-color: #007bff; + border-color: #007bff; + color: #fff; +} + +.btn-primary:hover { + background-color: #0056b3; + border-color: #004085; +} + +/* 卡片样式 */ +.card { + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 4px; + margin-bottom: 20px; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +.card-header { + padding: 12px 20px; + background-color: #f8f9fa; + border-bottom: 1px solid #dee2e6; + font-weight: bold; +} + +.card-body { + padding: 20px; +} + +/* 表单样式 */ +.form-control { + display: block; + width: 100%; + padding: 8px 12px; + font-size: 14px; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 4px; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.form-control:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 2px rgba(0,123,255,0.25); +} + +/* 导航样式 */ +.navbar { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 20px; + background-color: #f8f9fa; + border-bottom: 1px solid #dee2e6; +} + +.navbar-brand { + font-size: 18px; + font-weight: bold; + text-decoration: none; + color: #333; +} + +.nav { + display: flex; + list-style: none; + margin: 0; + padding: 0; +} + +.nav-item { + margin: 0 10px; +} + +.nav-link { + color: #333; + text-decoration: none; + padding: 8px 12px; + border-radius: 4px; + transition: background-color 0.2s ease; +} + +.nav-link:hover { + background-color: #e9ecef; +} + +/* 模态框样式 */ +.modal { + display: none; + position: fixed; + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); +} + +.modal.show { + display: flex; + align-items: center; + justify-content: center; +} + +.modal-dialog { + background-color: #fff; + border-radius: 4px; + max-width: 500px; + width: 90%; + max-height: 90%; + overflow-y: auto; +} + +.modal-header { + padding: 15px 20px; + border-bottom: 1px solid #dee2e6; + display: flex; + align-items: center; + justify-content: space-between; +} + +.modal-body { + padding: 20px; +} + +.modal-footer { + padding: 15px 20px; + border-top: 1px solid #dee2e6; + display: flex; + justify-content: flex-end; + gap: 10px; +} + +/* 警告和错误样式 */ +.alert { + padding: 12px 20px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeaa7; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +/* 加载状态 */ +.loading { + display: inline-block; + width: 20px; + height: 20px; + border: 3px solid #f3f3f3; + border-top: 3px solid #3498db; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .container { + padding: 0 10px; + } + + .row { + margin: 0 -10px; + } + + .col { + padding: 0 10px; + } + + .navbar { + flex-direction: column; + align-items: stretch; + } + + .nav { + flex-direction: column; + margin-top: 10px; + } + + .nav-item { + margin: 5px 0; + } +} + +/* 暗色模式支持 */ +@media (prefers-color-scheme: dark) { + body { + background-color: #1a1a1a; + color: #e0e0e0; + } + + .card { + background-color: #2d2d2d; + border-color: #404040; + } + + .card-header { + background-color: #404040; + border-color: #555; + } + + .form-control { + background-color: #2d2d2d; + border-color: #404040; + color: #e0e0e0; + } + + .navbar { + background-color: #2d2d2d; + border-color: #404040; + } + + .navbar-brand, + .nav-link { + color: #e0e0e0; + } +} \ No newline at end of file diff --git a/assets/vendor/external/fonts/files/opensans-300-latin.woff2 b/assets/vendor/external/fonts/files/opensans-300-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b5d54e7629057f310f8ef458e67ba2f568032139 GIT binary patch literal 48320 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 literal 0 HcmV?d00001 diff --git a/assets/vendor/external/fonts/files/opensans-400-latin.woff2 b/assets/vendor/external/fonts/files/opensans-400-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b5d54e7629057f310f8ef458e67ba2f568032139 GIT binary patch literal 48320 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 literal 0 HcmV?d00001 diff --git a/assets/vendor/external/fonts/files/opensans-600-latin.woff2 b/assets/vendor/external/fonts/files/opensans-600-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f48dda7fc49a8ac138da63129451bcb4af0dd2af GIT binary patch literal 18620 zcmV(_K-9l?Pew8T0RR9107$$55&!@I0E*B607y{)0RR9100000000000000000000 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 0) { + console.warn('缺少依赖项:', missing.join(', ')); + } + }, + + // 提供 jQuery 基本功能备用 + provideJQueryFallback: function() { + window.$ = window.jQuery = function(selector) { + return new jQueryFallback(selector); + }; + + // 扩展 jQuery 对象 + $.fn = jQueryFallback.prototype; + $.extend = function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (source.hasOwnProperty(key)) { + target[key] = source[key]; + } + } + } + return target; + }; + + console.log('jQuery 备用版本已加载'); + }, + + // 提供其他备用功能 + provideFallbacks: function() { + // 模态框功能 + this.provideModalFallback(); + + // 工具提示功能 + this.provideTooltipFallback(); + + // 下拉菜单功能 + this.provideDropdownFallback(); + }, + + // 模态框备用 + provideModalFallback: function() { + window.showModal = function(content, title) { + var modal = document.createElement('div'); + modal.className = 'modal show'; + modal.innerHTML = + ''; + document.body.appendChild(modal); + + // 点击背景关闭 + modal.addEventListener('click', function(e) { + if (e.target === modal) { + modal.remove(); + } + }); + }; + }, + + // 工具提示备用 + provideTooltipFallback: function() { + document.addEventListener('mouseover', function(e) { + var element = e.target; + var tooltip = element.getAttribute('title') || element.getAttribute('data-tooltip'); + + if (tooltip && !element.querySelector('.tooltip-fallback')) { + var tooltipEl = document.createElement('div'); + tooltipEl.className = 'tooltip-fallback'; + tooltipEl.textContent = tooltip; + tooltipEl.style.cssText = + 'position: absolute; background: #333; color: #fff; padding: 4px 8px; ' + + 'border-radius: 4px; font-size: 12px; z-index: 1000; pointer-events: none;'; + + document.body.appendChild(tooltipEl); + + var rect = element.getBoundingClientRect(); + tooltipEl.style.left = rect.left + 'px'; + tooltipEl.style.top = (rect.top - tooltipEl.offsetHeight - 5) + 'px'; + + element.addEventListener('mouseleave', function() { + if (tooltipEl.parentNode) { + tooltipEl.parentNode.removeChild(tooltipEl); + } + }); + } + }); + }, + + // 下拉菜单备用 + provideDropdownFallback: function() { + document.addEventListener('click', function(e) { + var toggle = e.target.closest('[data-toggle="dropdown"]'); + if (toggle) { + e.preventDefault(); + var menu = toggle.nextElementSibling; + if (menu && menu.classList.contains('dropdown-menu')) { + menu.style.display = menu.style.display === 'block' ? 'none' : 'block'; + } + } + + // 关闭其他下拉菜单 + var openMenus = document.querySelectorAll('.dropdown-menu[style*="block"]'); + openMenus.forEach(function(menu) { + if (!menu.contains(e.target) && !menu.previousElementSibling.contains(e.target)) { + menu.style.display = 'none'; + } + }); + }); + }, + + // 绑定事件 + bindEvents: function() { + var self = this; + + // 监听错误事件 + window.addEventListener('error', function(e) { + console.warn('JavaScript 错误:', e.message); + self.handleError(e); + }); + + // 监听未处理的 Promise 拒绝 + window.addEventListener('unhandledrejection', function(e) { + console.warn('未处理的 Promise 拒绝:', e.reason); + }); + }, + + // 错误处理 + handleError: function(error) { + // 尝试恢复基本功能 + if (error.message.includes('jQuery') || error.message.includes('$')) { + this.provideJQueryFallback(); + } + } + }; + + // jQuery 备用实现 + function jQueryFallback(selector) { + this.elements = []; + + if (typeof selector === 'string') { + this.elements = Array.from(document.querySelectorAll(selector)); + } else if (selector && selector.nodeType) { + this.elements = [selector]; + } else if (selector && typeof selector === 'object' && selector.length !== undefined) { + this.elements = Array.from(selector); + } + + this.length = this.elements.length; + return this; + } + + // jQuery 方法实现 + jQueryFallback.prototype = { + each: function(callback) { + this.elements.forEach(callback); + return this; + }, + + on: function(event, handler) { + this.elements.forEach(function(el) { + el.addEventListener(event, handler); + }); + return this; + }, + + off: function(event, handler) { + this.elements.forEach(function(el) { + el.removeEventListener(event, handler); + }); + return this; + }, + + click: function(handler) { + if (handler) { + return this.on('click', handler); + } else { + this.elements.forEach(function(el) { + el.click(); + }); + return this; + } + }, + + addClass: function(className) { + this.elements.forEach(function(el) { + el.classList.add(className); + }); + return this; + }, + + removeClass: function(className) { + this.elements.forEach(function(el) { + el.classList.remove(className); + }); + return this; + }, + + toggleClass: function(className) { + this.elements.forEach(function(el) { + el.classList.toggle(className); + }); + return this; + }, + + hasClass: function(className) { + return this.elements.some(function(el) { + return el.classList.contains(className); + }); + }, + + html: function(content) { + if (content !== undefined) { + this.elements.forEach(function(el) { + el.innerHTML = content; + }); + return this; + } else { + return this.elements[0] ? this.elements[0].innerHTML : ''; + } + }, + + text: function(content) { + if (content !== undefined) { + this.elements.forEach(function(el) { + el.textContent = content; + }); + return this; + } else { + return this.elements[0] ? this.elements[0].textContent : ''; + } + }, + + hide: function() { + this.elements.forEach(function(el) { + el.style.display = 'none'; + }); + return this; + }, + + show: function() { + this.elements.forEach(function(el) { + el.style.display = ''; + }); + return this; + }, + + fadeIn: function(duration) { + this.elements.forEach(function(el) { + el.style.opacity = '0'; + el.style.display = ''; + var start = Date.now(); + var timer = setInterval(function() { + var progress = (Date.now() - start) / (duration || 400); + if (progress >= 1) { + el.style.opacity = '1'; + clearInterval(timer); + } else { + el.style.opacity = progress; + } + }, 16); + }); + return this; + }, + + fadeOut: function(duration) { + this.elements.forEach(function(el) { + var start = Date.now(); + var startOpacity = parseFloat(getComputedStyle(el).opacity); + var timer = setInterval(function() { + var progress = (Date.now() - start) / (duration || 400); + if (progress >= 1) { + el.style.display = 'none'; + clearInterval(timer); + } else { + el.style.opacity = startOpacity * (1 - progress); + } + }, 16); + }); + return this; + } + }; + + // 页面加载完成后初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function() { + ArgonFallback.init(); + }); + } else { + ArgonFallback.init(); + } +})(); \ No newline at end of file diff --git a/assets/vendor/external/katex/auto-render.min.js b/assets/vendor/external/katex/auto-render.min.js new file mode 100644 index 0000000..96497e8 --- /dev/null +++ b/assets/vendor/external/katex/auto-render.min.js @@ -0,0 +1,54 @@ +/* KaTeX Auto-Render - Local Fallback */ +(function() { + 'use strict'; + + console.warn('KaTeX Auto-Render 本地备用版本 - 功能受限'); + + window.renderMathInElement = function(element, options) { + console.warn('KaTeX 自动渲染功能不可用 - 使用备用版本'); + + options = options || {}; + var delimiters = options.delimiters || [ + {left: "$$", right: "$$", display: true}, + {left: "$", right: "$", display: false}, + {left: "\\(", right: "\\)", display: false}, + {left: "\\[", right: "\\]", display: true} + ]; + + if (!element) { + element = document.body; + } + + // 简单的文本替换处理 + var walker = document.createTreeWalker( + element, + NodeFilter.SHOW_TEXT, + null, + false + ); + + var textNodes = []; + var node; + while (node = walker.nextNode()) { + textNodes.push(node); + } + + textNodes.forEach(function(textNode) { + var text = textNode.textContent; + var hasMatch = false; + + delimiters.forEach(function(delimiter) { + if (text.includes(delimiter.left) && text.includes(delimiter.right)) { + hasMatch = true; + } + }); + + if (hasMatch) { + var span = document.createElement('span'); + span.innerHTML = text.replace(/\$([^$]+)\$/g, + '$1'); + textNode.parentNode.replaceChild(span, textNode); + } + }); + }; +})(); \ No newline at end of file diff --git a/assets/vendor/external/katex/katex.min.css b/assets/vendor/external/katex/katex.min.css new file mode 100644 index 0000000..850147d --- /dev/null +++ b/assets/vendor/external/katex/katex.min.css @@ -0,0 +1,47 @@ +/* KaTeX CSS - Local Fallback */ +.katex { + font: normal 1.21em KaTeX_Main, "Times New Roman", serif; + line-height: 1.2; + text-indent: 0; + text-rendering: auto; + font-style: italic; + color: #666; +} + +.katex * { + -ms-high-contrast-adjust: none !important; +} + +.katex .katex-version::after { + content: "本地备用版本"; +} + +.katex .katex-mathml { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} + +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} + +.katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} + +/* 备用样式提示 */ +.katex::before { + content: "[数学公式渲染服务不可用] "; + font-size: 0.8em; + color: #999; + font-style: normal; +} \ No newline at end of file diff --git a/assets/vendor/external/katex/katex.min.js b/assets/vendor/external/katex/katex.min.js new file mode 100644 index 0000000..7d844ed --- /dev/null +++ b/assets/vendor/external/katex/katex.min.js @@ -0,0 +1,27 @@ +/* KaTeX JS - Local Fallback */ +(function() { + 'use strict'; + + console.warn('KaTeX 本地备用版本 - 功能受限'); + + // 创建简化的 KaTeX 对象 + window.katex = { + render: function(tex, element, options) { + console.warn('KaTeX 渲染功能不可用 - 使用备用版本'); + if (element) { + element.innerHTML = '' + + tex + ''; + element.className = (element.className || '') + ' katex'; + } + }, + + renderToString: function(tex, options) { + console.warn('KaTeX 渲染功能不可用 - 使用备用版本'); + return '' + + tex + ''; + } + }; + + // 版本信息 + window.katex.__version = "0.11.1-fallback"; +})(); \ No newline at end of file diff --git a/assets/vendor/external/logger.js b/assets/vendor/external/logger.js new file mode 100644 index 0000000..aa32f4f --- /dev/null +++ b/assets/vendor/external/logger.js @@ -0,0 +1,266 @@ +/* Argon 内部日志系统 - 仅管理员可见 */ +(function() { + 'use strict'; + + window.ArgonLogger = { + // 配置 + config: { + maxLogs: 1000, + enableConsole: false, // 默认关闭控制台输出 + enableStorage: true, + storageKey: 'argon_internal_logs' + }, + + // 日志级别 + levels: { + DEBUG: 0, + INFO: 1, + WARN: 2, + ERROR: 3, + CRITICAL: 4 + }, + + // 内部日志存储 + logs: [], + + // 初始化 + init: function() { + this.checkAdminStatus(); + this.loadStoredLogs(); + this.bindEvents(); + }, + + // 检查管理员状态 + checkAdminStatus: function() { + // 检查是否为管理员(通过PHP传递的全局变量) + if (typeof window.argonUserRole !== 'undefined' && window.argonUserRole === 'administrator') { + this.config.enableConsole = true; + this.log('管理员模式:控制台日志已启用', 'INFO'); + } else { + this.config.enableConsole = false; + } + }, + + // 加载存储的日志 + loadStoredLogs: function() { + if (this.config.enableStorage && localStorage) { + try { + var stored = localStorage.getItem(this.config.storageKey); + if (stored) { + this.logs = JSON.parse(stored); + } + } catch (e) { + // 静默处理存储错误 + } + } + }, + + // 保存日志到存储 + saveLogsToStorage: function() { + if (this.config.enableStorage && localStorage) { + try { + // 只保留最新的日志 + var logsToSave = this.logs.slice(-this.config.maxLogs); + localStorage.setItem(this.config.storageKey, JSON.stringify(logsToSave)); + } catch (e) { + // 静默处理存储错误 + } + } + }, + + // 记录日志 + log: function(message, level, data) { + level = level || 'INFO'; + var timestamp = new Date().toISOString(); + var logEntry = { + timestamp: timestamp, + level: level, + message: message, + data: data || null, + url: window.location.href, + userAgent: navigator.userAgent.substring(0, 100) // 截取前100字符 + }; + + // 添加到内部日志 + this.logs.push(logEntry); + + // 限制日志数量 + if (this.logs.length > this.config.maxLogs) { + this.logs = this.logs.slice(-this.config.maxLogs); + } + + // 保存到存储 + this.saveLogsToStorage(); + + // 仅管理员显示控制台日志 + if (this.config.enableConsole) { + var consoleMethod = this.getConsoleMethod(level); + consoleMethod('[Argon] ' + message, data || ''); + } + + // 关键错误需要特殊处理 + if (level === 'CRITICAL') { + this.handleCriticalError(logEntry); + } + }, + + // 获取对应的控制台方法 + getConsoleMethod: function(level) { + switch (level) { + case 'DEBUG': + return console.debug || console.log; + case 'INFO': + return console.info || console.log; + case 'WARN': + return console.warn || console.log; + case 'ERROR': + case 'CRITICAL': + return console.error || console.log; + default: + return console.log; + } + }, + + // 处理关键错误 + handleCriticalError: function(logEntry) { + // 关键错误需要通知用户联系站长 + if (this.config.enableConsole) { + console.error('发生关键错误,请联系站长处理:', logEntry.message); + } + + // 可以在这里添加错误上报逻辑 + this.reportCriticalError(logEntry); + }, + + // 上报关键错误 + reportCriticalError: function(logEntry) { + // 这里可以实现错误上报到服务器的逻辑 + // 暂时只记录到本地存储 + try { + var criticalLogs = JSON.parse(localStorage.getItem('argon_critical_errors') || '[]'); + criticalLogs.push(logEntry); + localStorage.setItem('argon_critical_errors', JSON.stringify(criticalLogs.slice(-50))); + } catch (e) { + // 静默处理 + } + }, + + // 获取日志(仅管理员) + getLogs: function(level, limit) { + if (!this.config.enableConsole) { + return []; // 非管理员返回空数组 + } + + var filteredLogs = this.logs; + + if (level) { + filteredLogs = this.logs.filter(function(log) { + return log.level === level; + }); + } + + if (limit) { + filteredLogs = filteredLogs.slice(-limit); + } + + return filteredLogs; + }, + + // 清除日志(仅管理员) + clearLogs: function() { + if (!this.config.enableConsole) { + return false; + } + + this.logs = []; + if (localStorage) { + localStorage.removeItem(this.config.storageKey); + localStorage.removeItem('argon_critical_errors'); + } + return true; + }, + + // 导出日志(仅管理员) + exportLogs: function() { + if (!this.config.enableConsole) { + return null; + } + + var exportData = { + timestamp: new Date().toISOString(), + site: window.location.origin, + logs: this.logs, + criticalErrors: JSON.parse(localStorage.getItem('argon_critical_errors') || '[]') + }; + + return JSON.stringify(exportData, null, 2); + }, + + // 绑定事件 + bindEvents: function() { + var self = this; + + // 监听页面错误 + window.addEventListener('error', function(e) { + self.log('JavaScript错误: ' + e.message, 'ERROR', { + filename: e.filename, + lineno: e.lineno, + colno: e.colno, + stack: e.error ? e.error.stack : null + }); + }); + + // 监听未处理的Promise拒绝 + window.addEventListener('unhandledrejection', function(e) { + self.log('未处理的Promise拒绝: ' + e.reason, 'ERROR', { + reason: e.reason, + promise: e.promise + }); + }); + + // 监听资源加载错误 + window.addEventListener('error', function(e) { + if (e.target && e.target !== window) { + var resourceType = e.target.tagName || 'unknown'; + var resourceUrl = e.target.src || e.target.href || 'unknown'; + self.log('资源加载失败: ' + resourceType + ' - ' + resourceUrl, 'WARN'); + } + }, true); + }, + + // 便捷方法 + debug: function(message, data) { + this.log(message, 'DEBUG', data); + }, + + info: function(message, data) { + this.log(message, 'INFO', data); + }, + + warn: function(message, data) { + this.log(message, 'WARN', data); + }, + + error: function(message, data) { + this.log(message, 'ERROR', data); + }, + + critical: function(message, data) { + this.log(message, 'CRITICAL', data); + } + }; + + // 自动初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function() { + ArgonLogger.init(); + }); + } else { + ArgonLogger.init(); + } + + // 为管理员提供全局访问 + if (typeof window.argonUserRole !== 'undefined' && window.argonUserRole === 'administrator') { + window.ArgonLogs = ArgonLogger; + } +})(); \ No newline at end of file diff --git a/assets/vendor/external/mathjax2/MathJax.js b/assets/vendor/external/mathjax2/MathJax.js new file mode 100644 index 0000000..018902c --- /dev/null +++ b/assets/vendor/external/mathjax2/MathJax.js @@ -0,0 +1,62 @@ +/* MathJax 2 - Local Fallback */ +(function() { + 'use strict'; + + console.warn('MathJax 2 本地备用版本 - 功能受限'); + + // 创建简化的 MathJax 对象 + window.MathJax = window.MathJax || {}; + + window.MathJax.Hub = { + Config: function(config) { + console.log('MathJax 2 配置已设置(备用版本)'); + this.config = config; + }, + + Queue: function(callback) { + if (typeof callback === 'function') { + setTimeout(callback, 100); + } + return this; + }, + + Typeset: function(element) { + console.warn('MathJax 2 渲染功能不可用 - 使用备用版本'); + // 简单的样式处理 + var mathElements = element ? + element.querySelectorAll('script[type*="math"]') : + document.querySelectorAll('script[type*="math"]'); + + mathElements.forEach(function(script) { + var span = document.createElement('span'); + span.textContent = script.textContent; + span.style.fontStyle = 'italic'; + span.style.color = '#666'; + span.title = '数学公式渲染服务不可用'; + script.parentNode.insertBefore(span, script); + script.style.display = 'none'; + }); + }, + + Register: { + StartupHook: function(hook, callback) { + if (typeof callback === 'function') { + setTimeout(callback, 100); + } + } + } + }; + + // 自动配置 + if (window.MathJax.Hub.Config) { + window.MathJax.Hub.Config({ + messageStyle: "none", + tex2jax: { + inlineMath: [["$", "$"], ["\\\\(", "\\\\)"]], + displayMath: [['$$','$$']], + processEscapes: true, + skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'] + } + }); + } +})(); \ No newline at end of file diff --git a/assets/vendor/external/mathjax3/tex-chtml-full.js b/assets/vendor/external/mathjax3/tex-chtml-full.js new file mode 100644 index 0000000..78f5fad --- /dev/null +++ b/assets/vendor/external/mathjax3/tex-chtml-full.js @@ -0,0 +1,61 @@ +/* MathJax 3 - Local Fallback */ +(function() { + 'use strict'; + + console.warn('MathJax 3 本地备用版本 - 功能受限'); + + // 创建简化的 MathJax 对象 + window.MathJax = window.MathJax || { + tex: { + inlineMath: [["$", "$"], ["\\\\(", "\\\\)"]], + displayMath: [['$$','$$']], + processEscapes: true, + packages: {'[+]': ['noerrors']} + }, + options: { + skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'], + ignoreHtmlClass: 'tex2jax_ignore', + processHtmlClass: 'tex2jax_process' + }, + loader: { + load: ['[tex]/noerrors'] + }, + startup: { + ready: function() { + console.log('MathJax 3 备用版本已就绪'); + MathJax.startup.defaultReady(); + }, + defaultReady: function() { + // 简化的渲染函数 + MathJax.typesetPromise = function(elements) { + return new Promise(function(resolve) { + console.warn('MathJax 渲染功能不可用 - 使用备用版本'); + resolve(); + }); + }; + } + } + }; + + // 简化的渲染函数 + window.MathJax.typesetPromise = function(elements) { + return new Promise(function(resolve) { + console.warn('数学公式渲染服务不可用'); + // 尝试简单的文本替换 + var mathElements = document.querySelectorAll('.tex2jax_process, .MathJax'); + mathElements.forEach(function(el) { + if (el.textContent.includes('$')) { + el.style.fontStyle = 'italic'; + el.style.color = '#666'; + el.title = '数学公式渲染服务不可用'; + } + }); + resolve(); + }); + }; + + // 触发启动 + if (MathJax.startup && MathJax.startup.ready) { + MathJax.startup.ready(); + } +})(); \ No newline at end of file diff --git a/assets/vendor/external/resource-loader.js b/assets/vendor/external/resource-loader.js index 1aff9dd..86672b1 100644 --- a/assets/vendor/external/resource-loader.js +++ b/assets/vendor/external/resource-loader.js @@ -8,37 +8,131 @@ 'fonts.googleapis.com/css?family=Open+Sans': '/wp-content/themes/argon/assets/vendor/external/fonts/open-sans.css', 'fonts.googleapis.com/css?family=Noto+Serif+SC': '/wp-content/themes/argon/assets/vendor/external/fonts/noto-serif-sc.css', 'static.geetest.com/v4/gt4.js': '/wp-content/themes/argon/assets/vendor/external/geetest/gt4.js', - 'cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.min.js': '/wp-content/themes/argon/assets/vendor/external/qrcode/qrcode.min.js' + 'cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.min.js': '/wp-content/themes/argon/assets/vendor/external/qrcode/qrcode.min.js', + 'cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js': '/wp-content/themes/argon/assets/vendor/external/mathjax3/tex-chtml-full.js', + 'cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js': '/wp-content/themes/argon/assets/vendor/external/mathjax2/MathJax.js', + 'cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css': '/wp-content/themes/argon/assets/vendor/external/katex/katex.min.css', + 'cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js': '/wp-content/themes/argon/assets/vendor/external/katex/katex.min.js', + 'cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js': '/wp-content/themes/argon/assets/vendor/external/katex/auto-render.min.js' + }, + + // 配置选项 + config: { + timeout: 5000, + retryCount: 2, + enableLogging: true, + enableFallbackCSS: true, + enableFallbackJS: true + }, + + // 初始化 + init: function() { + this.loadFallbackSystems(); + this.bindGlobalErrorHandlers(); + this.log('资源加载器已初始化'); + }, + + // 加载备用系统 + loadFallbackSystems: function() { + if (this.config.enableFallbackCSS) { + this.loadCSS('/wp-content/themes/argon/assets/vendor/external/css-fallback.css'); + this.loadCSS('/wp-content/themes/argon/assets/vendor/external/fonts/font-fallback.css'); + } + + if (this.config.enableFallbackJS) { + this.loadJS('/wp-content/themes/argon/assets/vendor/external/js-fallback.js'); + this.loadJS('/wp-content/themes/argon/assets/vendor/external/resource-monitor.js'); + } + }, + + // 绑定全局错误处理 + bindGlobalErrorHandlers: function() { + var self = this; + + // 监听资源加载错误 + window.addEventListener('error', function(e) { + if (e.target && (e.target.tagName === 'SCRIPT' || e.target.tagName === 'LINK')) { + self.handleResourceError(e.target); + } + }, true); + + // 监听未处理的Promise拒绝 + window.addEventListener('unhandledrejection', function(e) { + if (typeof ArgonLogger !== 'undefined') { + ArgonLogger.warn('未处理的Promise拒绝: ' + e.reason); + } + }); + }, + + // 处理资源加载错误 + handleResourceError: function(element) { + var url = element.src || element.href; + if (url) { + if (typeof ArgonLogger !== 'undefined') { + ArgonLogger.warn('资源加载失败: ' + url); + } + var fallbackUrl = this.getFallbackUrl(url); + if (fallbackUrl) { + this.log('尝试加载备用资源: ' + fallbackUrl); + if (element.tagName === 'SCRIPT') { + this.loadJS(fallbackUrl); + } else if (element.tagName === 'LINK') { + this.loadCSS(fallbackUrl); + } + } + } + }, + + // 获取备用URL + getFallbackUrl: function(url) { + for (var key in this.resourceMap) { + if (url.includes(key)) { + return this.resourceMap[key]; + } + } + return null; }, // 加载CSS资源 loadCSS: function(url, fallbackUrl) { + var self = this; return new Promise(function(resolve, reject) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = url; var timeout = setTimeout(function() { - console.warn('CSS资源加载超时,使用本地备用:', url); + self.log('CSS资源加载超时: ' + url); if (fallbackUrl) { - ArgonResourceLoader.loadCSS(fallbackUrl).then(resolve).catch(reject); + self.loadCSS(fallbackUrl).then(resolve).catch(reject); } else { - reject(new Error('CSS加载失败且无备用资源')); + var autoFallback = self.getFallbackUrl(url); + if (autoFallback) { + self.loadCSS(autoFallback).then(resolve).catch(reject); + } else { + reject(new Error('CSS加载失败且无备用资源')); + } } - }, 5000); + }, self.config.timeout); link.onload = function() { clearTimeout(timeout); + self.log('CSS资源加载成功: ' + url); resolve(); }; link.onerror = function() { clearTimeout(timeout); - console.warn('CSS资源加载失败,使用本地备用:', url); + self.log('CSS资源加载失败: ' + url); if (fallbackUrl) { - ArgonResourceLoader.loadCSS(fallbackUrl).then(resolve).catch(reject); + self.loadCSS(fallbackUrl).then(resolve).catch(reject); } else { - reject(new Error('CSS加载失败且无备用资源')); + var autoFallback = self.getFallbackUrl(url); + if (autoFallback) { + self.loadCSS(autoFallback).then(resolve).catch(reject); + } else { + reject(new Error('CSS加载失败且无备用资源')); + } } }; @@ -48,32 +142,44 @@ // 加载JS资源 loadJS: function(url, fallbackUrl) { + var self = this; return new Promise(function(resolve, reject) { var script = document.createElement('script'); script.src = url; script.async = true; var timeout = setTimeout(function() { - console.warn('JS资源加载超时,使用本地备用:', url); + self.log('JS资源加载超时: ' + url); if (fallbackUrl) { - ArgonResourceLoader.loadJS(fallbackUrl).then(resolve).catch(reject); + self.loadJS(fallbackUrl).then(resolve).catch(reject); } else { - reject(new Error('JS加载失败且无备用资源')); + var autoFallback = self.getFallbackUrl(url); + if (autoFallback) { + self.loadJS(autoFallback).then(resolve).catch(reject); + } else { + reject(new Error('JS加载失败且无备用资源')); + } } - }, 5000); + }, self.config.timeout); script.onload = function() { clearTimeout(timeout); + self.log('JS资源加载成功: ' + url); resolve(); }; script.onerror = function() { clearTimeout(timeout); - console.warn('JS资源加载失败,使用本地备用:', url); + self.log('JS资源加载失败: ' + url); if (fallbackUrl) { - ArgonResourceLoader.loadJS(fallbackUrl).then(resolve).catch(reject); + self.loadJS(fallbackUrl).then(resolve).catch(reject); } else { - reject(new Error('JS加载失败且无备用资源')); + var autoFallback = self.getFallbackUrl(url); + if (autoFallback) { + self.loadJS(autoFallback).then(resolve).catch(reject); + } else { + reject(new Error('JS加载失败且无备用资源')); + } } }; @@ -83,45 +189,45 @@ // 智能加载资源 smartLoad: function(url, type) { - var fallbackUrl = null; - - // 查找备用资源 - for (var key in this.resourceMap) { - if (url.indexOf(key) !== -1) { - fallbackUrl = this.resourceMap[key]; - break; - } - } - if (type === 'css') { - return this.loadCSS(url, fallbackUrl); + return this.loadCSS(url); } else if (type === 'js') { - return this.loadJS(url, fallbackUrl); + return this.loadJS(url); + } else { + return Promise.reject(new Error('不支持的资源类型: ' + type)); + } + }, + + // 批量加载资源 + loadMultiple: function(resources) { + var self = this; + var promises = resources.map(function(resource) { + return self.smartLoad(resource.url, resource.type); + }); + return Promise.all(promises); + }, + + // 日志记录 + log: function(message) { + if (this.config.enableLogging) { + if (typeof ArgonLogger !== 'undefined') { + ArgonLogger.info('[ResourceLoader] ' + message); + } else { + // 仅在管理员模式下输出到控制台 + if (typeof window.argonUserRole !== 'undefined' && window.argonUserRole === 'administrator') { + console.log('[ArgonResourceLoader] ' + message); + } + } } } }; - // 自动替换现有的资源加载 - var originalCreateElement = document.createElement; - document.createElement = function(tagName) { - var element = originalCreateElement.call(document, tagName); - - if (tagName.toLowerCase() === 'script') { - var originalSetAttribute = element.setAttribute; - element.setAttribute = function(name, value) { - if (name === 'src' && value) { - // 检查是否需要备用资源 - for (var key in ArgonResourceLoader.resourceMap) { - if (value.indexOf(key) !== -1) { - console.log('检测到外部JS资源,准备备用方案:', value); - break; - } - } - } - return originalSetAttribute.call(this, name, value); - }; - } - - return element; - }; + // 自动初始化 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function() { + ArgonResourceLoader.init(); + }); + } else { + ArgonResourceLoader.init(); + } })(); \ No newline at end of file diff --git a/assets/vendor/external/resource-monitor.js b/assets/vendor/external/resource-monitor.js new file mode 100644 index 0000000..924fbfa --- /dev/null +++ b/assets/vendor/external/resource-monitor.js @@ -0,0 +1,200 @@ +/* 外部资源监控系统 - 实时检测和自动切换 */ +(function() { + 'use strict'; + + window.ArgonResourceMonitor = { + // 监控配置 + config: { + checkInterval: 30000, // 30秒检查一次 + timeout: 5000, // 5秒超时 + retryCount: 3, // 重试3次 + enableLogging: true // 启用日志 + }, + + // 资源状态 + resourceStatus: {}, + + // 监控定时器 + monitorTimer: null, + + // 初始化监控 + init: function() { + this.log('资源监控系统启动'); + this.startMonitoring(); + this.bindEvents(); + }, + + // 开始监控 + startMonitoring: function() { + var self = this; + this.monitorTimer = setInterval(function() { + self.checkAllResources(); + }, this.config.checkInterval); + }, + + // 停止监控 + stopMonitoring: function() { + if (this.monitorTimer) { + clearInterval(this.monitorTimer); + this.monitorTimer = null; + } + }, + + // 检查所有资源 + checkAllResources: function() { + var self = this; + var resources = [ + 'https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700', + 'https://static.geetest.com/v4/gt4.js', + 'https://cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.min.js' + ]; + + resources.forEach(function(url) { + self.checkResource(url); + }); + }, + + // 检查单个资源 + checkResource: function(url) { + var self = this; + var startTime = Date.now(); + + // 创建测试请求 + var xhr = new XMLHttpRequest(); + xhr.timeout = this.config.timeout; + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + var responseTime = Date.now() - startTime; + var status = xhr.status === 200 ? 'available' : 'unavailable'; + + self.updateResourceStatus(url, { + status: status, + responseTime: responseTime, + lastCheck: new Date().toISOString() + }); + } + }; + + xhr.onerror = function() { + self.updateResourceStatus(url, { + status: 'unavailable', + responseTime: -1, + lastCheck: new Date().toISOString() + }); + }; + + xhr.ontimeout = function() { + self.updateResourceStatus(url, { + status: 'timeout', + responseTime: self.config.timeout, + lastCheck: new Date().toISOString() + }); + }; + + try { + xhr.open('HEAD', url, true); + xhr.send(); + } catch (e) { + this.updateResourceStatus(url, { + status: 'error', + responseTime: -1, + lastCheck: new Date().toISOString(), + error: e.message + }); + } + }, + + // 更新资源状态 + updateResourceStatus: function(url, status) { + this.resourceStatus[url] = status; + this.log('资源状态更新: ' + url + ' - ' + status.status); + + // 如果资源不可用,触发备用机制 + if (status.status !== 'available') { + this.triggerFallback(url); + } + }, + + // 触发备用机制 + triggerFallback: function(url) { + this.log('触发备用机制: ' + url); + + // 发送自定义事件 + var event = new CustomEvent('resourceUnavailable', { + detail: { url: url, status: this.resourceStatus[url] } + }); + document.dispatchEvent(event); + }, + + // 绑定事件 + bindEvents: function() { + var self = this; + + // 监听页面可见性变化 + document.addEventListener('visibilitychange', function() { + if (document.visibilityState === 'visible') { + self.checkAllResources(); + } + }); + + // 监听网络状态变化 + if ('onLine' in navigator) { + window.addEventListener('online', function() { + self.log('网络连接恢复,重新检查资源'); + self.checkAllResources(); + }); + + window.addEventListener('offline', function() { + self.log('网络连接断开'); + }); + } + }, + + // 获取资源状态报告 + getStatusReport: function() { + return { + timestamp: new Date().toISOString(), + resources: this.resourceStatus, + summary: this.generateSummary() + }; + }, + + // 生成状态摘要 + generateSummary: function() { + var total = Object.keys(this.resourceStatus).length; + var available = 0; + var unavailable = 0; + + for (var url in this.resourceStatus) { + if (this.resourceStatus[url].status === 'available') { + available++; + } else { + unavailable++; + } + } + + return { + total: total, + available: available, + unavailable: unavailable, + availability: total > 0 ? (available / total * 100).toFixed(1) + '%' : '0%' + }; + }, + + // 日志记录 + log: function(message) { + if (this.config.enableLogging) { + console.log('[ArgonResourceMonitor] ' + message); + } + } + }; + + // 页面加载完成后自动启动监控 + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function() { + ArgonResourceMonitor.init(); + }); + } else { + ArgonResourceMonitor.init(); + } +})(); \ No newline at end of file diff --git a/footer.php b/footer.php index ab57c58..a35473f 100644 --- a/footer.php +++ b/footer.php @@ -190,7 +190,15 @@ - + @@ -232,17 +240,24 @@ - + - + - + - + +