diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 81885cbd28e..6ff59e8a59c 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -739,8 +739,20 @@ "message": "No attachments.", "description": "No attachments." }, + "attachmentSaved": { + "message": "The attachment has been saved.", + "description": "The attachment has been saved." + }, "file": { "message": "File", "description": "File" + }, + "selectFile": { + "message": "Select a file.", + "description": "Select a file." + }, + "fileTooLarge": { + "message": "Maximum file size is 100 MB.", + "description": "Maximum file size is 100 MB." } } diff --git a/src/models/dataModels.js b/src/models/dataModels.js index cf71408b41d..c271cca1e3d 100644 --- a/src/models/dataModels.js +++ b/src/models/dataModels.js @@ -60,4 +60,4 @@ var AttachmentData = function (response) { this.fileName = response.fileName; this.size = response.size; this.sizeName = response.sizeName; -}; \ No newline at end of file +}; diff --git a/src/popup/app/config.js b/src/popup/app/config.js index 0c0ae0d4b9c..906a67d84bf 100644 --- a/src/popup/app/config.js +++ b/src/popup/app/config.js @@ -145,7 +145,7 @@ templateUrl: 'app/vault/views/vaultAttachments.html', controller: 'vaultAttachmentsController', data: { authorize: true }, - params: { animation: null, fromView: true, login: null, from: 'vault' } + params: { animation: null, fromView: true, from: 'vault' } }) .state('passwordGenerator', { diff --git a/src/popup/app/vault/vaultAttachmentsController.js b/src/popup/app/vault/vaultAttachmentsController.js index f8dfa651b57..ad6ba7c7f04 100644 --- a/src/popup/app/vault/vaultAttachmentsController.js +++ b/src/popup/app/vault/vaultAttachmentsController.js @@ -1,15 +1,44 @@ angular .module('bit.vault') - .controller('vaultAttachmentsController', function ($scope, $state, $stateParams, loginService, folderService, - cryptoService, $q, toastr, SweetAlert, utilsService, $analytics, i18nService) { + .controller('vaultAttachmentsController', function ($scope, $state, $stateParams, loginService, $q, toastr, + SweetAlert, utilsService, $analytics, i18nService) { $scope.i18n = i18nService; - $scope.login = $stateParams.login; utilsService.initListSectionItemListeners($(document), angular); + loginService.get($stateParams.id, function (login) { + $q.when(login.decrypt()).then(function (model) { + $scope.login = model; + }); + }); + $scope.submitPromise = null; $scope.submit = function () { - $scope.close(true); + var files = document.getElementById('file').files; + if (!files || !files.length) { + toastr.error(i18nService.selectFile, i18nService.errorsOccurred); + return; + } + + if (files[0].size > 104857600) { // 100 MB + toastr.error(i18nService.fileTooLarge, i18nService.errorsOccurred); + return deferred.promise; + } + + $scope.submitPromise = $q.when(loginService.saveAttachmentWithServer($scope.login, files[0])).then(function (login) { + $q.when(login.decrypt()).then(function (model) { + $scope.login = model; + }); + $analytics.eventTrack('Added Attachment'); + toastr.success(i18nService.attachmentSaved); + }, function (err) { + if (err) { + toastr.error(err); + } + else { + toastr.error(i18nService.errorsOccurred); + } + }); }; $scope.delete = function (attachment) { @@ -22,6 +51,10 @@ angular }, function (confirmed) { if (confirmed) { $q.when(loginService.deleteAttachmentWithServer($stateParams.id, attachment.id)).then(function () { + var index = $scope.login.attachments.indexOf(attachment); + if (index > -1) { + $scope.login.attachments.splice(index, 1); + } $analytics.eventTrack('Deleted Attachment'); toastr.success(i18nService.deletedAttachment); }); @@ -29,29 +62,14 @@ angular }); }; - $scope.close = function (allOut) { - if (!allOut) { - $state.go('editLogin', { - loginId: $stateParams.id, - animation: 'out-slide-down', - from: $stateParams.from, - fromView: $stateParams.fromView - }); + $scope.close = function () { + $state.go('editLogin', { + loginId: $stateParams.id, + animation: 'out-slide-down', + from: $stateParams.from, + fromView: $stateParams.fromView + }); - return; - } - - if ($stateParams.fromView) { - $state.go('viewLogin', { - loginId: $stateParams.id, - animation: 'out-slide-down', - from: $stateParams.from - }); - } - else { - $state.go('tabs.vault', { - animation: 'out-slide-down' - }); - } + return; }; }); diff --git a/src/popup/app/vault/vaultEditLoginController.js b/src/popup/app/vault/vaultEditLoginController.js index 5184b3d76a0..68fd4a743ca 100644 --- a/src/popup/app/vault/vaultEditLoginController.js +++ b/src/popup/app/vault/vaultEditLoginController.js @@ -71,7 +71,6 @@ angular $scope.attachments = function () { $state.go('attachments', { id: loginId, - login: $scope.login, animation: 'in-slide-up', from: from, fromView: fromView diff --git a/src/popup/app/vault/views/vaultAttachments.html b/src/popup/app/vault/views/vaultAttachments.html index 8358080ebac..53ff9c29e40 100644 --- a/src/popup/app/vault/views/vaultAttachments.html +++ b/src/popup/app/vault/views/vaultAttachments.html @@ -1,40 +1,43 @@ -
-