Displaying of table scrolling optimized
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# AssetManager 0.5.5.90
|
# AssetManager 0.5.5.91
|
||||||
|
|
||||||
AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. It provides asset inventory, software inventory, remote job execution, reporting, privacy/retention documentation, and optional integration with MeshCentral.
|
AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. It provides asset inventory, software inventory, remote job execution, reporting, privacy/retention documentation, and optional integration with MeshCentral.
|
||||||
|
|
||||||
|
|||||||
@@ -765,6 +765,8 @@ body.asset-list-scroll-page #asset-table-scroll{
|
|||||||
overflow-x:auto;
|
overflow-x:auto;
|
||||||
overflow-y:auto;
|
overflow-y:auto;
|
||||||
overscroll-behavior:contain;
|
overscroll-behavior:contain;
|
||||||
|
/* v0.5.5.91: reduce repaint pressure during horizontal and vertical scroll. */
|
||||||
|
will-change:scroll-position;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The older containment rule prevents reliable scroll sizing in this layout. */
|
/* The older containment rule prevents reliable scroll sizing in this layout. */
|
||||||
@@ -3252,6 +3254,8 @@ html[data-theme="dark"] .advanced-filter-popup select,html[data-theme="dark"] .a
|
|||||||
min-height:0;
|
min-height:0;
|
||||||
overflow:auto;
|
overflow:auto;
|
||||||
overscroll-behavior:contain;
|
overscroll-behavior:contain;
|
||||||
|
/* v0.5.5.91: keep scrolling on the compositor path where possible. */
|
||||||
|
will-change:scroll-position;
|
||||||
border:1px solid var(--am-border,#d8dde2);
|
border:1px solid var(--am-border,#d8dde2);
|
||||||
border-radius:6px;
|
border-radius:6px;
|
||||||
background:var(--am-surface,#fff);
|
background:var(--am-surface,#fff);
|
||||||
|
|||||||
@@ -134,20 +134,39 @@
|
|||||||
applyHidden();
|
applyHidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
let syncing = false;
|
// Keep the optional top scrollbar synchronized without forcing a second
|
||||||
scroll?.addEventListener('scroll', () => {
|
// scroll-position write for every native scroll event. Fast horizontal
|
||||||
if (syncing || !topScroll) return;
|
// scrolling can emit several events within one paint cycle; coalescing
|
||||||
syncing = true;
|
// them into one animation frame reduces Chromium repaint/compositor work.
|
||||||
topScroll.scrollLeft = scroll.scrollLeft;
|
let scrollSyncFrame = 0;
|
||||||
syncing = false;
|
let scrollSyncSource = null;
|
||||||
}, { passive: true });
|
|
||||||
|
|
||||||
topScroll?.addEventListener('scroll', () => {
|
function scheduleScrollSync(source) {
|
||||||
if (syncing || !scroll) return;
|
scrollSyncSource = source;
|
||||||
syncing = true;
|
if (scrollSyncFrame) return;
|
||||||
scroll.scrollLeft = topScroll.scrollLeft;
|
|
||||||
syncing = false;
|
scrollSyncFrame = requestAnimationFrame(() => {
|
||||||
}, { passive: true });
|
scrollSyncFrame = 0;
|
||||||
|
const sourceElement = scrollSyncSource;
|
||||||
|
scrollSyncSource = null;
|
||||||
|
|
||||||
|
if (sourceElement === scroll && topScroll) {
|
||||||
|
if (topScroll.scrollLeft !== scroll.scrollLeft) {
|
||||||
|
topScroll.scrollLeft = scroll.scrollLeft;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sourceElement === topScroll && scroll) {
|
||||||
|
if (scroll.scrollLeft !== topScroll.scrollLeft) {
|
||||||
|
scroll.scrollLeft = topScroll.scrollLeft;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
scroll?.addEventListener('scroll', () => scheduleScrollSync(scroll), { passive: true });
|
||||||
|
topScroll?.addEventListener('scroll', () => scheduleScrollSync(topScroll), { passive: true });
|
||||||
|
|
||||||
headers().forEach(th => {
|
headers().forEach(th => {
|
||||||
th.addEventListener('contextmenu', event => {
|
th.addEventListener('contextmenu', event => {
|
||||||
|
|||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
APP_VERSION = "0.5.5.90"
|
APP_VERSION = "0.5.5.91"
|
||||||
__version__ = APP_VERSION
|
__version__ = APP_VERSION
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
- [0.5.5.91](UPDATE-0.5.5.91.md) - smoother table scrolling and consolidated current development changes.
|
||||||
- [0.5.5.90](UPDATE-0.5.5.90.md) - modular analyzer profiles, community repository foundation and portable package import/export.
|
- [0.5.5.90](UPDATE-0.5.5.90.md) - modular analyzer profiles, community repository foundation and portable package import/export.
|
||||||
- [0.5.5.89](UPDATE-0.5.5.89.md) - recursively analyze supported SFX payloads and package selected embedded installers.
|
- [0.5.5.89](UPDATE-0.5.5.89.md) - recursively analyze supported SFX payloads and package selected embedded installers.
|
||||||
- [0.5.5.88](UPDATE-0.5.5.88.md) - keep title/filter rows sticky while preserving unified column resizing.
|
- [0.5.5.88](UPDATE-0.5.5.88.md) - keep title/filter rows sticky while preserving unified column resizing.
|
||||||
@@ -26,7 +27,7 @@
|
|||||||
|
|
||||||
Release notes are stored outside the project root to keep the repository overview compact.
|
Release notes are stored outside the project root to keep the repository overview compact.
|
||||||
|
|
||||||
The current release is **0.5.5.90**.
|
The current release is **0.5.5.91**.
|
||||||
|
|
||||||
Older notes are concise English summaries migrated from the original release documents. Git history remains authoritative for exact implementation details.
|
Older notes are concise English summaries migrated from the original release documents. Git history remains authoritative for exact implementation details.
|
||||||
|
|
||||||
|
|||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
# Update 0.5.5.91
|
||||||
|
|
||||||
|
Version 0.5.5.91 closes the current development cycle after the 0.5.5.90 analyzer/profile, package exchange, file-picker and runtime changes.
|
||||||
|
|
||||||
|
## Table scrolling
|
||||||
|
|
||||||
|
- Optimized synchronization between the Asset list top and bottom horizontal scrollbars.
|
||||||
|
- Multiple native scroll events in one browser paint cycle are now coalesced with `requestAnimationFrame`.
|
||||||
|
- Avoids redundant `scrollLeft` writes when both scrollbars are already synchronized.
|
||||||
|
- Added a compositor scrolling hint to interactive data-table scroll containers.
|
||||||
|
- No changes to column widths, column ordering, filters, sticky headers or resize behavior.
|
||||||
|
|
||||||
|
## Release
|
||||||
|
|
||||||
|
- Application version updated to 0.5.5.91.
|
||||||
Reference in New Issue
Block a user