dynamic-interaction
Version:
Dynamic interaction 动态交互mcp,用于cursor、windsurf、trae 等 AI 智能编辑器 Agent 运行时交互使用
129 lines • 5.17 kB
JavaScript
/**
* 应用程序核心
* 应用初始化和生命周期管理
*/
import { themeService } from '../services/theme.js';
import { notificationService } from '../services/notification.js';
import { webSocketService } from '../services/websocket.js';
import { statusBarComponent } from '../components/statusBar.js';
import { feedbackComponent } from '../components/feedback.js';
import { languageSwitcherComponent } from '../components/languageSwitcher.js';
import { i18nService, getInitialLang } from '../services/i18n.js';
import { setupDragAndDrop, setupPasteListener } from '../components/imageHandler.js';
import { sendCompositeFeedback } from '../components/feedback.js';
import { processFiles, clearPreview } from '../components/imageHandler.js';
import { getElementById } from '../utils/dom.js';
import { eventBus, APP_EVENTS } from './events.js';
class Application {
isInitialized = false;
async initialize() {
if (this.isInitialized)
return;
console.log('初始化交互式反馈系统...');
try {
// 1. 初始化主题服务
themeService.initializeThemeSwitcher();
// 2. 初始化通知服务
await this.initializeNotificationService();
// 3. 初始化UI组件
statusBarComponent.initialize();
feedbackComponent.initialize();
languageSwitcherComponent.initialize();
// 4. 初始化拖拽和粘贴功能
this.initializeDragAndDrop();
// 5. 设置初始语言
i18nService.switchLanguage(getInitialLang());
// 6. 初始化WebSocket连接
webSocketService.initialize();
// 6. 设置全局函数(向后兼容)
this.setupGlobalFunctions();
// 7. 设置事件监听
this.setupGlobalEventListeners();
this.isInitialized = true;
console.log('系统初始化完成');
}
catch (error) {
console.error('应用初始化失败:', error);
}
}
async initializeNotificationService() {
console.log('初始化通知服务...');
if (notificationService.checkSupport()) {
const permission = notificationService.getPermissionStatus();
if (permission === 'default') {
console.log('请求通知权限...');
const result = await notificationService.requestPermission();
console.log(`通知权限状态: ${result}`);
}
else {
console.log(`当前通知权限状态: ${permission}`);
}
}
else {
console.warn('当前浏览器不支持通知功能');
}
}
initializeDragAndDrop() {
const dropZone = getElementById('drop-zone');
const imagePreviewContainer = getElementById('image-preview-container');
const feedbackInput = getElementById('feedback-input');
if (dropZone && imagePreviewContainer) {
setupDragAndDrop(dropZone, imagePreviewContainer);
}
if (feedbackInput && imagePreviewContainer) {
setupPasteListener(feedbackInput, imagePreviewContainer);
}
}
setupGlobalFunctions() {
// 将函数附加到 window 对象,以便在 HTML 中调用
window.sendCompositeFeedback = sendCompositeFeedback;
window.processFiles = processFiles;
window.clearPreview = clearPreview;
// 确认通知函数
window.acknowledgeNotification = this.acknowledgeNotification;
}
setupGlobalEventListeners() {
// 监听应用事件
eventBus.on(APP_EVENTS.THEME_CHANGED, (theme) => {
console.log('主题已切换至:', theme);
});
eventBus.on(APP_EVENTS.NOTIFICATION_SHOW, (options) => {
console.log('显示通知:', options.title);
});
eventBus.on(APP_EVENTS.FEEDBACK_SEND, (data) => {
console.log('反馈已发送:', data);
});
eventBus.on(APP_EVENTS.WS_CONNECTED, () => {
console.log('WebSocket 已连接');
});
eventBus.on(APP_EVENTS.WS_DISCONNECTED, () => {
console.log('WebSocket 已断开');
});
}
acknowledgeNotification() {
console.log('通知已确认');
const notificationPanel = getElementById('notification-panel');
const feedbackPanel = getElementById('feedback-panel');
if (notificationPanel) {
notificationPanel.style.display = 'none';
}
if (feedbackPanel) {
feedbackPanel.style.display = 'block';
}
// 发送确认消息到服务器
const ws = window.ws;
if (ws && ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({
type: 'notification_acknowledge',
data: { acknowledged: true }
}));
}
}
}
// 创建应用实例
const app = new Application();
// 当DOM加载完成后初始化应用程序
document.addEventListener('DOMContentLoaded', () => {
app.initialize();
});
//# sourceMappingURL=app.js.map