/** * 应用公共初始化逻辑 * 提供 start.ts 和 compare.ts 共享的基础初始化功能 */ import * as d3 from 'd3'; import { SimpleEventHandler } from './utils/SimpleEventHandler'; import { TextAnalysisAPI } from './api/GLTR_API'; import { getTokenSurprisalColor, getByteSurprisalColor } from './utils/SurprisalColorConfig'; /** * 公共初始化返回对象 */ export interface CommonAppContext { eventHandler: SimpleEventHandler; api: TextAnalysisAPI; tokenSurprisalColorScale: (value: number) => string; byteSurprisalColorScale: (value: number) => string; totalSurprisalFormat: (n: number | null) => string; } /** * 初始化公共应用组件 * @param apiPrefix API 前缀(默认为空字符串) * @param element 事件处理器绑定的元素(默认为 document.body) * @returns 初始化后的公共对象 */ export function initializeCommonApp(apiPrefix: string = '', element?: Element): CommonAppContext { // 使用传入的元素或默认 body 元素 const targetElement = element || document.body; const format = d3.format('.2f'); return { eventHandler: new SimpleEventHandler(targetElement), api: new TextAnalysisAPI(apiPrefix), tokenSurprisalColorScale: getTokenSurprisalColor, byteSurprisalColorScale: getByteSurprisalColor, totalSurprisalFormat: (n: number | null) => n !== null && Number.isFinite(n) ? format(n) : String(n) }; }