diff --git a/app/src/mobile/util/MobileBackFoward.ts b/app/src/mobile/util/MobileBackFoward.ts index 3b3bcad98..4bb1e5d39 100644 --- a/app/src/mobile/util/MobileBackFoward.ts +++ b/app/src/mobile/util/MobileBackFoward.ts @@ -92,7 +92,7 @@ const focusStack = (backStack: IBackStack) => { if (getResponse.data.isSyncing) { disabledForeverProtyle(protyle); } else { - setReadonlyByConfig(protyle); + setReadonlyByConfig(protyle, true); } protyle.contentElement.scrollTop = backStack.scrollTop; }); diff --git a/app/src/protyle/index.ts b/app/src/protyle/index.ts index 014172ad7..e9224ba49 100644 --- a/app/src/protyle/index.ts +++ b/app/src/protyle/index.ts @@ -139,7 +139,7 @@ export class Protyle { break; case "readonly": window.siyuan.config.editor.readOnly = data.data; - setReadonlyByConfig(this.protyle); + setReadonlyByConfig(this.protyle, true); break; case "heading2doc": case "li2doc": diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index 2d79966b2..3c844a327 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -399,7 +399,7 @@ export const updateAttrViewCellAnimation = (cellElement: HTMLElement, value: IAV if (headerValue) { updateHeaderCell(cellElement, headerValue); } else { - cellElement.innerHTML = renderCell(value, cellElement.dataset.wrap === "true"); + cellElement.innerHTML = renderCell(value); } }; diff --git a/app/src/protyle/render/av/cell.ts b/app/src/protyle/render/av/cell.ts index 54348707e..00b531928 100644 --- a/app/src/protyle/render/av/cell.ts +++ b/app/src/protyle/render/av/cell.ts @@ -46,9 +46,13 @@ export const genCellValueByElement = (colType: TAVCol, cellElement: HTMLElement) isNotEmpty: !!value }; } else if (["text", "block", "url", "phone", "email", "template"].includes(colType)) { + const textElement = cellElement.querySelector(".av__celltext") as HTMLElement; cellValue[colType as "text"] = { - content: cellElement.querySelector(".av__celltext").textContent + content: textElement.textContent }; + if (colType === "block" && textElement.dataset.id) { + cellValue.block.id = textElement.dataset.id; + } } else if (colType === "mSelect" || colType === "select") { const mSelect: IAVCellSelectValue[] = []; cellElement.querySelectorAll(".b3-chip").forEach((item: HTMLElement) => { @@ -513,7 +517,7 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va return text; }; -export const renderCell = (cellValue: IAVCellValue, wrap: boolean) => { +export const renderCell = (cellValue: IAVCellValue) => { let text = ""; if (["text", "template"].includes(cellValue.type)) { text = `${cellValue ? (cellValue[cellValue.type as "text"].content || "") : ""}`; @@ -568,7 +572,7 @@ export const renderCell = (cellValue: IAVCellValue, wrap: boolean) => { text += ``; } else if (cellValue.type === "rollup") { cellValue?.rollup?.contents?.forEach((item) => { - const rollupText = ["select", "mSelect", "mAsset", "checkbox", "relation"].includes(item.type) ? renderCell(item, wrap) : renderRollup(item); + const rollupText = ["select", "mSelect", "mAsset", "checkbox", "relation"].includes(item.type) ? renderCell(item) : renderRollup(item); if (rollupText) { text += rollupText + ", "; } @@ -668,3 +672,60 @@ export const getPositionByCellElement = (cellElement: HTMLElement) => { } return {rowIndex, celIndex}; }; + +export const dragFillCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, originData: { + [key: string]: IAVCellValue[] +}, originCellIds: string[]) => { + nodeElement.querySelector(".av__drag-fill")?.remove(); + const newData: { [key: string]: Array } = {}; + nodeElement.querySelectorAll(".av__cell--active").forEach((item: HTMLElement) => { + if (originCellIds.includes(item.dataset.id)) { + return; + } + const rowElement = hasClosestByClassName(item, "av__row"); + if (!rowElement) { + return; + } + if (!newData[rowElement.dataset.id]) { + newData[rowElement.dataset.id] = []; + } + const value: IAVCellValue & { + colId?: string, + element?: HTMLElement + } = genCellValueByElement(getTypeByCellElement(item), item) + value.colId = item.dataset.colId; + value.element = item; + newData[rowElement.dataset.id].push(value); + }) + const doOperations: IOperation[] = []; + const undoOperations: IOperation[] = []; + const avID = nodeElement.dataset.avId + const originKeys = Object.keys(originData); + Object.keys(newData).forEach((rowID, index) => { + newData[rowID].forEach((item, cellIndex) => { + if (["rollup", "template", "created", "updated"].includes(item.type)) { + return; + } + const data = originData[originKeys[index % originKeys.length]][cellIndex] + doOperations.push({ + action: "updateAttrViewCell", + id: item.id, + avID, + keyID: item.colId, + rowID, + data + }); + undoOperations.push({ + action: "updateAttrViewCell", + id: item.id, + avID, + keyID: item.colId, + rowID, + data: item + }); + item.element.innerHTML = renderCell(data); + }) + }); + focusBlock(nodeElement); + transaction(protyle, doOperations, undoOperations); +} diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index 6f6a3cd5e..2c79830ee 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -135,7 +135,7 @@ ${cell.value?.isDetached ? ' data-detached="true"' : ""} style="width: ${data.columns[index].width || "200px"}; ${cell.valueType === "number" ? "text-align: right;" : ""} ${cell.bgColor ? `background-color:${cell.bgColor};` : ""} -${cell.color ? `color:${cell.color};` : ""}">${renderCell(cell.value, data.columns[index].wrap)}`; +${cell.color ? `color:${cell.color};` : ""}">${renderCell(cell.value)}`; if (pinIndex === index) { tableHTML += ""; diff --git a/app/src/protyle/render/av/row.ts b/app/src/protyle/render/av/row.ts index 89ca8f154..3aa126f5c 100644 --- a/app/src/protyle/render/av/row.ts +++ b/app/src/protyle/render/av/row.ts @@ -109,12 +109,12 @@ ${(item.getAttribute("data-block-id") || item.dataset.dtype === "block") ? ' dat response.data.filters.forEach((item: IAVFilter) => { const sideRowCellElement = sideRow.querySelector(`.av__cell[data-col-id="${item.column}"]`) as HTMLElement; currentRow.querySelector(`.av__cell[data-col-id="${item.column}"]`).innerHTML = - renderCell(genCellValueByElement(getTypeByCellElement(sideRowCellElement), sideRowCellElement), sideRowCellElement.dataset.wrap === "true"); + renderCell(genCellValueByElement(getTypeByCellElement(sideRowCellElement), sideRowCellElement)); }); response.data.sorts.forEach((item: IAVSort) => { const sideRowCellElement = sideRow.querySelector(`.av__cell[data-col-id="${item.column}"]`) as HTMLElement; currentRow.querySelector(`.av__cell[data-col-id="${item.column}"]`).innerHTML = - renderCell(genCellValueByElement(getTypeByCellElement(sideRowCellElement), sideRowCellElement), sideRowCellElement.dataset.wrap === "true"); + renderCell(genCellValueByElement(getTypeByCellElement(sideRowCellElement), sideRowCellElement)); }); popTextCell(protyle, [currentRow.querySelector('.av__cell[data-detached="true"]')], "block"); }); diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts index 96d0a2866..8cf74d8b6 100644 --- a/app/src/protyle/wysiwyg/index.ts +++ b/app/src/protyle/wysiwyg/index.ts @@ -82,6 +82,7 @@ import {openViewMenu} from "../render/av/view"; import {avRender} from "../render/av/render"; import {checkFold} from "../../util/noRelyPCFunction"; import { + dragFillCellsValue, genCellValueByElement, getCellText, getPositionByCellElement, @@ -453,7 +454,7 @@ export class WYSIWYG { } const originData: { [key: string]: IAVCellValue[] } = {} let lastOriginCellElement - const lastOriginCellId: string[] = [] + const originCellIds: string[] = [] nodeElement.querySelectorAll(".av__cell--active").forEach((item: HTMLElement, index: number) => { const rowElement = hasClosestByClassName(item, "av__row"); if (rowElement) { @@ -462,7 +463,7 @@ export class WYSIWYG { } originData[rowElement.dataset.id].push(genCellValueByElement(getTypeByCellElement(item), item)); lastOriginCellElement = item - lastOriginCellId.push(item.dataset.id) + originCellIds.push(item.dataset.id) } }); const dragFillCellIndex = getPositionByCellElement(lastOriginCellElement); @@ -478,7 +479,7 @@ export class WYSIWYG { if (moveCellElement && moveCellElement.dataset.id) { const newIndex = getPositionByCellElement(moveCellElement); nodeElement.querySelectorAll(".av__cell--active").forEach((item: HTMLElement) => { - if (!lastOriginCellId.includes(item.dataset.id)) { + if (!originCellIds.includes(item.dataset.id)) { item.classList.remove("av__cell--active"); } }); @@ -506,14 +507,12 @@ export class WYSIWYG { documentSelf.onselectstart = null; documentSelf.onselect = null; if (lastCellElement) { - nodeElement.querySelector(".av__drag-fill")?.remove(); - selectRow(nodeElement.querySelector(".av__firstcol"), "unselectAll"); - focusBlock(nodeElement); + dragFillCellsValue(protyle, nodeElement, originData, originCellIds); lastCellElement.insertAdjacentHTML("beforeend", `
`); - this.preventClick = true; } return false; }; + this.preventClick = true; return false; } // av cell select