2022-05-26 15:18:53 +08:00
|
|
|
|
import {Constants} from "../../constants";
|
2023-04-20 12:26:12 +08:00
|
|
|
|
import {closeModel, closePanel} from "./closePanel";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
import {openMobileFileById} from "../editor";
|
|
|
|
|
|
import {validateName} from "../../editor/rename";
|
2023-09-12 10:22:04 +08:00
|
|
|
|
import {getEventName} from "../../protyle/util/compatibility";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
import {fetchPost} from "../../util/fetch";
|
2022-10-27 19:34:26 +08:00
|
|
|
|
import {setInlineStyle} from "../../util/assets";
|
|
|
|
|
|
import {renderSnippet} from "../../config/util/snippets";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
import {setEmpty} from "./setEmpty";
|
2023-04-19 18:50:15 +08:00
|
|
|
|
import {getIdZoomInByPath, getOpenNotebookCount} from "../../util/pathName";
|
2023-03-30 11:11:48 +08:00
|
|
|
|
import {popMenu} from "../menu";
|
2023-04-21 21:58:57 +08:00
|
|
|
|
import {MobileFiles} from "../dock/MobileFiles";
|
|
|
|
|
|
import {MobileOutline} from "../dock/MobileOutline";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
import {hasTopClosestByTag} from "../../protyle/util/hasClosest";
|
2023-04-21 21:58:57 +08:00
|
|
|
|
import {MobileBacklinks} from "../dock/MobileBacklinks";
|
|
|
|
|
|
import {MobileBookmarks} from "../dock/MobileBookmarks";
|
|
|
|
|
|
import {MobileTags} from "../dock/MobileTags";
|
2023-03-06 09:23:11 +08:00
|
|
|
|
import {activeBlur, hideKeyboardToolbar, initKeyboardToolbar} from "./keyboardToolbar";
|
2023-01-19 11:49:31 +08:00
|
|
|
|
import {syncGuide} from "../../sync/syncGuide";
|
2023-04-21 21:58:57 +08:00
|
|
|
|
import {Inbox} from "../../layout/dock/Inbox";
|
2023-05-15 13:54:30 +08:00
|
|
|
|
import {App} from "../../index";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
|
2023-11-22 16:18:32 +08:00
|
|
|
|
export const initFramework = (app: App, isStart: boolean) => {
|
2022-05-26 15:18:53 +08:00
|
|
|
|
setInlineStyle();
|
2022-10-12 09:23:25 +08:00
|
|
|
|
renderSnippet();
|
2023-06-01 20:50:49 +08:00
|
|
|
|
initKeyboardToolbar();
|
2022-05-26 15:18:53 +08:00
|
|
|
|
const sidebarElement = document.getElementById("sidebar");
|
|
|
|
|
|
let outline: MobileOutline;
|
|
|
|
|
|
let backlink: MobileBacklinks;
|
2022-07-31 18:22:03 +08:00
|
|
|
|
let bookmark: MobileBookmarks;
|
2023-04-21 21:58:57 +08:00
|
|
|
|
let inbox: Inbox;
|
2022-07-31 18:22:03 +08:00
|
|
|
|
let tag: MobileTags;
|
2023-03-19 14:19:42 +08:00
|
|
|
|
// 不能使用 getEventName,否则点击返回会展开右侧栏
|
2023-03-25 17:13:36 +08:00
|
|
|
|
const firstToolbarElement = sidebarElement.querySelector(".toolbar--border");
|
2023-03-25 16:56:56 +08:00
|
|
|
|
firstToolbarElement.addEventListener("click", (event: Event & {
|
2023-03-01 12:06:46 +08:00
|
|
|
|
target: Element
|
|
|
|
|
|
}) => {
|
2022-05-26 15:18:53 +08:00
|
|
|
|
const svgElement = hasTopClosestByTag(event.target, "svg");
|
|
|
|
|
|
if (!svgElement || svgElement.classList.contains("toolbar__icon--active")) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
const type = svgElement.getAttribute("data-type");
|
2023-03-17 11:35:08 +08:00
|
|
|
|
if (!type) {
|
|
|
|
|
|
closePanel();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-03-25 16:56:56 +08:00
|
|
|
|
firstToolbarElement.querySelectorAll(".toolbar__icon").forEach(item => {
|
2022-05-26 15:18:53 +08:00
|
|
|
|
const itemType = item.getAttribute("data-type");
|
2023-03-25 16:56:56 +08:00
|
|
|
|
if (!itemType) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
|
if (itemType === type) {
|
|
|
|
|
|
if (type === "sidebar-outline-tab") {
|
|
|
|
|
|
if (!outline) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
outline = new MobileOutline(app);
|
2022-05-26 15:18:53 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
outline.update();
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if (type === "sidebar-backlink-tab") {
|
|
|
|
|
|
if (!backlink) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
backlink = new MobileBacklinks(app);
|
2022-05-26 15:18:53 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
backlink.update();
|
|
|
|
|
|
}
|
2022-07-31 10:56:03 +08:00
|
|
|
|
} else if (type === "sidebar-bookmark-tab") {
|
2023-03-25 16:56:56 +08:00
|
|
|
|
if (!bookmark) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
bookmark = new MobileBookmarks(app);
|
2022-07-31 10:56:03 +08:00
|
|
|
|
} else {
|
2023-05-22 22:08:01 +08:00
|
|
|
|
bookmark.update();
|
2022-07-31 10:56:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else if (type === "sidebar-tag-tab") {
|
2023-03-25 16:56:56 +08:00
|
|
|
|
if (!tag) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
tag = new MobileTags(app);
|
2022-07-31 10:56:03 +08:00
|
|
|
|
} else {
|
2022-07-31 17:12:55 +08:00
|
|
|
|
tag.update();
|
2022-07-31 10:56:03 +08:00
|
|
|
|
}
|
2023-04-21 21:58:57 +08:00
|
|
|
|
} else if (type === "sidebar-inbox-tab" && !inbox) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
inbox = new Inbox(app, document.querySelector('#sidebar [data-type="sidebar-inbox"]'));
|
2022-05-26 15:18:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
svgElement.classList.add("toolbar__icon--active");
|
|
|
|
|
|
sidebarElement.lastElementChild.querySelector(`[data-type="${itemType.replace("-tab", "")}"]`).classList.remove("fn__none");
|
|
|
|
|
|
} else {
|
|
|
|
|
|
item.classList.remove("toolbar__icon--active");
|
|
|
|
|
|
sidebarElement.lastElementChild.querySelector(`[data-type="${itemType.replace("-tab", "")}"]`).classList.add("fn__none");
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
2023-05-18 19:27:21 +08:00
|
|
|
|
window.siyuan.mobile.files = new MobileFiles(app);
|
2023-03-03 10:39:58 +08:00
|
|
|
|
document.getElementById("toolbarFile").addEventListener("click", () => {
|
2023-03-01 12:06:46 +08:00
|
|
|
|
hideKeyboardToolbar();
|
2023-03-06 09:23:11 +08:00
|
|
|
|
activeBlur();
|
2023-04-07 09:06:30 +08:00
|
|
|
|
sidebarElement.style.transform = "translateX(0px)";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
const type = sidebarElement.querySelector(".toolbar--border .toolbar__icon--active").getAttribute("data-type");
|
|
|
|
|
|
if (type === "sidebar-outline-tab") {
|
|
|
|
|
|
outline.update();
|
|
|
|
|
|
} else if (type === "sidebar-backlink-tab") {
|
|
|
|
|
|
backlink.update();
|
2022-07-31 10:56:03 +08:00
|
|
|
|
} else if (type === "sidebar-bookmark-tab") {
|
|
|
|
|
|
bookmark.update();
|
|
|
|
|
|
} else if (type === "sidebar-tag-tab") {
|
|
|
|
|
|
tag.update();
|
2022-05-26 15:18:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
});
|
2022-10-08 14:31:34 +08:00
|
|
|
|
// 用 touchstart 会导致键盘不收起
|
|
|
|
|
|
document.getElementById("toolbarMore").addEventListener("click", () => {
|
2022-05-26 15:18:53 +08:00
|
|
|
|
popMenu();
|
|
|
|
|
|
});
|
2023-03-05 15:08:25 +08:00
|
|
|
|
document.getElementById("toolbarSync").addEventListener(getEventName(), () => {
|
2023-05-15 13:54:30 +08:00
|
|
|
|
syncGuide(app);
|
2023-03-05 15:08:25 +08:00
|
|
|
|
});
|
2023-03-23 10:16:40 +08:00
|
|
|
|
document.getElementById("modelClose").addEventListener("click", () => {
|
2023-04-20 12:26:12 +08:00
|
|
|
|
closeModel();
|
2022-05-26 15:18:53 +08:00
|
|
|
|
});
|
|
|
|
|
|
initEditorName();
|
2023-01-20 11:24:11 +08:00
|
|
|
|
if (getOpenNotebookCount() > 0) {
|
2023-03-19 23:20:31 +08:00
|
|
|
|
if (window.JSAndroid && window.openFileByURL(window.JSAndroid.getBlockURL())) {
|
|
|
|
|
|
return;
|
2023-01-20 11:24:11 +08:00
|
|
|
|
}
|
2023-04-19 18:50:15 +08:00
|
|
|
|
const idZoomIn = getIdZoomInByPath();
|
|
|
|
|
|
if (idZoomIn.id) {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
openMobileFileById(app, idZoomIn.id,
|
2023-09-17 22:26:30 +08:00
|
|
|
|
idZoomIn.isZoomIn ? [Constants.CB_GET_ALL, Constants.CB_GET_FOCUS] : [Constants.CB_GET_FOCUS, Constants.CB_GET_CONTEXT, Constants.CB_GET_ROOTSCROLL]);
|
2023-01-20 11:24:11 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-17 23:14:16 +08:00
|
|
|
|
if (window.siyuan.config.fileTree.closeTabsOnStart && isStart) {
|
|
|
|
|
|
setEmpty(app);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-01-20 11:24:11 +08:00
|
|
|
|
const localDoc = window.siyuan.storage[Constants.LOCAL_DOCINFO];
|
|
|
|
|
|
fetchPost("/api/block/checkBlockExist", {id: localDoc.id}, existResponse => {
|
|
|
|
|
|
if (existResponse.data) {
|
2023-07-04 12:24:02 +08:00
|
|
|
|
openMobileFileById(app, localDoc.id, [Constants.CB_GET_SCROLL]);
|
2023-01-20 11:24:11 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
fetchPost("/api/block/getRecentUpdatedBlocks", {}, (response) => {
|
|
|
|
|
|
if (response.data.length !== 0) {
|
2023-09-17 22:26:30 +08:00
|
|
|
|
openMobileFileById(app, response.data[0].id, [Constants.CB_GET_HL, Constants.CB_GET_CONTEXT, Constants.CB_GET_ROOTSCROLL]);
|
2023-01-20 11:24:11 +08:00
|
|
|
|
} else {
|
2023-05-18 19:27:21 +08:00
|
|
|
|
setEmpty(app);
|
2023-01-20 11:24:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
2023-01-24 20:33:13 +08:00
|
|
|
|
return;
|
2023-01-20 11:24:11 +08:00
|
|
|
|
}
|
2023-05-18 19:27:21 +08:00
|
|
|
|
setEmpty(app);
|
2022-05-26 15:18:53 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const initEditorName = () => {
|
|
|
|
|
|
const inputElement = document.getElementById("toolbarName") as HTMLInputElement;
|
2022-06-18 23:02:21 +08:00
|
|
|
|
inputElement.setAttribute("placeholder", window.siyuan.languages._kernel[16]);
|
2022-05-26 15:18:53 +08:00
|
|
|
|
inputElement.addEventListener("blur", () => {
|
2023-09-09 14:54:05 +08:00
|
|
|
|
if (inputElement.getAttribute("readonly") === "readonly") {
|
2022-05-26 15:18:53 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!validateName(inputElement.value)) {
|
2022-10-22 17:37:41 +08:00
|
|
|
|
inputElement.value = inputElement.value.substring(0, Constants.SIZE_TITLE);
|
2022-05-26 15:18:53 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fetchPost("/api/filetree/renameDoc", {
|
2023-01-19 20:31:14 +08:00
|
|
|
|
notebook: window.siyuan.mobile.editor.protyle.notebookId,
|
|
|
|
|
|
path: window.siyuan.mobile.editor.protyle.path,
|
2022-05-26 15:18:53 +08:00
|
|
|
|
title: inputElement.value,
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|