Files
Agent-n8n/backups/exhibition-demo-backup-20250928-210916/node_modules/react-syntax-highlighter/src/async-syntax-highlighter.js
Yep_Q 67f5dfbe50 feat: 实现多订单班支持系统
主要功能:
- 修改RequirementModal支持12个订单班选择
- 添加OrderClassIconMap图标映射组件
- Store中添加selectedOrderClass状态管理
- WorkflowPage支持传递orderClass参数
- web_result添加URL参数切换功能
- 创建order-class-handler.js动态处理页面主题

技术改进:
- 创建软链接关联订单班数据目录
- 生成wenlu.json和food.json数据结构
- 删除重复的web_result目录
- 添加测试页面test-order-class.html

影响范围:
- 展会策划系统现支持12个订单班
- 结果展示页面自动适配不同订单班主题
- 用户可选择不同行业生成对应方案

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 10:02:15 +08:00

156 lines
3.9 KiB
JavaScript

import React from 'react';
import highlight from './highlight';
export default options => {
const {
loader,
isLanguageRegistered,
registerLanguage,
languageLoaders,
noAsyncLoadingLanguages
} = options;
class ReactAsyncHighlighter extends React.PureComponent {
static astGenerator = null;
static highlightInstance = highlight(null, {});
static astGeneratorPromise = null;
static languages = new Map();
static supportedLanguages =
options.supportedLanguages || Object.keys(languageLoaders || {});
static preload() {
return ReactAsyncHighlighter.loadAstGenerator();
}
static async loadLanguage(language) {
const languageLoader = languageLoaders[language];
if (typeof languageLoader === 'function') {
return languageLoader(ReactAsyncHighlighter.registerLanguage);
} else {
throw new Error(`Language ${language} not supported`);
}
}
static isSupportedLanguage(language) {
return (
ReactAsyncHighlighter.isRegistered(language) ||
typeof languageLoaders[language] === 'function'
);
}
static isRegistered = language => {
if (noAsyncLoadingLanguages) {
return true;
}
if (!registerLanguage) {
throw new Error(
"Current syntax highlighter doesn't support registration of languages"
);
}
if (!ReactAsyncHighlighter.astGenerator) {
// Ast generator not available yet, but language will be registered once it is.
return ReactAsyncHighlighter.languages.has(language);
}
return isLanguageRegistered(ReactAsyncHighlighter.astGenerator, language);
};
static registerLanguage = (name, language) => {
if (!registerLanguage) {
throw new Error(
"Current syntax highlighter doesn't support registration of languages"
);
}
if (ReactAsyncHighlighter.astGenerator) {
return registerLanguage(
ReactAsyncHighlighter.astGenerator,
name,
language
);
} else {
ReactAsyncHighlighter.languages.set(name, language);
}
};
static loadAstGenerator() {
ReactAsyncHighlighter.astGeneratorPromise = loader().then(
astGenerator => {
ReactAsyncHighlighter.astGenerator = astGenerator;
if (registerLanguage) {
ReactAsyncHighlighter.languages.forEach((language, name) =>
registerLanguage(astGenerator, name, language)
);
}
}
);
return ReactAsyncHighlighter.astGeneratorPromise;
}
componentDidUpdate() {
if (
!ReactAsyncHighlighter.isRegistered(this.props.language) &&
languageLoaders
) {
this.loadLanguage();
}
}
componentDidMount() {
if (!ReactAsyncHighlighter.astGeneratorPromise) {
ReactAsyncHighlighter.loadAstGenerator();
}
if (!ReactAsyncHighlighter.astGenerator) {
ReactAsyncHighlighter.astGeneratorPromise.then(() => {
this.forceUpdate();
});
}
if (
!ReactAsyncHighlighter.isRegistered(this.props.language) &&
languageLoaders
) {
this.loadLanguage();
}
}
loadLanguage() {
const { language } = this.props;
if (language === 'text') {
return;
}
ReactAsyncHighlighter.loadLanguage(language)
.then(() => {
return this.forceUpdate();
})
.catch(() => {});
}
normalizeLanguage(language) {
return ReactAsyncHighlighter.isSupportedLanguage(language)
? language
: 'text';
}
render() {
return (
<ReactAsyncHighlighter.highlightInstance
{...this.props}
language={this.normalizeLanguage(this.props.language)}
astGenerator={ReactAsyncHighlighter.astGenerator}
/>
);
}
}
return ReactAsyncHighlighter;
};