2023-01-26 22:52:22 +08:00
|
|
|
import {Constants} from "../constants";
|
|
|
|
|
import {Menus} from "../menus";
|
|
|
|
|
import {Model} from "../layout/Model";
|
|
|
|
|
import "../assets/scss/base.scss";
|
|
|
|
|
import {initBlockPopover} from "../block/popover";
|
|
|
|
|
import {addScript, addScriptSync} from "../protyle/util/addScript";
|
|
|
|
|
import {genUUID} from "../util/genID";
|
|
|
|
|
import {fetchGet, fetchPost} from "../util/fetch";
|
|
|
|
|
import {addBaseURL, setNoteBook} from "../util/pathName";
|
2023-10-10 16:15:24 +08:00
|
|
|
import {openFileById} from "../editor/util";
|
2023-01-26 18:55:17 +08:00
|
|
|
import {
|
2024-10-27 12:07:32 +08:00
|
|
|
processSync,
|
|
|
|
|
progressBackgroundTask,
|
2023-01-26 18:55:17 +08:00
|
|
|
progressLoading,
|
2025-03-16 11:56:12 +08:00
|
|
|
progressStatus, reloadEmbedBlock,
|
2024-10-27 12:07:32 +08:00
|
|
|
reloadSync,
|
|
|
|
|
setDefRefCount,
|
|
|
|
|
setRefDynamicText,
|
2023-01-26 18:55:17 +08:00
|
|
|
setTitle,
|
|
|
|
|
transactionError
|
2023-01-26 22:52:22 +08:00
|
|
|
} from "../dialog/processSystem";
|
|
|
|
|
import {initMessage} from "../dialog/message";
|
|
|
|
|
import {getAllTabs} from "../layout/getAll";
|
|
|
|
|
import {getLocalStorage} from "../protyle/util/compatibility";
|
|
|
|
|
import {init} from "../window/init";
|
2024-01-20 23:01:41 +08:00
|
|
|
import {loadPlugins, reloadPlugin} from "../plugin/loader";
|
2023-12-18 00:02:14 +08:00
|
|
|
import {hideAllElements} from "../protyle/ui/hideElements";
|
2024-08-29 10:59:09 +08:00
|
|
|
import {reloadEmoji} from "../emoji";
|
2023-01-26 18:55:17 +08:00
|
|
|
|
|
|
|
|
class App {
|
2023-05-07 17:31:50 +08:00
|
|
|
public plugins: import("../plugin").Plugin[] = [];
|
2023-10-29 09:29:36 +08:00
|
|
|
public appId: string;
|
2023-05-07 17:31:50 +08:00
|
|
|
|
2023-01-26 18:55:17 +08:00
|
|
|
constructor() {
|
2024-07-05 20:01:43 +08:00
|
|
|
addBaseURL();
|
2023-10-29 09:29:36 +08:00
|
|
|
this.appId = Constants.SIYUAN_APPID;
|
2023-01-26 18:55:17 +08:00
|
|
|
window.siyuan = {
|
2023-09-02 11:13:47 +08:00
|
|
|
zIndex: 10,
|
2023-01-26 18:55:17 +08:00
|
|
|
transactions: [],
|
|
|
|
|
reqIds: {},
|
|
|
|
|
backStack: [],
|
|
|
|
|
layout: {},
|
|
|
|
|
dialogs: [],
|
|
|
|
|
blockPanels: [],
|
|
|
|
|
ctrlIsPressed: false,
|
|
|
|
|
altIsPressed: false,
|
|
|
|
|
ws: new Model({
|
2023-05-18 19:27:21 +08:00
|
|
|
app: this,
|
2023-01-26 18:55:17 +08:00
|
|
|
id: genUUID(),
|
|
|
|
|
type: "main",
|
|
|
|
|
msgCallback: (data) => {
|
2023-05-07 17:31:50 +08:00
|
|
|
this.plugins.forEach((plugin) => {
|
|
|
|
|
plugin.eventBus.emit("ws-main", data);
|
|
|
|
|
});
|
2023-01-26 18:55:17 +08:00
|
|
|
if (data) {
|
|
|
|
|
switch (data.cmd) {
|
2024-09-06 16:58:25 +08:00
|
|
|
case "setDefRefCount":
|
|
|
|
|
setDefRefCount(data.data);
|
|
|
|
|
break;
|
|
|
|
|
case "setRefDynamicText":
|
|
|
|
|
setRefDynamicText(data.data);
|
|
|
|
|
break;
|
2025-03-16 11:56:12 +08:00
|
|
|
case "reloadEmbedBlock":
|
|
|
|
|
reloadEmbedBlock(data.data);
|
2025-03-16 11:57:00 +08:00
|
|
|
break;
|
2024-01-20 23:01:41 +08:00
|
|
|
case "reloadPlugin":
|
2024-05-13 09:16:58 +08:00
|
|
|
reloadPlugin(this, data.data);
|
2024-01-20 23:01:41 +08:00
|
|
|
break;
|
2024-06-18 22:34:50 +08:00
|
|
|
case "reloadEmojiConf":
|
2024-08-29 10:59:09 +08:00
|
|
|
reloadEmoji();
|
2024-06-18 22:34:50 +08:00
|
|
|
break;
|
2024-06-24 21:46:20 +08:00
|
|
|
case "reloaddoc":
|
2024-09-26 10:59:45 +08:00
|
|
|
reloadSync(this, {upsertRootIDs: [data.data], removeRootIDs: []}, false, false, true);
|
2024-06-24 21:46:20 +08:00
|
|
|
break;
|
2023-04-27 10:14:58 +08:00
|
|
|
case "syncMergeResult":
|
2023-05-18 19:27:21 +08:00
|
|
|
reloadSync(this, data.data);
|
2023-04-27 10:14:58 +08:00
|
|
|
break;
|
2023-12-18 00:02:14 +08:00
|
|
|
case "readonly":
|
|
|
|
|
window.siyuan.config.editor.readOnly = data.data;
|
|
|
|
|
hideAllElements(["util"]);
|
|
|
|
|
break;
|
|
|
|
|
case "setConf":
|
|
|
|
|
window.siyuan.config = data.data;
|
|
|
|
|
break;
|
2023-01-26 18:55:17 +08:00
|
|
|
case "progress":
|
|
|
|
|
progressLoading(data);
|
|
|
|
|
break;
|
|
|
|
|
case "setLocalStorageVal":
|
|
|
|
|
window.siyuan.storage[data.data.key] = data.data.val;
|
|
|
|
|
break;
|
|
|
|
|
case "rename":
|
|
|
|
|
getAllTabs().forEach((tab) => {
|
|
|
|
|
if (tab.headElement) {
|
|
|
|
|
const initTab = tab.headElement.getAttribute("data-initdata");
|
|
|
|
|
if (initTab) {
|
|
|
|
|
const initTabData = JSON.parse(initTab);
|
2023-05-24 19:20:24 +08:00
|
|
|
if (initTabData.instance === "Editor" && initTabData.rootId === data.data.id) {
|
2023-01-26 18:55:17 +08:00
|
|
|
tab.updateTitle(data.data.title);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case "unmount":
|
|
|
|
|
getAllTabs().forEach((tab) => {
|
|
|
|
|
if (tab.headElement) {
|
|
|
|
|
const initTab = tab.headElement.getAttribute("data-initdata");
|
|
|
|
|
if (initTab) {
|
|
|
|
|
const initTabData = JSON.parse(initTab);
|
2023-05-24 19:20:24 +08:00
|
|
|
if (initTabData.instance === "Editor" && data.data.box === initTabData.notebookId) {
|
2023-01-26 18:55:17 +08:00
|
|
|
tab.parent.removeTab(tab.id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case "removeDoc":
|
|
|
|
|
getAllTabs().forEach((tab) => {
|
|
|
|
|
if (tab.headElement) {
|
|
|
|
|
const initTab = tab.headElement.getAttribute("data-initdata");
|
|
|
|
|
if (initTab) {
|
|
|
|
|
const initTabData = JSON.parse(initTab);
|
2023-05-24 19:20:24 +08:00
|
|
|
if (initTabData.instance === "Editor" && data.data.ids.includes(initTabData.rootId)) {
|
2023-01-26 18:55:17 +08:00
|
|
|
tab.parent.removeTab(tab.id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case "statusbar":
|
|
|
|
|
progressStatus(data);
|
|
|
|
|
break;
|
|
|
|
|
case "txerr":
|
2023-03-27 15:30:13 +08:00
|
|
|
transactionError();
|
2023-01-26 18:55:17 +08:00
|
|
|
break;
|
|
|
|
|
case "syncing":
|
2023-12-03 22:17:07 +08:00
|
|
|
processSync(data, this.plugins);
|
2023-01-26 18:55:17 +08:00
|
|
|
break;
|
|
|
|
|
case "backgroundtask":
|
|
|
|
|
progressBackgroundTask(data.data.tasks);
|
|
|
|
|
break;
|
|
|
|
|
case "refreshtheme":
|
|
|
|
|
if ((window.siyuan.config.appearance.mode === 1 && window.siyuan.config.appearance.themeDark !== "midnight") || (window.siyuan.config.appearance.mode === 0 && window.siyuan.config.appearance.themeLight !== "daylight")) {
|
|
|
|
|
(document.getElementById("themeStyle") as HTMLLinkElement).href = data.data.theme;
|
|
|
|
|
} else {
|
|
|
|
|
(document.getElementById("themeDefaultStyle") as HTMLLinkElement).href = data.data.theme;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "openFileById":
|
2023-05-18 19:27:21 +08:00
|
|
|
openFileById({app: this, id: data.data.id, action: [Constants.CB_GET_FOCUS]});
|
2023-01-26 18:55:17 +08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
};
|
2023-10-30 00:12:24 +08:00
|
|
|
fetchPost("/api/system/getConf", {}, async (response) => {
|
2024-07-05 21:00:21 +08:00
|
|
|
addScriptSync(`${Constants.PROTYLE_CDN}/js/lute/lute.min.js?v=${Constants.SIYUAN_VERSION}`, "protyleLuteScript");
|
|
|
|
|
addScript(`${Constants.PROTYLE_CDN}/js/protyle-html.js?v=${Constants.SIYUAN_VERSION}`, "protyleWcHtmlScript");
|
2023-01-26 18:55:17 +08:00
|
|
|
window.siyuan.config = response.data.conf;
|
2024-10-27 12:07:32 +08:00
|
|
|
window.siyuan.isPublish = response.data.isPublish;
|
2024-07-05 21:00:21 +08:00
|
|
|
await loadPlugins(this);
|
|
|
|
|
getLocalStorage(() => {
|
|
|
|
|
fetchGet(`/appearance/langs/${window.siyuan.config.appearance.lang}.json?v=${Constants.SIYUAN_VERSION}`, (lauguages: IObject) => {
|
|
|
|
|
window.siyuan.languages = lauguages;
|
|
|
|
|
window.siyuan.menus = new Menus(this);
|
2023-01-26 18:55:17 +08:00
|
|
|
fetchPost("/api/setting/getCloudUser", {}, userResponse => {
|
2023-09-26 10:46:20 +08:00
|
|
|
window.siyuan.user = userResponse.data;
|
2024-07-05 21:00:21 +08:00
|
|
|
init(this);
|
|
|
|
|
setTitle(window.siyuan.languages.siyuanNote);
|
|
|
|
|
initMessage();
|
2023-01-26 18:55:17 +08:00
|
|
|
});
|
2024-07-05 21:00:21 +08:00
|
|
|
});
|
|
|
|
|
});
|
2023-01-26 18:55:17 +08:00
|
|
|
});
|
|
|
|
|
setNoteBook();
|
2023-05-18 19:27:21 +08:00
|
|
|
initBlockPopover(this);
|
2023-01-26 18:55:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-18 19:27:21 +08:00
|
|
|
new App();
|