mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-28 12:45:45 +01:00
made nav into a toolbar
This commit is contained in:
parent
3e6f85c206
commit
ec933025f3
@ -63,10 +63,11 @@ import { ShareComponent } from './vault/share.component';
|
||||
import { VaultComponent } from './vault/vault.component';
|
||||
import { ViewComponent } from './vault/view.component';
|
||||
|
||||
import { AccessComponent } from './send/access.component';
|
||||
import { AddEditComponent as SendAddEditComponent } from './send/add-edit.component';
|
||||
import { SendComponent } from './send/send.component';
|
||||
|
||||
import { NavComponent } from './layout/nav.component';
|
||||
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import localeBe from '@angular/common/locales/be';
|
||||
import localeBg from '@angular/common/locales/bg';
|
||||
@ -160,7 +161,6 @@ registerLocaleData(localeZhTw, 'zh-TW');
|
||||
],
|
||||
declarations: [
|
||||
A11yTitleDirective,
|
||||
AccessComponent,
|
||||
AddEditComponent,
|
||||
ApiActionDirective,
|
||||
AppComponent,
|
||||
@ -183,6 +183,7 @@ registerLocaleData(localeZhTw, 'zh-TW');
|
||||
LockComponent,
|
||||
LoginComponent,
|
||||
ModalComponent,
|
||||
NavComponent,
|
||||
PasswordGeneratorComponent,
|
||||
PasswordGeneratorHistoryComponent,
|
||||
PasswordHistoryComponent,
|
||||
|
5
src/app/layout/nav.component.html
Normal file
5
src/app/layout/nav.component.html
Normal file
@ -0,0 +1,5 @@
|
||||
<ng-container *ngFor="let item of items">
|
||||
<a [routerLink]="item.link" class="btn primary" routerLinkActive="active" [title]="item.label">
|
||||
<i class="fa" [ngClass]="item.icon"></i>{{ item.label }}
|
||||
</a>
|
||||
</ng-container>
|
20
src/app/layout/nav.component.ts
Normal file
20
src/app/layout/nav.component.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-nav',
|
||||
templateUrl: 'nav.component.html',
|
||||
})
|
||||
export class NavComponent {
|
||||
items: any[] = [
|
||||
{
|
||||
link: '/vault',
|
||||
icon: 'fa-lock',
|
||||
label: 'My Vault',
|
||||
},
|
||||
{
|
||||
link: '/send',
|
||||
icon: 'fa-paper-plane',
|
||||
label: 'Send',
|
||||
},
|
||||
];
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
<div class="details">
|
||||
<div clas="content">
|
||||
<div class="inner-content">
|
||||
<p>Under construction</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,18 +0,0 @@
|
||||
import {
|
||||
Component,
|
||||
OnInit,
|
||||
} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-send-access',
|
||||
templateUrl: 'access.component.html',
|
||||
})
|
||||
export class AccessComponent implements OnInit {
|
||||
constructor() {
|
||||
return;
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
return;
|
||||
}
|
||||
}
|
@ -3,32 +3,30 @@
|
||||
<div class="mac-bar"></div>
|
||||
<div class="content">
|
||||
<div class="inner-content">
|
||||
<div class="top-content">
|
||||
<h2 class="sr-only">{{'filters' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedAll}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectAll()">
|
||||
<i class="fa fa-fw fa-th" aria-hidden="true"></i> {{'allSends' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>{{'types' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedType === sendType.Text}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(sendType.Text)">
|
||||
<i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i> {{'sendTypeText' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === sendType.File}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(sendType.File)">
|
||||
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i> {{'sendTypeFile' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bottom-content">
|
||||
<a routerLink="/" class="fa fa-lock btn primary icon-link" title="Bitwarden Vault"></a>
|
||||
</div>
|
||||
<h2 class="sr-only">{{'filters' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedAll}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectAll()">
|
||||
<i class="fa fa-fw fa-th" aria-hidden="true"></i> {{'allSends' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>{{'types' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedType === sendType.Text}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(sendType.Text)">
|
||||
<i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i> {{'sendTypeText' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === sendType.File}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(sendType.File)">
|
||||
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i> {{'sendTypeFile' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<app-nav class="nav"></app-nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,106 +1,104 @@
|
||||
<div class="mac-bar"></div>
|
||||
<div class="content">
|
||||
<div class="inner-content">
|
||||
<div class="top-content">
|
||||
<h2 class="sr-only">{{'filters' | i18n}}</h2>
|
||||
<h2 class="sr-only">{{'filters' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedAll}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectAll()">
|
||||
<i class="fa fa-fw fa-th" aria-hidden="true"></i> {{'allItems' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedFavorites}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectFavorites()">
|
||||
<i class="fa fa-fw fa-star" aria-hidden="true"></i> {{'favorites' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedTrash}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectTrash()">
|
||||
<i class="fa fa-fw fa-trash-o" aria-hidden="true"></i> {{'trash' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>{{'types' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Login}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Login)">
|
||||
<i class="fa fa-fw fa-globe" aria-hidden="true"></i> {{'typeLogin' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Card}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Card)">
|
||||
<i class="fa fa-fw fa-credit-card" aria-hidden="true"></i> {{'typeCard' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Identity}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Identity)">
|
||||
<i class="fa fa-fw fa-id-card-o" aria-hidden="true"></i> {{'typeIdentity' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.SecureNote}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.SecureNote)">
|
||||
<i class="fa fa-fw fa-sticky-note-o" aria-hidden="true"></i> {{'typeSecureNote' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p *ngIf="!loaded" class="text-muted">{{'loading' | i18n}}</p>
|
||||
<ng-container *ngIf="loaded">
|
||||
<div class="heading">
|
||||
<h2>{{'folders' | i18n}}</h2>
|
||||
<button appBlurClick (click)="addFolder()" appA11yTitle="{{'addFolder' | i18n}}">
|
||||
<i class="fa fa-plus fa-fw" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedAll}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectAll()">
|
||||
<i class="fa fa-fw fa-th" aria-hidden="true"></i> {{'allItems' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedFavorites}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectFavorites()">
|
||||
<i class="fa fa-fw fa-star" aria-hidden="true"></i> {{'favorites' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedTrash}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectTrash()">
|
||||
<i class="fa fa-fw fa-trash-o" aria-hidden="true"></i> {{'trash' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<ng-template #recursiveFolders let-folders>
|
||||
<li *ngFor="let f of folders"
|
||||
[ngClass]="{active: selectedFolder && f.node.id === selectedFolderId}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectFolder(f.node)">
|
||||
<i *ngIf="f.children.length" class="fa-fw fa" title="{{'toggleCollapse' | i18n}}" aria-hidden="true"
|
||||
[ngClass]="{'fa-caret-right': isCollapsed(f.node), 'fa-caret-down': !isCollapsed(f.node)}"
|
||||
(click)="collapse(f.node)" appStopProp></i>
|
||||
<i *ngIf="f.children.length === 0" class="fa-fw fa fa-folder-o" aria-hidden="true"></i>
|
||||
{{f.node.name}}
|
||||
<span appStopProp appStopClick (click)="editFolder(f.node)" role="button"
|
||||
appA11yTitle="{{'editFolder' | i18n}}" *ngIf="f.node.id">
|
||||
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="fa-ul" *ngIf="f.children.length && !isCollapsed(f.node)">
|
||||
<ng-container *ngTemplateOutlet="recursiveFolders; context:{ $implicit: f.children }">
|
||||
</ng-container>
|
||||
</ul>
|
||||
</li>
|
||||
</ng-template>
|
||||
<ng-container *ngTemplateOutlet="recursiveFolders; context:{ $implicit: nestedFolders }"></ng-container>
|
||||
</ul>
|
||||
<h2>{{'types' | i18n}}</h2>
|
||||
<ul>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Login}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Login)">
|
||||
<i class="fa fa-fw fa-globe" aria-hidden="true"></i> {{'typeLogin' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Card}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Card)">
|
||||
<i class="fa fa-fw fa-credit-card" aria-hidden="true"></i> {{'typeCard' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.Identity}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.Identity)">
|
||||
<i class="fa fa-fw fa-id-card-o" aria-hidden="true"></i> {{'typeIdentity' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
<li [ngClass]="{active: selectedType === cipherType.SecureNote}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectType(cipherType.SecureNote)">
|
||||
<i class="fa fa-fw fa-sticky-note-o" aria-hidden="true"></i> {{'typeSecureNote' | i18n}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p *ngIf="!loaded" class="text-muted">{{'loading' | i18n}}</p>
|
||||
<ng-container *ngIf="loaded">
|
||||
<div class="heading">
|
||||
<h2>{{'folders' | i18n}}</h2>
|
||||
<button appBlurClick (click)="addFolder()" appA11yTitle="{{'addFolder' | i18n}}">
|
||||
<i class="fa fa-plus fa-fw" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div *ngIf="collections && collections.length">
|
||||
<h2>{{'collections' | i18n}}</h2>
|
||||
<ul>
|
||||
<ng-template #recursiveFolders let-folders>
|
||||
<li *ngFor="let f of folders"
|
||||
[ngClass]="{active: selectedFolder && f.node.id === selectedFolderId}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectFolder(f.node)">
|
||||
<i *ngIf="f.children.length" class="fa-fw fa" title="{{'toggleCollapse' | i18n}}" aria-hidden="true"
|
||||
[ngClass]="{'fa-caret-right': isCollapsed(f.node), 'fa-caret-down': !isCollapsed(f.node)}"
|
||||
(click)="collapse(f.node)" appStopProp></i>
|
||||
<i *ngIf="f.children.length === 0" class="fa-fw fa fa-folder-o" aria-hidden="true"></i>
|
||||
{{f.node.name}}
|
||||
<span appStopProp appStopClick (click)="editFolder(f.node)" role="button"
|
||||
appA11yTitle="{{'editFolder' | i18n}}" *ngIf="f.node.id">
|
||||
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i>
|
||||
</span>
|
||||
<ng-template #recursiveCollections let-collections>
|
||||
<li *ngFor="let c of collections" [ngClass]="{active: c.node.id === selectedCollectionId}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectCollection(c.node)">
|
||||
<i *ngIf="c.children.length" class="fa-fw fa" title="{{'toggleCollapse' | i18n}}" aria-hidden="true"
|
||||
[ngClass]="{'fa-caret-right': isCollapsed(c.node), 'fa-caret-down': !isCollapsed(c.node)}"
|
||||
(click)="collapse(c.node)" appStopProp></i>
|
||||
<i *ngIf="c.children.length === 0" class="fa-fw fa fa-cube" aria-hidden="true"></i>
|
||||
{{c.node.name}}
|
||||
</a>
|
||||
<ul class="fa-ul" *ngIf="f.children.length && !isCollapsed(f.node)">
|
||||
<ng-container *ngTemplateOutlet="recursiveFolders; context:{ $implicit: f.children }">
|
||||
<ul class="fa-ul" *ngIf="c.children.length && !isCollapsed(c.node)">
|
||||
<ng-container
|
||||
*ngTemplateOutlet="recursiveCollections; context:{ $implicit: c.children }">
|
||||
</ng-container>
|
||||
</ul>
|
||||
</li>
|
||||
</ng-template>
|
||||
<ng-container *ngTemplateOutlet="recursiveFolders; context:{ $implicit: nestedFolders }"></ng-container>
|
||||
<ng-container *ngTemplateOutlet="recursiveCollections; context:{ $implicit: nestedCollections }">
|
||||
</ng-container>
|
||||
</ul>
|
||||
<div *ngIf="collections && collections.length">
|
||||
<h2>{{'collections' | i18n}}</h2>
|
||||
<ul>
|
||||
<ng-template #recursiveCollections let-collections>
|
||||
<li *ngFor="let c of collections" [ngClass]="{active: c.node.id === selectedCollectionId}">
|
||||
<a href="#" appStopClick appBlurClick (click)="selectCollection(c.node)">
|
||||
<i *ngIf="c.children.length" class="fa-fw fa" title="{{'toggleCollapse' | i18n}}" aria-hidden="true"
|
||||
[ngClass]="{'fa-caret-right': isCollapsed(c.node), 'fa-caret-down': !isCollapsed(c.node)}"
|
||||
(click)="collapse(c.node)" appStopProp></i>
|
||||
<i *ngIf="c.children.length === 0" class="fa-fw fa fa-cube" aria-hidden="true"></i>
|
||||
{{c.node.name}}
|
||||
</a>
|
||||
<ul class="fa-ul" *ngIf="c.children.length && !isCollapsed(c.node)">
|
||||
<ng-container
|
||||
*ngTemplateOutlet="recursiveCollections; context:{ $implicit: c.children }">
|
||||
</ng-container>
|
||||
</ul>
|
||||
</li>
|
||||
</ng-template>
|
||||
<ng-container *ngTemplateOutlet="recursiveCollections; context:{ $implicit: nestedCollections }">
|
||||
</ng-container>
|
||||
</ul>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div class="bottom-content">
|
||||
<a routerLink="/send" class="fa fa-paper-plane btn primary icon-link" title="Bitwarden Send"></a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<app-nav class="nav"></app-nav>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -77,16 +77,6 @@
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
&.icon-link {
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
margin: 5px 2px;
|
||||
border-radius: 50%;
|
||||
width: 45px;
|
||||
}
|
||||
}
|
||||
|
||||
.action-buttons {
|
||||
|
@ -24,17 +24,24 @@
|
||||
border-right-color: themed('borderColor');
|
||||
}
|
||||
|
||||
.inner-content {
|
||||
.content {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
justify-content: space-between;
|
||||
padding-right: 5px;
|
||||
user-select: none;
|
||||
|
||||
> ul, > div > ul {
|
||||
margin: 0 0 15px 0;
|
||||
.footer {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.inner-content {
|
||||
padding-bottom: 0;
|
||||
padding-right: 5px;
|
||||
user-select: none;
|
||||
|
||||
> ul, > div > ul {
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -418,7 +425,7 @@
|
||||
}
|
||||
|
||||
.footer {
|
||||
height: 50px;
|
||||
height: 55px;
|
||||
flex: 0 0 auto;
|
||||
border-top: 1px solid #000000;
|
||||
display: flex;
|
||||
@ -443,4 +450,31 @@
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.nav {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
.btn {
|
||||
width: 100%;
|
||||
font-size: $font-size-base * 0.8;
|
||||
flex: 1;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
padding-bottom: 4px;
|
||||
|
||||
&:not(.active) {
|
||||
@include themify($themes) {
|
||||
background-color: themed('backgroundColorAlt');
|
||||
}
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: $font-size-base * 1.5;
|
||||
display: block;
|
||||
margin-bottom: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user