static: add navbar items to sidebar

This commit is contained in:
Jens Langhammer 2020-11-22 13:13:45 +01:00
parent 30bf4f5747
commit 372e51ee07
7 changed files with 132 additions and 53 deletions
passbook/static/static

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -7,6 +7,13 @@
font-display: swap;
}
html {
--pf-c-nav__link--PaddingTop: 0.5rem;
--pf-c-nav__link--PaddingRight: 0.5rem;
--pf-c-nav__link--PaddingBottom: 0.5rem;
--pf-c-nav__link--PaddingLeft: 0.5rem;
}
.pb-brand {
font-family: "DIN 1451 Std";
font-size: 4em;

View file

@ -1,4 +1,5 @@
import {
css,
customElement,
html,
LitElement,
@ -19,10 +20,24 @@ export interface SidebarItem {
}
export const SIDEBAR_ITEMS: SidebarItem[] = [
{
name: "",
path: "",
},
{
name: "General",
children: [
{
name: "Overview",
path: "overview",
},
{
name: "System Tasks",
path: "tasks",
},
],
},
{
name: "Applications",
path: "applications",
@ -35,6 +50,19 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [
name: "Providers",
path: "providers",
},
{
name: "User Management",
children: [
{
name: "User",
path: "users",
},
{
name: "Groups",
path: "groups",
},
],
},
{
name: "Outposts",
children: [
@ -48,6 +76,10 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [
},
],
},
{
name: "Policies",
path: "policies",
},
{
name: "Property Mappings",
path: "property_mappings",
@ -59,10 +91,6 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [
name: "Flows",
path: "flows",
},
{
name: "Bindings",
path: "stages/bindings",
},
{
name: "Stages",
path: "stages",
@ -77,19 +105,6 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [
},
],
},
{
name: "Policies",
children: [
{
name: "Policies",
path: "policies",
},
{
name: "Bindings",
path: "policies/bindings",
},
],
},
{
name: "Certificates",
path: "crypto/certificates",
@ -98,27 +113,65 @@ export const SIDEBAR_ITEMS: SidebarItem[] = [
name: "Tokens",
path: "tokens",
},
{
name: "User",
path: "users",
},
{
name: "Groups",
path: "groups",
},
{
name: "System Tasks",
path: "tasks",
},
];
@customElement("pb-admin-sidebar")
export class AdminSideBar extends LitElement {
export const ROOT_ITEMS: SidebarItem[] = [
{
name: "Library",
path: "/-/overview/",
},
{
name: "Monitor",
path: "/audit/audit/",
},
{
name: "Administration",
children: SIDEBAR_ITEMS
}
];
@customElement("pb-sidebar")
export class SideBar extends LitElement {
@property()
activePath: string;
@property()
brandLogo?: string;
@property()
brandTitle?: string;
static get styles() {
return [GlobalsStyle, PageStyle, NavStyle];
return [
GlobalsStyle,
PageStyle,
NavStyle,
css`
.pf-c-nav__link {
--pf-c-nav__link--PaddingTop: 0.5rem;
--pf-c-nav__link--PaddingRight: 0.5rem;
--pf-c-nav__link--PaddingBottom: 0.5rem;
}
.pf-c-nav__subnav {
--pf-c-nav__subnav--PaddingBottom: 0px;
}
.pb-brand {
font-family: "DIN 1451 Std";
line-height: 60px;
display: flex;
font-size: 3rem;
flex-direction: row;
align-items: center;
margin-right: 0.5em;
color: var(--pf-c-nav__link--m-current--Color);
text-align: center;
}
.pb-brand img {
margin: 0 0.5rem;
max-height: 60px;
}
`,
];
}
constructor() {
@ -129,6 +182,17 @@ export class AdminSideBar extends LitElement {
});
}
renderBrand(): TemplateResult {
return html`<li class="pf-c-nav__item">
<a href="#/" class="pf-c-page__header-brand-link">
<div class="pf-c-brand pb-brand">
<img src="${this.brandLogo}" alt="passbook icon" />
${this.brandTitle ? html`<span>${this.brandTitle}</span>` : ""}
</div>
</a>
</li>`;
}
renderItem(item: SidebarItem): TemplateResult {
return html` <li
class="pf-c-nav__item ${item.children
@ -165,7 +229,8 @@ export class AdminSideBar extends LitElement {
return html`<div class="pf-c-page__sidebar-body">
<nav class="pf-c-nav" aria-label="Global">
<ul class="pf-c-nav__list">
${SIDEBAR_ITEMS.map((i) => this.renderItem(i))}
${this.renderBrand()}
${ROOT_ITEMS.map((i) => this.renderItem(i))}
</ul>
</nav>
</div>`;

View file

@ -1,7 +1,7 @@
import "./legacy.js";
import "./elements/ActionButton";
import "./elements/AdminSidebar";
import "./elements/Sidebar";
import "./elements/CodeMirror";
import "./elements/Dropdown";
import "./elements/FetchFillSlot";

View file

@ -33,18 +33,27 @@ export class RouterOutlet extends LitElement {
@property()
activeRoute?: Route;
@property()
defaultUrl?: string;
static get styles() {
return [PF, PFAddons];
}
constructor() {
super();
this.navigate();
window.addEventListener("hashchange", (e) => this.navigate());
}
firstUpdated() {
this.navigate();
}
navigate() {
const activeUrl = window.location.hash.slice(1, Infinity);
let activeUrl = window.location.hash.slice(1, Infinity);
if (activeUrl === "") {
activeUrl = this.defaultUrl!;
}
ROUTES.forEach((route) => {
let selectedRoute: Route | null = null;
if (route.url.exec(activeUrl)) {

View file

@ -97,8 +97,7 @@ export class SiteShell extends LitElement {
render() {
return html` ${this.loading
? html` <div class="pf-c-backdrop">
<div class="pf-l-bullseye">
? html` <div class="pf-l-bullseye">
<div class="pf-l-bullseye__item">
<span
class="pf-c-spinner pf-m-xl"
@ -110,7 +109,6 @@ export class SiteShell extends LitElement {
<span class="pf-c-spinner__tail-ball"></span>
</span>
</div>
</div>
</div>`
: ""}
<slot name="body"> </slot>`;