mirror of
https://github.com/bitwarden/browser
synced 2026-01-06 02:23:44 +00:00
Merge master into merge/feature/org-admin-refresh (using imerge)
This commit is contained in:
@@ -7,7 +7,8 @@ import { EnvironmentService } from "@bitwarden/common/abstractions/environment.s
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
|
||||
import { Utils } from "@bitwarden/common/misc/utils";
|
||||
import { getCookie } from "@bitwarden/electron/utils";
|
||||
|
||||
import { getCookie } from "../../utils";
|
||||
|
||||
const BroadcasterSubscriptionId = "AccessibilityCookieComponent";
|
||||
|
||||
|
||||
@@ -5,8 +5,7 @@ import { AccountApiService } from "@bitwarden/common/abstractions/account/accoun
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { LogService } from "@bitwarden/common/abstractions/log.service";
|
||||
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
|
||||
|
||||
import { Verification } from "../../../../../libs/common/src/types/verification";
|
||||
import { Verification } from "@bitwarden/common/types/verification";
|
||||
|
||||
@Component({
|
||||
selector: "app-delete-account",
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
class="primary"
|
||||
(click)="purchase()"
|
||||
*ngIf="!isPremium"
|
||||
[disabled]="purchaseBtn.loading"
|
||||
[disabled]="$any(purchaseBtn).loading"
|
||||
>
|
||||
<b>{{ "premiumPurchase" | i18n }}</b>
|
||||
</button>
|
||||
@@ -67,18 +67,18 @@
|
||||
#refreshBtn
|
||||
type="button"
|
||||
(click)="refresh()"
|
||||
[disabled]="refreshBtn.loading"
|
||||
[disabled]="$any(refreshBtn).loading"
|
||||
appA11yTitle="{{ 'premiumRefresh' | i18n }}"
|
||||
[appApiAction]="refreshPromise"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-refresh bwi-lg bwi-fw"
|
||||
[hidden]="refreshBtn.loading"
|
||||
[hidden]="$any(refreshBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!refreshBtn.loading"
|
||||
[hidden]="!$any(refreshBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -14,9 +14,9 @@ import { DeviceType } from "@bitwarden/common/enums/deviceType";
|
||||
import { StorageLocation } from "@bitwarden/common/enums/storageLocation";
|
||||
import { ThemeType } from "@bitwarden/common/enums/themeType";
|
||||
import { Utils } from "@bitwarden/common/misc/utils";
|
||||
import { isWindowsStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { flagEnabled } from "../../flags";
|
||||
import { isWindowsStore } from "../../utils";
|
||||
import { SetPinComponent } from "../components/set-pin.component";
|
||||
|
||||
@Component({
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
</ng-container>
|
||||
<ng-container *ngIf="selectedProviderType === providerType.WebAuthn">
|
||||
<div id="web-authn-frame">
|
||||
<iframe id="webauthn_iframe" [allow]="webAuthnAllow"></iframe>
|
||||
<iframe id="webauthn_iframe" [attr.allow]="webAuthnAllow"></iframe>
|
||||
</div>
|
||||
<div class="box first">
|
||||
<div class="box-content">
|
||||
|
||||
@@ -20,7 +20,7 @@ import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.s
|
||||
import { CipherService } from "@bitwarden/common/abstractions/cipher.service";
|
||||
import { CollectionService } from "@bitwarden/common/abstractions/collection.service";
|
||||
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service";
|
||||
import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service";
|
||||
@@ -125,7 +125,7 @@ export class AppComponent implements OnInit, OnDestroy {
|
||||
private platformUtilsService: PlatformUtilsService,
|
||||
private systemService: SystemService,
|
||||
private stateService: StateService,
|
||||
private eventService: EventService,
|
||||
private eventUploadService: EventUploadService,
|
||||
private policyService: InternalPolicyService,
|
||||
private modalService: ModalService,
|
||||
private keyConnectorService: KeyConnectorService
|
||||
@@ -465,7 +465,7 @@ export class AppComponent implements OnInit, OnDestroy {
|
||||
private async logOut(expired: boolean, userId?: string) {
|
||||
const userBeingLoggedOut = await this.stateService.getUserId({ userId: userId });
|
||||
await Promise.all([
|
||||
this.eventService.uploadEvents(userBeingLoggedOut),
|
||||
this.eventUploadService.uploadEvents(userBeingLoggedOut),
|
||||
this.syncService.setLastSync(new Date(0), userBeingLoggedOut),
|
||||
this.cryptoService.clearKeys(userBeingLoggedOut),
|
||||
this.settingsService.clear(userBeingLoggedOut),
|
||||
|
||||
@@ -90,7 +90,6 @@ import { SharedModule } from "./shared/shared.module";
|
||||
import { AddEditCustomFieldsComponent } from "./vault/add-edit-custom-fields.component";
|
||||
import { AddEditComponent } from "./vault/add-edit.component";
|
||||
import { AttachmentsComponent } from "./vault/attachments.component";
|
||||
import { CiphersComponent } from "./vault/ciphers.component";
|
||||
import { CollectionsComponent } from "./vault/collections.component";
|
||||
import { ExportComponent } from "./vault/export.component";
|
||||
import { FolderAddEditComponent } from "./vault/folder-add-edit.component";
|
||||
@@ -99,6 +98,7 @@ import { PasswordGeneratorHistoryComponent } from "./vault/password-generator-hi
|
||||
import { PasswordHistoryComponent } from "./vault/password-history.component";
|
||||
import { ShareComponent } from "./vault/share.component";
|
||||
import { VaultFilterModule } from "./vault/vault-filter/vault-filter.module";
|
||||
import { VaultItemsComponent } from "./vault/vault-items.component";
|
||||
import { VaultComponent } from "./vault/vault.component";
|
||||
import { ViewCustomFieldsComponent } from "./vault/view-custom-fields.component";
|
||||
import { ViewComponent } from "./vault/view.component";
|
||||
@@ -168,7 +168,7 @@ registerLocaleData(localeZhTw, "zh-TW");
|
||||
AddEditCustomFieldsComponent,
|
||||
AppComponent,
|
||||
AttachmentsComponent,
|
||||
CiphersComponent,
|
||||
VaultItemsComponent,
|
||||
CollectionsComponent,
|
||||
DeleteAccountComponent,
|
||||
EnvironmentComponent,
|
||||
|
||||
@@ -5,12 +5,7 @@ import { Utils } from "@bitwarden/common/misc/utils";
|
||||
|
||||
@Component({
|
||||
selector: "app-avatar",
|
||||
template: `<img
|
||||
*ngIf="src"
|
||||
[src]="src"
|
||||
title="{{ data }}"
|
||||
[ngClass]="{ 'rounded-circle': circle }"
|
||||
/>`,
|
||||
template: `<img *ngIf="src" [src]="src" [ngClass]="{ 'rounded-circle': circle }" />`,
|
||||
})
|
||||
export class AvatarComponent implements OnChanges, OnInit {
|
||||
@Input() size = 45;
|
||||
@@ -20,7 +15,7 @@ export class AvatarComponent implements OnChanges, OnInit {
|
||||
@Input() circle = false;
|
||||
|
||||
@Input() color?: string;
|
||||
@Input() id?: number;
|
||||
@Input() id?: string;
|
||||
@Input() text?: string;
|
||||
|
||||
private svgCharCount = 2;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<app-avatar
|
||||
[text]="activeAccount.name"
|
||||
[id]="activeAccount.id"
|
||||
size="25"
|
||||
[size]="25"
|
||||
[circle]="true"
|
||||
[fontSize]="14"
|
||||
[dynamic]="true"
|
||||
@@ -61,7 +61,7 @@
|
||||
<app-avatar
|
||||
[text]="a.value.profile.name ?? a.value.profile.email"
|
||||
[id]="a.value.profile.userId"
|
||||
size="25"
|
||||
[size]="25"
|
||||
[circle]="true"
|
||||
[fontSize]="14"
|
||||
[dynamic]="true"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { enableProdMode } from "@angular/core";
|
||||
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
|
||||
|
||||
import { isDev } from "@bitwarden/electron/utils";
|
||||
import { isDev } from "../utils";
|
||||
|
||||
// tslint:disable-next-line
|
||||
require("../scss/styles.scss");
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
name="Type_{{ o.value }}"
|
||||
id="type_{{ o.value }}"
|
||||
[value]="o.value"
|
||||
(change)="typeChanged(o)"
|
||||
(change)="typeChanged()"
|
||||
[checked]="send.type === o.value"
|
||||
[disabled]="disableSend"
|
||||
/>
|
||||
@@ -280,10 +280,14 @@
|
||||
appA11yTitle="{{ 'delete' | i18n }}"
|
||||
*ngIf="editMode"
|
||||
>
|
||||
<i class="bwi bwi-trash bwi-lg bwi-fw" [hidden]="deleteBtn.loading" aria-hidden="true"></i>
|
||||
<i
|
||||
class="bwi bwi-trash bwi-lg bwi-fw"
|
||||
[hidden]="$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!deleteBtn.loading"
|
||||
[hidden]="!$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
formControlName="defaultExpirationDateTime"
|
||||
required
|
||||
placeholder="MM/DD/YYYY HH:MM AM/PM"
|
||||
[readOnly]="disableSend"
|
||||
/>
|
||||
<small *ngIf="editMode" class="help-block">{{ "expirationDateDesc" | i18n }}</small>
|
||||
</div>
|
||||
|
||||
@@ -10,8 +10,8 @@ import { PolicyService } from "@bitwarden/common/abstractions/policy/policy.serv
|
||||
import { SearchService } from "@bitwarden/common/abstractions/search.service";
|
||||
import { SendService } from "@bitwarden/common/abstractions/send.service";
|
||||
import { SendView } from "@bitwarden/common/models/view/send.view";
|
||||
import { invokeMenu, RendererMenuItem } from "@bitwarden/electron/utils";
|
||||
|
||||
import { invokeMenu, RendererMenuItem } from "../../utils";
|
||||
import { SearchBarService } from "../layout/search/search-bar.service";
|
||||
|
||||
import { AddEditComponent } from "./add-edit.component";
|
||||
@@ -132,6 +132,18 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro
|
||||
label: this.i18nService.t("copyLink"),
|
||||
click: () => this.copy(send),
|
||||
});
|
||||
if (send.password && !send.disabled) {
|
||||
menu.push({
|
||||
label: this.i18nService.t("removePassword"),
|
||||
click: async () => {
|
||||
await this.removePassword(send);
|
||||
if (this.sendId === send.id) {
|
||||
this.sendId = null;
|
||||
this.selectSend(send.id);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
menu.push({
|
||||
label: this.i18nService.t("delete"),
|
||||
click: async () => {
|
||||
|
||||
@@ -5,7 +5,7 @@ import { AbstractThemingService } from "@bitwarden/angular/services/theming/them
|
||||
import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abstractions/crypto.service";
|
||||
import { EncryptService } from "@bitwarden/common/abstractions/encrypt.service";
|
||||
import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/common/abstractions/environment.service";
|
||||
import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service";
|
||||
import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { NotificationsService as NotificationsServiceAbstraction } from "@bitwarden/common/abstractions/notifications.service";
|
||||
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/abstractions/platformUtils.service";
|
||||
@@ -14,11 +14,11 @@ import { SyncService as SyncServiceAbstraction } from "@bitwarden/common/abstrac
|
||||
import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/abstractions/twoFactor.service";
|
||||
import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service";
|
||||
import { ContainerService } from "@bitwarden/common/services/container.service";
|
||||
import { EventService } from "@bitwarden/common/services/event.service";
|
||||
import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service";
|
||||
import { VaultTimeoutService } from "@bitwarden/common/services/vaultTimeout/vaultTimeout.service";
|
||||
|
||||
import { I18nService } from "../../services/i18n.service";
|
||||
import { NativeMessagingService } from "../../services/nativeMessaging.service";
|
||||
import { NativeMessagingService } from "../../services/native-messaging.service";
|
||||
|
||||
@Injectable()
|
||||
export class InitService {
|
||||
@@ -28,7 +28,7 @@ export class InitService {
|
||||
private syncService: SyncServiceAbstraction,
|
||||
private vaultTimeoutService: VaultTimeoutServiceAbstraction,
|
||||
private i18nService: I18nServiceAbstraction,
|
||||
private eventService: EventServiceAbstraction,
|
||||
private eventUploadService: EventUploadServiceAbstraction,
|
||||
private twoFactorService: TwoFactorServiceAbstraction,
|
||||
private notificationsService: NotificationsServiceAbstraction,
|
||||
private platformUtilsService: PlatformUtilsServiceAbstraction,
|
||||
@@ -48,7 +48,7 @@ export class InitService {
|
||||
(this.vaultTimeoutService as VaultTimeoutService).init(true);
|
||||
const locale = await this.stateService.getLocale();
|
||||
await (this.i18nService as I18nService).init(locale);
|
||||
(this.eventService as EventService).init(true);
|
||||
(this.eventUploadService as EventUploadService).init(true);
|
||||
this.twoFactorService.init();
|
||||
setTimeout(() => this.notificationsService.init(), 3000);
|
||||
const htmlEl = this.win.document.documentElement;
|
||||
|
||||
@@ -39,25 +39,25 @@ import { GlobalState } from "@bitwarden/common/models/domain/global-state";
|
||||
import { LoginService } from "@bitwarden/common/services/login.service";
|
||||
import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service";
|
||||
import { SystemService } from "@bitwarden/common/services/system.service";
|
||||
import { ElectronCryptoService } from "@bitwarden/electron/services/electronCrypto.service";
|
||||
import { ElectronLogService } from "@bitwarden/electron/services/electronLog.service";
|
||||
import { ElectronPlatformUtilsService } from "@bitwarden/electron/services/electronPlatformUtils.service";
|
||||
import { ElectronRendererMessagingService } from "@bitwarden/electron/services/electronRendererMessaging.service";
|
||||
import { ElectronRendererSecureStorageService } from "@bitwarden/electron/services/electronRendererSecureStorage.service";
|
||||
import { ElectronRendererStorageService } from "@bitwarden/electron/services/electronRendererStorage.service";
|
||||
|
||||
import { Account } from "../../models/account";
|
||||
import { EncryptedMessageHandlerService } from "../../services/encryptedMessageHandlerService";
|
||||
import { ElectronCryptoService } from "../../services/electron-crypto.service";
|
||||
import { ElectronLogService } from "../../services/electron-log.service";
|
||||
import { ElectronPlatformUtilsService } from "../../services/electron-platform-utils.service";
|
||||
import { ElectronRendererMessagingService } from "../../services/electron-renderer-messaging.service";
|
||||
import { ElectronRendererSecureStorageService } from "../../services/electron-renderer-secure-storage.service";
|
||||
import { ElectronRendererStorageService } from "../../services/electron-renderer-storage.service";
|
||||
import { EncryptedMessageHandlerService } from "../../services/encrypted-message-handler.service";
|
||||
import { I18nService } from "../../services/i18n.service";
|
||||
import { NativeMessageHandlerService } from "../../services/nativeMessageHandler.service";
|
||||
import { NativeMessagingService } from "../../services/nativeMessaging.service";
|
||||
import { PasswordRepromptService } from "../../services/passwordReprompt.service";
|
||||
import { NativeMessageHandlerService } from "../../services/native-message-handler.service";
|
||||
import { NativeMessagingService } from "../../services/native-messaging.service";
|
||||
import { PasswordRepromptService } from "../../services/password-reprompt.service";
|
||||
import { StateService } from "../../services/state.service";
|
||||
import { LoginGuard } from "../guards/login.guard";
|
||||
import { SearchBarService } from "../layout/search/search-bar.service";
|
||||
|
||||
import { DesktopFileDownloadService } from "./desktop-file-download.service";
|
||||
import { DesktopThemingService } from "./desktop-theming.service";
|
||||
import { DesktopFileDownloadService } from "./desktopFileDownloadService";
|
||||
import { InitService } from "./init.service";
|
||||
|
||||
const RELOAD_CALLBACK = new InjectionToken<() => any>("RELOAD_CALLBACK");
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
[(ngModel)]="f.value"
|
||||
*ngIf="f.type === fieldType.Boolean"
|
||||
appTrueFalseValue
|
||||
trueValue="true"
|
||||
falseValue="false"
|
||||
[trueValue]="true"
|
||||
[falseValue]="false"
|
||||
attr.aria-describedby="fieldName{{ i }}"
|
||||
[readonly]="!cipher.edit && editMode"
|
||||
/>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Component } from "@angular/core";
|
||||
|
||||
import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "@bitwarden/angular/components/add-edit-custom-fields.component";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
|
||||
@Component({
|
||||
@@ -9,7 +9,7 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
templateUrl: "add-edit-custom-fields.component.html",
|
||||
})
|
||||
export class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {
|
||||
constructor(i18nService: I18nService, eventService: EventService) {
|
||||
super(i18nService, eventService);
|
||||
constructor(i18nService: I18nService, eventCollectionService: EventCollectionService) {
|
||||
super(i18nService, eventCollectionService);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,16 +75,16 @@
|
||||
appA11yTitle="{{ 'checkPassword' | i18n }}"
|
||||
(click)="checkPassword()"
|
||||
[appApiAction]="checkPasswordPromise"
|
||||
[disabled]="checkPasswordBtn.loading"
|
||||
[disabled]="$any(checkPasswordBtn).loading"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-lg bwi-check-circle"
|
||||
[hidden]="checkPasswordBtn.loading"
|
||||
[hidden]="$any(checkPasswordBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-lg bwi-spinner bwi-spin"
|
||||
[hidden]="!checkPasswordBtn.loading"
|
||||
[hidden]="!$any(checkPasswordBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
@@ -485,7 +485,10 @@
|
||||
id="loginUriMatch{{ i }}"
|
||||
name="Login.Uris[{{ i }}].Match"
|
||||
[(ngModel)]="u.match"
|
||||
[hidden]="u.showOptions === false || (u.showOptions == null && u.match == null)"
|
||||
[hidden]="
|
||||
$any(u).showOptions === false ||
|
||||
($any(u).showOptions == null && u.match == null)
|
||||
"
|
||||
(change)="loginUriMatchChanged(u)"
|
||||
>
|
||||
<option *ngFor="let o of uriMatchOptions" [ngValue]="o.value">
|
||||
@@ -501,7 +504,10 @@
|
||||
appA11yTitle="{{ 'toggleOptions' | i18n }}"
|
||||
(click)="toggleUriOptions(u)"
|
||||
[attr.aria-expanded]="
|
||||
!(u.showOptions === false || (u.showOptions == null && u.match == null))
|
||||
!(
|
||||
$any(u).showOptions === false ||
|
||||
($any(u).showOptions == null && u.match == null)
|
||||
)
|
||||
"
|
||||
>
|
||||
<i class="bwi bwi-lg bwi-cog" aria-hidden="true"></i>
|
||||
@@ -634,7 +640,7 @@
|
||||
<input
|
||||
id="collection_{{ i }}"
|
||||
type="checkbox"
|
||||
[(ngModel)]="c.checked"
|
||||
[(ngModel)]="$any(c).checked"
|
||||
name="Collection[{{ i }}].Checked"
|
||||
/>
|
||||
</div>
|
||||
@@ -647,12 +653,16 @@
|
||||
type="submit"
|
||||
class="primary"
|
||||
appA11yTitle="{{ 'save' | i18n }}"
|
||||
[disabled]="form.loading"
|
||||
[disabled]="$any(form).loading"
|
||||
>
|
||||
<i class="bwi bwi-save-changes bwi-lg bwi-fw" [hidden]="form.loading" aria-hidden="true"></i>
|
||||
<i
|
||||
class="bwi bwi-save-changes bwi-lg bwi-fw"
|
||||
[hidden]="$any(form).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!form.loading"
|
||||
[hidden]="!$any(form).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
@@ -675,13 +685,17 @@
|
||||
class="danger"
|
||||
appA11yTitle="{{ 'delete' | i18n }}"
|
||||
*ngIf="editMode && !cloneMode"
|
||||
[disabled]="deleteBtn.loading"
|
||||
[disabled]="$any(deleteBtn).loading"
|
||||
[appApiAction]="deletePromise"
|
||||
>
|
||||
<i class="bwi bwi-trash bwi-lg bwi-fw" [hidden]="deleteBtn.loading" aria-hidden="true"></i>
|
||||
<i
|
||||
class="bwi bwi-trash bwi-lg bwi-fw"
|
||||
[hidden]="$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!deleteBtn.loading"
|
||||
[hidden]="!$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -6,7 +6,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service";
|
||||
import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service";
|
||||
import { CipherService } from "@bitwarden/common/abstractions/cipher.service";
|
||||
import { CollectionService } from "@bitwarden/common/abstractions/collection.service";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { LogService } from "@bitwarden/common/abstractions/log.service";
|
||||
@@ -35,7 +35,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges,
|
||||
stateService: StateService,
|
||||
collectionService: CollectionService,
|
||||
messagingService: MessagingService,
|
||||
eventService: EventService,
|
||||
eventCollectionService: EventCollectionService,
|
||||
policyService: PolicyService,
|
||||
passwordRepromptService: PasswordRepromptService,
|
||||
private broadcasterService: BroadcasterService,
|
||||
@@ -52,7 +52,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges,
|
||||
stateService,
|
||||
collectionService,
|
||||
messagingService,
|
||||
eventService,
|
||||
eventCollectionService,
|
||||
policyService,
|
||||
logService,
|
||||
passwordRepromptService,
|
||||
|
||||
@@ -21,16 +21,16 @@
|
||||
(click)="delete(a)"
|
||||
#deleteBtn
|
||||
[appApiAction]="deletePromises[a.id]"
|
||||
[disabled]="deleteBtn.loading"
|
||||
[disabled]="$any(deleteBtn).loading"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-trash bwi-lg bwi-fw"
|
||||
[hidden]="deleteBtn.loading"
|
||||
[hidden]="$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!deleteBtn.loading"
|
||||
[hidden]="!$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<input
|
||||
id="collection_{{ i }}"
|
||||
type="checkbox"
|
||||
[(ngModel)]="c.checked"
|
||||
[(ngModel)]="$any(c).checked"
|
||||
name="Collection[{{ i }}].Checked"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@ import { UntypedFormBuilder } from "@angular/forms";
|
||||
import { ExportComponent as BaseExportComponent } from "@bitwarden/angular/components/export.component";
|
||||
import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service";
|
||||
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { ExportService } from "@bitwarden/common/abstractions/export.service";
|
||||
import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
@@ -27,7 +27,7 @@ export class ExportComponent extends BaseExportComponent implements OnInit {
|
||||
i18nService: I18nService,
|
||||
platformUtilsService: PlatformUtilsService,
|
||||
exportService: ExportService,
|
||||
eventService: EventService,
|
||||
eventCollectionService: EventCollectionService,
|
||||
policyService: PolicyService,
|
||||
userVerificationService: UserVerificationService,
|
||||
formBuilder: UntypedFormBuilder,
|
||||
@@ -40,7 +40,7 @@ export class ExportComponent extends BaseExportComponent implements OnInit {
|
||||
i18nService,
|
||||
platformUtilsService,
|
||||
exportService,
|
||||
eventService,
|
||||
eventCollectionService,
|
||||
policyService,
|
||||
window,
|
||||
logService,
|
||||
|
||||
@@ -47,17 +47,17 @@
|
||||
class="danger"
|
||||
appA11yTitle="{{ 'delete' | i18n }}"
|
||||
*ngIf="editMode"
|
||||
[disabled]="deleteBtn.loading"
|
||||
[disabled]="$any(deleteBtn).loading"
|
||||
[appApiAction]="deletePromise"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-trash bwi-lg bwi-fw"
|
||||
[hidden]="deleteBtn.loading"
|
||||
[hidden]="$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
|
||||
[hidden]="!deleteBtn.loading"
|
||||
[hidden]="!$any(deleteBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -52,11 +52,11 @@
|
||||
appStopClick
|
||||
appA11yTitle="{{ 'regenerateUsername' | i18n }}"
|
||||
(click)="regenerate()"
|
||||
[disabled]="form.loading"
|
||||
[disabled]="$any(form).loading"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-lg bwi-generate"
|
||||
[ngClass]="form.loading ? 'bwi-spin' : ''"
|
||||
[ngClass]="$any(form).loading ? 'bwi-spin' : ''"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
@@ -353,22 +353,18 @@
|
||||
</div>
|
||||
<div class="box" *ngIf="usernameOptions.type === 'forwarded'" [hidden]="!showOptions">
|
||||
<div class="box-content condensed">
|
||||
<div class="box-content-row" role="radiogroup" aria-labelledby="forwardTypeHeading">
|
||||
<label id="forwardTypeHeading" class="radio-header">{{ "service" | i18n }}</label>
|
||||
<div class="radio-group text-default" appBoxRow *ngFor="let o of forwardOptions">
|
||||
<input
|
||||
type="radio"
|
||||
[(ngModel)]="usernameOptions.forwardedService"
|
||||
name="ForwardType"
|
||||
id="forwardtype_{{ o.value }}"
|
||||
[value]="o.value"
|
||||
(change)="saveUsernameOptions()"
|
||||
[checked]="usernameOptions.forwardedService === o.value"
|
||||
/>
|
||||
<label for="forwardtype_{{ o.value }}">
|
||||
<div class="box-content-row" role="listbox" aria-labelledby="forwardTypeHeading">
|
||||
<label id="forwardTypeHeading">{{ "service" | i18n }}</label>
|
||||
<select
|
||||
id="ForwardTypeDropdown"
|
||||
name="ForwardType"
|
||||
[(ngModel)]="usernameOptions.forwardedService"
|
||||
(change)="saveUsernameOptions()"
|
||||
>
|
||||
<option *ngFor="let o of forwardOptions" [ngValue]="o.value" role="option">
|
||||
{{ o.name }}
|
||||
</label>
|
||||
</div>
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<ng-container *ngIf="usernameOptions.forwardedService === 'simplelogin'">
|
||||
<div class="box-content-row" appBoxRow>
|
||||
@@ -388,7 +384,7 @@
|
||||
<input
|
||||
id="duckduckgo-apikey"
|
||||
type="password"
|
||||
name="DuckDudkGoApiKey"
|
||||
name="DuckDuckGoApiKey"
|
||||
[(ngModel)]="usernameOptions.forwardedDuckDuckGoToken"
|
||||
(blur)="saveUsernameOptions()"
|
||||
/>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
class="edit-button"
|
||||
*ngIf="f.node.id"
|
||||
(click)="editFolder(f.node)"
|
||||
appA11yTitle="{{ 'editFolder' | i18n }}"
|
||||
appA11yTitle="{{ 'editFolder' | i18n }}: {{ f.node.name }}"
|
||||
>
|
||||
<i class="bwi bwi-pencil bwi-fw" aria-hidden="true"></i>
|
||||
</button>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
class="filter-button"
|
||||
(click)="clearFilter()"
|
||||
[attr.aria-pressed]="!hasActiveFilter"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organizationGrouping.name }}"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organizationGrouping.name | i18n }}"
|
||||
>
|
||||
{{ organizationGrouping.name | i18n }}
|
||||
</button>
|
||||
@@ -73,7 +73,7 @@
|
||||
class="filter-button"
|
||||
(click)="clearFilter()"
|
||||
[attr.aria-pressed]="!hasActiveFilter"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organizationGrouping.name }}"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organizationGrouping.name | i18n }}"
|
||||
>
|
||||
{{ organizationGrouping.name | i18n }}
|
||||
</button>
|
||||
@@ -102,18 +102,18 @@
|
||||
<button
|
||||
class="filter-button"
|
||||
(click)="applyOrganizationFilter(organization)"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organization.name }}"
|
||||
appA11yTitle="{{ 'vault' | i18n }}: {{ organization.name }} {{
|
||||
organization.enabled ? '' : '(' + ('organizationIsDisabled' | i18n) + ')'
|
||||
}}"
|
||||
[attr.aria-pressed]="activeFilter.selectedOrganizationId === organization.id"
|
||||
>
|
||||
<i class="bwi bwi-fw bwi-business" aria-hidden="true"></i>
|
||||
{{ organization.name }}
|
||||
</button>
|
||||
<span class="ml-auto">
|
||||
<span *ngIf="!organization.enabled" class="ml-auto">
|
||||
<i
|
||||
*ngIf="!organization.enabled"
|
||||
class="bwi bwi-fw bwi-exclamation-triangle text-danger mr-auto"
|
||||
aria-label="{{ 'organizationIsDisabled' | i18n }}"
|
||||
appA11yTitle="{{ 'organizationIsDisabled' | i18n }}"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { Component } from "@angular/core";
|
||||
|
||||
import { CiphersComponent as BaseCiphersComponent } from "@bitwarden/angular/components/ciphers.component";
|
||||
import { VaultItemsComponent as BaseVaultItemsComponent } from "@bitwarden/angular/components/vault-items.component";
|
||||
import { SearchService } from "@bitwarden/common/abstractions/search.service";
|
||||
import { CipherView } from "@bitwarden/common/models/view/cipher.view";
|
||||
|
||||
import { SearchBarService } from "../layout/search/search-bar.service";
|
||||
|
||||
@Component({
|
||||
selector: "app-vault-ciphers",
|
||||
templateUrl: "ciphers.component.html",
|
||||
selector: "app-vault-items",
|
||||
templateUrl: "vault-items.component.html",
|
||||
})
|
||||
// eslint-disable-next-line rxjs-angular/prefer-takeuntil
|
||||
export class CiphersComponent extends BaseCiphersComponent {
|
||||
export class VaultItemsComponent extends BaseVaultItemsComponent {
|
||||
constructor(searchService: SearchService, searchBarService: SearchBarService) {
|
||||
super(searchService);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div id="vault" class="vault" attr.aria-hidden="{{ showingModal }}">
|
||||
<app-vault-ciphers
|
||||
<app-vault-items
|
||||
id="items"
|
||||
class="items"
|
||||
[activeCipherId]="cipherId"
|
||||
@@ -8,7 +8,7 @@
|
||||
(onAddCipher)="addCipher($event)"
|
||||
(onAddCipherOptions)="addCipherOptions()"
|
||||
>
|
||||
</app-vault-ciphers>
|
||||
</app-vault-items>
|
||||
<app-vault-view
|
||||
id="details"
|
||||
class="details"
|
||||
|
||||
@@ -14,7 +14,7 @@ import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref";
|
||||
import { ModalService } from "@bitwarden/angular/services/modal.service";
|
||||
import { VaultFilter } from "@bitwarden/angular/vault/vault-filter/models/vault-filter.model";
|
||||
import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
|
||||
import { PasswordRepromptService } from "@bitwarden/common/abstractions/passwordReprompt.service";
|
||||
@@ -27,19 +27,19 @@ import { CipherType } from "@bitwarden/common/enums/cipherType";
|
||||
import { EventType } from "@bitwarden/common/enums/eventType";
|
||||
import { CipherView } from "@bitwarden/common/models/view/cipher.view";
|
||||
import { FolderView } from "@bitwarden/common/models/view/folder.view";
|
||||
import { invokeMenu, RendererMenuItem } from "@bitwarden/electron/utils";
|
||||
|
||||
import { invokeMenu, RendererMenuItem } from "../../utils";
|
||||
import { SearchBarService } from "../layout/search/search-bar.service";
|
||||
|
||||
import { AddEditComponent } from "./add-edit.component";
|
||||
import { AttachmentsComponent } from "./attachments.component";
|
||||
import { CiphersComponent } from "./ciphers.component";
|
||||
import { CollectionsComponent } from "./collections.component";
|
||||
import { FolderAddEditComponent } from "./folder-add-edit.component";
|
||||
import { GeneratorComponent } from "./generator.component";
|
||||
import { PasswordHistoryComponent } from "./password-history.component";
|
||||
import { ShareComponent } from "./share.component";
|
||||
import { VaultFilterComponent } from "./vault-filter/vault-filter.component";
|
||||
import { VaultItemsComponent } from "./vault-items.component";
|
||||
import { ViewComponent } from "./view.component";
|
||||
|
||||
const BroadcasterSubscriptionId = "VaultComponent";
|
||||
@@ -51,7 +51,7 @@ const BroadcasterSubscriptionId = "VaultComponent";
|
||||
export class VaultComponent implements OnInit, OnDestroy {
|
||||
@ViewChild(ViewComponent) viewComponent: ViewComponent;
|
||||
@ViewChild(AddEditComponent) addEditComponent: AddEditComponent;
|
||||
@ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;
|
||||
@ViewChild(VaultItemsComponent, { static: true }) vaultItemsComponent: VaultItemsComponent;
|
||||
@ViewChild("generator", { read: ViewContainerRef, static: true })
|
||||
generatorModalRef: ViewContainerRef;
|
||||
@ViewChild(VaultFilterComponent, { static: true }) vaultFilterComponent: VaultFilterComponent;
|
||||
@@ -94,7 +94,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
private syncService: SyncService,
|
||||
private messagingService: MessagingService,
|
||||
private platformUtilsService: PlatformUtilsService,
|
||||
private eventService: EventService,
|
||||
private eventCollectionService: EventCollectionService,
|
||||
private totpService: TotpService,
|
||||
private passwordRepromptService: PasswordRepromptService,
|
||||
private stateService: StateService,
|
||||
@@ -128,12 +128,12 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
await this.openGenerator(false);
|
||||
break;
|
||||
case "syncCompleted":
|
||||
await this.ciphersComponent.reload(this.activeFilter.buildFilter());
|
||||
await this.vaultItemsComponent.reload(this.activeFilter.buildFilter());
|
||||
await this.vaultFilterComponent.reloadCollectionsAndFolders(this.activeFilter);
|
||||
await this.vaultFilterComponent.reloadOrganizations();
|
||||
break;
|
||||
case "refreshCiphers":
|
||||
this.ciphersComponent.refresh();
|
||||
this.vaultItemsComponent.refresh();
|
||||
break;
|
||||
case "modalShown":
|
||||
this.showingModal = true;
|
||||
@@ -242,7 +242,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
selectedOrganizationId: params.selectedOrganizationId,
|
||||
myVaultOnly: params.myVaultOnly ?? false,
|
||||
});
|
||||
await this.ciphersComponent.reload(this.activeFilter.buildFilter());
|
||||
await this.vaultItemsComponent.reload(this.activeFilter.buildFilter());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -309,7 +309,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
label: this.i18nService.t("copyPassword"),
|
||||
click: () => {
|
||||
this.copyValue(cipher, cipher.login.password, "password", "Password");
|
||||
this.eventService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id);
|
||||
this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id);
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -338,7 +338,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
label: this.i18nService.t("copySecurityCode"),
|
||||
click: () => {
|
||||
this.copyValue(cipher, cipher.card.code, "securityCode", "Security Code");
|
||||
this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);
|
||||
this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -429,21 +429,21 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
this.cipherId = cipher.id;
|
||||
this.action = "view";
|
||||
this.go();
|
||||
await this.ciphersComponent.refresh();
|
||||
await this.vaultItemsComponent.refresh();
|
||||
}
|
||||
|
||||
async deletedCipher(cipher: CipherView) {
|
||||
this.cipherId = null;
|
||||
this.action = null;
|
||||
this.go();
|
||||
await this.ciphersComponent.refresh();
|
||||
await this.vaultItemsComponent.refresh();
|
||||
}
|
||||
|
||||
async restoredCipher(cipher: CipherView) {
|
||||
this.cipherId = null;
|
||||
this.action = null;
|
||||
this.go();
|
||||
await this.ciphersComponent.refresh();
|
||||
await this.vaultItemsComponent.refresh();
|
||||
}
|
||||
|
||||
async editCipherAttachments(cipher: CipherView) {
|
||||
@@ -468,7 +468,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
this.modal.onClosed.subscribe(async () => {
|
||||
this.modal = null;
|
||||
if (madeAttachmentChanges) {
|
||||
await this.ciphersComponent.refresh();
|
||||
await this.vaultItemsComponent.refresh();
|
||||
}
|
||||
madeAttachmentChanges = false;
|
||||
});
|
||||
@@ -490,7 +490,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
childComponent.onSharedCipher.subscribe(async () => {
|
||||
this.modal.close();
|
||||
this.viewCipher(cipher);
|
||||
await this.ciphersComponent.refresh();
|
||||
await this.vaultItemsComponent.refresh();
|
||||
});
|
||||
// eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe
|
||||
this.modal.onClosed.subscribe(async () => {
|
||||
@@ -549,7 +549,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||
this.i18nService.t(this.calculateSearchBarLocalizationString(vaultFilter))
|
||||
);
|
||||
this.activeFilter = vaultFilter;
|
||||
await this.ciphersComponent.reload(
|
||||
await this.vaultItemsComponent.reload(
|
||||
this.activeFilter.buildFilter(),
|
||||
vaultFilter.status === "trash"
|
||||
);
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import { Component } from "@angular/core";
|
||||
|
||||
import { ViewCustomFieldsComponent as BaseViewCustomFieldsComponent } from "@bitwarden/angular/components/view-custom-fields.component";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
|
||||
@Component({
|
||||
selector: "app-vault-view-custom-fields",
|
||||
templateUrl: "view-custom-fields.component.html",
|
||||
})
|
||||
export class ViewCustomFieldsComponent extends BaseViewCustomFieldsComponent {
|
||||
constructor(eventService: EventService) {
|
||||
super(eventService);
|
||||
constructor(eventCollectionService: EventCollectionService) {
|
||||
super(eventCollectionService);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,16 +64,16 @@
|
||||
appA11yTitle="{{ 'checkPassword' | i18n }}"
|
||||
(click)="checkPassword()"
|
||||
[appApiAction]="checkPasswordPromise"
|
||||
[disabled]="checkPasswordBtn.loading"
|
||||
[disabled]="$any(checkPasswordBtn).loading"
|
||||
>
|
||||
<i
|
||||
class="bwi bwi-lg bwi-check-circle"
|
||||
[hidden]="checkPasswordBtn.loading"
|
||||
[hidden]="$any(checkPasswordBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-lg bwi-spinner bwi-spin"
|
||||
[hidden]="!checkPasswordBtn.loading"
|
||||
[hidden]="!$any(checkPasswordBtn).loading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
@@ -472,12 +472,12 @@
|
||||
<small class="row-sub-label">{{ attachment.sizeName }}</small>
|
||||
<i
|
||||
class="bwi bwi-download bwi-fw row-sub-icon"
|
||||
*ngIf="!attachment.downloading"
|
||||
*ngIf="!$any(attachment).downloading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
<i
|
||||
class="bwi bwi-spinner bwi-fw bwi-spin row-sub-icon"
|
||||
*ngIf="attachment.downloading"
|
||||
*ngIf="$any(attachment).downloading"
|
||||
aria-hidden="true"
|
||||
></i>
|
||||
</button>
|
||||
|
||||
@@ -13,7 +13,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service";
|
||||
import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service";
|
||||
import { CipherService } from "@bitwarden/common/abstractions/cipher.service";
|
||||
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
||||
import { EventService } from "@bitwarden/common/abstractions/event.service";
|
||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||
import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service";
|
||||
import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
@@ -47,7 +47,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges {
|
||||
broadcasterService: BroadcasterService,
|
||||
ngZone: NgZone,
|
||||
changeDetectorRef: ChangeDetectorRef,
|
||||
eventService: EventService,
|
||||
eventCollectionService: EventCollectionService,
|
||||
apiService: ApiService,
|
||||
private messagingService: MessagingService,
|
||||
passwordRepromptService: PasswordRepromptService,
|
||||
@@ -68,7 +68,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges {
|
||||
broadcasterService,
|
||||
ngZone,
|
||||
changeDetectorRef,
|
||||
eventService,
|
||||
eventCollectionService,
|
||||
apiService,
|
||||
passwordRepromptService,
|
||||
logService,
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Gedeaktiveer"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maks toegangsaantal bereik"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "معطّل"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "إزالة كلمة المرور"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "تمت إزالة كلمة المرور"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "هل أنت متأكد من أنك تريد إزالة كلمة المرور؟"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "تم بلوغ الحد الأقصى لعدد الدخول"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Sıradan çıxarıldı"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Parolu çıxart"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Parol çıxarıldı"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Parolu çıxartmaq istədiyinizə əminsiniz?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maksimal müraciət sayına çatıldı"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Адключана"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Выдаліць пароль"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Пароль выдалены"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Вы сапраўды хочаце выдаліць пароль?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Дасягнута максімальная колькасць доступаў"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Изключено"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Премахване на паролата"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Паролата е премахната"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Наистина ли искате да премахнете паролата?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Достигнат е максималният брой достъпвания"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Deshabilitat"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Suprimeix la contrasenya"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Contrasenya suprimida"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Esteu segur que voleu suprimir la contrasenya?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "S'ha assolit el recompte màxim d'accesos"
|
||||
},
|
||||
|
||||
@@ -782,11 +782,11 @@
|
||||
"message": "Hlavní heslo si můžete změnit na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?"
|
||||
},
|
||||
"fingerprintPhrase": {
|
||||
"message": "Fráze otisku prstu",
|
||||
"message": "Fráze otisku účtu",
|
||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||
},
|
||||
"yourAccountsFingerprint": {
|
||||
"message": "Fráze otisku prstu vašeho účtu",
|
||||
"message": "Fráze otisku vašeho účtu",
|
||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||
},
|
||||
"goToWebVault": {
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Zakázáno"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Dosažen maximální počet přístupů"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Deaktiviert"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Passwort entfernen"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Passwort entfernt"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Bist du sicher, dass du das Passwort entfernen möchtest?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maximale Zugriffsanzahl erreicht"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Απενεργοποιημένο"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Φτάσατε στον μέγιστο αριθμό πρόσβασης"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"message": "Share"
|
||||
},
|
||||
"moveToOrganization": {
|
||||
"message": "Move to Organisation"
|
||||
"message": "Move to organisation"
|
||||
},
|
||||
"movedItemToOrg": {
|
||||
"message": "$ITEMNAME$ moved to $ORGNAME$",
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Deshabilitado"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Eliminar contraseña"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Contraseña eliminada"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "¿Está seguro que desea eliminar la contraseña?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Se ha alcanzado el número máximo de accesos"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Keelatud"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Eemalda parool"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Parool on eemaldatud"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Oled kindel, et soovid selle parooli eemaldada?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maksimaalne ligipääsude arv on saavutatud"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Desgaitua"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Sarbide kopuru maximoa gaindituta"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "غیرفعال شد"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "به حداکثر تعداد دسترسی رسیده است"
|
||||
},
|
||||
|
||||
@@ -1563,7 +1563,7 @@
|
||||
"message": "Uusi pääsalasanasi ei täytä käytännön määrittämiä vaatimuksia."
|
||||
},
|
||||
"acceptPolicies": {
|
||||
"message": "Valitsemalla tämän ruudun hyväksyt seuraavat:"
|
||||
"message": "Valitsemalla tämän hyväksyt seuraavat:"
|
||||
},
|
||||
"acceptPoliciesRequired": {
|
||||
"message": "Palveluehtoja ja tietosuojakäytäntöä ei ole vahvistettu."
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Poistettu käytöstä"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Poista salasana"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Salasana poistettiin"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Haluatko varmasti poistaa salasanan?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Käyttökertojen enimmäismäärä on saavutettu"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Désactivé"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Nombre maximum d'accès atteint"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "מושבת"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "מספר הגישות המרבי הושג"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Onemogućeno"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Ukloni lozinku"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Lozinka uklonjena"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Sigurno želiš ukloniti lozinku?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Dostignut najveći broj pristupanja"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Letiltva"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Jelszó eltávolítása"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "A jelszó eltávolításra került."
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Biztosan eltávolításra kerüljön ez a jelszó?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "A maximális hozzáférések száma elérésre került."
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Dinonaktifkan"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Jumlah akses maksimum tercapai"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabilitato"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Rimuovi la password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password rimossa"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Sei sicuro di voler rimuovere la password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Numero massimo di accessi raggiunto"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "無効"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "パスワードを削除"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "パスワードを削除しました"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "パスワードを削除してもよろしいですか?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "最大アクセス数に達しました"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "ಗರಿಷ್ಠ ಪ್ರವೇಶ ಎಣಿಕೆ ತಲುಪಿದೆ"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "비활성화됨"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "최대 접근 횟수 도달"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Atspējots"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Noņemt paroli"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Parole noņemta"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Vai tiešām noņemt paroli?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Sasniegts lielākais pieļaujamais piekļuvju skaits"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Deaktivert"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maksimalt antall tilganger nådd"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Uitgeschakeld"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Wachtwoord verwijderen"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Wachtwoord verwijderd"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Weet je zeker dat je het wachtwoord wilt verwijderen?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maximum aantal keren benaderd"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Wyłączona"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Usuń hasło"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Hasło zostało usunięte"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Czy na pewno chcesz usunąć hasło?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maksymalna liczba dostępów została osiągnięta"
|
||||
},
|
||||
@@ -1844,7 +1853,7 @@
|
||||
"message": "Czas blokowania sejfu przekracza limit określony przez organizację."
|
||||
},
|
||||
"resetPasswordPolicyAutoEnroll": {
|
||||
"message": "Automatyczne rejestrowanie użytkowników do resetowania hasła"
|
||||
"message": "Automatyczne rejestrowanie użytkowników"
|
||||
},
|
||||
"resetPasswordAutoEnrollInviteWarning": {
|
||||
"message": "Ta organizacja posługuje się zasadą, która automatycznie rejestruje użytkowników do resetowania hasła. Rejestracja umożliwia administratorom organizacji zmianę Twojego hasła głównego."
|
||||
@@ -2029,7 +2038,7 @@
|
||||
"message": "Logowanie jako"
|
||||
},
|
||||
"rememberEmail": {
|
||||
"message": "Zapamiętaj e-mail"
|
||||
"message": "Zapamiętaj adres e-mail"
|
||||
},
|
||||
"notYou": {
|
||||
"message": "To nie Ty?"
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Desativado"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Número máximo de acessos atingido"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Desativado"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remover palavra-passe"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Palavra-passe removida"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Tem a certeza de que deseja remover a palavra-passe?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Dezactivat"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "S-a atins numărul maxim de accesări"
|
||||
},
|
||||
|
||||
@@ -671,7 +671,7 @@
|
||||
"message": "Настройки двухэтапной аутентификации"
|
||||
},
|
||||
"selfHostedEnvironment": {
|
||||
"message": "Окружение собственного хостинга"
|
||||
"message": "Окружение пользовательского хостинга"
|
||||
},
|
||||
"selfHostedEnvironmentFooter": {
|
||||
"message": "Укажите URL Bitwarden на вашем сервере."
|
||||
@@ -1468,7 +1468,7 @@
|
||||
"message": "Чтобы получить доступ к хранилищу после выхода из него требуется повторная авторизация."
|
||||
},
|
||||
"lock": {
|
||||
"message": "Заблокировать",
|
||||
"message": "Блокировка",
|
||||
"description": "Verb form: to make secure or inaccesible by"
|
||||
},
|
||||
"trash": {
|
||||
@@ -1766,7 +1766,7 @@
|
||||
"message": "Скопировать ссылку в буфер обмена после сохранения, чтобы поделиться этой Send."
|
||||
},
|
||||
"sendDisabled": {
|
||||
"message": "Send отключена",
|
||||
"message": "Send удалена",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendDisabledWarning": {
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Отключено"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Удалить пароль"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Пароль удален"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Вы уверены, что хотите удалить пароль?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Достигнут максимум обращений"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Zakázané"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Odstrániť heslo"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Heslo bolo odstránené"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Naozaj chcete odstrániť heslo?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Bol dosiahnutý maximálny počet prístupov"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Онемогућено"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Достигнут максималан број приступа"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Inaktiverad"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Ta bort lösenord"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Tog bort lösenord"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Är du säker på att du vill ta bort lösenordet?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Det maximala antalet åtkomster har uppnåtts"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Devre dışı"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Parolayı kaldır"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Parola kaldırıldı"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Parolayı kaldırmak istediğinizden emin misiniz?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Maksimum erişim sayısına ulaşıldı"
|
||||
},
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "Вимкнено"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Вилучити пароль"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Пароль вилучено"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Ви дійсно хочете вилучити пароль?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Досягнуто максимальну кількість доступів"
|
||||
},
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
"message": "Chuyển tới Tổ chức"
|
||||
},
|
||||
"movedItemToOrg": {
|
||||
"message": "$ITEMNAME$ moved to $ORGNAME$",
|
||||
"message": "$ITEMNAME$ đã di chuyển tới $ORGNAME$",
|
||||
"placeholders": {
|
||||
"itemname": {
|
||||
"content": "$1",
|
||||
@@ -805,7 +805,7 @@
|
||||
"message": "Đồng bộ thất bại"
|
||||
},
|
||||
"yourVaultIsLocked": {
|
||||
"message": "Kho mật khẩu đã bị khóa. Xác minh mật khẩu chinhs của bạn để mở."
|
||||
"message": "Kho mật khẩu đã bị khóa. Xác minh mật khẩu chính của bạn để mở."
|
||||
},
|
||||
"unlock": {
|
||||
"message": "Mở khóa"
|
||||
@@ -1213,7 +1213,7 @@
|
||||
"description": "Domain name. Ex. website.com"
|
||||
},
|
||||
"domainName": {
|
||||
"message": "Domain name",
|
||||
"message": "Tên miền",
|
||||
"description": "Domain name. Ex. website.com"
|
||||
},
|
||||
"host": {
|
||||
@@ -1662,7 +1662,7 @@
|
||||
"message": "Văn bản"
|
||||
},
|
||||
"deletionDate": {
|
||||
"message": "Deletion date"
|
||||
"message": "Ngày xóa"
|
||||
},
|
||||
"deletionDateDesc": {
|
||||
"message": "Send sẽ được xóa vĩnh viễn vào ngày và giờ được chỉ định.",
|
||||
@@ -1703,7 +1703,7 @@
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"sendLinkLabel": {
|
||||
"message": "Send link",
|
||||
"message": "Gửi liên kết",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"textHiddenByDefault": {
|
||||
@@ -1752,14 +1752,14 @@
|
||||
"message": "1 ngày"
|
||||
},
|
||||
"custom": {
|
||||
"message": "Custom"
|
||||
"message": "Tùy chỉnh"
|
||||
},
|
||||
"deleteSendConfirmation": {
|
||||
"message": "Bạn có chắc chắn muốn xóa Send này?",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"copySendLinkToClipboard": {
|
||||
"message": "Copy Send link to clipboard",
|
||||
"message": "Sao chép liên kết tới Khay nhớ tạm",
|
||||
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
|
||||
},
|
||||
"copySendLinkOnSave": {
|
||||
@@ -1777,58 +1777,67 @@
|
||||
"message": "Sao chép liên kết"
|
||||
},
|
||||
"disabled": {
|
||||
"message": "Disabled"
|
||||
"message": "Đã tắt"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "Remove password"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "Password removed"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "Are you sure you want to remove the password?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "Max access count reached"
|
||||
"message": "Đã đạt đến số lượng truy cập tối đa"
|
||||
},
|
||||
"expired": {
|
||||
"message": "Expired"
|
||||
"message": "Đã hết hạn"
|
||||
},
|
||||
"pendingDeletion": {
|
||||
"message": "Đang chờ xóa"
|
||||
},
|
||||
"webAuthnAuthenticate": {
|
||||
"message": "Authenticate WebAuthn"
|
||||
"message": "Xác thực WebAuthn"
|
||||
},
|
||||
"hideEmail": {
|
||||
"message": "Hide my email address from recipients."
|
||||
"message": "Ẩn địa chỉ email của tôi khỏi người nhận."
|
||||
},
|
||||
"sendOptionsPolicyInEffect": {
|
||||
"message": "One or more organization policies are affecting your Send options."
|
||||
"message": "Có một hoặc vài chính sách của tổ chức đang làm ảnh hưởng đến cài đặt tạo mật khẩu của bạn."
|
||||
},
|
||||
"emailVerificationRequired": {
|
||||
"message": "Email verification required"
|
||||
"message": "Yêu cầu xác nhận danh tính qua Email"
|
||||
},
|
||||
"emailVerificationRequiredDesc": {
|
||||
"message": "You must verify your email to use this feature."
|
||||
"message": "Bạn phải xác minh email của mình để sử dụng tính năng này."
|
||||
},
|
||||
"passwordPrompt": {
|
||||
"message": "Master password re-prompt"
|
||||
"message": "Nhắc lại mật khẩu chính"
|
||||
},
|
||||
"passwordConfirmation": {
|
||||
"message": "Master password confirmation"
|
||||
"message": "Xác nhận mật khẩu chính"
|
||||
},
|
||||
"passwordConfirmationDesc": {
|
||||
"message": "This action is protected. To continue, please re-enter your master password to verify your identity."
|
||||
"message": "Hành động này được bảo vệ. Để tiếp tục, vui lòng nhập lại mật khẩu chính của bạn để xác minh danh tính của bạn."
|
||||
},
|
||||
"updatedMasterPassword": {
|
||||
"message": "Updated master password"
|
||||
"message": "Mật khẩu chính đã được cập nhật"
|
||||
},
|
||||
"updateMasterPassword": {
|
||||
"message": "Update master password"
|
||||
"message": "Cập nhật Mật khẩu chính"
|
||||
},
|
||||
"updateMasterPasswordWarning": {
|
||||
"message": "Your master password was recently changed by an administrator in your organization. In order to access the vault, you must update it now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour."
|
||||
"message": "Mật khẩu chính của bạn gần đây đã được thay đổi bởi một quản trị viên trong tổ chức của bạn. Để truy cập Kho, bạn phải cập nhật nó ngay bây giờ. Tiếp tục sẽ đăng xuất bạn khỏi phiên hiện tại của bạn, yêu cầu bạn đăng nhập lại. Các phiên hoạt động trên các thiết bị khác có thể tiếp tục hoạt động trong tối đa một giờ."
|
||||
},
|
||||
"hours": {
|
||||
"message": "Hours"
|
||||
"message": "Giờ"
|
||||
},
|
||||
"minutes": {
|
||||
"message": "Minutes"
|
||||
"message": "Phút"
|
||||
},
|
||||
"vaultTimeoutPolicyInEffect": {
|
||||
"message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)",
|
||||
"message": "Chính sách tổ chức của bạn đang ảnh hưởng đến thời gian chờ Kho của bạn. Thời gian chờ kho tối đa được phép là $HOURS$ giờ và $MINUTES$ phút",
|
||||
"placeholders": {
|
||||
"hours": {
|
||||
"content": "$1",
|
||||
@@ -1841,10 +1850,10 @@
|
||||
}
|
||||
},
|
||||
"vaultTimeoutTooLarge": {
|
||||
"message": "Your vault timeout exceeds the restrictions set by your organization."
|
||||
"message": "Thời gian chờ Kho của bạn vượt quá các hạn chế do tổ chức của bạn đặt ra."
|
||||
},
|
||||
"resetPasswordPolicyAutoEnroll": {
|
||||
"message": "Automatic enrollment"
|
||||
"message": "Đăng ký tự động"
|
||||
},
|
||||
"resetPasswordAutoEnrollInviteWarning": {
|
||||
"message": "This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password."
|
||||
@@ -1856,13 +1865,13 @@
|
||||
"message": "One or more organization policies prevents you from exporting your personal vault."
|
||||
},
|
||||
"addAccount": {
|
||||
"message": "Add account"
|
||||
"message": "Thêm tài khoản"
|
||||
},
|
||||
"removeMasterPassword": {
|
||||
"message": "Remove master password"
|
||||
"message": "Xóa mật khẩu chính"
|
||||
},
|
||||
"removedMasterPassword": {
|
||||
"message": "Master password removed"
|
||||
"message": "Đã xóa mật khẩu chính"
|
||||
},
|
||||
"convertOrganizationEncryptionDesc": {
|
||||
"message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.",
|
||||
@@ -1874,7 +1883,7 @@
|
||||
}
|
||||
},
|
||||
"leaveOrganization": {
|
||||
"message": "Leave organization"
|
||||
"message": "Rời khỏi tổ chức"
|
||||
},
|
||||
"leaveOrganizationConfirmation": {
|
||||
"message": "Are you sure you want to leave this organization?"
|
||||
@@ -1892,7 +1901,7 @@
|
||||
"message": "No more than 5 accounts may be logged in at the same time."
|
||||
},
|
||||
"accountPreferences": {
|
||||
"message": "Preferences"
|
||||
"message": "Tuỳ chỉnh"
|
||||
},
|
||||
"appPreferences": {
|
||||
"message": "App settings (all accounts)"
|
||||
@@ -1910,10 +1919,10 @@
|
||||
}
|
||||
},
|
||||
"switchAccount": {
|
||||
"message": "Switch account"
|
||||
"message": "Chuyển tài khoản"
|
||||
},
|
||||
"options": {
|
||||
"message": "Options"
|
||||
"message": "Tùy chọn"
|
||||
},
|
||||
"sessionTimeout": {
|
||||
"message": "Your session has timed out. Please go back and try logging in again."
|
||||
@@ -1937,19 +1946,19 @@
|
||||
"message": "Đã mở khóa"
|
||||
},
|
||||
"generator": {
|
||||
"message": "Generator"
|
||||
"message": "Tạo"
|
||||
},
|
||||
"whatWouldYouLikeToGenerate": {
|
||||
"message": "What would you like to generate?"
|
||||
"message": "Bạn muốn tạo gì?"
|
||||
},
|
||||
"passwordType": {
|
||||
"message": "Password type"
|
||||
"message": "Loại mật khẩu"
|
||||
},
|
||||
"regenerateUsername": {
|
||||
"message": "Regenerate username"
|
||||
},
|
||||
"generateUsername": {
|
||||
"message": "Generate username"
|
||||
"message": "Tạo tên tài khoản"
|
||||
},
|
||||
"usernameType": {
|
||||
"message": "Username type"
|
||||
@@ -1968,22 +1977,22 @@
|
||||
"message": "Use your domain's configured catch-all inbox."
|
||||
},
|
||||
"random": {
|
||||
"message": "Random"
|
||||
"message": "Ngẫu nhiên"
|
||||
},
|
||||
"randomWord": {
|
||||
"message": "Random word"
|
||||
"message": "Từ ngẫu nhiên"
|
||||
},
|
||||
"websiteName": {
|
||||
"message": "Website name"
|
||||
"message": "Tên website"
|
||||
},
|
||||
"service": {
|
||||
"message": "Service"
|
||||
"message": "Dịch vụ"
|
||||
},
|
||||
"allVaults": {
|
||||
"message": "All vaults"
|
||||
"message": "Tất cả kho"
|
||||
},
|
||||
"searchOrganization": {
|
||||
"message": "Search organization"
|
||||
"message": "Tìm tổ chức"
|
||||
},
|
||||
"searchMyVault": {
|
||||
"message": "Search my vault"
|
||||
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "已禁用"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "移除密码"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "密码已移除"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "确定要移除此密码吗?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "已达最大访问次数"
|
||||
},
|
||||
@@ -2035,7 +2044,7 @@
|
||||
"message": "不是你?"
|
||||
},
|
||||
"newAroundHere": {
|
||||
"message": "新建在这里?"
|
||||
"message": "初来乍到吗?"
|
||||
},
|
||||
"loggingInTo": {
|
||||
"message": "正在登录到 $DOMAIN$",
|
||||
|
||||
@@ -958,7 +958,7 @@
|
||||
"message": "即使最小化到選單列,也在 Docker 中顯示 Bitwarden 圖示。"
|
||||
},
|
||||
"confirmTrayTitle": {
|
||||
"message": "確認禁用系統匣"
|
||||
"message": "確認隱藏到系統匣"
|
||||
},
|
||||
"confirmTrayDesc": {
|
||||
"message": "禁用此設定也將禁用所有其他系統匣相關設定。"
|
||||
@@ -1779,6 +1779,15 @@
|
||||
"disabled": {
|
||||
"message": "已停用"
|
||||
},
|
||||
"removePassword": {
|
||||
"message": "移除密碼"
|
||||
},
|
||||
"removedPassword": {
|
||||
"message": "已移除密碼"
|
||||
},
|
||||
"removePasswordConfirmation": {
|
||||
"message": "您確定要移除密碼嗎?"
|
||||
},
|
||||
"maxAccessCountReached": {
|
||||
"message": "已達最大存取次數"
|
||||
},
|
||||
|
||||
@@ -6,20 +6,20 @@ import { StateFactory } from "@bitwarden/common/factories/stateFactory";
|
||||
import { GlobalState } from "@bitwarden/common/models/domain/global-state";
|
||||
import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service";
|
||||
import { StateService } from "@bitwarden/common/services/state.service";
|
||||
import { ElectronLogService } from "@bitwarden/electron/services/electronLog.service";
|
||||
import { ElectronMainMessagingService } from "@bitwarden/electron/services/electronMainMessaging.service";
|
||||
import { ElectronStorageService } from "@bitwarden/electron/services/electronStorage.service";
|
||||
import { TrayMain } from "@bitwarden/electron/tray.main";
|
||||
import { UpdaterMain } from "@bitwarden/electron/updater.main";
|
||||
import { WindowMain } from "@bitwarden/electron/window.main";
|
||||
|
||||
import { BiometricMain } from "./main/biometric/biometric.main";
|
||||
import { DesktopCredentialStorageListener } from "./main/desktopCredentialStorageListener";
|
||||
import { DesktopCredentialStorageListener } from "./main/desktop-credential-storage-listener";
|
||||
import { MenuMain } from "./main/menu/menu.main";
|
||||
import { MessagingMain } from "./main/messaging.main";
|
||||
import { NativeMessagingMain } from "./main/nativeMessaging.main";
|
||||
import { PowerMonitorMain } from "./main/powerMonitor.main";
|
||||
import { NativeMessagingMain } from "./main/native-messaging.main";
|
||||
import { PowerMonitorMain } from "./main/power-monitor.main";
|
||||
import { TrayMain } from "./main/tray.main";
|
||||
import { UpdaterMain } from "./main/updater.main";
|
||||
import { WindowMain } from "./main/window.main";
|
||||
import { Account } from "./models/account";
|
||||
import { ElectronLogService } from "./services/electron-log.service";
|
||||
import { ElectronMainMessagingService } from "./services/electron-main-messaging.service";
|
||||
import { ElectronStorageService } from "./services/electron-storage.service";
|
||||
import { I18nService } from "./services/i18n.service";
|
||||
|
||||
export class Main {
|
||||
@@ -105,15 +105,7 @@ export class Main {
|
||||
(win) => this.trayMain.setupWindowListeners(win)
|
||||
);
|
||||
this.messagingMain = new MessagingMain(this, this.stateService);
|
||||
this.updaterMain = new UpdaterMain(
|
||||
this.i18nService,
|
||||
this.windowMain,
|
||||
"clients",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"bitwarden"
|
||||
);
|
||||
this.updaterMain = new UpdaterMain(this.i18nService, this.windowMain, "bitwarden");
|
||||
this.menuMain = new MenuMain(this);
|
||||
this.powerMonitorMain = new PowerMonitorMain(this);
|
||||
this.trayMain = new TrayMain(this.windowMain, this.i18nService, this.stateService);
|
||||
|
||||
@@ -4,7 +4,8 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { LogService } from "@bitwarden/common/abstractions/log.service";
|
||||
import { StateService } from "@bitwarden/common/abstractions/state.service";
|
||||
import { biometrics } from "@bitwarden/desktop-native";
|
||||
import { WindowMain } from "@bitwarden/electron/window.main";
|
||||
|
||||
import { WindowMain } from "../window.main";
|
||||
|
||||
import { BiometricMain } from "./biometric.main";
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { BrowserWindow, clipboard, dialog, MenuItemConstructorOptions } from "electron";
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { UpdaterMain } from "@bitwarden/electron/updater.main";
|
||||
import { isMacAppStore, isSnapStore, isWindowsStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMacAppStore, isSnapStore, isWindowsStore } from "../../utils";
|
||||
import { UpdaterMain } from "../updater.main";
|
||||
|
||||
import { IMenubarMenu } from "./menubar";
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@ import { BrowserWindow, dialog, MenuItemConstructorOptions, shell } from "electr
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
|
||||
import { isMacAppStore, isWindowsStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMacAppStore, isWindowsStore } from "../../utils";
|
||||
|
||||
import { IMenubarMenu } from "./menubar";
|
||||
|
||||
|
||||
@@ -2,8 +2,9 @@ import { BrowserWindow, MenuItemConstructorOptions } from "electron";
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
|
||||
import { UpdaterMain } from "@bitwarden/electron/updater.main";
|
||||
import { isMac } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMac } from "../../utils";
|
||||
import { UpdaterMain } from "../updater.main";
|
||||
|
||||
import { FirstMenu } from "./menu.first";
|
||||
import { MenuAccount } from "./menu.updater";
|
||||
|
||||
@@ -2,8 +2,9 @@ import { BrowserWindow, MenuItemConstructorOptions } from "electron";
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
|
||||
import { UpdaterMain } from "@bitwarden/electron/updater.main";
|
||||
import { isMac, isMacAppStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMac, isMacAppStore } from "../../utils";
|
||||
import { UpdaterMain } from "../updater.main";
|
||||
|
||||
import { FirstMenu } from "./menu.first";
|
||||
import { MenuAccount } from "./menu.updater";
|
||||
|
||||
@@ -2,8 +2,9 @@ import { BrowserWindow, dialog, MenuItem, MenuItemConstructorOptions } from "ele
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
|
||||
import { UpdaterMain } from "@bitwarden/electron/updater.main";
|
||||
import { isMacAppStore, isSnapStore, isWindowsStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMacAppStore, isSnapStore, isWindowsStore } from "../../utils";
|
||||
import { UpdaterMain } from "../updater.main";
|
||||
|
||||
import { MenuAccount } from "./menu.updater";
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { shell, MenuItemConstructorOptions } from "electron";
|
||||
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
import { isMacAppStore, isWindowsStore } from "@bitwarden/electron/utils";
|
||||
|
||||
import { isMacAppStore, isWindowsStore } from "../../utils";
|
||||
|
||||
import { AboutMenu } from "./menu.about";
|
||||
import { IMenubarMenu } from "./menubar";
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
import { app, Menu } from "electron";
|
||||
|
||||
import { BaseMenu } from "@bitwarden/electron/baseMenu";
|
||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||
|
||||
import { Main } from "../../main";
|
||||
import { WindowMain } from "../window.main";
|
||||
|
||||
import { MenuUpdateRequest } from "./menu.updater";
|
||||
import { Menubar } from "./menubar";
|
||||
|
||||
const cloudWebVaultUrl = "https://vault.bitwarden.com";
|
||||
|
||||
export class MenuMain extends BaseMenu {
|
||||
export class MenuMain {
|
||||
private i18nService: I18nService;
|
||||
private windowMain: WindowMain;
|
||||
|
||||
constructor(private main: Main) {
|
||||
super(main.i18nService, main.windowMain);
|
||||
this.i18nService = main.i18nService;
|
||||
this.windowMain = main.windowMain;
|
||||
}
|
||||
|
||||
async init() {
|
||||
@@ -49,4 +54,84 @@ export class MenuMain extends BaseMenu {
|
||||
}
|
||||
return webVaultUrl;
|
||||
}
|
||||
|
||||
private initContextMenu() {
|
||||
if (this.windowMain.win == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const selectionMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t("copy"),
|
||||
role: "copy",
|
||||
},
|
||||
{ type: "separator" },
|
||||
{
|
||||
label: this.i18nService.t("selectAll"),
|
||||
role: "selectAll",
|
||||
},
|
||||
]);
|
||||
|
||||
const inputMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t("undo"),
|
||||
role: "undo",
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t("redo"),
|
||||
role: "redo",
|
||||
},
|
||||
{ type: "separator" },
|
||||
{
|
||||
label: this.i18nService.t("cut"),
|
||||
role: "cut",
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t("copy"),
|
||||
role: "copy",
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t("paste"),
|
||||
role: "paste",
|
||||
},
|
||||
{ type: "separator" },
|
||||
{
|
||||
label: this.i18nService.t("selectAll"),
|
||||
role: "selectAll",
|
||||
},
|
||||
]);
|
||||
|
||||
const inputSelectionMenu = Menu.buildFromTemplate([
|
||||
{
|
||||
label: this.i18nService.t("cut"),
|
||||
role: "cut",
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t("copy"),
|
||||
role: "copy",
|
||||
},
|
||||
{
|
||||
label: this.i18nService.t("paste"),
|
||||
role: "paste",
|
||||
},
|
||||
{ type: "separator" },
|
||||
{
|
||||
label: this.i18nService.t("selectAll"),
|
||||
role: "selectAll",
|
||||
},
|
||||
]);
|
||||
|
||||
this.windowMain.win.webContents.on("context-menu", (e, props) => {
|
||||
const selected = props.selectionText && props.selectionText.trim() !== "";
|
||||
if (props.isEditable && selected) {
|
||||
inputSelectionMenu.popup({ window: this.windowMain.win });
|
||||
} else if (props.isEditable) {
|
||||
inputMenu.popup({ window: this.windowMain.win });
|
||||
} else if (selected) {
|
||||
selectionMenu.popup({ window: this.windowMain.win });
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user