This commit is contained in:
parent
a945cf9c18
commit
6684c77120
3 changed files with 46 additions and 11 deletions
|
@ -178,3 +178,31 @@ export const genEmptyElement = (zwsp = true, wbr = true, id?: string) => {
|
|||
element.innerHTML = `<div contenteditable="true" spellcheck="${window.siyuan.config.editor.spellcheck}">${zwsp ? Constants.ZWSP : ""}${wbr ? "<wbr>" : ""}</div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div>`;
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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 = `<svg class="svg"><use xlink:href="#icon${isIFrame ? "Language" : "Both"}"></use></svg> ${isIFrame ? "IFrame" : window.siyuan.languages.widget}`;
|
||||
getContenteditableElement(embedElement).innerHTML = `<svg class="svg"><use xlink:href="${ buttonElement.querySelector("use").getAttribute("xlink:href")}"></use></svg> ${getLangByType(type)}`;
|
||||
ghostElement.append(embedElement);
|
||||
} else {
|
||||
ghostElement.append(item.cloneNode(true));
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue