diff --git a/src/popup/components/action-buttons.component.html b/src/popup/components/action-buttons.component.html
index 4d4772201f..866c396bbd 100644
--- a/src/popup/components/action-buttons.component.html
+++ b/src/popup/components/action-buttons.component.html
@@ -7,27 +7,30 @@
+ (click)="copy(cipher, cipher.login.username, 'username', 'Username')"
+ [ngClass]="{disabled: !cipher.login.username}">
+ (click)="copy(cipher, cipher.login.password, 'password', 'Password')"
+ [ngClass]="{disabled: !cipher.login.password}">
+ (click)="copy(cipher, cipher.card.number, 'number', 'Card Number')" [ngClass]="{disabled: !cipher.card.number}">
+ (click)="copy(cipher, cipher.card.code, 'securityCode', 'Security Code')"
+ [ngClass]="{disabled: !cipher.card.code}">
+ (click)="copy(cipher, cipher.notes, 'note', 'Note')" [ngClass]="{disabled: !cipher.notes}">
diff --git a/src/popup/components/action-buttons.component.ts b/src/popup/components/action-buttons.component.ts
index d09260f8d4..0401b41e33 100644
--- a/src/popup/components/action-buttons.component.ts
+++ b/src/popup/components/action-buttons.component.ts
@@ -11,9 +11,11 @@ import { Angulartics2 } from 'angulartics2';
import { BrowserApi } from '../../browser/browserApi';
import { CipherType } from 'jslib/enums/cipherType';
+import { EventType } from 'jslib/enums/eventType';
import { CipherView } from 'jslib/models/view/cipherView';
+import { EventService } from 'jslib/abstractions/event.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
@@ -32,7 +34,7 @@ export class ActionButtonsComponent {
constructor(private analytics: Angulartics2, private toasterService: ToasterService,
private i18nService: I18nService, private platformUtilsService: PlatformUtilsService,
- private popupUtilsService: PopupUtilsService) { }
+ private popupUtilsService: PopupUtilsService, private eventService: EventService) { }
launch() {
if (this.cipher.type !== CipherType.Login || !this.cipher.login.canLaunch) {
@@ -46,7 +48,7 @@ export class ActionButtonsComponent {
}
}
- copy(value: string, typeI18nKey: string, aType: string) {
+ copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {
if (value == null) {
return;
}
@@ -55,6 +57,12 @@ export class ActionButtonsComponent {
this.platformUtilsService.copyToClipboard(value, { window: window });
this.toasterService.popAsync('info', null,
this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));
+
+ if (typeI18nKey === 'password') {
+ this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);
+ } else if (typeI18nKey === 'securityCode') {
+ this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);
+ }
}
view() {