2016-09-01 06:34:38 +02:00
|
|
|
|
angular
|
|
|
|
|
.module('bit.vault')
|
|
|
|
|
|
2016-09-23 01:26:20 +02:00
|
|
|
|
.controller('vaultController', function ($scope, $rootScope, siteService, folderService, $q, $state, $stateParams, toastr,
|
2016-10-18 14:10:40 +02:00
|
|
|
|
syncService, utilsService, $analytics, i18nService) {
|
|
|
|
|
$scope.i18n = i18nService;
|
2016-09-13 06:14:49 +02:00
|
|
|
|
$('#search').focus();
|
|
|
|
|
|
2016-09-27 02:29:23 +02:00
|
|
|
|
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) {
|
2016-09-13 01:48:36 +02:00
|
|
|
|
$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-04 06:34:24 +02:00
|
|
|
|
|
2016-09-10 05:00:11 +02:00
|
|
|
|
if (delayLoad) {
|
2016-09-13 01:48:36 +02:00
|
|
|
|
setTimeout(setScrollY, 100);
|
2016-09-10 05:00:11 +02:00
|
|
|
|
setTimeout(loadVault, 1000);
|
|
|
|
|
}
|
2016-09-27 02:29:23 +02:00
|
|
|
|
else if (!syncOnLoad) {
|
2016-09-10 05:00:11 +02:00
|
|
|
|
loadVault();
|
|
|
|
|
}
|
2016-09-04 06:34:24 +02:00
|
|
|
|
|
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-14 01:46:48 +02:00
|
|
|
|
|
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 () {
|
2016-09-27 02:29:23 +02:00
|
|
|
|
$scope.loaded = true;
|
|
|
|
|
$rootScope.vaultFolders = decFolders;
|
|
|
|
|
$rootScope.vaultSites = decSites;
|
|
|
|
|
|
2016-09-16 03:09:56 +02:00
|
|
|
|
if (!delayLoad) {
|
|
|
|
|
setScrollY();
|
|
|
|
|
}
|
2016-09-04 06:34:24 +02:00
|
|
|
|
});
|
2016-09-06 05:30:45 +02:00
|
|
|
|
}
|
2016-09-04 06:34:24 +02:00
|
|
|
|
|
2016-09-13 06:14:49 +02:00
|
|
|
|
$scope.searchText = null;
|
|
|
|
|
if ($stateParams.searchText) {
|
|
|
|
|
$scope.searchText = $stateParams.searchText;
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-07 05:30:49 +02:00
|
|
|
|
$scope.folderSort = function (item) {
|
|
|
|
|
if (!item.id) {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return item.name.toLowerCase();
|
|
|
|
|
};
|
2016-09-13 01:48:36 +02:00
|
|
|
|
|
2016-09-16 06:16:31 +02:00
|
|
|
|
$scope.searchSites = function () {
|
2016-12-06 06:26:14 +01:00
|
|
|
|
if (!$scope.searchText || $scope.searchText.length < 3) {
|
2016-09-16 06:16:31 +02:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-06 06:26:14 +01:00
|
|
|
|
return searchSite;
|
2016-09-14 01:46:48 +02:00
|
|
|
|
};
|
2016-09-13 06:14:49 +02:00
|
|
|
|
|
2016-12-06 06:26:14 +01: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;
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-13 01:48:36 +02:00
|
|
|
|
$scope.addSite = function () {
|
|
|
|
|
$state.go('addSite', {
|
|
|
|
|
animation: 'in-slide-up',
|
2016-09-13 06:14:49 +02:00
|
|
|
|
returnScrollY: getScrollY(),
|
|
|
|
|
returnSearchText: $scope.searchText
|
2016-09-13 01:48:36 +02:00
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$scope.viewSite = function (site) {
|
|
|
|
|
$state.go('viewSite', {
|
|
|
|
|
siteId: site.id,
|
|
|
|
|
animation: 'in-slide-up',
|
2016-09-13 06:14:49 +02:00
|
|
|
|
returnScrollY: getScrollY(),
|
|
|
|
|
returnSearchText: $scope.searchText
|
2016-09-13 01:48:36 +02:00
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2016-12-06 06:26:14 +01:00
|
|
|
|
$scope.viewFolder = function (folder) {
|
|
|
|
|
// TODO: vault folder page
|
|
|
|
|
};
|
|
|
|
|
|
2016-09-14 01:46:48 +02:00
|
|
|
|
$scope.clipboardError = function (e) {
|
2016-10-18 14:10:40 +02:00
|
|
|
|
toastr.info(i18n.browserNotSupportClipboard);
|
2016-09-14 01:46:48 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$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);
|
2016-09-14 01:46:48 +02:00
|
|
|
|
};
|
|
|
|
|
|
2016-09-23 01:26:20 +02:00
|
|
|
|
$scope.$on('syncCompleted', function (event, successfully) {
|
|
|
|
|
setTimeout(loadVault, 500);
|
2016-09-21 06:04:59 +02:00
|
|
|
|
});
|
|
|
|
|
|
2016-09-13 01:48:36 +02:00
|
|
|
|
function getScrollY() {
|
|
|
|
|
var content = document.getElementsByClassName('content')[0];
|
|
|
|
|
return content.scrollTop;
|
2016-09-14 01:46:48 +02:00
|
|
|
|
}
|
2016-09-13 01:48:36 +02:00
|
|
|
|
|
|
|
|
|
function setScrollY() {
|
|
|
|
|
if ($stateParams.scrollY) {
|
|
|
|
|
var content = document.getElementsByClassName('content')[0];
|
|
|
|
|
content.scrollTop = $stateParams.scrollY;
|
|
|
|
|
}
|
2016-09-14 01:46:48 +02:00
|
|
|
|
}
|
2016-09-01 06:34:38 +02:00
|
|
|
|
});
|