diff --git a/app/src/block/util.ts b/app/src/block/util.ts
index 8908f2740..c543c5001 100644
--- a/app/src/block/util.ts
+++ b/app/src/block/util.ts
@@ -178,3 +178,31 @@ export const genEmptyElement = (zwsp = true, wbr = true, id?: string) => {
element.innerHTML = `
${zwsp ? Constants.ZWSP : ""}${wbr ? "" : ""}
${Constants.ZWSP}
`;
return element;
};
+
+export const getLangByType = (type: string) => {
+ let lang = type;
+ switch (type) {
+ case "NodeIFrame":
+ lang = "IFrame";
+ break;
+ case "NodeAttributeView":
+ lang = window.siyuan.languages.database;
+ break;
+ case "NodeThematicBreak":
+ lang = window.siyuan.languages.line;
+ break;
+ case "NodeWidget":
+ lang = window.siyuan.languages.widget;
+ break;
+ case "NodeVideo":
+ lang = window.siyuan.languages.video;
+ break;
+ case "NodeAudio":
+ lang = window.siyuan.languages.audio;
+ break;
+ case "NodeBlockQueryEmbed":
+ lang = window.siyuan.languages.blockEmbed;
+ break;
+ }
+ return lang
+}
diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts
index 1d4f72a66..b0f735e7f 100644
--- a/app/src/protyle/gutter/index.ts
+++ b/app/src/protyle/gutter/index.ts
@@ -28,7 +28,7 @@ import {removeEmbed} from "../wysiwyg/removeEmbed";
import {getContenteditableElement, getTopAloneElement, isNotEditBlock} from "../wysiwyg/getBlock";
import * as dayjs from "dayjs";
import {fetchPost, fetchSyncPost} from "../../util/fetch";
-import {cancelSB, genEmptyElement, insertEmptyBlock, jumpToParentNext} from "../../block/util";
+import {cancelSB, genEmptyElement, getLangByType, insertEmptyBlock, jumpToParentNext} from "../../block/util";
import {countBlockWord} from "../../layout/status";
import {Constants} from "../../constants";
import {mathRender} from "../render/mathRender";
@@ -98,11 +98,10 @@ export class Gutter {
ghostElement.className = protyle.wysiwyg.element.className;
selectElements.forEach(item => {
const type = item.getAttribute("data-type");
- if (["NodeIFrame", "NodeWidget"].includes(type)) {
+ if (item.querySelector("iframe")) {
const embedElement = genEmptyElement();
embedElement.classList.add("protyle-wysiwyg--select");
- const isIFrame = type === "NodeIFrame";
- getContenteditableElement(embedElement).innerHTML = ` ${isIFrame ? "IFrame" : window.siyuan.languages.widget}`;
+ getContenteditableElement(embedElement).innerHTML = ` ${getLangByType(type)}`;
ghostElement.append(embedElement);
} else {
ghostElement.append(item.cloneNode(true));
diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts
index 49c511a6f..9b37b486a 100644
--- a/app/src/protyle/wysiwyg/index.ts
+++ b/app/src/protyle/wysiwyg/index.ts
@@ -737,12 +737,11 @@ export class WYSIWYG {
let moveCellElement: HTMLElement;
let startFirstElement: Element;
let endLastElement: Element;
+ this.element.querySelectorAll("iframe").forEach(item => {
+ item.style.pointerEvents = "none"
+ })
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
const moveTarget = moveEvent.target as HTMLElement;
- if (moveTarget.tagName === "IFRAME") {
- moveTarget.style.pointerEvents = "none";
- return;
- }
// table cell select
if (!protyle.disabled && tableBlockElement && tableBlockElement.contains(moveTarget) && !hasClosestByClassName(tableBlockElement, "protyle-wysiwyg__embed")) {
if ((moveTarget.tagName === "TH" || moveTarget.tagName === "TD") && !moveTarget.isSameNode(target) && (!moveCellElement || !moveCellElement.isSameNode(moveTarget))) {
@@ -906,6 +905,15 @@ export class WYSIWYG {
}
let selectElements: Element[] = [];
let currentElement: Element | boolean = firstBlockElement;
+
+ if (currentElement) {
+ // 从下网上选遇到嵌入块时,选中整个嵌入块
+ const embedElement = hasClosestByAttribute(currentElement, "data-type", "NodeBlockQueryEmbed")
+ if (embedElement) {
+ currentElement = embedElement
+ }
+ }
+
let hasJump = false;
const selectBottom = endLastElement ? endLastElement.getBoundingClientRect().bottom : (newTop + newHeight);
while (currentElement) {
@@ -975,6 +983,9 @@ export class WYSIWYG {
documentSelf.onselect = null;
startFirstElement = undefined;
endLastElement = undefined;
+ this.element.querySelectorAll("iframe").forEach(item => {
+ item.style.pointerEvents = "";
+ })
protyle.selectElement.classList.add("fn__none");
protyle.selectElement.removeAttribute("style");
if (!protyle.disabled && tableBlockElement) {
@@ -1198,9 +1209,6 @@ export class WYSIWYG {
const selectElement = protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select");
selectElement.forEach(item => {
ids.push(item.getAttribute("data-node-id"));
- if (item.classList.contains("iframe")) {
- item.querySelector("iframe").style.pointerEvents = "";
- }
});
countBlockWord(ids);
// 划选后不能存在跨块的 range https://github.com/siyuan-note/siyuan/issues/4473