diff --git a/app/src/assets/scss/protyle/_wysiwyg.scss b/app/src/assets/scss/protyle/_wysiwyg.scss
index 806aabd56..4302e4ebe 100644
--- a/app/src/assets/scss/protyle/_wysiwyg.scss
+++ b/app/src/assets/scss/protyle/_wysiwyg.scss
@@ -33,8 +33,33 @@
}
&.av {
- .av__scroll {
- overflow: auto hidden;
+ .av {
+ &__scroll {
+ overflow: auto hidden;
+ cursor: pointer;
+ }
+
+ &__row {
+ display: flex;
+ border-bottom: 1px solid var(--b3-theme-surface-lighter);
+ }
+
+ &__cell {
+ padding: 5px;
+ flex-shrink: 0;
+ border-right: 1px solid var(--b3-theme-surface-lighter)
+ }
+
+ &__firstcol {
+ input {
+ margin: 11px 5px;
+ opacity: 0;
+ }
+
+ &:hover input {
+ opacity: 1;
+ }
+ }
}
}
diff --git a/app/src/protyle/render/av/index.ts b/app/src/protyle/render/av/index.ts
index 1b7484cdf..af975667b 100644
--- a/app/src/protyle/render/av/index.ts
+++ b/app/src/protyle/render/av/index.ts
@@ -53,17 +53,23 @@ export const avRender = (element: Element) => {
}]
}]
};
- let tableHTML = "
";
+ let tableHTML = '";
+ tableHTML += `
+
`;
data.rows.forEach((row) => {
- tableHTML += "";
+ tableHTML += '
';
row.cells.forEach((cell, index) => {
- tableHTML += `
${cell.value}
`
+ tableHTML += `
${cell.value}
`
});
- tableHTML += "
";
+ tableHTML += `
`;
});
const paddingLeft = e.parentElement.style.paddingLeft;
const paddingRight = e.parentElement.style.paddingRight;
@@ -82,7 +88,11 @@ export const avRender = (element: Element) => {
`;
diff --git a/app/src/protyle/scroll/event.ts b/app/src/protyle/scroll/event.ts
index 4fb3e5cfb..a42fbf923 100644
--- a/app/src/protyle/scroll/event.ts
+++ b/app/src/protyle/scroll/event.ts
@@ -24,6 +24,18 @@ export const scrollEvent = (protyle: IProtyle, element: HTMLElement) => {
}
}
+ protyle.wysiwyg.element.querySelectorAll(".av").forEach((item: HTMLElement) => {
+ if (item.parentElement.classList.contains("protyle-wysiwyg")) {
+ const headerTop = item.offsetTop - 30 + 56
+ const headerElement = item.querySelector(".av__row--header") as HTMLElement
+ if (headerTop < element.scrollTop && headerTop + headerElement.parentElement.clientHeight > element.scrollTop) {
+ headerElement.style.transform = `translateY(${element.scrollTop - headerTop}px)`;
+ } else {
+ headerElement.style.transform = "";
+ }
+ }
+ });
+
if (!protyle.element.classList.contains("block__edit") && !isMobile()) {
protyle.contentElement.setAttribute("data-scrolltop", element.scrollTop.toString());
}