1
0
mirror of https://github.com/bitwarden/desktop.git synced 2024-11-17 10:45:41 +01:00

more login to cipher renames

This commit is contained in:
Kyle Spearrin 2017-10-14 16:55:47 -04:00
parent 884bce4ec4
commit 0fc9f498df
12 changed files with 145 additions and 145 deletions

View File

@ -134,26 +134,26 @@
data: { authorize: true },
params: { animation: null, from: 'vault' }
})
.state('viewLogin', {
url: '/view-login?loginId',
templateUrl: 'app/vault/views/vaultViewLogin.html',
controller: 'vaultViewLoginController',
.state('viewCipher', {
url: '/view-cipher?cipherId',
templateUrl: 'app/vault/views/vaultViewCipher.html',
controller: 'vaultViewCipherController',
data: { authorize: true },
params: { animation: null, from: 'vault' }
})
.state('addLogin', {
url: '/add-login',
templateUrl: 'app/vault/views/vaultAddLogin.html',
controller: 'vaultAddLoginController',
.state('addCipher', {
url: '/add-cipher',
templateUrl: 'app/vault/views/vaultAddCipher.html',
controller: 'vaultAddCipherController',
data: { authorize: true },
params: { animation: null, name: null, uri: null, folderId: null, login: null, from: 'vault' }
params: { animation: null, name: null, uri: null, folderId: null, cipher: null, from: 'vault' }
})
.state('editLogin', {
url: '/edit-login?loginId',
templateUrl: 'app/vault/views/vaultEditLogin.html',
controller: 'vaultEditLoginController',
.state('editCipher', {
url: '/edit-cipher?cipherId',
templateUrl: 'app/vault/views/vaultEditCipher.html',
controller: 'vaultEditCipherController',
data: { authorize: true },
params: { animation: null, fromView: true, login: null, from: 'vault' }
params: { animation: null, fromView: true, cipher: null, from: 'vault' }
})
.state('attachments', {
url: '/attachments?id',

View File

@ -1,7 +1,7 @@
angular
.module('bit.current')
.controller('currentController', function ($scope, loginService, utilsService, toastr, $q, $window, $state, $timeout,
.controller('currentController', function ($scope, loginService, utilsService, toastr, $window, $state, $timeout,
autofillService, $analytics, i18nService, totpService, tokenService) {
$scope.i18n = i18nService;
@ -10,7 +10,7 @@ angular
domain = null,
canAutofill = false;
$scope.logins = [];
$scope.ciphers = [];
$scope.loaded = false;
$scope.searchText = null;
$('#search').focus();
@ -42,9 +42,9 @@ angular
canAutofill = true;
});
$q.when(loginService.getAllDecryptedForDomain(domain)).then(function (logins) {
loginService.getAllDecryptedForDomain(domain).then(function (logins) {
$scope.loaded = true;
$scope.logins = logins;
$scope.ciphers = ciphers;
});
});
}
@ -59,8 +59,8 @@ angular
$analytics.eventTrack('Copied ' + (type === i18nService.username ? 'Username' : 'Password'));
};
$scope.addLogin = function () {
$state.go('addLogin', {
$scope.addCipher = function () {
$state.go('addCipher', {
animation: 'in-slide-up',
name: domain,
uri: url,
@ -68,14 +68,14 @@ angular
});
};
$scope.fillLogin = function (login) {
$scope.fillCipher = function (cipher) {
if (!canAutofill) {
$analytics.eventTrack('Autofilled Error');
toastr.error(i18nService.autofillError);
}
autofillService.doAutoFill({
login: login,
cipher: cipher,
pageDetails: pageDetails,
fromBackground: false
}).then(function (totpCode) {
@ -92,21 +92,21 @@ angular
});
};
$scope.viewLogin = function (login) {
$state.go('viewLogin', {
loginId: login.id,
$scope.viewCipher = function (cipher) {
$state.go('viewCipher', {
cipherId: cipher.id,
animation: 'in-slide-up',
from: 'current'
});
};
$scope.sortUriMatch = function (login) {
$scope.sortUriMatch = function (cipher) {
// exact matches should sort earlier.
return url && url.startsWith(login.uri) ? 0 : 1;
return url && url.startsWith(cipher.uri) ? 0 : 1;
};
$scope.sortLastUsed = function (login) {
return login.localData && login.localData.lastUsedDate ? -1 * login.localData.lastUsedDate : 0;
$scope.sortLastUsed = function (cipher) {
return cipher.localData && cipher.localData.lastUsedDate ? -1 * cipher.localData.lastUsedDate : 0;
};
$scope.searchVault = function () {

View File

@ -10,47 +10,47 @@
<i class="fa fa-search"></i>
</div>
<div class="right">
<a href="" ng-click="addLogin()"><i class="fa fa-plus fa-lg"></i></a>
<a href="" ng-click="addCipher()"><i class="fa fa-plus fa-lg"></i></a>
</div>
</div>
<div class="content content-tabs">
<div ng-if="logins.length">
<div ng-if="ciphers.length">
<div class="list">
<div class="list-grouped">
<a href="#" stop-click ng-click="fillLogin(login)" class="list-grouped-item condensed"
title="{{i18n.autoFill}} {{login.name}}"
ng-repeat="login in theLogins = (logins | orderBy: [sortUriMatch, sortLastUsed, 'name', 'username'])
<a href="#" stop-click ng-click="fillCipher(cipher)" class="list-grouped-item condensed"
title="{{i18n.autoFill}} {{cipher.name}}"
ng-repeat="cipher in theCiphers = (ciphers | orderBy: [sortUriMatch, sortLastUsed, 'name', 'subTitle'])
track by $index">
<span class="btn-list" stop-prop stop-click title="{{i18n.copyPassword}}"
ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.password)"
data-clipboard-text="{{login.password}}" ng-class="{'disabled': !login.password}">
data-clipboard-text="{{cipher.password}}" ng-class="{'disabled': !cipher.password}">
<i class="fa fa-lg fa-key"></i>
</span>
<span class="btn-list" stop-prop stop-click title="{{i18n.copyUsername}}"
ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.username)"
data-clipboard-text="{{login.username}}" ng-class="{'disabled': !login.username}">
data-clipboard-text="{{cipher.username}}" ng-class="{'disabled': !cipher.username}">
<i class="fa fa-lg fa-user"></i>
</span>
<span class="btn-list" ng-click="viewLogin(login)" stop-prop stop-click
title="{{i18n.edit}} {{login.name}}">
<span class="btn-list" ng-click="viewCipher(cipher)" stop-prop stop-click
title="{{i18n.edit}} {{cipher.name}}">
<i class="fa fa-lg fa-pencil"></i>
</span>
<icon uri="login.uri"></icon>
<icon uri="cipher.uri"></icon>
<span class="text">
{{login.name}}
<i class="fa fa-share-alt text-muted" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
{{cipher.name}}
<i class="fa fa-share-alt text-muted" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
</span>
<span class="detail">{{login.username}}</span>
<span class="detail">{{cipher.subTitle}}</span>
</a>
</div>
</div>
</div>
<div class="centered-message" ng-if="loaded && !logins.length">
<div class="centered-message" ng-if="loaded && !ciphers.length">
<p>
{{i18n.autoFillInfo}}
<button ng-click="addLogin()" style="margin-top: 20px;" class="btn btn-link btn-block">{{i18n.addLogin}}</button>
<button ng-click="addCipher()" style="margin-top: 20px;" class="btn btn-link btn-block">{{i18n.addLogin}}</button>
</p>
</div>
<div class="page-loading" ng-if="!loaded">

View File

@ -1,7 +1,7 @@
angular
.module('bit.vault')
.controller('vaultAddLoginController', function ($scope, $state, $stateParams, loginService, folderService,
.controller('vaultAddCipherController', function ($scope, $state, $stateParams, loginService, folderService,
cryptoService, $q, toastr, utilsService, $analytics, i18nService, constantsService) {
$scope.i18n = i18nService;
$scope.constants = constantsService;
@ -9,17 +9,17 @@
var from = $stateParams.from,
folderId = $stateParams.folderId;
$scope.login = {
$scope.cipher = {
folderId: folderId,
name: $stateParams.name,
uri: $stateParams.uri
};
if ($stateParams.login) {
angular.extend($scope.login, $stateParams.login);
if ($stateParams.cipher) {
angular.extend($scope.cipher, $stateParams.cipher);
}
if (!$stateParams.login && $scope.login.name && $scope.login.uri) {
if (!$stateParams.cipher && $scope.cipher.name && $scope.cipher.uri) {
$('#username').focus();
}
else {
@ -38,10 +38,10 @@
return;
}
$scope.savePromise = $q.when(loginService.encrypt(model)).then(function (loginModel) {
var login = new Login(loginModel, true);
return $q.when(loginService.saveWithServer(login)).then(function (login) {
$analytics.eventTrack('Added Login');
$scope.savePromise = loginService.encrypt(model).then(function (cipherModel) {
var cipher = new Cipher(cipherModel, true);
return loginService.saveWithServer(cipher).then(function (c) {
$analytics.eventTrack('Added Cipher');
toastr.success(i18nService.addedLogin);
$scope.close();
});
@ -68,11 +68,11 @@
};
$scope.addField = function (type) {
if (!$scope.login.fields) {
$scope.login.fields = [];
if (!$scope.cipher.fields) {
$scope.cipher.fields = [];
}
$scope.login.fields.push({
$scope.cipher.fields.push({
type: parseInt(type),
name: null,
value: null
@ -80,9 +80,9 @@
};
$scope.removeField = function (field) {
var index = $scope.login.fields.indexOf(field);
var index = $scope.cipher.fields.indexOf(field);
if (index > -1) {
$scope.login.fields.splice(index, 1);
$scope.cipher.fields.splice(index, 1);
}
};
@ -92,7 +92,7 @@
animation: 'in-slide-up',
addState: {
from: from,
login: $scope.login
cipher: $scope.cipher
}
});
};

View File

@ -118,7 +118,7 @@
$scope.addCipher = function () {
storeState();
$state.go('addLogin', {
$state.go('addCipher', {
animation: 'in-slide-up',
from: 'vault'
});
@ -141,8 +141,8 @@
}
storeState();
$state.go('viewLogin', {
loginId: cipher.id,
$state.go('viewCipher', {
cipherId: cipher.id,
animation: 'in-slide-up',
from: 'vault'
});

View File

@ -1,30 +1,30 @@
angular
.module('bit.vault')
.controller('vaultEditLoginController', function ($scope, $state, $stateParams, loginService, folderService,
.controller('vaultEditCipherController', function ($scope, $state, $stateParams, loginService, folderService,
cryptoService, toastr, SweetAlert, utilsService, $analytics, i18nService, constantsService) {
$scope.i18n = i18nService;
$scope.constants = constantsService;
$scope.showAttachments = !utilsService.isEdge();
$scope.addFieldType = constantsService.fieldType.text.toString();
var loginId = $stateParams.loginId;
var cipherId = $stateParams.cipherId;
var fromView = $stateParams.fromView;
var from = $stateParams.from;
$scope.login = {
$scope.cipher = {
folderId: null
};
$('#name').focus();
if ($stateParams.login) {
angular.extend($scope.login, $stateParams.login);
if ($stateParams.cipher) {
angular.extend($scope.cipher, $stateParams.cipher);
}
else {
loginService.get(loginId).then(function (login) {
return login.decrypt();
loginService.get(cipherId).then(function (cipher) {
return cipher.decrypt();
}).then(function (model) {
$scope.login = model;
$scope.cipher = model;
});
}
@ -41,10 +41,10 @@ angular
return;
}
$scope.savePromise = loginService.encrypt(model).then(function (loginModel) {
var login = new Login(loginModel, true);
return loginService.saveWithServer(login).then(function (login) {
$analytics.eventTrack('Edited Login');
$scope.savePromise = loginService.encrypt(model).then(function (cipherModel) {
var cipher = new Cipher(cipherModel, true);
return loginService.saveWithServer(cipher).then(function (c) {
$analytics.eventTrack('Edited Cipher');
toastr.success(i18nService.editedLogin);
$scope.close();
});
@ -60,8 +60,8 @@ angular
cancelButtonText: i18nService.no
}, function (confirmed) {
if (confirmed) {
loginService.deleteWithServer(loginId).then(function () {
$analytics.eventTrack('Deleted Login');
loginService.deleteWithServer(cipherId).then(function () {
$analytics.eventTrack('Deleted Cipher');
toastr.success(i18nService.deletedLogin);
$state.go('tabs.vault', {
animation: 'out-slide-down'
@ -73,7 +73,7 @@ angular
$scope.attachments = function () {
$state.go('attachments', {
id: loginId,
id: cipherId,
animation: 'in-slide-up',
from: from,
fromView: fromView
@ -82,8 +82,8 @@ angular
$scope.close = function () {
if (fromView) {
$state.go('viewLogin', {
loginId: loginId,
$state.go('viewCipher', {
cipherId: cipherId,
animation: 'out-slide-down',
from: from
});
@ -96,11 +96,11 @@ angular
};
$scope.addField = function (type) {
if (!$scope.login.fields) {
$scope.login.fields = [];
if (!$scope.cipher.fields) {
$scope.cipher.fields = [];
}
$scope.login.fields.push({
$scope.cipher.fields.push({
type: parseInt(type),
name: null,
value: null
@ -108,14 +108,14 @@ angular
};
$scope.removeField = function (field) {
var index = $scope.login.fields.indexOf(field);
var index = $scope.cipher.fields.indexOf(field);
if (index > -1) {
$scope.login.fields.splice(index, 1);
$scope.cipher.fields.splice(index, 1);
}
};
$scope.generatePassword = function () {
if ($scope.login.password) {
if ($scope.cipher.password) {
SweetAlert.swal({
title: i18nService.overwritePassword,
text: i18nService.overwritePasswordConfirmation,
@ -140,8 +140,8 @@ angular
animation: 'in-slide-up',
editState: {
fromView: fromView,
loginId: loginId,
login: $scope.login,
cipherId: cipherId,
cipher: $scope.cipher,
from: from
}
});

View File

@ -1,7 +1,7 @@
angular
.module('bit.vault')
.controller('vaultViewLoginController', function ($scope, $state, $stateParams, loginService, toastr,
.controller('vaultViewCipherController', function ($scope, $state, $stateParams, loginService, toastr,
$analytics, i18nService, utilsService, totpService, $timeout, tokenService, $window, cryptoService, SweetAlert,
constantsService) {
$scope.constants = constantsService;
@ -11,35 +11,35 @@ angular
totpInterval = null;
$scope.isPremium = tokenService.getPremium();
$scope.login = null;
loginService.get($stateParams.loginId).then(function (login) {
if (!login) {
$scope.cipher = null;
loginService.get($stateParams.cipherId).then(function (cipher) {
if (!cipher) {
return;
}
return login.decrypt();
return cipher.decrypt();
}).then(function (model) {
$scope.login = model;
$scope.cipher = model;
if (model.password) {
$scope.login.maskedPassword = $scope.maskValue(model.password);
$scope.cipher.maskedPassword = $scope.maskValue(model.password);
}
if (model.uri) {
$scope.login.showLaunch = model.uri.startsWith('http://') || model.uri.startsWith('https://');
$scope.cipher.showLaunch = model.uri.startsWith('http://') || model.uri.startsWith('https://');
var domain = utilsService.getDomain(model.uri);
if (domain) {
$scope.login.website = domain;
$scope.cipher.website = domain;
}
else {
$scope.login.website = model.uri;
$scope.cipher.website = model.uri;
}
}
else {
$scope.login.showLaunch = false;
$scope.cipher.showLaunch = false;
}
if (model.totp && (login.organizationUseTotp || tokenService.getPremium())) {
if (model.totp && (cipher.organizationUseTotp || tokenService.getPremium())) {
totpUpdateCode();
totpTick();
@ -53,10 +53,10 @@ angular
}
});
$scope.edit = function (login) {
$state.go('editLogin', {
$scope.edit = function (cipher) {
$state.go('editCipher', {
animation: 'in-slide-up',
loginId: login.id,
cipherId: cipher.id,
fromView: true,
from: from
});
@ -84,10 +84,10 @@ angular
}
};
$scope.launchWebsite = function (login) {
if (login.showLaunch) {
$scope.launchWebsite = function (cipher) {
if (cipher.showLaunch) {
$analytics.eventTrack('Launched Website');
chrome.tabs.create({ url: login.uri });
chrome.tabs.create({ url: cipher.uri });
}
};
@ -120,7 +120,7 @@ angular
};
$scope.download = function (attachment) {
if (!$scope.login.organizationId && !tokenService.getPremium()) {
if (!$scope.cipher.organizationId && !tokenService.getPremium()) {
SweetAlert.swal({
title: i18nService.premiumRequired,
text: i18nService.premiumRequiredDesc,
@ -152,7 +152,7 @@ angular
return;
}
cryptoService.getOrgKey($scope.login.organizationId).then(function (key) {
cryptoService.getOrgKey($scope.cipher.organizationId).then(function (key) {
return cryptoService.decryptFromBytes(req.response, key);
}).then(function (decBuf) {
var blob = new Blob([decBuf]);
@ -192,11 +192,11 @@ angular
});
function totpUpdateCode() {
if (!$scope.login.totp) {
if (!$scope.cipher.totp) {
return;
}
totpService.getCode($scope.login.totp).then(function (code) {
totpService.getCode($scope.cipher.totp).then(function (code) {
$timeout(function () {
if (code) {
$scope.totpCodeFormatted = code.substring(0, 3) + ' ' + code.substring(3);

View File

@ -190,7 +190,7 @@
storeState();
$state.go('viewLogin', {
loginId: cipher.id,
cipherId: cipher.id,
animation: 'in-slide-up',
from: 'folder'
});

View File

@ -1,4 +1,4 @@
<form name="theForm" ng-submit="save(login)" bit-form="savePromise" autocomplete="off">
<form name="theForm" ng-submit="save(cipher)" bit-form="savePromise" autocomplete="off">
<div class="header">
<div class="left">
<a ng-click="close()" href="">{{i18n.cancel}}</a>
@ -14,24 +14,24 @@
<div class="list-section">
<div class="list-section-header">
{{i18n.loginInformation}}
<i class="fa fa-share-alt fa-lg pull-right" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
<i class="fa fa-share-alt fa-lg pull-right" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
</div>
<div class="list-section-items">
<div class="list-section-item">
<label for="name" class="item-label">{{i18n.name}}</label>
<input id="name" type="text" name="Name" ng-model="login.name">
<input id="name" type="text" name="Name" ng-model="cipher.name">
</div>
<div class="list-section-item">
<label for="uri" class="item-label">{{i18n.uri}}</label>
<input id="uri" type="text" name="Uri" ng-model="login.uri">
<input id="uri" type="text" name="Uri" ng-model="cipher.uri">
</div>
<div class="list-section-item">
<label for="username" class="item-label">{{i18n.username}}</label>
<input id="username" type="text" name="Username" ng-model="login.username">
<input id="username" type="text" name="Username" ng-model="cipher.username">
</div>
<div class="list-section-item">
<label for="password" class="item-label">{{i18n.password}}</label>
<input id="password" type="password" name="Password" ng-model="login.password">
<input id="password" type="password" name="Password" ng-model="cipher.password">
</div>
<a class="list-section-item" href="" ng-click="generatePassword()">
{{i18n.generatePassword}}
@ -43,11 +43,11 @@
<div class="list-section-items">
<div class="list-section-item">
<label for="totp" class="item-label">{{i18n.authenticatorKeyTotp}}</label>
<input id="totp" type="text" name="Totp" ng-model="login.totp">
<input id="totp" type="text" name="Totp" ng-model="cipher.totp">
</div>
<div class="list-section-item">
<label for="folder" class="item-label">{{i18n.folder}}</label>
<select id="folder" name="FolderId" ng-model="login.folderId">
<select id="folder" name="FolderId" ng-model="cipher.folderId">
<option ng-repeat="folder in folders | orderBy: ['name'] track by $index" value="{{folder.id}}">
{{folder.name}}
</option>
@ -55,7 +55,7 @@
</div>
<div class="list-section-item list-section-item-checkbox">
<label for="favorite">{{i18n.favorite}}</label>
<input id="favorite" name="Favorite" type="checkbox" ng-model="login.favorite">
<input id="favorite" name="Favorite" type="checkbox" ng-model="cipher.favorite">
</div>
<a class="list-section-item" href="#" stop-click ng-click="attachments()" ng-if="showAttachments">
{{i18n.attachments}}
@ -69,7 +69,7 @@
</div>
<div class="list-section-items">
<div class="list-section-item">
<textarea id="notes" name="Notes" rows="5" ng-model="login.notes"></textarea>
<textarea id="notes" name="Notes" rows="5" ng-model="cipher.notes"></textarea>
</div>
</div>
</div>
@ -79,7 +79,7 @@
</div>
<div class="list-section-items">
<div class="list-section-item list-section-item-table"
ng-if="login.fields && login.fields.length" ng-repeat="field in login.fields"
ng-if="cipher.fields && cipher.fields.length" ng-repeat="field in cipher.fields"
ng-class="{'list-section-item-checkbox' : field.type === constants.fieldType.boolean}">
<a href="#" stop-click ng-click="removeField(field)" class="action-button text-danger">
<i class="fa fa-close fa-lg"></i>

View File

@ -3,7 +3,7 @@
<a href="" ng-click="close()">{{i18n.close}}</a>
</div>
<div class="right">
<a href="" ng-click="edit(login)">{{i18n.edit}}</a>
<a href="" ng-click="edit(cipher)">{{i18n.edit}}</a>
</div>
<div class="title">{{i18n.viewLogin}}</div>
</div>
@ -12,42 +12,42 @@
<div class="list-section">
<div class="list-section-header">
{{i18n.loginInformation}}
<i class="fa fa-share-alt fa-lg pull-right" ng-if="login.organizationId" title="{{i18n.shared}}"></i>
<i class="fa fa-share-alt fa-lg pull-right" ng-if="cipher.organizationId" title="{{i18n.shared}}"></i>
</div>
<div class="list-section-items">
<div class="list-section-item">
<span class="item-label">{{i18n.name}}</span>
{{login.name}}
{{cipher.name}}
</div>
<div class="list-section-item" ng-if="login.uri" title="{{login.uri}}">
<a class="btn-list" href="" title="{{i18n.launchWebsite}}" ng-click="launchWebsite(login)"
ng-show="login.showLaunch">
<div class="list-section-item" ng-if="cipher.uri" title="{{cipher.uri}}">
<a class="btn-list" href="" title="{{i18n.launchWebsite}}" ng-click="launchWebsite(cipher)"
ng-show="cipher.showLaunch">
<i class="fa fa-lg fa-share-square-o"></i>
</a>
<span class="item-label">{{i18n.website}}</span>
{{login.website}}
{{cipher.website}}
</div>
<div class="list-section-item" ng-if="login.username">
<div class="list-section-item" ng-if="cipher.username">
<a class="btn-list" href="" title="{{i18n.copyUsername}}" ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.username)" data-clipboard-text="{{login.username}}">
ngclipboard-success="clipboardSuccess(e, i18n.username)" data-clipboard-text="{{cipher.username}}">
<i class="fa fa-lg fa-clipboard"></i>
</a>
<span class="item-label">{{i18n.username}}</span>
<span id="username">{{login.username}}</span>
<span id="username">{{cipher.username}}</span>
</div>
<div class="list-section-item" ng-if="login.password">
<div class="list-section-item" ng-if="cipher.password">
<a class="btn-list" href="" title="{{i18n.copyPassword}}" ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.password)" data-clipboard-text="{{login.password}}">
ngclipboard-success="clipboardSuccess(e, i18n.password)" data-clipboard-text="{{cipher.password}}">
<i class="fa fa-lg fa-clipboard"></i>
</a>
<a class="btn-list" href="" title="{{i18n.togglePassword}}" ng-click="togglePassword()">
<i class="fa fa-lg" ng-class="[{'fa-eye': !showPassword}, {'fa-eye-slash': showPassword}]"></i>
</a>
<span class="item-label">{{i18n.password}}</span>
<span ng-show="!showPassword" class="monospaced">{{login.maskedPassword}}</span>
<span id="password" ng-show="showPassword" class="monospaced">{{login.password}}</span>
<span ng-show="!showPassword" class="monospaced">{{cipher.maskedPassword}}</span>
<span id="password" ng-show="showPassword" class="monospaced">{{cipher.password}}</span>
</div>
<div class="list-section-item totp" ng-class="{'low': totpLow}" ng-if="login.totp && totpCode">
<div class="list-section-item totp" ng-class="{'low': totpLow}" ng-if="cipher.totp && totpCode">
<a class="btn-list" href="" title="{{i18n.copyVerificationCode}}"
ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.verificationCodeTotp)" data-clipboard-text="{{totpCode}}">
@ -68,20 +68,20 @@
</div>
</div>
</div>
<div class="list-section" ng-if="login.notes">
<div class="list-section" ng-if="cipher.notes">
<div class="list-section-header">
{{i18n.notes}}
</div>
<div class="list-section-items">
<div class="list-section-item pre">{{login.notes}}</div>
<div class="list-section-item pre">{{cipher.notes}}</div>
</div>
</div>
<div class="list-section" ng-if="login.fields && login.fields.length">
<div class="list-section" ng-if="cipher.fields && cipher.fields.length">
<div class="list-section-header">
{{i18n.customFields}}
</div>
<div class="list-section-items">
<div class="list-section-item" ng-repeat="field in login.fields">
<div class="list-section-item" ng-repeat="field in cipher.fields">
<a class="btn-list" href="" title="{{i18n.copyValue}}" ngclipboard ngclipboard-error="clipboardError(e)"
ngclipboard-success="clipboardSuccess(e, i18n.value)" data-clipboard-text="{{field.value}}"
ng-if="field.type !== constants.fieldType.boolean && field.value">
@ -106,13 +106,13 @@
</div>
</div>
</div>
<div class="list-section" ng-if="showAttachments && isPremium && login.attachments && login.attachments.length">
<div class="list-section" ng-if="showAttachments && isPremium && cipher.attachments && cipher.attachments.length">
<div class="list-section-header">
{{i18n.attachments}}
</div>
<div class="list-section-items">
<a class="list-section-item list-allow-selection" href="#" stop-click
ng-repeat="attachment in login.attachments"
ng-repeat="attachment in cipher.attachments"
ng-click="download(attachment)">
<i class="fa fa-download right-icon fa-fw no-animation" ng-if="!attachment.downloading"></i>
<i class="fa fa-spin fa-spinner right-icon fa-fw no-animation" ng-if="attachment.downloading"></i>

View File

@ -88,9 +88,9 @@
<script src="app/vault/vaultModule.js"></script>
<script src="app/vault/vaultController.js"></script>
<script src="app/vault/vaultViewFolderController.js"></script>
<script src="app/vault/vaultAddLoginController.js"></script>
<script src="app/vault/vaultEditLoginController.js"></script>
<script src="app/vault/vaultViewLoginController.js"></script>
<script src="app/vault/vaultAddCipherController.js"></script>
<script src="app/vault/vaultEditCipherController.js"></script>
<script src="app/vault/vaultViewCipherController.js"></script>
<script src="app/vault/vaultAttachmentsController.js"></script>
<script src="app/settings/settingsModule.js"></script>