Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
d26d99dbff | |||
c1d8e347de |
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,7 +3,6 @@
|
|||||||
# artifacts
|
# artifacts
|
||||||
coverage/
|
coverage/
|
||||||
public/
|
public/
|
||||||
pages/
|
|
||||||
|
|
||||||
# installs
|
# installs
|
||||||
node_modules/
|
node_modules/
|
||||||
|
@ -1,5 +1,12 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-06-26 - 1.0.101 - fix(wcc-dashboard)
|
||||||
|
Improve scroll listener management and add new test pages
|
||||||
|
|
||||||
|
- Removed the pages/ directory entry from .gitignore to allow test pages to be tracked
|
||||||
|
- Added new test pages: page1 and pageLongScroll for enhanced scroll and navigation testing
|
||||||
|
- Refactored wcc-dashboard: changed scroll position properties to private variables and added a flag to prevent duplicate scroll listener attachment
|
||||||
|
|
||||||
## 2025-06-26 - 1.0.100 - fix(wcc-dashboard)
|
## 2025-06-26 - 1.0.100 - fix(wcc-dashboard)
|
||||||
Prevent duplicate application of scroll positions in dashboard to avoid interfering with user scrolling
|
Prevent duplicate application of scroll positions in dashboard to avoid interfering with user scrolling
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@design.estate/dees-wcctools",
|
"name": "@design.estate/dees-wcctools",
|
||||||
"version": "1.0.100",
|
"version": "1.0.101",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.",
|
"description": "A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
2
test/pages/index.ts
Normal file
2
test/pages/index.ts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from './page1.js';
|
||||||
|
export * from './pageLongScroll.js';
|
3
test/pages/page1.ts
Normal file
3
test/pages/page1.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { html } from '@design.estate/dees-element';
|
||||||
|
|
||||||
|
export const page1 = () => html` <test-demoelement></test-demoelement> `;
|
138
test/pages/pageLongScroll.ts
Normal file
138
test/pages/pageLongScroll.ts
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
import { html } from '@design.estate/dees-element';
|
||||||
|
|
||||||
|
export const pageLongScroll = () => html`
|
||||||
|
<style>
|
||||||
|
.long-scroll-container {
|
||||||
|
padding: 40px;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-bottom: 60px;
|
||||||
|
padding: 20px;
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5em;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1.8em;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #ccc;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.placeholder-content {
|
||||||
|
height: 300px;
|
||||||
|
background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.05) 100%);
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #888;
|
||||||
|
font-size: 1.2em;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="long-scroll-container">
|
||||||
|
<h1>Long Scroll Test Page</h1>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 1: Introduction</h2>
|
||||||
|
<p>This is a long page designed to test scroll position preservation. Scroll down to see more content and then reload the page to verify that the scroll position is restored correctly.</p>
|
||||||
|
<p>The URL should update with scroll position parameters as you scroll, and when you reload the page, it should automatically scroll to the last position.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 1</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 2: Testing Scroll Behavior</h2>
|
||||||
|
<p>As you scroll through this page, the dashboard should track your scroll position and update the URL accordingly. The updates should be debounced to avoid excessive URL changes.</p>
|
||||||
|
<p>Try scrolling quickly and slowly to see how the debouncing works. The URL should update smoothly without interfering with your scrolling experience.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 2</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 3: Reload Testing</h2>
|
||||||
|
<p>Once you've scrolled to this section, try reloading the page. The page should automatically scroll back to this position after the content loads.</p>
|
||||||
|
<p>This demonstrates that the scroll position is being preserved across page reloads using URL parameters.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 3</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 4: Navigation Testing</h2>
|
||||||
|
<p>Try navigating to a different element or page in the sidebar, then use the browser's back button to return here. The scroll position should be preserved.</p>
|
||||||
|
<p>This tests that the browser history correctly maintains scroll state for each navigation entry.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 4</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 5: Deep Scroll Testing</h2>
|
||||||
|
<p>Keep scrolling! This page has plenty of content to ensure we can test scroll positions at various depths.</p>
|
||||||
|
<p>The scroll tracking should work reliably regardless of how far down the page you scroll.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 5</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 6: Performance Testing</h2>
|
||||||
|
<p>Even with continuous scroll tracking, the page should remain responsive and smooth. The debouncing mechanism ensures that URL updates don't impact scrolling performance.</p>
|
||||||
|
<p>Try scrolling rapidly up and down to verify that the scrolling remains smooth.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 6</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 7: Sidebar Scroll Testing</h2>
|
||||||
|
<p>Don't forget to test the sidebar scrolling as well! If the sidebar has enough items to scroll, its position should also be tracked and restored.</p>
|
||||||
|
<p>Both the main content and sidebar scroll positions should be preserved independently.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 7</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 8: Edge Cases</h2>
|
||||||
|
<p>This section tests edge cases like scrolling to the very bottom of the page, then reloading.</p>
|
||||||
|
<p>The scroll restoration should handle these cases gracefully without any visual glitches or errors.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="placeholder-content">
|
||||||
|
<span>Placeholder Content Block 8</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<h2>Section 9: Final Section</h2>
|
||||||
|
<p>You've reached the end of the scroll test page! Try reloading from here to ensure that even the bottom-most scroll positions are correctly preserved.</p>
|
||||||
|
<p>The scroll position tracking has been successfully implemented if you can reload and return to this exact position.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@design.estate/dees-wcctools',
|
name: '@design.estate/dees-wcctools',
|
||||||
version: '1.0.100',
|
version: '1.0.101',
|
||||||
description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.'
|
description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.'
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,8 @@ export class WccDashboard extends DeesElement {
|
|||||||
@property()
|
@property()
|
||||||
public warning: string = null;
|
public warning: string = null;
|
||||||
|
|
||||||
@property()
|
private frameScrollY: number = 0;
|
||||||
public frameScrollY: number = 0;
|
private sidebarScrollY: number = 0;
|
||||||
|
|
||||||
@property()
|
|
||||||
public sidebarScrollY: number = 0;
|
|
||||||
|
|
||||||
private scrollPositionsApplied: boolean = false;
|
private scrollPositionsApplied: boolean = false;
|
||||||
|
|
||||||
@queryAsync('wcc-frame')
|
@queryAsync('wcc-frame')
|
||||||
@ -222,8 +218,14 @@ export class WccDashboard extends DeesElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private scrollUpdateTimeout: NodeJS.Timeout;
|
private scrollUpdateTimeout: NodeJS.Timeout;
|
||||||
|
private scrollListenersAttached: boolean = false;
|
||||||
|
|
||||||
public async setupScrollListeners() {
|
public async setupScrollListeners() {
|
||||||
|
// Prevent duplicate listeners
|
||||||
|
if (this.scrollListenersAttached) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const wccFrame = await this.wccFrame;
|
const wccFrame = await this.wccFrame;
|
||||||
const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
|
const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar');
|
||||||
|
|
||||||
@ -233,6 +235,7 @@ export class WccDashboard extends DeesElement {
|
|||||||
this.frameScrollY = wccFrame.scrollTop;
|
this.frameScrollY = wccFrame.scrollTop;
|
||||||
this.debouncedScrollUpdate();
|
this.debouncedScrollUpdate();
|
||||||
});
|
});
|
||||||
|
this.scrollListenersAttached = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wccSidebar) {
|
if (wccSidebar) {
|
||||||
|
1
ts_web/pages/index.ts
Normal file
1
ts_web/pages/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const page1 = null;
|
Reference in New Issue
Block a user