From 95ab6115955d5df7ab5bd9c0d981e3a70b1ab567 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 22 Sep 2016 14:16:24 -0400 Subject: [PATCH] Delete site/folder --- .../settings/settingsEditFolderController.js | 21 +++++++++++++- .../settings/views/settingsEditFolder.html | 7 +++++ .../app/vault/vaultEditSiteController.js | 21 +++++++++++++- .../app/vault/vaultViewSiteController.js | 6 +++- src/popup/app/vault/views/vaultEditSite.html | 7 +++++ src/popup/less/components.less | 4 +++ src/services/apiService.js | 28 +++++++++---------- src/services/folderService.js | 15 ++++++++++ src/services/siteService.js | 2 +- 9 files changed, 93 insertions(+), 18 deletions(-) diff --git a/src/popup/app/settings/settingsEditFolderController.js b/src/popup/app/settings/settingsEditFolderController.js index 7f1e10d961..78e6d6e625 100644 --- a/src/popup/app/settings/settingsEditFolderController.js +++ b/src/popup/app/settings/settingsEditFolderController.js @@ -1,7 +1,7 @@ angular .module('bit.settings') - .controller('settingsEditFolderController', function ($scope, $stateParams, folderService, toastr, $q, $state) { + .controller('settingsEditFolderController', function ($scope, $stateParams, folderService, toastr, $q, $state, SweetAlert) { $scope.folder = {}; var folderId = $stateParams.folderId; @@ -28,4 +28,23 @@ }); }); }; + + $scope.delete = function () { + SweetAlert.swal({ + title: 'Delete Folder', + text: 'Are you sure you want to delete this folder?', + showCancelButton: true, + confirmButtonText: 'Yes', + cancelButtonText: 'No' + }, function (confirmed) { + if (confirmed) { + $q.when(folderService.deleteWithServer(folderId)).then(function () { + toastr.success('Deleted folder'); + $state.go('folders', { + animation: 'out-slide-down' + }); + }); + } + }); + }; }); diff --git a/src/popup/app/settings/views/settingsEditFolder.html b/src/popup/app/settings/views/settingsEditFolder.html index 256d98d957..fec85aa945 100644 --- a/src/popup/app/settings/views/settingsEditFolder.html +++ b/src/popup/app/settings/views/settingsEditFolder.html @@ -19,6 +19,13 @@ +
+ +
diff --git a/src/popup/app/vault/vaultEditSiteController.js b/src/popup/app/vault/vaultEditSiteController.js index 0309a86044..70a40780f6 100644 --- a/src/popup/app/vault/vaultEditSiteController.js +++ b/src/popup/app/vault/vaultEditSiteController.js @@ -49,6 +49,25 @@ angular }); }; + $scope.delete = function () { + SweetAlert.swal({ + title: 'Delete Site', + text: 'Are you sure you want to delete this site?', + showCancelButton: true, + confirmButtonText: 'Yes', + cancelButtonText: 'No' + }, function (confirmed) { + if (confirmed) { + $q.when(siteService.deleteWithServer(siteId)).then(function () { + toastr.success('Deleted site'); + $state.go('tabs.vault', { + animation: 'out-slide-down' + }); + }); + } + }); + }; + $scope.close = function () { if (fromView) { $state.go('viewSite', { @@ -70,7 +89,7 @@ angular $scope.generatePassword = function () { if ($scope.site.password) { SweetAlert.swal({ - title: 'Warning', + title: 'Overwrite Password', text: 'Are you sure you want to overwrite the current password?', showCancelButton: true, confirmButtonText: 'Yes', diff --git a/src/popup/app/vault/vaultViewSiteController.js b/src/popup/app/vault/vaultViewSiteController.js index 68bf97d3ff..cb69110018 100644 --- a/src/popup/app/vault/vaultViewSiteController.js +++ b/src/popup/app/vault/vaultViewSiteController.js @@ -1,4 +1,4 @@ -angular +angular .module('bit.vault') .controller('vaultViewSiteController', function ($scope, $state, $stateParams, siteService, tldjs, toastr, $q) { @@ -7,6 +7,10 @@ $scope.site = null; siteService.get($stateParams.siteId, function (site) { + if (!site) { + return; + } + $q.when(site.decrypt()).then(function (model) { $scope.site = model; diff --git a/src/popup/app/vault/views/vaultEditSite.html b/src/popup/app/vault/views/vaultEditSite.html index e10d5cd79b..48c39e6099 100644 --- a/src/popup/app/vault/views/vaultEditSite.html +++ b/src/popup/app/vault/views/vaultEditSite.html @@ -64,6 +64,13 @@ +
+ +
diff --git a/src/popup/less/components.less b/src/popup/less/components.less index 60804945cd..d3588d7342 100644 --- a/src/popup/less/components.less +++ b/src/popup/less/components.less @@ -213,6 +213,10 @@ color: @brand-primary !important; } + &.text-danger { + color: @brand-danger !important; + } + &:not(.wrap) { .text, .detail { white-space: nowrap; diff --git a/src/services/apiService.js b/src/services/apiService.js index 1c786b5ccf..43c70ab1a2 100644 --- a/src/services/apiService.js +++ b/src/services/apiService.js @@ -17,7 +17,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new TokenResponse(response)) + success(new TokenResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -35,7 +35,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new TokenResponse(response)) + success(new TokenResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -54,7 +54,7 @@ function initApiService() { url: self.baseUrl + '/accounts/profile?access_token=' + token, dataType: 'json', success: function (response) { - success(new ProfileResponse(response)) + success(new ProfileResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -105,7 +105,7 @@ function initApiService() { url: self.baseUrl + '/sites/' + id + '?access_token=' + token, dataType: 'json', success: function (response) { - success(new SiteResponse(response)) + success(new SiteResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -124,7 +124,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new SiteResponse(response)) + success(new SiteResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -143,7 +143,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new SiteResponse(response)) + success(new SiteResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -162,7 +162,7 @@ function initApiService() { url: self.baseUrl + '/folders/' + id + '?access_token=' + token, dataType: 'json', success: function (response) { - success(new FolderResponse(response)) + success(new FolderResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -181,7 +181,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new FolderResponse(response)) + success(new FolderResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -200,7 +200,7 @@ function initApiService() { contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (response) { - success(new FolderResponse(response)) + success(new FolderResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -219,7 +219,7 @@ function initApiService() { url: self.baseUrl + '/ciphers/' + id + '?access_token=' + token, dataType: 'json', success: function (response) { - success(new CipherResponse(response)) + success(new CipherResponse(response)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -241,7 +241,7 @@ function initApiService() { data.push(new CipherResponse(response.Data[i])); } - success(new ListResponse(data)) + success(new ListResponse(data)); }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); @@ -256,9 +256,9 @@ function initApiService() { $.ajax({ type: 'POST', url: self.baseUrl + '/ciphers/' + id + '/delete?access_token=' + token, - contentType: 'application/json; charset=utf-8', - dataType: 'json', - success: success, + success: function (response) { + success(); + }, error: function (jqXHR, textStatus, errorThrown) { handleError(error, jqXHR, textStatus, errorThrown); } diff --git a/src/services/folderService.js b/src/services/folderService.js index 7678b7ac5a..b7c87a793c 100644 --- a/src/services/folderService.js +++ b/src/services/folderService.js @@ -224,6 +224,21 @@ function initFolderService() { }); }; + FolderService.prototype.deleteWithServer = function (id) { + var deferred = Q.defer(); + + var self = this; + self.apiService.deleteCipher(id, function () { + self.delete(id, function () { + deferred.resolve(); + }); + }, function (response) { + handleError(response, deferred) + }); + + return deferred.promise; + }; + function handleError(error, deferred) { deferred.reject(error); } diff --git a/src/services/siteService.js b/src/services/siteService.js index 01c3917463..e3def38a12 100644 --- a/src/services/siteService.js +++ b/src/services/siteService.js @@ -242,7 +242,7 @@ function initSiteService() { var deferred = Q.defer(); var self = this; - self.apiService.deleteCipher(id, function (response) { + self.apiService.deleteCipher(id, function () { self.delete(id, function () { deferred.resolve(); });