Files
chatpapers/src/hooks.ts
T

68 lines
1.8 KiB
TypeScript

import { initLocale } from "./utils/locale";
import { createZToolkit } from "./utils/ztoolkit";
import { registerLecturePane } from "./modules/lecture/ui/registerLecturePane";
import { registerSelectionExplainPopup } from "./modules/lecture/ui/registerSelectionExplainPopup";
import { registerChatPane, registerPrefs, ensureChatPapersStyles } from "./modules/ui/readerPane";
import { registerPrefsScripts } from "./modules/ui/prefs";
import { registerItemMenus } from "./modules/ui/itemMenu";
import { registerReaderSelectionHook } from "./modules/pdf/selection";
async function onStartup() {
await Promise.all([
Zotero.initializationPromise,
Zotero.unlockPromise,
Zotero.uiReadyPromise,
]);
initLocale();
registerPrefs();
registerChatPane();
registerLecturePane();
registerReaderSelectionHook();
registerSelectionExplainPopup();
await Promise.all(
Zotero.getMainWindows().map((win) => onMainWindowLoad(win)),
);
addon.data.initialized = true;
}
async function onMainWindowLoad(win: _ZoteroTypes.MainWindow): Promise<void> {
addon.data.ztoolkit = createZToolkit();
ensureChatPapersStyles(win.document);
win.MozXULElement.insertFTLIfNeeded(
`${addon.data.config.addonRef}-mainWindow.ftl`,
);
registerItemMenus();
}
async function onMainWindowUnload(_win: Window): Promise<void> {
ztoolkit.unregisterAll();
}
function onShutdown(): void {
ztoolkit.unregisterAll();
addon.data.alive = false;
// @ts-expect-error - Plugin instance is not typed
delete Zotero[addon.data.config.addonInstance];
}
async function onPrefsEvent(type: string, data: { [key: string]: any }) {
switch (type) {
case "load":
registerPrefsScripts(data.window);
break;
default:
return;
}
}
export default {
onStartup,
onShutdown,
onMainWindowLoad,
onMainWindowUnload,
onPrefsEvent,
};