Make nav bar accept ex-nav-item children

master
Garrett Mills 3 years ago
parent b64fb999e7
commit a238136d94

@ -51,18 +51,26 @@ export class NavBarComponent extends ExComponent {
color: var(--color-accent-text); color: var(--color-accent-text);
} }
span.appName { span {
font-size: 1.2em; font-size: 1.2em;
font-weight: bold; font-weight: bold;
padding: 14px; padding: 14px;
padding-right: 30px; padding-right: 30px;
padding-left: 0; padding-left: 0;
} }
.items-container {
display: none;
}
</style> </style>
<nav> <nav>
<slot name="branding"></slot>
<span class="appName"></span> <span class="appName"></span>
<ul></ul> <ul></ul>
</nav> </nav>
<div class="items-container">
<slot></slot>
</div>
` `
@Renders() @Renders()
@ -84,7 +92,7 @@ export class NavBarComponent extends ExComponent {
this.appNameEl.innerText = this.appName || '' this.appNameEl.innerText = this.appName || ''
this.list.childNodes.forEach(x => x.remove()) this.list.childNodes.forEach(x => x.remove())
for ( const item of this.items ) { for ( const item of this.getItems() ) {
const li = document.createElement('li') const li = document.createElement('li')
const a = document.createElement('a') const a = document.createElement('a')
li.appendChild(a) li.appendChild(a)
@ -101,6 +109,32 @@ export class NavBarComponent extends ExComponent {
} }
} }
getItems(): NavBarItem[] {
const itemEls = this.querySelectorAll('ex-nav-item').values()
const items = []
for ( const itemEl of itemEls ) {
const title = itemEl.getAttribute('title')
const name = itemEl.getAttribute('name')
if ( title && name ) {
const item: NavBarItem = {
title,
name,
right: itemEl.hasAttribute('right'),
}
const href = itemEl.getAttribute('href')
if ( href ) {
item.href = href
}
items.push(item)
}
}
return items
}
dispatchItemClick(name: string) { dispatchItemClick(name: string) {
return this.dispatchCustom('onItemClick', { name }) return this.dispatchCustom('onItemClick', { name })
} }

Loading…
Cancel
Save