This commit is contained in:
parent
2a67a917b8
commit
7ba98f2ee0
4 changed files with 27 additions and 7 deletions
|
@ -15,6 +15,10 @@
|
|||
animation-duration: 150ms;
|
||||
animation-fill-mode: both;
|
||||
animation-name: zoomIn;
|
||||
|
||||
&--error {
|
||||
background: var(--b3-theme-error);
|
||||
}
|
||||
}
|
||||
|
||||
.b3-tooltips {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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", {
|
||||
|
|
Loading…
Add table
Reference in a new issue