diff --git a/src/popup/app/app.js b/src/popup/app/app.js
index 631ea0c745..ab54740d63 100644
--- a/src/popup/app/app.js
+++ b/src/popup/app/app.js
@@ -28,6 +28,7 @@ require('../less/libs.less');
require('../less/popup.less');
import ComponentsModule from './components/components.module';
+import ToolsModule from './tools/tools.module';
// Model imports
import { AttachmentData } from '../../models/data/attachmentData';
@@ -80,7 +81,7 @@ angular
'bit.current',
'bit.vault',
'bit.settings',
- 'bit.tools',
+ ToolsModule,
'bit.lock'
]);
@@ -126,8 +127,6 @@ require('./settings/settingsAddFolderController.js');
require('./settings/settingsEditFolderController.js');
require('./settings/settingsPremiumController.js');
require('./settings/settingsEnvironmentController.js');
-require('./tools/toolsModule.js');
-require('./tools/toolsController.js');
require('./tools/toolsPasswordGeneratorController.js');
require('./tools/toolsPasswordGeneratorHistoryController.js');
require('./tools/toolsExportController.js');
diff --git a/src/popup/app/components/componentsModule.js b/src/popup/app/components/componentsModule.js
deleted file mode 100644
index df72afaf0e..0000000000
--- a/src/popup/app/components/componentsModule.js
+++ /dev/null
@@ -1,2 +0,0 @@
-angular
- .module('bit.components', []);
diff --git a/src/popup/app/config.js b/src/popup/app/config.js
index 301d27eecc..dc9da4ea19 100644
--- a/src/popup/app/config.js
+++ b/src/popup/app/config.js
@@ -124,8 +124,8 @@
})
.state('tabs.tools', {
url: '/tools',
- templateUrl: 'app/tools/views/tools.html',
- controller: 'toolsController'
+ //component: 'tools',
+ template: ''
})
.state('viewFolder', {
diff --git a/src/popup/app/tools/tools.component.ts b/src/popup/app/tools/tools.component.ts
new file mode 100644
index 0000000000..96cd84752f
--- /dev/null
+++ b/src/popup/app/tools/tools.component.ts
@@ -0,0 +1,50 @@
+import UtilsService from '../../../services/utils.service';
+import * as template from './views/tools.html';
+
+class ToolsController {
+ showExport: boolean;
+ i18n: any;
+
+ constructor(private SweetAlert: any, private i18nService: any,
+ private $analytics: any, private utilsService: UtilsService) {
+
+ this.i18n = i18nService;
+ this.showExport = !utilsService.isEdge();
+ }
+
+ launchWebVault(createOrg: any) {
+ this.$analytics.eventTrack('Launch Web Vault' + (createOrg ? ' For Share' : ''));
+ chrome.tabs.create({ url: 'https://vault.bitwarden.com/#/' + (createOrg ? '?org=free' : '') });
+ }
+
+ launchAndroid() {
+ this.$analytics.eventTrack('Launch Android');
+ chrome.tabs.create({ url: 'https://play.google.com/store/apps/details?id=com.x8bit.bitwarden' });
+ }
+
+ launchiOS() {
+ this.$analytics.eventTrack('Launch iOS');
+ chrome.tabs.create({ url: 'https://itunes.apple.com/us/app/bitwarden-free-password-manager/id1137397744?mt=8' });
+ }
+
+ launchImport() {
+ this.SweetAlert.swal({
+ title: this.i18nService.importItems,
+ text: this.i18nService.importItemsConfirmation,
+ showCancelButton: true,
+ confirmButtonText: this.i18nService.yes,
+ cancelButtonText: this.i18nService.cancel
+ }, (confirmed: boolean) => {
+ if (confirmed) {
+ this.$analytics.eventTrack('Launch Web Vault For Import');
+ chrome.tabs.create({ url: 'https://help.bitwarden.com/article/import-data/' });
+ }
+ });
+ };
+}
+
+export const ToolsComponent = {
+ bindings: {},
+ controller: ToolsController,
+ template,
+};
diff --git a/src/popup/app/tools/tools.module.ts b/src/popup/app/tools/tools.module.ts
new file mode 100644
index 0000000000..5dd4a7e780
--- /dev/null
+++ b/src/popup/app/tools/tools.module.ts
@@ -0,0 +1,7 @@
+import * as angular from 'angular';
+import { ToolsComponent } from './tools.component';
+
+export default angular
+ .module('bit.tools', ['ngAnimate', 'ngclipboard', 'toastr', 'oitozero.ngSweetAlert'])
+ .component('tools', ToolsComponent)
+ .name;
diff --git a/src/popup/app/tools/toolsController.js b/src/popup/app/tools/toolsController.js
deleted file mode 100644
index c40f71e4b6..0000000000
--- a/src/popup/app/tools/toolsController.js
+++ /dev/null
@@ -1,36 +0,0 @@
-angular
- .module('bit.tools')
-
- .controller('toolsController', function ($scope, SweetAlert, i18nService, $analytics, utilsService) {
- $scope.i18n = i18nService;
- $scope.showExport = !utilsService.isEdge();
- $scope.launchWebVault = function (createOrg) {
- $analytics.eventTrack('Launch Web Vault' + (createOrg ? ' For Share' : ''));
- chrome.tabs.create({ url: 'https://vault.bitwarden.com/#/' + (createOrg ? '?org=free' : '') });
- };
-
- $scope.launchiOS = function () {
- $analytics.eventTrack('Launch iOS');
- chrome.tabs.create({ url: 'https://itunes.apple.com/us/app/bitwarden-free-password-manager/id1137397744?mt=8' });
- };
-
- $scope.launchAndroid = function () {
- $analytics.eventTrack('Launch Android');
- chrome.tabs.create({ url: 'https://play.google.com/store/apps/details?id=com.x8bit.bitwarden' });
- };
-
- $scope.launchImport = function () {
- SweetAlert.swal({
- title: i18nService.importItems,
- text: i18nService.importItemsConfirmation,
- showCancelButton: true,
- confirmButtonText: i18nService.yes,
- cancelButtonText: i18nService.cancel
- }, function (confirmed) {
- if (confirmed) {
- $analytics.eventTrack('Launch Web Vault For Import');
- chrome.tabs.create({ url: 'https://help.bitwarden.com/article/import-data/' });
- }
- });
- };
- });
diff --git a/src/popup/app/tools/toolsModule.js b/src/popup/app/tools/toolsModule.js
deleted file mode 100644
index 8fa52b826a..0000000000
--- a/src/popup/app/tools/toolsModule.js
+++ /dev/null
@@ -1,2 +0,0 @@
-angular
- .module('bit.tools', ['ngAnimate', 'ngclipboard', 'toastr', 'oitozero.ngSweetAlert']);
diff --git a/src/popup/app/tools/views/tools.html b/src/popup/app/tools/views/tools.html
index cbe0acbbfe..33084294b5 100644
--- a/src/popup/app/tools/views/tools.html
+++ b/src/popup/app/tools/views/tools.html
@@ -2,7 +2,7 @@
- {{i18n.tools}}
+ {{$ctrl.i18n.tools}}