{"version":3,"names":["window","require","registerSettings","theme_uploads","logo","define","_exports","_pluginApi","Object","defineProperty","value","default","getObjectForTheme","name","after","initialize","withPluginApi","api","_dec","_obj","on","number","I18n","target","property","decorators","descriptor","context","desc","modifyClass","pluginId","setCategoryActivityStats","category","this","topics_week","statPeriod","stat","unit","t","setProperties","pickAll","count","statTitle","getOwnPropertyDescriptor","keys","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","call","undefined","currentUser","getCurrentUser","document","getElementById","style","display","inserSearchAI","box","getElementsByClassName","ii","createElement","src","width","Span","className","appendChild","tooltipSearchDiv","innerHTML","addEventListener","click","prepend","$ai_banner_box","$","localStorage","getItem","length","appendTo","height","trigger","hide","setItem","originalPushState","history","pushState","state","title","url","apply","arguments","console","log","timer","setInterval","clearInterval","onpopstate","event","location","pathname","setTimeout","topBox","topIcon","topLi","isMobile","documentElement","clientWidth","aiBtn","tooltipDiv","insertBefore","marked","setOptions","breaks","gfm","headerIds","mangle","sanitize","smartLists","smartypants","xhtml","MathJaxRenderCache","loadState","loadPromise","renderCache","Map","cacheStats","hits","misses","maxCacheSize","cacheTimeout","generateContentHash","content","hash","i","charCodeAt","Math","abs","toString","cleanExpiredCache","now","Date","removedCount","entries","timestamp","delete","manageCacheSize","size","Array","from","sort","a","b","toRemove","getCachedRender","cacheKey","cached","get","html","setCachedRender","renderedHtml","set","totalCalls","hitRate","toFixed","memoryUsage","estimateCacheSize","totalSize","round","getCacheStats","total","parseFloat","cacheSize","memoryUsageKB","clearCache","clear","containsMathContent","some","pattern","test","loadMathJaxIfNeeded","MathJax","typesetPromise","Promise","resolve","_loadMathJax","reject","options","ignoreHtmlClass","processHtmlClass","tex","inlineMath","displayMath","svg","fontCache","startup","ready","defaultReady","chtml","fontURL","querySelector","startTime","checkExisting","script","async","onload","waitForInit","onerror","head","renderContentProgressive","messageElement","replace","$container","find","parse","_addBasicSecurity","_renderMathAsync","error","each","$link","href","attr","startsWith","rel","class","imgSrc","link","wrap","copyLabel","GLOBAL_CONFIG","$pre","ensureButtonContent","$button","empty","append","$existingWrapper","closest","$existingButton","$newButton","$wrapper","before","hljs","highlightElement","renderMathContent","useCache","showIndicator","container","returnHtml","cachedResult","$indicator","MathJaxLoadChecker","waitForMathJax","$tempDiv","processedContent","performance","renderSuccess","then","catch","err","forceReloadMathJax","finalHtml","renderTime","remove","text","bind"],"sourceRoot":"theme-3/","sources":["settings.js","discourse/initializers/theme-field-392-common-html-script-1.js","discourse/initializers/theme-field-392-common-html-script-2.js","_html/common/head_tag_3.js","_html/common/head_tag_4.js"],"sourcesContent":["(function() {\n  if ('require' in window) {\n    require(\"discourse/lib/theme-settings-store\").registerSettings(3, {\"theme_uploads\":{\"ai-clear\":\"/uploads/default/original/2X/6/65fcc9da271c2fc4d0342578894afe5cd16a5f89.svg\",\"ai-close\":\"/uploads/default/original/2X/b/b67431534c444b778183aa6f003a649a8432e295.svg\",\"ai-copy\":\"/uploads/default/original/2X/9/9acb80ebc563f2e170de2d91e15a052764abf356.svg\",\"ai-copy-active\":\"/uploads/default/original/2X/8/8ab4d4943948e4cffc11e9aeb6dc10f5c5972ca0.svg\",\"ai-dislike\":\"/uploads/default/original/2X/7/781c3e7e6a40fecb9e9b9bdc1336d7f531c36b31.svg\",\"ai-dislike-active\":\"/uploads/default/original/2X/4/4d70ba4fefc501ba126cab32ba7fda67c29f8067.svg\",\"ai-input\":\"/uploads/default/original/2X/2/25a23c3990122b10559ba9e6e9e23f1be0dd7f6f.svg\",\"ai-like\":\"/uploads/default/original/2X/a/a65c6279df983f320276634cd342e6e1514f66a1.svg\",\"ai-like-active\":\"/uploads/default/original/2X/8/8d31444476ffc9b42499624157e721a335307268.svg\",\"ai-link\":\"/uploads/default/original/2X/b/b308c2b488c2ab0c7fe6ee45586cbd5b30426d52.svg\",\"ai-normal\":\"/uploads/default/original/2X/c/c8e52393462b10d80ed6220630440bbc9d6258c1.svg\",\"ai-robot\":\"/uploads/default/original/2X/d/d6b00bfd97d0e288b03c55c6cc28255cd32444f2.svg\",\"ai-robot-icon\":\"/uploads/default/original/2X/6/6a306d62d68544dcacea2c81f319e6784c5bc172.svg\",\"ai-rotate\":\"/uploads/default/original/2X/2/2776bf4d4f27a339ed5f575ba8354024497d8ff6.svg\",\"ai-user\":\"/uploads/default/original/2X/6/6e51f7db36be5710d911441548c8a840bc0d5391.svg\",\"logo\":\"/uploads/default/original/2X/a/ae2983099198b9a09fe6e37e7fb01fad70cc6311.gif\"}});\n  }\n})();\n","if ('define' in window) {\ndefine(\"discourse/theme-3/discourse/initializers/theme-field-392-common-html-script-1\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(3);\n  const themePrefix = key => `theme_translations.3.${key}`;\n  var _default = _exports.default = {\n    name: \"theme-field-392-common-html-script-1\",\n    after: \"inject-objects\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"0.8\", api => {\n        var _dec, _obj;\n        const {\n          on\n        } = require(\"discourse-common/utils/decorators\");\n        const {\n          number\n        } = require(\"discourse/lib/formatter\");\n        const I18n = require(\"I18n\").default;\n\n        // category is considered active if it had at least this many topics this week\n        const WEEK_THROSHOLD = 999;\n        api.modifyClass(\"component:parent-category-row\", (_dec = on(\"didReceiveAttrs\"), (_obj = {\n          pluginId: \"category-activity-indicator\",\n          setCategoryActivityStats() {\n            const category = this.category;\n            if (category.topics_week < WEEK_THROSHOLD) {\n              return;\n            }\n            const statPeriod = \"week\";\n            const stat = category[`topics_${statPeriod}`];\n            const unit = I18n.t(`categories.topic_stat_unit.${statPeriod}`);\n            category.setProperties({\n              pickAll: false,\n              stat: I18n.t(\"categories.topic_stat\", {\n                count: stat,\n                number: `<span class=\"value\">${number(stat)}</span>`,\n                unit: `<span class=\"unit\">${unit}</span>`\n              }),\n              statTitle: I18n.t(`categories.topic_stat_sentence_${statPeriod}`, {\n                count: stat\n              })\n            });\n          }\n        }, (_applyDecoratedDescriptor(_obj, \"setCategoryActivityStats\", [_dec], Object.getOwnPropertyDescriptor(_obj, \"setCategoryActivityStats\"), _obj)), _obj)));\n      });\n    }\n  };\n});\n}\n","if ('define' in window) {\ndefine(\"discourse/theme-3/discourse/initializers/theme-field-392-common-html-script-2\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(3);\n  const themePrefix = key => `theme_translations.3.${key}`;\n  var _default = _exports.default = {\n    name: \"theme-field-392-common-html-script-2\",\n    after: \"inject-objects\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"0.8.18\", api => {\n        const currentUser = api.getCurrentUser();\n        window.currentUser = currentUser;\n        // if(currentUser && currentUser.groups.filter(item => item.name == 'mech-mind-staff').length> 0) {\n        // 所有注册用户可见AI助手。非注册用户currentUser值是null，注册用户currentUser是数组。\n        //if(currentUser) {\n        // 均可见\n        if (true) {\n          document.getElementById('aibot-btn').style.display = 'flex';\n          // window.getUserIp = currentUser.username\n          const inserSearchAI = () => {\n            // alert('inserSearchAI触发')\n            let box = document.getElementsByClassName('search-menu')[0];\n            if (box) {\n              let ii = document.createElement('img');\n              ii.src = 'https://community.mech-mind.com.cn/uploads/default/original/2X/a/ae2983099198b9a09fe6e37e7fb01fad70cc6311.gif';\n              ii.style.width = \"20px\";\n              let Span = document.createElement('span');\n              Span.className = \"ai-robot-searchTooltip-btn\";\n              Span.appendChild(ii);\n              let tooltipSearchDiv = document.createElement('div');\n              tooltipSearchDiv.className = 'searchTooltip';\n              tooltipSearchDiv.innerHTML = '<p>The AI Assistant is now available，</p><p>Come and try it out! </p>';\n              Span.appendChild(tooltipSearchDiv);\n              Span.appendChild(tooltipSearchDiv);\n              Span.addEventListener('click', () => {\n                document.getElementById('aibot-btn').click();\n              });\n              box.prepend(Span);\n            }\n            // alert(12)\n            // 添加banner图\n            let $ai_banner_box = $(`<div id=\"banner_ai_ad\" style=\"overflow:hidden;\">\n<svg   height=\"70\" viewBox=\"0 0 1920 70\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g clip-path=\"url(#clip0_2995_179)\">\n<rect width=\"1920\" height=\"70\" fill=\"url(#paint0_linear_2995_179)\"/>\n<g filter=\"url(#filter0_f_2995_179)\">\n<ellipse cx=\"1630.34\" cy=\"33.0902\" rx=\"82.3994\" ry=\"289.921\" transform=\"rotate(104.02 1630.34 33.0902)\" fill=\"url(#paint1_radial_2995_179)\"/>\n</g>\n<rect x=\"-793.729\" y=\"-936\" width=\"2134.59\" height=\"1600.94\" transform=\"rotate(6.10534 -793.729 -936)\" fill=\"url(#pattern0_2995_179)\" fill-opacity=\"0.6\"/>\n<rect x=\"242\" y=\"1180\" width=\"1200\" height=\"2314\" transform=\"rotate(-90 242 1180)\" fill=\"url(#pattern1_2995_179)\" fill-opacity=\"0.5\"/>\n</g>\n<defs>\n<filter id=\"filter0_f_2995_179\" x=\"1198.34\" y=\"-223.326\" width=\"864.008\" height=\"512.832\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n<feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n<feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n<feGaussianBlur stdDeviation=\"75\" result=\"effect1_foregroundBlur_2995_179\"/>\n</filter>\n<pattern id=\"pattern0_2995_179\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n<use xlink:href=\"#image0_2995_179\" transform=\"scale(0.000244141 0.000325521)\"/>\n</pattern>\n<pattern id=\"pattern1_2995_179\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n<use xlink:href=\"#image1_2995_179\" transform=\"scale(0.000833333 0.000432152)\"/>\n</pattern>\n<linearGradient id=\"paint0_linear_2995_179\" x1=\"-146.959\" y1=\"35\" x2=\"1920\" y2=\"35\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#00164B\"/>\n<stop offset=\"0.13707\" stop-color=\"#444CA4\"/>\n<stop offset=\"0.36533\" stop-color=\"#545ECA\"/>\n<stop offset=\"0.658654\" stop-color=\"#3672C6\"/>\n<stop offset=\"1\" stop-color=\"#2D8CEB\"/>\n</linearGradient>\n<radialGradient id=\"paint1_radial_2995_179\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(1630.35 33.0902) scale(82.3994 289.921)\">\n<stop stop-color=\"#47FFB2\" stop-opacity=\"0.65\"/>\n<stop offset=\"1\" stop-color=\"#47FFB2\" stop-opacity=\"0.1\"/>\n</radialGradient>\n<clipPath id=\"clip0_2995_179\">\n<rect width=\"1920\" height=\"70\" fill=\"white\"/>\n</clipPath>\n</defs>\n</svg>\n    <p style=\"position:absolute;top: 50px;left: 50%;margin-left: -523px;font-size: 29px;color: white;font-weight: bold;\">AI Assistant Is Live!</p>\n    <p style=\"position:absolute;top: 67px;left: 50%;margin-left: -209px;font-size: 14px;color: white;width: 502px;\">Mech-Mind AI Assistant: 24/7 smart support for camera recommendations, expert answers & troubleshooting—all in one.</p>\n    <p id=\"banner_ljty_btn\" style=\"position:absolute;top: 70px;left: 50%;margin-left: 355px;font-size: 13px;color: white;border-radius: 100px;padding: 7px 20px;border: 1px solid #ffffff;line-height: 13px;cursor: pointer;\">Get Started</p>\n    <span id=\"banner_close_btn\" style=\"position:absolute;top: 90px;left: 50%;margin-left: 470px;font-size: 13px;color: white;cursor: pointer;\">\n        <svg class=\"fa d-icon d-icon-xmark svg-icon svg-string\" xmlns=\"http://www.w3.org/2000/svg\"><use href=\"#times\"></use></svg>\n    </span>\n</div>`);\n            // 如果本地存储中没有找到alreadyClosedAIBannerAd，那么将AI Banner广告上树\n            if (!localStorage.getItem('alreadyClosedAIBannerAd')) {\n              // 再判断一下页面上是否没有这个元素\n              if ($('#banner_ai_ad').length == 0) {\n                $ai_banner_box.appendTo($('.d-header-wrap'));\n                $('.d-header-wrap').height(130);\n                $('#banner_ljty_btn').click(function () {\n                  $('#aibot-btn').trigger('click');\n                });\n                $('#banner_close_btn').click(function () {\n                  $('#banner_ai_ad').hide();\n                  $('.d-header-wrap').height('auto');\n                  localStorage.setItem('alreadyClosedAIBannerAd', 1);\n                });\n              }\n            }\n          };\n\n          // 从其他页面回到首页，也要添加搜索框中的AI小图\n          const originalPushState = history.pushState;\n          history.pushState = function (state, title, url) {\n            originalPushState.apply(this, arguments);\n            console.log('URL被pushState改变为:', url);\n            if (url != '/') return;\n            // 触发自定义事件\n            let timer = setInterval(() => {\n              // 轮寻判断页面加载完毕\n              if (document.getElementsByClassName('search-menu')[0]) {\n                inserSearchAI();\n                clearInterval(timer);\n                console.log(1);\n              }\n            }, 10);\n          };\n          window.addEventListener('DOMContentLoaded', () => {\n            window.onpopstate = function (event) {\n              console.log(location);\n              if (location.pathname === '/') {\n                setTimeout(() => {\n                  inserSearchAI();\n                }, 3000);\n              }\n            };\n            let topBox = document.getElementsByClassName(\"d-header-icons\")[0];\n            let topIcon = document.createElement('img');\n            topIcon.src = 'https://community.mech-mind.com/uploads/default/original/2X/a/ae2983099198b9a09fe6e37e7fb01fad70cc6311.gif';\n            topIcon.style.width = \"100%\";\n            let topLi = document.createElement('li');\n            topLi.className = \"header-dropdown-toggle  ai-robot-tooltip-btn\";\n            var isMobile = document.documentElement.clientWidth < 750;\n            window.addEventListener('resize', function () {\n              var width = document.documentElement.clientWidth;\n              isMobile = width < 750;\n            });\n            let aiBtn = document.createElement(\"button\");\n            aiBtn.className = \"btn no-text btn-icon icon btn-flat\";\n            aiBtn.appendChild(topIcon);\n            topLi.appendChild(aiBtn);\n            topLi.addEventListener('click', () => {\n              document.getElementById('aibot-btn').click();\n              //isMobile?document.getElementById('ai-robot-overlay').classList.toggle('ai-robot-hide'):''\n            });\n            let tooltipDiv = document.createElement('div');\n            tooltipDiv.className = 'topTooltip';\n            tooltipDiv.innerHTML = '<p>The AI Assistant is now available for staff. </p><p>Come and try it out!</p>';\n            topLi.appendChild(tooltipDiv);\n            // console.log(document.getElementById(\"current-user\"))\n            setTimeout(() => {\n              isMobile ? topBox.insertBefore(topLi, document.getElementById(\"current-user\")) : '';\n            });\n\n            //搜索栏\n            inserSearchAI();\n          });\n        } else {\n          setTimeout(() => {\n            document.body.removeChild(document.getElementById('aibot-btn'));\n            document.body.removeChild(document.getElementById('aibot-wrap'));\n          });\n        }\n      });\n    }\n  };\n});\n}\n","\n        // 配置marked选项\n        marked.setOptions({\n            breaks: true,  // 支持换行\n            gfm: true,     // 启用GitHub风格的Markdown\n            headerIds: false, // 不添加header ID\n            mangle: false, // 不转义内联HTML\n            sanitize: false, // 允许HTML标签\n            smartLists: true, // 智能列表\n            smartypants: true, // 智能标点\n            xhtml: false   // 不使用XHTML\n        });\n    \n","\n        // 优化的智能数学公式渲染系统\n        window.MathJaxRenderCache = {\n            // 加载状态缓存\n            loadState: 'unloaded', // 'unloaded' | 'loading' | 'loaded' | 'failed'\n            loadPromise: null,\n\n            // 渲染结果缓存系统\n            renderCache: new Map(),\n            cacheStats: { hits: 0, misses: 0 },\n            maxCacheSize: 200, // 增加缓存容量到200个公式结果\n            cacheTimeout: 60 * 60 * 1000, // 增加过期时间到60分钟\n\n            // 生成内容hash用于缓存键值\n            generateContentHash: function(content) {\n                // 简单的hash算法，适用于缓存键值\n                let hash = 0;\n                if (!content || content.length === 0) return hash;\n\n                for (let i = 0; i < content.length; i++) {\n                    const char = content.charCodeAt(i);\n                    hash = ((hash << 5) - hash) + char;\n                    hash = hash & hash; // 转为32位整数\n                }\n\n                return 'math_' + Math.abs(hash).toString(36);\n            },\n\n            // 清理过期缓存\n            cleanExpiredCache: function() {\n                const now = Date.now();\n                let removedCount = 0;\n\n                for (const [key, value] of this.renderCache.entries()) {\n                    if (now - value.timestamp > this.cacheTimeout) {\n                        this.renderCache.delete(key);\n                        removedCount++;\n                    }\n                }\n\n                if (removedCount > 0) {\n                    console.log(`清理了 ${removedCount} 个过期的数学公式缓存`);\n                }\n            },\n\n            // 缓存大小管理（LRU策略）\n            manageCacheSize: function() {\n                if (this.renderCache.size <= this.maxCacheSize) return;\n\n                // 按时间戳排序，移除最旧的缓存\n                const entries = Array.from(this.renderCache.entries());\n                entries.sort((a, b) => a[1].timestamp - b[1].timestamp);\n\n                const toRemove = entries.length - this.maxCacheSize;\n                for (let i = 0; i < toRemove; i++) {\n                    this.renderCache.delete(entries[i][0]);\n                }\n\n                console.log(`缓存达到上限，移除了 ${toRemove} 个最旧的数学公式缓存`);\n            },\n\n            // 获取缓存的渲染结果\n            getCachedRender: function(content) {\n                this.cleanExpiredCache(); // 定期清理\n\n                const cacheKey = this.generateContentHash(content);\n                const cached = this.renderCache.get(cacheKey);\n\n                if (cached) {\n                    this.cacheStats.hits++;\n                    // 更新访问时间（LRU）\n                    cached.timestamp = Date.now();\n                    return cached.html;\n                } else {\n                    this.cacheStats.misses++;\n                    return null;\n                }\n            },\n\n            // 存储渲染结果到缓存\n            setCachedRender: function(content, renderedHtml) {\n                const cacheKey = this.generateContentHash(content);\n\n                this.renderCache.set(cacheKey, {\n                    html: renderedHtml,\n                    timestamp: Date.now()\n                });\n\n                this.manageCacheSize();\n\n                // 优化的统计信息和日志（每50次调用输出一次，减少日志噪音）\n                const totalCalls = this.cacheStats.hits + this.cacheStats.misses;\n                if (totalCalls > 0 && totalCalls % 50 === 0) {\n                    const hitRate = (this.cacheStats.hits / totalCalls * 100).toFixed(1);\n                    const memoryUsage = this.estimateCacheSize();\n                    console.log(`数学公式缓存统计: 命中率 ${hitRate}% (${this.cacheStats.hits}/${totalCalls}), 缓存大小 ${this.renderCache.size}, 内存使用 ~${memoryUsage}KB`);\n                }\n            },\n\n            // 估算缓存内存使用\n            estimateCacheSize: function() {\n                let totalSize = 0;\n                for (const [key, value] of this.renderCache.entries()) {\n                    // 估算每个缓存项的大小（字符数 * 2字节）\n                    totalSize += (key.length + value.html.length) * 2;\n                }\n                return Math.round(totalSize / 1024); // 返回KB\n            },\n\n            // 获取缓存统计信息\n            getCacheStats: function() {\n                const totalCalls = this.cacheStats.hits + this.cacheStats.misses;\n                const hitRate = totalCalls > 0 ? (this.cacheStats.hits / totalCalls * 100).toFixed(1) : 0;\n                return {\n                    hits: this.cacheStats.hits,\n                    misses: this.cacheStats.misses,\n                    total: totalCalls,\n                    hitRate: parseFloat(hitRate),\n                    cacheSize: this.renderCache.size,\n                    memoryUsageKB: this.estimateCacheSize()\n                };\n            },\n\n            // 清除所有缓存\n            clearCache: function() {\n                this.renderCache.clear();\n                this.cacheStats = { hits: 0, misses: 0 };\n                console.log('数学公式缓存已清除');\n            },\n\n            // 轻量级公式内容检测\n            containsMathContent: function(content) {\n                if (!content) return false;\n\n                const mathPatterns = [\n                    /\\$[^$\\n]+\\$/g,                    // $...$\n                    /\\$\\$[\\s\\S]*?\\$\\$/g,               // $$...$$\n                    /\\\\[\\[\\(][\\s\\S]*?\\\\[\\]\\)]/g,       // \\[...\\] \\(...\\)\n                    /\\\\[a-zA-Z]+(\\{[^}]*\\})?/g         // \\command{...}\n                ];\n\n                return mathPatterns.some(pattern => pattern.test(content));\n            },\n\n            // 智能MathJax按需加载\n            loadMathJaxIfNeeded: function() {\n                // 如果已经加载完成，直接返回\n                if (this.loadState === 'loaded' && window.MathJax && window.MathJax.typesetPromise) {\n                    return Promise.resolve(true);\n                }\n\n                // 如果正在加载，返回现有的Promise\n                if (this.loadState === 'loading' && this.loadPromise) {\n                    return this.loadPromise;\n                }\n\n                // 开始加载\n                this.loadState = 'loading';\n                this.loadPromise = this._loadMathJax();\n\n                return this.loadPromise;\n            },\n\n            // 实际加载MathJax的内部方法\n            _loadMathJax: function() {\n                return new Promise((resolve, reject) => {\n                    // 如果MathJax已存在但状态不对，重置状态\n                    if (window.MathJax && window.MathJax.typesetPromise) {\n                        this.loadState = 'loaded';\n                        resolve(true);\n                        return;\n                    }\n\n                    // 设置MathJax配置（如果不存在）\n                    if (!window.MathJax) {\n                        window.MathJax = {\n                            options: {\n                                ignoreHtmlClass: '.*',\n                                processHtmlClass: 'mathjax-process'\n                            },\n                            tex: {\n                                inlineMath: [['$', '$'], ['\\\\(', '\\\\)']],\n                                displayMath: [['\\\\[', '\\\\]'], ['$$', '$$']]\n                            },\n                            svg: { fontCache: 'global' },\n                            startup: {\n                                ready: () => {\n                                    MathJax.startup.defaultReady();\n                                    window.MathJaxRenderCache.loadState = 'loaded';\n                                    resolve(true);\n                                }\n                            },\n                            chtml: {\n                                // fontURL: 'https://test-cn-community.mech-mind.com.cn:8442/fonts/mathjax/woff-v2'\n                                // fontURL: 'https://community.mech-mind.co.jp:8442/fonts/mathjax/woff-v2'\n                                fontURL: 'https://community.mech-mind.com.cn:8442/fonts/mathjax/woff-v2'\n                            }\n                        };\n                    }\n\n                    // 检查脚本是否已存在\n                    const existingScript = document.querySelector('script[src*=\"mathjax\"]');\n                    if (existingScript) {\n                        // 等待现有脚本加载完成\n                        const startTime = Date.now();\n                        const checkExisting = () => {\n                            if (window.MathJax && window.MathJax.typesetPromise) {\n                                window.MathJaxRenderCache.loadState = 'loaded';\n                                resolve(true);\n                            } else if (Date.now() - startTime > 5000) {\n                                window.MathJaxRenderCache.loadState = 'failed';\n                                resolve(false);\n                            } else {\n                                setTimeout(checkExisting, 100);\n                            }\n                        };\n                        checkExisting();\n                        return;\n                    }\n\n                    // 动态加载MathJax脚本\n                    const script = document.createElement('script');\n                    // script.src = 'https://test-cn-community.mech-mind.com.cn:8442/mathjax.min.js';\n                    // script.src = 'https://community.mech-mind.co.jp:8442/mathjax.min.js';\n                    script.src = 'https://community.mech-mind.com.cn:8442/mathjax.min.js';\n                    script.async = true;\n\n                    script.onload = () => {\n                        // 等待MathJax完全初始化\n                        const waitForInit = () => {\n                            if (window.MathJax && window.MathJax.typesetPromise) {\n                                window.MathJaxRenderCache.loadState = 'loaded';\n                                resolve(true);\n                            } else {\n                                setTimeout(waitForInit, 50);\n                            }\n                        };\n                        waitForInit();\n                    };\n\n                    script.onerror = () => {\n                        window.MathJaxRenderCache.loadState = 'failed';\n                        resolve(false);\n                    };\n\n                    document.head.appendChild(script);\n\n                    // 超时保护\n                    setTimeout(() => {\n                        if (window.MathJaxRenderCache.loadState === 'loading') {\n                            window.MathJaxRenderCache.loadState = 'failed';\n                            resolve(false);\n                        }\n                    }, 8000);\n                });\n            },\n\n            // 渐进式渲染：先显示Markdown，再异步渲染数学公式\n            renderContentProgressive: async function(messageElement, content) {\n                // 中文全角波浪线处理\n                content = content.replace(/~/g, '～');\n\n                // 第一步：立即渲染Markdown内容（无数学公式处理）\n                const $container = $(messageElement).find('.aibot-api-message-content');\n                if ($container.length === 0) {\n                    console.error('无法找到消息内容容器');\n                    return;\n                }\n\n                $container.html(marked.parse(content));\n\n                // 添加基础安全属性\n                this._addBasicSecurity($container);\n\n                // 第二步：检测是否包含数学公式\n                if (!this.containsMathContent(content)) {\n                    // 无数学公式，直接完成渲染\n                    return Promise.resolve();\n                }\n\n                // 第三步：异步加载MathJax并渲染公式\n                return this._renderMathAsync($container, content);\n            },\n\n            // 添加基础安全属性和样式处理\n            _addBasicSecurity: function($container) {\n                // 给a标签添加安全属性\n                $container.find(\"a\").each(function () {\n                    const $link = $(this);\n                    const href = $link.attr('href');\n\n                    if (href && href !== '#' && !href.startsWith('javascript:')) {\n                        $link.attr({\n                            \"target\": \"_blank\",\n                            \"rel\": \"noopener noreferrer\",\n                            \"class\": \"aibot-markdown-link\"\n                        });\n                    }\n                });\n\n                // 给img标签添加链接包装\n                $container.find(\"img\").each(function () {\n                    const imgSrc = $(this).attr('src');\n                    const link = $(`<a href=\"${imgSrc}\" target=\"_blank\"></a>`);\n                    $(this).wrap(link);\n                });\n\n                // 给table增加滚动容器\n                $container.find(\"table\").each(function () {\n                    $(this).wrap('<div style=\"overflow-x:scroll; padding: 20px 30px 20px 0;\"></div>');\n                });\n\n                const copyLabel = (window.GLOBAL_CONFIG && GLOBAL_CONFIG['aibot-t-copy']) || 'Copy';\n                const applyCodeHighlighting = () => {\n                    if (!(window.hljs && typeof window.hljs.highlightElement === 'function')) {\n                        return;\n                    }\n                    $container.find('pre code').each(function () {\n                        window.hljs.highlightElement(this);\n                    });\n                };\n                const copyIconSvg = `\n                    <svg class=\"aibot-code-copy-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6.00146 5.00195H15.0015V14.002H16.0015V5.00195C16.0015 4.44967 15.5538 4.00195 15.0015 4.00195H6.00146V5.00195Z\" fill=\"currentColor\"/>\n                        <path d=\"M4.00146 15.002C4.00146 15.5542 4.44918 16.002 5.00147 16.002L13.0015 16.002C13.5538 16.002 14.0015 15.5542 14.0015 15.002L14.0015 7.00195C14.0015 6.44967 13.5538 6.00195 13.0015 6.00195H5.00147C4.44918 6.00195 4.00146 6.44967 4.00146 7.00195V15.002ZM5.00147 7.00195L13.0015 7.00195L13.0015 15.002L5.00146 15.002L5.00147 7.00195Z\" fill=\"currentColor\"/>\n                    </svg>\n                `;\n\n                // 处理pre标签中的HTML实体并增强代码块\n                $container.find(\"pre\").each(function () {\n                    const $pre = $(this);\n                    $pre.html($pre.html().replace(/\\&amp\\;lt\\;/g, \"<\"));\n                    $pre.html($pre.html().replace(/\\&amp\\;gt\\;/g, \">\"));\n\n                    const $code = $pre.find('code');\n                    if ($code.length === 0) {\n                        return;\n                    }\n\n                    const ensureButtonContent = ($button) => {\n                        $button.attr('title', copyLabel).attr('aria-label', copyLabel);\n                        if ($button.find('.aibot-code-copy-icon').length === 0) {\n                            $button.empty().append(copyIconSvg);\n                        }\n                    };\n\n                    const $existingWrapper = $pre.closest('.aibot-code-block-wrapper');\n                    if ($existingWrapper.length) {\n                        const $existingButton = $existingWrapper.find('.aibot-code-copy-btn');\n                        if ($existingButton.length) {\n                            ensureButtonContent($existingButton);\n                        } else {\n                            const $newButton = $('<button type=\"button\" class=\"aibot-code-copy-btn\" data-code-copy></button>');\n                            ensureButtonContent($newButton);\n                            $existingWrapper.prepend($newButton);\n                        }\n                        return;\n                    }\n\n                    const $wrapper = $('<div class=\"aibot-code-block-wrapper\"></div>');\n                    $pre.wrap($wrapper);\n                    const $button = $('<button type=\"button\" class=\"aibot-code-copy-btn\" data-code-copy></button>');\n                    ensureButtonContent($button);\n                    $pre.before($button);\n                });\n                applyCodeHighlighting();\n            },\n\n            // 统一的数学公式渲染接口（支持缓存和多种调用模式）\n            renderMathContent: async function(content, options = {}) {\n                // 参数默认值\n                const {\n                    useCache = true,\n                    showIndicator = false,\n                    container = null,\n                    returnHtml = false\n                } = options;\n\n                // 检查缓存（如果启用）\n                if (useCache) {\n                    const cachedResult = this.getCachedRender(content);\n                    if (cachedResult) {\n                        console.log('使用数学公式缓存结果');\n                        if (container) {\n                            container.html(cachedResult);\n                        }\n                        return returnHtml ? cachedResult : true;\n                    }\n                }\n\n                // 添加加载指示器（如果启用且有容器）\n                let $indicator = null;\n                if (showIndicator && container) {\n                    $indicator = $('<div class=\"math-loading-indicator\" style=\"color: #999; font-size: 12px; margin: 5px 0;\">正在渲染数学公式...</div>');\n                    container.append($indicator);\n                }\n\n                try {\n                    // 等待MathJax加载完成\n                    if (window.MathJaxLoadChecker) {\n                        await window.MathJaxLoadChecker.waitForMathJax();\n                    }\n\n                    // 创建临时容器进行数学公式处理\n                    const $tempDiv = $('<div class=\"mathjax-process\"></div>');\n                    // 预处理中文字符\n                    const processedContent = content.replace(/~/g, '～');\n                    $tempDiv.html(processedContent);\n\n                    // 渲染数学公式\n                    const startTime = performance.now();\n                    let renderSuccess = false;\n\n                    if (window.MathJax && MathJax.typesetPromise) {\n                        await MathJax.typesetPromise([$tempDiv[0]])\n                            .then(() => { renderSuccess = true; })\n                            .catch(err => { console.error('MathJax渲染错误:', err); });\n                    } else {\n                        // 尝试强制重新加载MathJax\n                        if (window.MathJaxLoadChecker && window.MathJaxLoadChecker.forceReloadMathJax) {\n                            await window.MathJaxLoadChecker.forceReloadMathJax();\n                            if (window.MathJax && MathJax.typesetPromise) {\n                                await MathJax.typesetPromise([$tempDiv[0]])\n                                    .then(() => { renderSuccess = true; })\n                                    .catch(err => { console.error('MathJax重试渲染错误:', err); });\n                            }\n                        }\n                    }\n\n                    // 后续处理\n                    $tempDiv.html(marked.parse($tempDiv.html()));\n                    this._addBasicSecurity($tempDiv);\n\n                    const finalHtml = $tempDiv.html();\n                    const endTime = performance.now();\n                    const renderTime = (endTime - startTime).toFixed(2);\n\n                    // 缓存渲染结果（如果启用且渲染成功）\n                    if (useCache && renderSuccess) {\n                        this.setCachedRender(content, finalHtml);\n                    }\n\n                    // 移除加载指示器\n                    if ($indicator) {\n                        $indicator.remove();\n                    }\n\n                    // 更新容器内容\n                    if (container) {\n                        container.html(finalHtml);\n                    }\n\n                    console.log(`数学公式渲染完成: ${renderTime}ms (${renderSuccess ? '成功' : '失败'})`);\n                    return returnHtml ? finalHtml : renderSuccess;\n\n                } catch (error) {\n                    console.error('数学公式渲染异常:', error);\n                    if ($indicator) {\n                        $indicator.text('数学公式渲染失败');\n                        setTimeout(() => $indicator.remove(), 3000);\n                    }\n                    return returnHtml ? content : false;\n                }\n            },\n\n            // 异步渲染数学公式（支持缓存）- 保持向后兼容\n            _renderMathAsync: async function($container, content) {\n                return await this.renderMathContent(content, {\n                    useCache: true,\n                    showIndicator: true,\n                    container: $container,\n                    returnHtml: false\n                });\n            }\n        };\n\n        // 向后兼容：保留原有的MathJaxLoadChecker引用\n        window.MathJaxLoadChecker = {\n            // 保持原有API接口\n            waitForMathJax: function() {\n                return window.MathJaxRenderCache.loadMathJaxIfNeeded();\n            },\n\n            forceReloadMathJax: function() {\n                // 重置加载状态，强制重新加载\n                window.MathJaxRenderCache.loadState = 'unloaded';\n                window.MathJaxRenderCache.loadPromise = null;\n                return window.MathJaxRenderCache.loadMathJaxIfNeeded();\n            },\n\n            // 向前兼容：暴露新的API\n            renderMathContent: window.MathJaxRenderCache.renderMathContent.bind(window.MathJaxRenderCache),\n\n            // 缓存管理接口\n            getCacheStats: window.MathJaxRenderCache.getCacheStats.bind(window.MathJaxRenderCache),\n            clearCache: window.MathJaxRenderCache.clearCache.bind(window.MathJaxRenderCache)\n        };\n    \n"],"mappings":"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"}