Skip to content
Snippets Groups Projects
Commit 2e3b3425 authored by druid's avatar druid
Browse files

shadow should not stay on page when the desktop menu panel is closed

parent 9d07c598
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,7 @@ export class HyDesktopMenuLinks { ...@@ -37,6 +37,7 @@ export class HyDesktopMenuLinks {
@State() menuLinkItems: Array<object> = []; @State() menuLinkItems: Array<object> = [];
@State() hasToolbar: boolean = false; @State() hasToolbar: boolean = false;
@State() isDesktopMenuOpen: boolean = false; @State() isDesktopMenuOpen: boolean = false;
@State() currenOpenMenuId: number = 0;
private _submenuLeftMargin: number = 32; private _submenuLeftMargin: number = 32;
private _headerBorderOffset: number = 0; private _headerBorderOffset: number = 0;
...@@ -51,11 +52,6 @@ export class HyDesktopMenuLinks { ...@@ -51,11 +52,6 @@ export class HyDesktopMenuLinks {
} }
showBackdropShadow(state = 'close', top = 0) { showBackdropShadow(state = 'close', top = 0) {
if (state === 'open') {
}
if (top == 0) {
}
/*
let hyHeader = this.el.closest('.hy-site-header') as HTMLElement; let hyHeader = this.el.closest('.hy-site-header') as HTMLElement;
let hyBackdropDiv = hyHeader.children[0] as HTMLElement; let hyBackdropDiv = hyHeader.children[0] as HTMLElement;
...@@ -63,42 +59,15 @@ export class HyDesktopMenuLinks { ...@@ -63,42 +59,15 @@ export class HyDesktopMenuLinks {
if (state === 'open') { if (state === 'open') {
hyBackdropDiv.classList.add('is-active'); hyBackdropDiv.classList.add('is-active');
hyBackdropDiv.style.top = `${top}px`; hyBackdropDiv.style.top = `${top}px`;
} } else {
if (state === 'close') {
hyBackdropDiv.classList.remove('is-active');
hyBackdropDiv.style.top = '0'; hyBackdropDiv.style.top = '0';
hyBackdropDiv.classList.remove('is-active');
} }
} }
*/
}
handleDesktopMenuClose() {
/*
this.isDesktopMenuOpen = false;
this.showBackdropShadow();
const menuItems = this.el.shadowRoot.querySelectorAll(`.desktop-menu-link`);
const menuPanelItems = this.el.shadowRoot.querySelectorAll('.hy-desktop-menu-panel');
const activeMenuItem = this.el.shadowRoot.querySelector(`.desktop-menu-link[aria-expanded="true"]`) as HTMLElement;
// Return focus to the button of the last desktop panel that was active.
if (activeMenuItem !== null) activeMenuItem.focus();
// Reset elements by removing the active classes.
menuItems.forEach((item) => {
item.classList.remove('desktop-menu-link--is-active');
item.setAttribute('aria-expanded', 'false');
});
menuPanelItems.forEach((item) => {
item.classList.remove('hy-desktop-menu-panel--is-active');
item.setAttribute('aria-hidden', 'true');
});
*/
} }
handleDesktopMenuToggle(id) { showPanel(id) {
this.isDesktopMenuOpen = true; console.log('show panel');
const menuItems = this.el.shadowRoot.querySelectorAll(`.desktop-menu-link`); const menuItems = this.el.shadowRoot.querySelectorAll(`.desktop-menu-link`);
const menuPanelItems = this.el.shadowRoot.querySelectorAll('.hy-desktop-menu-panel'); // all panels const menuPanelItems = this.el.shadowRoot.querySelectorAll('.hy-desktop-menu-panel'); // all panels
const activeMenuItem = this.el.shadowRoot.querySelector(`.desktop-menu-link[link-id="${id}"]`) as HTMLElement; const activeMenuItem = this.el.shadowRoot.querySelector(`.desktop-menu-link[link-id="${id}"]`) as HTMLElement;
...@@ -138,8 +107,6 @@ export class HyDesktopMenuLinks { ...@@ -138,8 +107,6 @@ export class HyDesktopMenuLinks {
const menuPanelLeftPosition = activeButtonRect.left - this._submenuLeftMargin; const menuPanelLeftPosition = activeButtonRect.left - this._submenuLeftMargin;
activeMenuItemSibling.style.paddingLeft = `${menuPanelLeftPosition}px`; activeMenuItemSibling.style.paddingLeft = `${menuPanelLeftPosition}px`;
// @todo Position underline block under the activated top menu item.
// Position shortcuts block. // Position shortcuts block.
let shortcutsDiv = activeMenuItemSibling.querySelectorAll('ul.shortcuts-panel')[0] as HTMLElement; // shortcuts block let shortcutsDiv = activeMenuItemSibling.querySelectorAll('ul.shortcuts-panel')[0] as HTMLElement; // shortcuts block
if (shortcutsDiv) { if (shortcutsDiv) {
...@@ -160,41 +127,71 @@ export class HyDesktopMenuLinks { ...@@ -160,41 +127,71 @@ export class HyDesktopMenuLinks {
} }
} }
handleDesktopMenuClick(id) { clearPanelItemsStatus() {
console.log(id); const menuItems = this.el.shadowRoot.querySelectorAll(`.desktop-menu-link`);
/* const menuPanelItems = this.el.shadowRoot.querySelectorAll('.hy-desktop-menu-panel');
const activeMenuItem = this.el.shadowRoot.querySelector(`.desktop-menu-link[link-id="${id}"]`); const activeMenuItem = this.el.shadowRoot.querySelector(`.desktop-menu-link[aria-expanded="true"]`) as HTMLElement;
const activeMenuItemSibling = activeMenuItem.nextElementSibling as HTMLElement; // current panel
if (!this.isDesktopMenuOpen) { // Return focus to the button of the last desktop panel that was active.
// Add active classes to the currently active item and its sibling element. if (activeMenuItem !== null) activeMenuItem.focus();
this.isDesktopMenuOpen = true;
activeMenuItem.classList.add('desktop-menu-link--is-active');
activeMenuItem.setAttribute('aria-expanded', 'true');
activeMenuItemSibling.classList.add('hy-desktop-menu-panel--is-active');
if (this.hasToolbar) {
activeMenuItemSibling.classList.add('hy-desktop-menu-panel--is-active--has-toolbar');
}
activeMenuItemSibling.setAttribute('aria-hidden', 'false');
let rect = activeMenuItemSibling.getBoundingClientRect(); // Reset elements by removing the active classes.
this.showBackdropShadow('open', rect.bottom); menuItems.forEach((item) => {
} else { item.classList.remove('desktop-menu-link--is-active');
// Remove active classes to the currently active item and its sibling element. item.setAttribute('aria-expanded', 'false');
this.isDesktopMenuOpen = false; });
activeMenuItem.classList.remove('desktop-menu-link--is-active'); menuPanelItems.forEach((item) => {
activeMenuItem.setAttribute('aria-expanded', 'false'); item.classList.remove('hy-desktop-menu-panel--is-active');
activeMenuItemSibling.classList.remove('hy-desktop-menu-panel--is-active'); item.setAttribute('aria-hidden', 'true');
if (this.hasToolbar) { });
activeMenuItemSibling.classList.remove('hy-desktop-menu-panel--is-active--has-toolbar'); }
}
activeMenuItemSibling.setAttribute('aria-hidden', 'true'); handleDesktopMenuClose(event) {
console.log(event.type);
this.showBackdropShadow(); this.isDesktopMenuOpen = false;
this.currenOpenMenuId = 0;
this.showBackdropShadow();
this.clearPanelItemsStatus();
event.stopPropagation();
}
handleDesktopMenuToggle(event, id) {
console.log(event.type);
this.isDesktopMenuOpen = true;
if (this.currenOpenMenuId != id) {
this.currenOpenMenuId = id;
this.showPanel(id);
} }
*/
event.stopPropagation();
}
handleDesktopMenuFocus(event, id) {
console.log(event.type);
if (this.isDesktopMenuOpen && this.currenOpenMenuId != id) {
this.currenOpenMenuId = id;
this.showPanel(id);
}
event.stopPropagation();
}
handleDesktopMenuClick(event, id) {
console.log(event.type);
this.isDesktopMenuOpen = !this.isDesktopMenuOpen;
if (!this.isDesktopMenuOpen) {
this.handleDesktopMenuClose(event);
} else {
this.currenOpenMenuId = id;
this.showPanel(id);
}
event.stopPropagation();
} }
componentDidLoad() { componentDidLoad() {
...@@ -236,15 +233,19 @@ export class HyDesktopMenuLinks { ...@@ -236,15 +233,19 @@ export class HyDesktopMenuLinks {
type="button" type="button"
class={classAttributes} class={classAttributes}
link-id={id} link-id={id}
onClick={() => this.handleDesktopMenuClick(id)} onClick={(e) => this.handleDesktopMenuClick(e, id)}
onMouseOver={() => this.handleDesktopMenuToggle(id)} onMouseOver={(e) => this.handleDesktopMenuToggle(e, id)}
onFocus={() => this.handleDesktopMenuToggle(id)} onFocus={(e) => this.handleDesktopMenuFocus(e, id)}
aria-expanded="false" aria-expanded="false"
> >
<span class={classAttributesLabel}>{label}</span> <span class={classAttributesLabel}>{label}</span>
<hy-icon icon={'hy-icon-caret-down'} size={32} /> <hy-icon icon={'hy-icon-caret-down'} size={32} />
</button> </button>
<div class="hy-desktop-menu-panel" onMouseLeave={() => this.handleDesktopMenuClose()} aria-hidden="true"> <div
class="hy-desktop-menu-panel"
onMouseLeave={(e) => this.handleDesktopMenuClose(e)}
aria-hidden="true"
>
<div class="hy-desktop-menu-panel__desktop-menu"> <div class="hy-desktop-menu-panel__desktop-menu">
<div class="hy-desktop-menu-panel__desktop-menu__menu-items"> <div class="hy-desktop-menu-panel__desktop-menu__menu-items">
<a <a
...@@ -306,7 +307,7 @@ export class HyDesktopMenuLinks { ...@@ -306,7 +307,7 @@ export class HyDesktopMenuLinks {
)} )}
</div> </div>
<button <button
onClick={() => this.handleDesktopMenuClose()} onClick={(e) => this.handleDesktopMenuClose(e)}
class={{ class={{
'hy-desktop-menu-panel__panel-toggle': true, 'hy-desktop-menu-panel__panel-toggle': true,
}} }}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment