mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-28 04:18:48 +01:00
113 lines
4.9 KiB
TypeScript
113 lines
4.9 KiB
TypeScript
import {Protyle} from "../protyle";
|
|
import {setEditor} from "./util/setEmpty";
|
|
import {closePanel} from "./util/closePanel";
|
|
import {Constants} from "../constants";
|
|
import {fetchPost} from "../util/fetch";
|
|
import {onGet} from "../protyle/util/onGet";
|
|
import {addLoading} from "../protyle/ui/initUI";
|
|
import {scrollCenter} from "../util/highlightById";
|
|
import {isInEmbedBlock} from "../protyle/util/hasClosest";
|
|
import {setEditMode} from "../protyle/util/setEditMode";
|
|
import {hideElements} from "../protyle/ui/hideElements";
|
|
import {pushBack} from "./util/MobileBackFoward";
|
|
import {setStorageVal} from "../protyle/util/compatibility";
|
|
import {showMessage} from "../dialog/message";
|
|
import {App} from "../index";
|
|
import {getDocByScroll, saveScroll} from "../protyle/scroll/saveScroll";
|
|
|
|
export const getCurrentEditor = () => {
|
|
return window.siyuan.mobile.popEditor || window.siyuan.mobile.editor;
|
|
};
|
|
|
|
export const openMobileFileById = (app: App, id: string, action: TProtyleAction[] = [Constants.CB_GET_HL]) => {
|
|
window.siyuan.storage[Constants.LOCAL_DOCINFO] = {id};
|
|
setStorageVal(Constants.LOCAL_DOCINFO, window.siyuan.storage[Constants.LOCAL_DOCINFO]);
|
|
const avPanelElement = document.querySelector(".av__panel");
|
|
if (avPanelElement && !avPanelElement.classList.contains("fn__none")) {
|
|
avPanelElement.dispatchEvent(new CustomEvent("click", {detail: "close"}));
|
|
}
|
|
if (window.siyuan.mobile.editor) {
|
|
saveScroll(window.siyuan.mobile.editor.protyle);
|
|
hideElements(["toolbar", "hint", "util"], window.siyuan.mobile.editor.protyle);
|
|
if (window.siyuan.mobile.editor.protyle.contentElement.classList.contains("fn__none")) {
|
|
setEditMode(window.siyuan.mobile.editor.protyle, "wysiwyg");
|
|
}
|
|
let blockElement;
|
|
Array.from(window.siyuan.mobile.editor.protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${id}"]`)).find((item: HTMLElement) => {
|
|
if (!isInEmbedBlock(item)) {
|
|
blockElement = item;
|
|
return true;
|
|
}
|
|
});
|
|
if (blockElement) {
|
|
pushBack();
|
|
scrollCenter(window.siyuan.mobile.editor.protyle, blockElement, true);
|
|
closePanel();
|
|
return;
|
|
}
|
|
}
|
|
|
|
fetchPost("/api/block/getBlockInfo", {id}, (data) => {
|
|
if (data.code === 3) {
|
|
showMessage(data.msg);
|
|
return;
|
|
}
|
|
const protyleOptions: IProtyleOptions = {
|
|
blockId: id,
|
|
rootId: data.data.rootID,
|
|
action,
|
|
render: {
|
|
scroll: true,
|
|
title: true,
|
|
background: true,
|
|
gutter: true,
|
|
},
|
|
typewriterMode: true,
|
|
preview: {
|
|
actions: ["mp-wechat", "zhihu", "yuque"]
|
|
}
|
|
};
|
|
if (window.siyuan.mobile.editor) {
|
|
window.siyuan.mobile.editor.protyle.title.element.removeAttribute("data-render");
|
|
pushBack();
|
|
addLoading(window.siyuan.mobile.editor.protyle);
|
|
if (window.siyuan.mobile.editor.protyle.block.rootID !== data.data.rootID) {
|
|
window.siyuan.mobile.editor.protyle.wysiwyg.element.innerHTML = "";
|
|
}
|
|
if (action.includes(Constants.CB_GET_SCROLL) && window.siyuan.storage[Constants.LOCAL_FILEPOSITION][data.data.rootID]) {
|
|
getDocByScroll({
|
|
protyle: window.siyuan.mobile.editor.protyle,
|
|
scrollAttr: window.siyuan.storage[Constants.LOCAL_FILEPOSITION][data.data.rootID],
|
|
mergedOptions: protyleOptions,
|
|
cb() {
|
|
app.plugins.forEach(item => {
|
|
item.eventBus.emit("switch-protyle", {protyle: window.siyuan.mobile.editor.protyle});
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
fetchPost("/api/filetree/getDoc", {
|
|
id,
|
|
size: action.includes(Constants.CB_GET_ALL) ? Constants.SIZE_GET_MAX : window.siyuan.config.editor.dynamicLoadBlocks,
|
|
mode: action.includes(Constants.CB_GET_CONTEXT) ? 3 : 0,
|
|
}, getResponse => {
|
|
onGet({
|
|
data: getResponse,
|
|
protyle: window.siyuan.mobile.editor.protyle,
|
|
action,
|
|
afterCB() {
|
|
app.plugins.forEach(item => {
|
|
item.eventBus.emit("switch-protyle", {protyle: window.siyuan.mobile.editor.protyle});
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
window.siyuan.mobile.editor.protyle.undo.clear();
|
|
} else {
|
|
window.siyuan.mobile.editor = new Protyle(app, document.getElementById("editor"), protyleOptions);
|
|
}
|
|
setEditor();
|
|
closePanel();
|
|
});
|
|
};
|