1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-10-20 07:40:57 +02:00
bitwarden-browser/src/popup/app/vault/vaultController.js

161 lines
4.7 KiB
JavaScript
Raw Normal View History

angular
.module('bit.vault')
.controller('vaultController', function ($scope, $rootScope, siteService, folderService, $q, $state, $stateParams, toastr,
2016-12-08 06:56:38 +01:00
syncService, utilsService, $analytics, i18nService, stateService) {
var stateKey = 'vault',
state = stateService.getState(stateKey) || {};
2016-10-18 14:10:40 +02:00
$scope.i18n = i18nService;
2016-09-13 06:14:49 +02:00
$('#search').focus();
var syncOnLoad = $stateParams.syncOnLoad;
if (syncOnLoad) {
setTimeout(function () {
syncService.fullSync(function () { });
}, utilsService.isFirefox() ? 500 : 0);
}
2016-09-10 05:00:11 +02:00
var delayLoad = true;
2016-09-17 06:43:48 +02:00
$scope.loaded = true;
2016-09-10 05:00:11 +02:00
if (!$rootScope.vaultSites) {
$rootScope.vaultSites = [];
2016-09-10 05:00:11 +02:00
delayLoad = false;
}
if (!$rootScope.vaultFolders) {
$rootScope.vaultFolders = [];
delayLoad = false;
2016-09-17 06:43:48 +02:00
$scope.loaded = false;
2016-09-10 05:00:11 +02:00
}
2016-09-10 05:00:11 +02:00
if (delayLoad) {
setTimeout(setScrollY, 100);
2016-09-10 05:00:11 +02:00
setTimeout(loadVault, 1000);
}
else if (!syncOnLoad) {
2016-09-10 05:00:11 +02:00
loadVault();
}
2016-09-06 05:30:45 +02:00
function loadVault() {
2016-09-16 03:09:56 +02:00
var decFolders = [];
2016-09-06 05:30:45 +02:00
var decSites = [];
2016-09-16 03:09:56 +02:00
var promises = [];
2016-09-16 03:09:56 +02:00
var folderPromise = $q.when(folderService.getAllDecrypted());
folderPromise.then(function (folders) {
decFolders = folders;
});
promises.push(folderPromise);
2016-09-06 05:30:45 +02:00
2016-09-16 03:09:56 +02:00
var sitePromise = $q.when(siteService.getAllDecrypted());
sitePromise.then(function (sites) {
decSites = sites;
});
promises.push(sitePromise);
$q.all(promises).then(function () {
$scope.loaded = true;
$rootScope.vaultFolders = decFolders;
$rootScope.vaultSites = decSites;
2016-09-16 03:09:56 +02:00
if (!delayLoad) {
setScrollY();
}
});
2016-09-06 05:30:45 +02:00
}
2016-09-13 06:14:49 +02:00
$scope.searchText = null;
2016-12-08 06:56:38 +01:00
if (state.searchText) {
$scope.searchText = state.searchText;
2016-09-13 06:14:49 +02:00
}
2016-09-07 05:30:49 +02:00
$scope.folderSort = function (item) {
if (!item.id) {
return '';
}
return item.name.toLowerCase();
};
$scope.searchSites = function () {
if (!$scope.searchText || $scope.searchText.length < 2) {
return;
}
return searchSite;
};
2016-09-13 06:14:49 +02:00
function searchSite(site) {
var searchTerm = $scope.searchText.toLowerCase();
if (site.name && site.name.toLowerCase().indexOf(searchTerm) !== -1) {
return true;
}
if (site.username && site.username.toLowerCase().indexOf(searchTerm) !== -1) {
return true;
}
if (site.uri && site.uri.toLowerCase().indexOf(searchTerm) !== -1) {
return true;
}
return false;
}
$scope.addSite = function () {
2016-12-08 06:56:38 +01:00
storeState();
$state.go('addSite', {
animation: 'in-slide-up',
2016-12-08 06:56:38 +01:00
from: 'vault'
});
};
$scope.viewSite = function (site) {
2016-12-08 06:56:38 +01:00
storeState();
$state.go('viewSite', {
siteId: site.id,
animation: 'in-slide-up',
2016-12-08 06:56:38 +01:00
from: 'vault'
});
};
$scope.viewFolder = function (folder) {
2016-12-08 06:56:38 +01:00
storeState();
$state.go('viewFolder', {
2016-12-08 06:56:38 +01:00
folderId: folder.id || '0',
animation: 'in-slide-left'
});
};
$scope.clipboardError = function (e) {
2016-10-18 14:10:40 +02:00
toastr.info(i18n.browserNotSupportClipboard);
};
$scope.clipboardSuccess = function (e, type) {
e.clearSelection();
2016-11-19 07:36:09 +01:00
$analytics.eventTrack('Copied ' + (type === i18nService.username ? 'Username' : 'Password'));
toastr.info(type + i18nService.valueCopied);
};
$scope.$on('syncCompleted', function (event, successfully) {
setTimeout(loadVault, 500);
});
2016-12-08 06:56:38 +01:00
function storeState() {
stateService.saveState(stateKey, {
scrollY: getScrollY(),
searchText: $scope.searchText
});
}
function getScrollY() {
var content = document.getElementsByClassName('content')[0];
return content.scrollTop;
}
function setScrollY() {
2016-12-08 06:56:38 +01:00
if (state.scrollY) {
var content = document.getElementsByClassName('content')[0];
2016-12-08 06:56:38 +01:00
content.scrollTop = state.scrollY;
}
}
});