mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-17 10:13:56 -05:00
Add failed tasks badge, better animation
This commit is contained in:
parent
e0f93c26d6
commit
49054c61a4
@ -51,8 +51,8 @@
|
|||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<nav id="sidebarMenu" class="d-md-block bg-light sidebar collapse" [ngClass]="slimSidebarEnabled ? 'slim' : 'col-md-3 col-lg-2'" [ngbCollapse]="isMenuCollapsed">
|
<nav id="sidebarMenu" class="d-md-block bg-light sidebar collapse" [ngClass]="slimSidebarEnabled ? 'slim' : 'col-md-3 col-lg-2'" [class.animating]="slimSidebarAnimating" [ngbCollapse]="isMenuCollapsed">
|
||||||
<button class="btn btn-sm btn-dark sidebar-slim-toggler" (click)="slimSidebarEnabled = !slimSidebarEnabled">
|
<button class="btn btn-sm btn-dark sidebar-slim-toggler" (click)="toggleSlimSidebar()">
|
||||||
<svg class="sidebaricon-sm" fill="currentColor">
|
<svg class="sidebaricon-sm" fill="currentColor">
|
||||||
<use *ngIf="slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-right"/>
|
<use *ngIf="slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-right"/>
|
||||||
<use *ngIf="!slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-left"/>
|
<use *ngIf="!slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-left"/>
|
||||||
@ -77,7 +77,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.loading || savedViewService.sidebarViews.length > 0'>
|
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.loading || savedViewService.sidebarViews.length > 0'>
|
||||||
<span [class.visually-hidden]="slimSidebarEnabled" i18n>Saved views</span>
|
<span i18n>Saved views</span>
|
||||||
<div *ngIf="savedViewService.loading" class="spinner-border spinner-border-sm fw-normal ms-2" role="status"></div>
|
<div *ngIf="savedViewService.loading" class="spinner-border spinner-border-sm fw-normal ms-2" role="status"></div>
|
||||||
</h6>
|
</h6>
|
||||||
<ul class="nav flex-column mb-2">
|
<ul class="nav flex-column mb-2">
|
||||||
@ -91,7 +91,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='openDocuments.length > 0'>
|
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='openDocuments.length > 0'>
|
||||||
<span [class.visually-hidden]="slimSidebarEnabled" i18n>Open documents</span>
|
<span i18n>Open documents</span>
|
||||||
</h6>
|
</h6>
|
||||||
<ul class="nav flex-column mb-2">
|
<ul class="nav flex-column mb-2">
|
||||||
<li class="nav-item w-100" *ngFor='let d of openDocuments'>
|
<li class="nav-item w-100" *ngFor='let d of openDocuments'>
|
||||||
@ -116,7 +116,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
|
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
|
||||||
<span [class.visually-hidden]="slimSidebarEnabled" i18n>Manage</span>
|
<span i18n>Manage</span>
|
||||||
</h6>
|
</h6>
|
||||||
<ul class="nav flex-column mb-2">
|
<ul class="nav flex-column mb-2">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
@ -149,6 +149,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" routerLink="tasks" routerLinkActive="active" (click)="closeMenu()" ngbPopover="File Tasks" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
|
<a class="nav-link" routerLink="tasks" routerLinkActive="active" (click)="closeMenu()" ngbPopover="File Tasks" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
|
||||||
|
<span *ngIf="tasksService.failedFileTasks.length > 0 && slimSidebarEnabled" class="badge bg-danger position-absolute top-0 end-0">{{tasksService.failedFileTasks.length}}</span>
|
||||||
<svg class="sidebaricon" fill="currentColor">
|
<svg class="sidebaricon" fill="currentColor">
|
||||||
<use xlink:href="assets/bootstrap-icons.svg#list-task"/>
|
<use xlink:href="assets/bootstrap-icons.svg#list-task"/>
|
||||||
</svg><span> <ng-container i18n>File Tasks<span *ngIf="tasksService.failedFileTasks.length > 0"><span class="badge bg-danger ms-2">{{tasksService.failedFileTasks.length}}</span></span></ng-container></span>
|
</svg><span> <ng-container i18n>File Tasks<span *ngIf="tasksService.failedFileTasks.length > 0"><span class="badge bg-danger ms-2">{{tasksService.failedFileTasks.length}}</span></span></ng-container></span>
|
||||||
@ -178,7 +179,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted">
|
<h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted">
|
||||||
<span [class.visually-hidden]="slimSidebarEnabled" i18n>Info</span>
|
<span i18n>Info</span>
|
||||||
</h6>
|
</h6>
|
||||||
<ul class="nav flex-column mb-2">
|
<ul class="nav flex-column mb-2">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
|
@ -43,14 +43,62 @@ main {
|
|||||||
display: none; // hide on mobile
|
display: none; // hide on mobile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar li.nav-item span,
|
||||||
|
.sidebar .sidebar-heading span {
|
||||||
|
transition: all .1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
@media(min-width: 768px) {
|
@media(min-width: 768px) {
|
||||||
.sidebar.slim {
|
.sidebar.slim {
|
||||||
max-width: 50px;
|
max-width: 50px;
|
||||||
li.nav-item span {
|
|
||||||
|
li.nav-item span.badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar.slim:not(.animating) {
|
||||||
|
li.nav-item span,
|
||||||
|
.sidebar-heading span {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar.animating {
|
||||||
|
li.nav-item span,
|
||||||
|
.sidebar-heading span {
|
||||||
|
display: unset;
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar:not(.slim):not(.animating) {
|
||||||
|
li.nav-item span,
|
||||||
|
.sidebar-heading span {
|
||||||
|
position: unset;
|
||||||
|
opacity: 1;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar.slim,
|
||||||
|
.sidebar.animating {
|
||||||
|
.text-truncate {
|
||||||
|
text-overflow: unset !important;
|
||||||
|
word-wrap: break-word !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar.slim {
|
||||||
|
li.nav-item span.badge {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.col-slim {
|
.col-slim {
|
||||||
padding-left: calc(50px + $grid-gutter-width) !important;
|
padding-left: calc(50px + $grid-gutter-width) !important;
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,16 @@ export class AppFrameComponent implements ComponentCanDeactivate {
|
|||||||
|
|
||||||
isMenuCollapsed: boolean = true
|
isMenuCollapsed: boolean = true
|
||||||
|
|
||||||
|
slimSidebarAnimating: boolean = false
|
||||||
|
|
||||||
|
toggleSlimSidebar(): void {
|
||||||
|
this.slimSidebarAnimating = true
|
||||||
|
this.slimSidebarEnabled = !this.slimSidebarEnabled
|
||||||
|
setTimeout(() => {
|
||||||
|
this.slimSidebarAnimating = false
|
||||||
|
}, 200) // slightly longer than css animation for slim sidebar
|
||||||
|
}
|
||||||
|
|
||||||
get slimSidebarEnabled(): boolean {
|
get slimSidebarEnabled(): boolean {
|
||||||
return this.settingsService.get(SETTINGS_KEYS.SLIM_SIDEBAR)
|
return this.settingsService.get(SETTINGS_KEYS.SLIM_SIDEBAR)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user