mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-04 15:58:49 +01:00
This commit is contained in:
parent
e8f0ea7c09
commit
8ae601f9ea
3 changed files with 54 additions and 17 deletions
|
|
@ -16,6 +16,47 @@ import {scrollCenter} from "../../util/highlightById";
|
|||
import {hideElements} from "../ui/hideElements";
|
||||
import {avRender} from "../render/av/render";
|
||||
import {cellScrollIntoView, getCellText} from "../render/av/cell";
|
||||
import {getContenteditableElement} from "../wysiwyg/getBlock";
|
||||
|
||||
export const getTextStar = (blockElement: HTMLElement) => {
|
||||
const dataType = blockElement.dataset.type
|
||||
let refText = ""
|
||||
if (["NodeHeading", "NodeParagraph"].includes(dataType)) {
|
||||
refText = getContenteditableElement(blockElement).innerHTML;
|
||||
} else {
|
||||
if ("NodeHTMLBlock" === dataType) {
|
||||
refText = "HTML"
|
||||
} else if ("NodeAttributeView" === dataType) {
|
||||
refText = blockElement.querySelector(".av__title").textContent || window.siyuan.languages.database
|
||||
} else if ("NodeThematicBreak" === dataType) {
|
||||
refText = window.siyuan.languages.line
|
||||
} else if ("NodeIFrame" === dataType) {
|
||||
refText = "IFrame"
|
||||
} else if ("NodeWidget" === dataType) {
|
||||
refText = window.siyuan.languages.widget
|
||||
} else if ("NodeVideo" === dataType) {
|
||||
refText = window.siyuan.languages.video
|
||||
} else if ("NodeAudio" === dataType) {
|
||||
refText = window.siyuan.languages.audio
|
||||
} else if (["NodeCodeBlock", "NodeTable"].includes(dataType)) {
|
||||
refText = getPlainText(blockElement);
|
||||
} else if (blockElement.classList.contains("render-node")) {
|
||||
// 需在嵌入块后,代码块前
|
||||
refText += blockElement.dataset.subtype || Lute.UnEscapeHTMLStr(blockElement.getAttribute("data-content"));
|
||||
} else if (["NodeBlockquote", "NodeList", "NodeSuperBlock", "NodeListItem"].includes(dataType)) {
|
||||
Array.from(blockElement.querySelectorAll("[data-node-id]")).find((item: HTMLElement) => {
|
||||
if (!["NodeBlockquote", "NodeList", "NodeSuperBlock", "NodeListItem"].includes(item.getAttribute("data-type"))) {
|
||||
refText = getTextStar(blockElement.querySelector("[data-node-id]"));
|
||||
return true;
|
||||
}
|
||||
})
|
||||
if (refText) {
|
||||
return refText
|
||||
}
|
||||
}
|
||||
}
|
||||
return refText + ` <span data-type="block-ref" data-subtype="s" data-id="${blockElement.getAttribute("data-node-id")}">*</span>`;
|
||||
}
|
||||
|
||||
export const getPlainText = (blockElement: HTMLElement, isNested = false) => {
|
||||
let text = ""
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import {paste} from "../util/paste";
|
||||
import {getTextStar, paste} from "../util/paste";
|
||||
import {
|
||||
hasClosestBlock,
|
||||
hasClosestByAttribute,
|
||||
|
|
@ -269,32 +269,23 @@ export class WYSIWYG {
|
|||
selectElements[0].parentElement.classList.contains("list") && // 反链复制列表项 https://github.com/siyuan-note/siyuan/issues/6555
|
||||
selectElements[0].parentElement.childElementCount - 1 === selectElements.length) {
|
||||
if (isRefText) {
|
||||
const cloneElement = selectElements[0].parentElement.cloneNode(true) as HTMLElement;
|
||||
const cloneEditElement = getContenteditableElement(cloneElement);
|
||||
if (cloneEditElement) {
|
||||
cloneEditElement.insertAdjacentHTML("beforeend", ` <span data-type="block-ref" data-subtype="s" data-id="${cloneElement.getAttribute("data-node-id")}">*</span>`);
|
||||
}
|
||||
html = cloneElement.outerHTML;
|
||||
selectElements[0].removeAttribute("data-reftext");
|
||||
html = getTextStar(selectElements[0].parentElement)
|
||||
} else {
|
||||
html = selectElements[0].parentElement.outerHTML;
|
||||
}
|
||||
} else {
|
||||
selectElements.forEach((item, index) => {
|
||||
selectElements.forEach((item: HTMLElement, index) => {
|
||||
// 复制列表项中的块会变为复制列表项,因此不能使用 getTopAloneElement https://github.com/siyuan-note/siyuan/issues/8925
|
||||
if (isRefText && index === 0) {
|
||||
const cloneElement = item.cloneNode(true) as HTMLElement;
|
||||
const cloneEditElement = getContenteditableElement(cloneElement);
|
||||
if (cloneEditElement) {
|
||||
cloneEditElement.insertAdjacentHTML("beforeend", ` <span data-type="block-ref" data-subtype="s" data-id="${item.getAttribute("data-node-id")}">*</span>`);
|
||||
}
|
||||
html += removeEmbed(cloneElement);
|
||||
selectElements[0].removeAttribute("data-reftext");
|
||||
html += getTextStar(item) + "\n\n";
|
||||
} else {
|
||||
html += removeEmbed(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (isRefText) {
|
||||
selectElements[0].removeAttribute("data-reftext");
|
||||
}
|
||||
} else if (selectAVElement) {
|
||||
const cellElements: Element[] = Array.from(nodeElement.querySelectorAll(".av__cell--active, .av__cell--select")) || [];
|
||||
if (cellElements.length === 0) {
|
||||
|
|
|
|||
|
|
@ -919,7 +919,12 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
|
|||
writeText(`${content.trim()} ((${nodeElement.getAttribute("data-node-id")} "*"))`);
|
||||
});
|
||||
} else {
|
||||
nodeElement.setAttribute("data-reftext", "true");
|
||||
const selectElements = protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select");
|
||||
if (selectElements.length > 0) {
|
||||
selectElements[0].setAttribute("data-reftext", "true");
|
||||
} else {
|
||||
nodeElement.setAttribute("data-reftext", "true");
|
||||
}
|
||||
focusByRange(getEditorRange(nodeElement));
|
||||
document.execCommand("copy");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue