From e72e8ae8aab0d852bcaf5c3f3a025b6bf04fdbc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gr=C3=B6ger?= Date: Wed, 10 Nov 2021 10:35:23 +0100 Subject: [PATCH 1/2] Add import menu item to all addressBooks Relates to #654 --- .../addressBook/addressBook_controller.js | 12 +++++++++-- .../addressBook/addressBook_directive.js | 21 ++++++++++++++++++- templates/addressBook.html | 8 +++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/js/components/addressBook/addressBook_controller.js b/js/components/addressBook/addressBook_controller.js index a8a2fa1e3..93245a776 100644 --- a/js/components/addressBook/addressBook_controller.js +++ b/js/components/addressBook/addressBook_controller.js @@ -1,5 +1,5 @@ angular.module('contactsApp') -.controller('addressbookCtrl', function($scope, AddressBookService) { +.controller('addressbookCtrl', function($scope, $document, AddressBookService) { var ctrl = this; ctrl.t = { @@ -12,7 +12,8 @@ angular.module('contactsApp') shareInputPlaceHolder: t('contacts', 'Share with users or groups'), delete: t('contacts', 'Delete'), more: t('contacts', 'More'), - canEdit: t('contacts', 'can edit') + canEdit: t('contacts', 'can edit'), + import: t('contacts', 'Import') }; ctrl.showUrl = false; @@ -152,6 +153,13 @@ angular.module('contactsApp') }); }; + ctrl.triggerImport = function() { + var element = $document.find('#contact-import-' + $scope.index); + if (element) { + element.click(); + } + }; + ctrl.download = function() { window.open(ctrl.addressBook.url + '?export'); }; diff --git a/js/components/addressBook/addressBook_directive.js b/js/components/addressBook/addressBook_directive.js index d4d7f9d2b..c0abc7ebf 100644 --- a/js/components/addressBook/addressBook_directive.js +++ b/js/components/addressBook/addressBook_directive.js @@ -1,6 +1,25 @@ angular.module('contactsApp') -.directive('addressbook', function() { +.directive('addressbook', function(ContactService) { return { + link: function(scope, element, ctrl) { + var input = element.find('input'); + input.bind('change', function() { + angular.forEach(input.get(0).files, function(file) { + var reader = new FileReader(); + + reader.addEventListener('load', function () { + scope.$apply(function () { + ContactService.import.call(ContactService, reader.result, file.type, ctrl.addressBook); + }); + }, false); + + if (file) { + reader.readAsText(file); + } + }); + input.get(0).value = ''; + }); + }, restrict: 'A', // has to be an attribute to work with core css scope: { index: '@' diff --git a/templates/addressBook.html b/templates/addressBook.html index f31e537f7..02fd9dad3 100644 --- a/templates/addressBook.html +++ b/templates/addressBook.html @@ -43,6 +43,14 @@ +
  • + + +
  • +