diff --git a/app/src/assets/scss/business/_av.scss b/app/src/assets/scss/business/_av.scss index e439bde22..e2c1ebe37 100644 --- a/app/src/assets/scss/business/_av.scss +++ b/app/src/assets/scss/business/_av.scss @@ -205,27 +205,35 @@ } } - &--add { - color: var(--b3-theme-on-surface); - transition: background 20ms ease-in 0s; - font-size: 87.5%; - align-items: center; + &--util { display: flex; - .av__colsticky { - align-items: center; + .b3-button { + margin: 3px 0 3px 24px; + color: var(--b3-theme-on-surface); + background-color: transparent; + font-size: 75%; - svg { - height: 14px; - width: 14px; - color: var(--b3-theme-on-surface); - padding: 10px 10px 10px 5px; - flex-shrink: 0; + &:hover, + &:focus { + background-color: var(--b3-av-hover); + box-shadow: none; } } - &:hover { - background-color: var(--b3-av-hover); + svg { + width: 12px; + height: 20px; + + &[data-type="set-page-size"] { + margin: 0 0 0 4px; + border-radius: var(--b3-border-radius); + padding: 0 4px; + + &:hover { + background-color: var(--b3-theme-background); + } + } } } } diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index d8b72bfb5..717e3584f 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -5,7 +5,7 @@ import {openEditorTab} from "../../../menus/util"; import {copySubMenu} from "../../../menus/commonMenuItem"; import {getTypeByCellElement, popTextCell} from "./cell"; import {getColIconByType, showColMenu} from "./col"; -import {insertAttrViewBlockAnimation, stickyRow, updateHeader} from "./row"; +import {insertAttrViewBlockAnimation, setPageSize, stickyRow, updateHeader} from "./row"; import {emitOpenMenu} from "../../../plugin/EventBus"; import {addCol} from "./col"; import {openMenuPanel} from "./openMenuPanel"; @@ -104,7 +104,7 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle event.preventDefault(); event.stopPropagation(); return true; - } else if (type === "av-sort") { + } else if (type === "av-sort") { openMenuPanel({protyle, blockElement, type: "sorts"}); event.preventDefault(); event.stopPropagation(); @@ -127,6 +127,30 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle event.preventDefault(); event.stopPropagation(); return true; + } else if (type === "set-page-size") { + setPageSize(target); + event.preventDefault(); + event.stopPropagation(); + return true; + } else if (type === "av-add-bottom") { + const avID = blockElement.getAttribute("data-av-id"); + const srcIDs = [Lute.NewNodeID()]; + const previousID = blockElement.querySelector(".av__row--util").previousElementSibling.getAttribute("data-id") || ""; + transaction(protyle, [{ + action: "insertAttrViewBlock", + avID, + previousID, + srcIDs, + isDetached: true, + }], [{ + action: "removeAttrViewBlock", + srcIDs, + avID, + }]); + insertAttrViewBlockAnimation(blockElement, 1, previousID, avID); + event.preventDefault(); + event.stopPropagation(); + return true; } else if (target.classList.contains("av__gutter")) { const rowElement = hasClosestByClassName(target, "av__row"); if (!rowElement) { @@ -233,25 +257,6 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle event.preventDefault(); event.stopPropagation(); return true; - } else if (target.classList.contains("av__row--add")) { - const avID = blockElement.getAttribute("data-av-id"); - const srcIDs = [Lute.NewNodeID()]; - const previousID = target.previousElementSibling.getAttribute("data-id") || ""; - transaction(protyle, [{ - action: "insertAttrViewBlock", - avID, - previousID, - srcIDs, - isDetached: true, - }], [{ - action: "removeAttrViewBlock", - srcIDs, - avID, - }]); - insertAttrViewBlockAnimation(blockElement, 1, previousID, avID); - event.preventDefault(); - event.stopPropagation(); - return true; } else if (target.classList.contains("item") && target.parentElement.classList.contains("layout-tab-bar")) { if (target.classList.contains("item--focus")) { openViewMenu({protyle, blockElement, element: target}); diff --git a/app/src/protyle/render/av/keydown.ts b/app/src/protyle/render/av/keydown.ts index ef32eefaa..5742ae918 100644 --- a/app/src/protyle/render/av/keydown.ts +++ b/app/src/protyle/render/av/keydown.ts @@ -149,7 +149,7 @@ export const avKeydown = (event: KeyboardEvent, nodeElement: HTMLElement, protyl if (event.key === "ArrowDown") { const nextRowElement = selectRowElements[selectRowElements.length - 1].nextElementSibling; selectRow(selectRowElements[0].querySelector(".av__firstcol"), "unselectAll"); - if (nextRowElement && !nextRowElement.classList.contains("av__row--add")) { + if (nextRowElement && !nextRowElement.classList.contains("av__row--util")) { selectRow(nextRowElement.querySelector(".av__firstcol"), "select"); cellScrollIntoView(nodeElement, nextRowElement); } else { diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index 52ec9ef3f..457a8b4c3 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -127,7 +127,7 @@ style="width: ${column.width || "200px"}">${getCalcValue(column) || ' -1) { tableHTML += '
'; } else { - tableHTML += "
"; + tableHTML += '
'; } row.cells.forEach((cell, index) => { @@ -252,14 +252,20 @@ ${cell.color ? `color:${cell.color};` : ""}">${text}
`;
${tableHTML} -
+
- - ${window.siyuan.languages.addAttr} - - - ${window.siyuan.languages.nextLabel} - + + +
diff --git a/app/src/protyle/render/av/row.ts b/app/src/protyle/render/av/row.ts index 32652b0c5..fcbf58176 100644 --- a/app/src/protyle/render/av/row.ts +++ b/app/src/protyle/render/av/row.ts @@ -73,7 +73,7 @@ export const insertAttrViewBlockAnimation = (blockElement: Element, size: number let colHTML = '
'; const pinIndex = previousElement.querySelectorAll(".av__colsticky .av__cell").length - 1; if (pinIndex > -1) { - colHTML = "
"; + colHTML = '
'; } previousElement.querySelectorAll(".av__cell").forEach((item: HTMLElement, index) => { colHTML += `
`; @@ -132,7 +132,7 @@ export const setPageSize = (target: HTMLElement) => { if (menu.isOpen) { return; } - const currentPageSIze = target.querySelector(".b3-menu__accelerator").textContent + const currentPageSIze = target.dataset.size; menu.addItem({ iconHTML: "", label: "10", diff --git a/app/src/protyle/render/av/view.ts b/app/src/protyle/render/av/view.ts index 08306443a..0f225e712 100644 --- a/app/src/protyle/render/av/view.ts +++ b/app/src/protyle/render/av/view.ts @@ -132,7 +132,7 @@ export const getViewHTML = (data: IAVTable) => { ${data.sorts.length} -