This commit is contained in:
Vanessa 2022-11-15 10:55:05 +08:00
parent 2a67a917b8
commit 7ba98f2ee0
4 changed files with 27 additions and 7 deletions

View file

@ -15,6 +15,10 @@
animation-duration: 150ms;
animation-fill-mode: both;
animation-name: zoomIn;
&--error {
background: var(--b3-theme-error);
}
}
.b3-tooltips {

View file

@ -1,7 +1,7 @@
import {setPosition} from "../util/setPosition";
import {isMobile} from "../util/functions";
export const showTooltip = (message: string, target: Element) => {
export const showTooltip = (message: string, target: Element, error = false) => {
if (isMobile()) {
return;
}
@ -17,7 +17,12 @@ export const showTooltip = (message: string, target: Element) => {
} else {
messageElement.innerHTML = message;
}
if(target.getAttribute("data-inline-memo-content")) {
if (error) {
messageElement.classList.add("tooltip--error");
} else {
messageElement.classList.remove("tooltip--error");
}
if (target.getAttribute("data-inline-memo-content")) {
messageElement.classList.add("tooltip--memo"); // 为行级备注添加 class https://github.com/siyuan-note/siyuan/issues/6161
}
let left = targetRect.left;

View file

@ -9,14 +9,23 @@ import {getAssetName, getDisplayName, pathPosix, setNotebookName} from "../util/
import {fetchPost} from "../util/fetch";
import {escapeHtml} from "../util/escape";
import {Constants} from "../constants";
import {showTooltip} from "../dialog/tooltip";
export const validateName = (name: string) => {
export const validateName = (name: string, targetElement?: HTMLElement) => {
if (/\r\n|\r|\n|\u2028|\u2029|\t|\//.test(name)) {
showMessage(window.siyuan.languages.fileNameRule);
if (targetElement) {
showTooltip(window.siyuan.languages.fileNameRule, targetElement, true);
} else {
showMessage(window.siyuan.languages.fileNameRule);
}
return false;
}
if (name.length > Constants.SIZE_TITLE) {
showMessage(window.siyuan.languages["_kernel"]["106"]);
if (targetElement) {
showTooltip(window.siyuan.languages["_kernel"]["106"], targetElement, true);
} else {
showMessage(window.siyuan.languages["_kernel"]["106"]);
}
return false;
}
return true;

View file

@ -28,6 +28,7 @@ import {code160to32} from "../util/code160to32";
import {deleteFile} from "../../editor/deleteFile";
import {genEmptyElement} from "../../block/util";
import {transaction} from "../wysiwyg/transaction";
import {hideTooltip} from "../../dialog/tooltip";
export class Title {
public element: HTMLElement;
@ -41,7 +42,7 @@ export class Title {
this.element.classList.add("protyle-wysiwyg--attr");
}
this.element.innerHTML = `<span aria-label="${window.siyuan.languages.gutterTip2}" class="protyle-title__icon" data-type="a" data-position="right"><svg><use xlink:href="#iconFile"></use></svg></span>
<div contenteditable="true" spellcheck="false" class="protyle-title__input" data-tip="${window.siyuan.languages._kernel[16]}"></div><div class="protyle-attr"></div>`;
<div contenteditable="true" data-position="center" spellcheck="false" class="protyle-title__input" data-tip="${window.siyuan.languages._kernel[16]}"></div><div class="protyle-attr"></div>`;
this.editElement = this.element.querySelector(".protyle-title__input");
this.editElement.addEventListener("paste", (event: ClipboardEvent) => {
event.stopPropagation();
@ -251,13 +252,14 @@ export class Title {
private rename(protyle: IProtyle) {
clearTimeout(this.timeout);
if (!validateName(this.editElement.textContent)) {
if (!validateName(this.editElement.textContent, this.editElement)) {
// 字数过长会导致滚动
const offset = getSelectionOffset(this.editElement);
this.setTitle(this.editElement.textContent.substring(0, Constants.SIZE_TITLE));
focusByOffset(this.editElement, offset.start, offset.end);
return false;
}
hideTooltip();
this.timeout = window.setTimeout(() => {
const fileName = replaceFileName(this.editElement.textContent);
fetchPost("/api/filetree/renameDoc", {