diff --git a/app/src/editor/rename.ts b/app/src/editor/rename.ts index a996c18de..04ac46308 100644 --- a/app/src/editor/rename.ts +++ b/app/src/editor/rename.ts @@ -9,17 +9,22 @@ import {isMobile} from "../util/functions"; import {getAssetName, getDisplayName, pathPosix, setNotebookName} from "../util/pathName"; import {fetchPost} from "../util/fetch"; import {escapeHtml} from "../util/escape"; +import {Constants} from "../constants"; export const validateName = (name: string) => { if (/\r\n|\r|\n|\u2028|\u2029|\t|\//.test(name)) { showMessage(window.siyuan.languages.fileNameRule); return false; } + if (name.length > Constants.SIZE_TITLE) { + showMessage(window.siyuan.languages["_kernel"]["106"]); + return false; + } return true; }; export const replaceFileName = (name: string) => { - return name.replace(/\r\n|\r|\n|\u2028|\u2029|\t|\//g, ""); + return name.replace(/\r\n|\r|\n|\u2028|\u2029|\t|\//g, "").substring(0, Constants.SIZE_TITLE); }; export const replaceLocalPath = (name: string) => { diff --git a/app/src/layout/dock/Inbox.ts b/app/src/layout/dock/Inbox.ts index 4d68690e9..d1d94eadd 100644 --- a/app/src/layout/dock/Inbox.ts +++ b/app/src/layout/dock/Inbox.ts @@ -7,6 +7,7 @@ import {needSubscribe} from "../../util/needSubscribe"; import {MenuItem} from "../../menus/Menu"; import {hasClosestByAttribute, hasClosestByClassName} from "../../protyle/util/hasClosest"; import {confirmDialog} from "../../dialog/confirmDialog"; +import {replaceFileName} from "../../editor/rename"; export class Inbox extends Model { private element: Element; @@ -254,7 +255,7 @@ ${(Lute.New()).MarkdownStr("", data.shorthandContent)} fetchPost("/api/filetree/createDoc", { notebook: notebookId, path: `/${Lute.NewNodeID()}.sy`, - title: this.data[item].shorthandTitle, + title: replaceFileName(this.data[item].shorthandTitle), md: this.data[item].shorthandContent, }, () => { this.remove(item); diff --git a/app/src/mobile/util/initFramework.ts b/app/src/mobile/util/initFramework.ts index c1b6dda41..3df0106bc 100644 --- a/app/src/mobile/util/initFramework.ts +++ b/app/src/mobile/util/initFramework.ts @@ -159,6 +159,7 @@ const initEditorName = () => { return; } if (!validateName(inputElement.value)) { + inputElement.value = inputElement.value.substring(0, Constants.SIZE_TITLE); return false; } diff --git a/app/src/protyle/header/Title.ts b/app/src/protyle/header/Title.ts index 6e75d5e81..e19420157 100644 --- a/app/src/protyle/header/Title.ts +++ b/app/src/protyle/header/Title.ts @@ -252,6 +252,7 @@ export class Title { private rename(protyle: IProtyle) { clearTimeout(this.timeout); if (!validateName(this.editElement.textContent)) { + this.setTitle(this.editElement.textContent.substring(0, Constants.SIZE_TITLE)); return false; } this.timeout = window.setTimeout(() => { diff --git a/app/src/util/newFile.ts b/app/src/util/newFile.ts index 44b41f4f3..d18c626c3 100644 --- a/app/src/util/newFile.ts +++ b/app/src/util/newFile.ts @@ -9,6 +9,7 @@ import {openFileById} from "../editor/util"; import {fetchPost} from "./fetch"; import {getDisplayName, getOpenNotebookCount, pathPosix} from "./pathName"; import {Constants} from "../constants"; +import {validateName} from "../editor/rename"; export const newFile = (notebookId?: string, currentPath?: string, open?: boolean, paths?: string[]) => { if (getOpenNotebookCount() === 0) { @@ -58,6 +59,9 @@ export const newFile = (notebookId?: string, currentPath?: string, open?: boolea if (paths) { paths[paths.indexOf(undefined)] = newPath; } + if (!validateName(data.data.name)) { + return; + } fetchPost("/api/filetree/createDoc", { notebook: notebookId, path: newPath,