InfoRadar / client /src /ts /appInitializer.ts
dqy08's picture
统一可视化配置,并将信息密度单位从字符改为字节
e9c9e16
/**
* 应用公共初始化逻辑
* 提供 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)
};
}