2019-03-19 17:44:22 +01:00
|
|
|
<ng-container *ngIf="(isPaging() ? pagedCiphers : ciphers) as filteredCiphers">
|
|
|
|
<table class="table table-hover table-list table-ciphers" *ngIf="filteredCiphers.length" infiniteScroll
|
|
|
|
[infiniteScrollDistance]="1" [infiniteScrollDisabled]="!isPaging()" (scrolled)="loadMore()">
|
2018-06-06 23:25:57 +02:00
|
|
|
<tbody>
|
2019-03-19 17:44:22 +01:00
|
|
|
<tr *ngFor="let c of filteredCiphers">
|
2020-08-11 17:30:30 +02:00
|
|
|
<td (click)="checkCipher(c)" class="table-list-checkbox">
|
2018-09-24 23:45:35 +02:00
|
|
|
<input type="checkbox" [(ngModel)]="c.checked" appStopProp>
|
2018-06-07 05:00:57 +02:00
|
|
|
</td>
|
2018-06-08 18:45:31 +02:00
|
|
|
<td (click)="checkCipher(c)" class="table-list-icon">
|
2018-06-07 05:00:57 +02:00
|
|
|
<app-vault-icon [cipher]="c"></app-vault-icon>
|
|
|
|
</td>
|
2018-08-16 14:46:49 +02:00
|
|
|
<td (click)="checkCipher(c)" class="reduced-lh wrap">
|
2019-02-21 22:50:37 +01:00
|
|
|
<a href="#" appStopClick appStopProp (click)="selectCipher(c)"
|
|
|
|
title="{{'editItem' | i18n}}">{{c.name}}</a>
|
2020-05-18 15:51:20 +02:00
|
|
|
<ng-container *ngIf="!organization && c.organizationId">
|
2019-10-10 17:42:05 +02:00
|
|
|
<i class="fa fa-share-alt" appStopProp title="{{'shared' | i18n}}" aria-hidden="true"></i>
|
|
|
|
<span class="sr-only">{{'shared' | i18n}}</span>
|
|
|
|
</ng-container>
|
2018-11-14 21:20:17 +01:00
|
|
|
<ng-container *ngIf="c.hasAttachments">
|
2019-10-10 17:42:05 +02:00
|
|
|
<i class="fa fa-paperclip" appStopProp title="{{'attachments' | i18n}}" aria-hidden="true"></i>
|
|
|
|
<span class="sr-only">{{'attachments' | i18n}}</span>
|
|
|
|
<ng-container *ngIf="showFixOldAttachments(c)">
|
|
|
|
<i class="fa fa-exclamation-triangle text-warning" appStopProp
|
|
|
|
title="{{'attachmentsNeedFix' | i18n}}" aria-hidden="true"></i>
|
|
|
|
<span class="sr-only">{{'attachmentsNeedFix' | i18n}}</span>
|
|
|
|
</ng-container>
|
2018-11-14 21:20:17 +01:00
|
|
|
</ng-container>
|
2018-06-07 23:12:11 +02:00
|
|
|
<br>
|
|
|
|
<small appStopProp>{{c.subTitle}}</small>
|
2018-06-07 05:00:57 +02:00
|
|
|
</td>
|
2018-06-08 18:04:03 +02:00
|
|
|
<td class="table-list-options">
|
2018-06-07 05:00:57 +02:00
|
|
|
<div class="dropdown" appListDropdown>
|
2019-02-21 22:50:37 +01:00
|
|
|
<button class="btn btn-outline-secondary dropdown-toggle" type="button" id="dropdownMenuButton"
|
2019-10-11 17:22:21 +02:00
|
|
|
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
|
|
|
|
appA11yTitle="{{'options' | i18n}}">
|
|
|
|
<i class="fa fa-cog fa-lg" aria-hidden="true"></i>
|
2018-06-06 23:25:57 +02:00
|
|
|
</button>
|
2018-06-07 05:00:57 +02:00
|
|
|
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
|
2020-04-08 22:48:30 +02:00
|
|
|
<ng-container *ngIf="c.type === cipherType.Login && !c.isDeleted">
|
2020-11-10 20:26:38 +01:00
|
|
|
<a class="dropdown-item" href="#" appStopClick
|
2021-05-03 20:55:42 +02:00
|
|
|
(click)="copy(c, c.login.username, 'username', 'Username')">
|
2020-11-10 20:26:38 +01:00
|
|
|
<i class="fa fa-fw fa-clone" aria-hidden="true"></i>
|
|
|
|
{{'copyUsername' | i18n}}
|
|
|
|
</a>
|
2019-04-26 15:12:37 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick
|
2021-05-03 20:55:42 +02:00
|
|
|
(click)="copy(c, c.login.password, 'password', 'Password')" *ngIf="c.viewPassword">
|
2020-07-27 19:21:11 +02:00
|
|
|
<i class="fa fa-fw fa-clone" aria-hidden="true"></i>
|
2019-04-26 15:12:37 +02:00
|
|
|
{{'copyPassword' | i18n}}
|
|
|
|
</a>
|
2020-12-15 17:25:52 +01:00
|
|
|
<a class="dropdown-item" href="#" appStopClick (click)="copy(c, c.login.totp, 'verificationCodeTotp', 'TOTP')"
|
|
|
|
*ngIf="displayTotpCopyButton(c)">
|
|
|
|
<i class="fa fa-fw fa-clone" aria-hidden="true"></i>
|
|
|
|
{{'copyVerificationCode' | i18n}}
|
|
|
|
</a>
|
2019-04-26 15:12:37 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick *ngIf="c.login.canLaunch"
|
|
|
|
(click)="launch(c.login.launchUri)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-share-square-o" aria-hidden="true"></i>
|
2019-04-26 15:12:37 +02:00
|
|
|
{{'launch' | i18n}}
|
|
|
|
</a>
|
|
|
|
</ng-container>
|
2018-06-08 18:04:03 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick (click)="attachments(c)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-paperclip" aria-hidden="true"></i>
|
2018-06-07 23:12:11 +02:00
|
|
|
{{'attachments' | i18n}}
|
|
|
|
</a>
|
2020-02-10 20:03:36 +01:00
|
|
|
<a class="dropdown-item" href="#" appStopClick
|
2020-04-08 22:48:30 +02:00
|
|
|
*ngIf="((!organization && !c.organizationId) || organization) && !c.isDeleted"
|
|
|
|
(click)="clone(c)">
|
2020-07-27 19:21:11 +02:00
|
|
|
<i class="fa fa-fw fa-files-o" aria-hidden="true"></i>
|
2020-02-10 20:03:36 +01:00
|
|
|
{{'clone' | i18n}}
|
|
|
|
</a>
|
2020-08-11 17:30:30 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick
|
|
|
|
*ngIf="!organization && !c.organizationId && !c.isDeleted" (click)="share(c)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-share-alt" aria-hidden="true"></i>
|
2018-06-07 23:12:11 +02:00
|
|
|
{{'share' | i18n}}
|
|
|
|
</a>
|
2020-04-08 22:48:30 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick *ngIf="c.organizationId && !c.isDeleted"
|
2019-02-21 22:50:37 +01:00
|
|
|
(click)="collections(c)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-cubes" aria-hidden="true"></i>
|
2018-06-07 23:12:11 +02:00
|
|
|
{{'collections' | i18n}}
|
|
|
|
</a>
|
2019-02-21 22:50:37 +01:00
|
|
|
<a class="dropdown-item" href="#" appStopClick *ngIf="c.organizationId && accessEvents"
|
|
|
|
(click)="events(c)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-file-text-o" aria-hidden="true"></i>
|
2018-07-11 21:22:55 +02:00
|
|
|
{{'eventLogs' | i18n}}
|
|
|
|
</a>
|
2020-04-08 22:48:30 +02:00
|
|
|
<a class="dropdown-item" href="#" appStopClick (click)="restore(c)" *ngIf="c.isDeleted">
|
|
|
|
<i class="fa fa-fw fa-undo" aria-hidden="true"></i>
|
|
|
|
{{'restore' | i18n}}
|
|
|
|
</a>
|
2018-06-08 18:04:03 +02:00
|
|
|
<a class="dropdown-item text-danger" href="#" appStopClick (click)="delete(c)">
|
2019-10-11 17:22:21 +02:00
|
|
|
<i class="fa fa-fw fa-trash-o" aria-hidden="true"></i>
|
2020-04-08 22:48:30 +02:00
|
|
|
{{(c.isDeleted ? 'permanentlyDelete' : 'delete') | i18n}}
|
2018-06-07 23:12:11 +02:00
|
|
|
</a>
|
2018-06-06 23:25:57 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
2019-03-19 17:44:22 +01:00
|
|
|
<div class="no-items" *ngIf="!filteredCiphers.length">
|
2019-10-11 16:35:24 +02:00
|
|
|
<ng-container *ngIf="!loaded">
|
|
|
|
<i class="fa fa-spinner fa-spin text-muted" title="{{'loading' | i18n}}" aria-hidden="true"></i>
|
|
|
|
<span class="sr-only">{{'loading' | i18n}}</span>
|
|
|
|
</ng-container>
|
2018-06-06 23:25:57 +02:00
|
|
|
<ng-container *ngIf="loaded">
|
|
|
|
<p>{{'noItemsInList' | i18n}}</p>
|
2018-07-04 15:55:52 +02:00
|
|
|
<button (click)="addCipher()" class="btn btn-outline-primary" *ngIf="showAddNew">
|
2018-06-29 22:55:54 +02:00
|
|
|
<i class="fa fa-plus fa-fw"></i>{{'addItem' | i18n}}</button>
|
2018-06-06 23:25:57 +02:00
|
|
|
</ng-container>
|
|
|
|
</div>
|
2020-04-08 22:48:30 +02:00
|
|
|
</ng-container>
|