From dda46341267be68751a97b6cf89736ad858b5053 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Tue, 15 Jul 2025 12:36:19 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/15300 --- app/src/protyle/util/insertHTML.ts | 16 ++++++++++++---- app/src/protyle/wysiwyg/index.ts | 14 +++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/protyle/util/insertHTML.ts b/app/src/protyle/util/insertHTML.ts index f44d335fb..2c702542e 100644 --- a/app/src/protyle/util/insertHTML.ts +++ b/app/src/protyle/util/insertHTML.ts @@ -59,7 +59,7 @@ const processAV = (range: Range, html: string, protyle: IProtyle, blockElement: const firstColIndex = cellElements[0].getAttribute("data-col-id"); values.find(rowItem => { if (!currentRowElement) { - currentRowElement = cellElements[0].parentElement; + currentRowElement = hasClosestByClassName(cellElements[0].parentElement, "av__row") as HTMLElement; } else { currentRowElement = currentRowElement.nextElementSibling; } @@ -71,7 +71,11 @@ const processAV = (range: Range, html: string, protyle: IProtyle, blockElement: if (!cellElement) { cellElement = currentRowElement.querySelector(`.av__cell[data-col-id="${firstColIndex}"]`) as HTMLElement; } else { - cellElement = cellElement.nextElementSibling as HTMLElement; + if (cellElement.nextElementSibling) { + cellElement = cellElement.nextElementSibling as HTMLElement; + } else if (cellElement.parentElement.classList.contains("av__colsticky")) { + cellElement = cellElement.parentElement.nextElementSibling as HTMLElement; + } } if (!cellElement.classList.contains("av__cell")) { return true; @@ -156,7 +160,7 @@ const processAV = (range: Range, html: string, protyle: IProtyle, blockElement: const firstColIndex = cellElements[0].getAttribute("data-col-id"); textJSON.forEach((rowValue) => { if (!currentRowElement) { - currentRowElement = cellElements[0].parentElement; + currentRowElement = hasClosestByClassName(cellElements[0].parentElement, "av__row") as HTMLElement; } else { currentRowElement = currentRowElement.nextElementSibling; } @@ -168,7 +172,11 @@ const processAV = (range: Range, html: string, protyle: IProtyle, blockElement: if (!cellElement) { cellElement = currentRowElement.querySelector(`.av__cell[data-col-id="${firstColIndex}"]`) as HTMLElement; } else { - cellElement = cellElement.nextElementSibling as HTMLElement; + if (cellElement.nextElementSibling) { + cellElement = cellElement.nextElementSibling as HTMLElement; + } else if (cellElement.parentElement.classList.contains("av__colsticky")) { + cellElement = cellElement.parentElement.nextElementSibling as HTMLElement; + } } if (!cellElement.classList.contains("av__cell")) { return true; diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts index 8a891d68d..916ce6b34 100644 --- a/app/src/protyle/wysiwyg/index.ts +++ b/app/src/protyle/wysiwyg/index.ts @@ -318,14 +318,22 @@ export class WYSIWYG { html = "["; cellElements.forEach((item: HTMLElement, index) => { const cellText = getCellText(item); - if (index === 0 || !cellElements[index - 1].isSameNode(item.previousElementSibling)) { + if (index === 0 || ( + !cellElements[index - 1].isSameNode(item.previousElementSibling) && + !(item.previousElementSibling?.classList.contains("av__colsticky") && !cellElements[index - 1].nextElementSibling && cellElements[index - 1].parentElement.isSameNode(item.previousElementSibling)) + )) { html += "["; } html += JSON.stringify(genCellValueByElement(getTypeByCellElement(item), item)) + ","; - if (index === cellElements.length - 1 || !cellElements[index + 1].isSameNode(item.nextElementSibling)) { + if (index === cellElements.length - 1 || ( + !cellElements[index + 1].isSameNode(item.nextElementSibling) && + !(!item.nextElementSibling && item.parentElement.nextElementSibling.isSameNode(cellElements[index + 1])) + )) { html = html.substring(0, html.length - 1) + "],"; + textPlain += cellText + "\n"; + } else { + textPlain += cellText + "\t"; } - textPlain += cellText + ((cellElements[index + 1] && item.nextElementSibling && item.nextElementSibling.isSameNode(cellElements[index + 1])) ? "\t" : "\n\n"); }); textPlain = textPlain.substring(0, textPlain.length - 2); html = html.substring(0, html.length - 1) + "]";