sogo/UI/WebServerResources/js/Contacts.js.map
Francis Lachapelle 369060a52f (js/css) Update generated files
With Angular Material 0.11.3
2015-10-13 16:05:39 -04:00

1 line
43 KiB
Plaintext

{"version":3,"file":"Contacts.js","sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","addressbooks","templateUrl","controller","controllerAs","resolve","stateAddressbooks","addressbook","stateAddressbook","card","stateCard","stateNewCard","template","card@app.addressbook","otherwise","AddressBook","$findAll","window","contactFolders","$stateParams","$find","addressbookId","$futureAddressBookData","Card","tag","contactType","pid","c_component","selectedCard","cardId","$getCard","runBlock","$rootScope","$log","$state","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","angular","module","config","run","$inject","AddressBookController","$scope","$q","$timeout","$mdDialog","focus","Account","Dialog","Settings","selectCard","id","toggleCardSelection","$event","selected","preventDefault","stopPropagation","newComponent","ev","ComponentDialogController","scope","create","type","hide","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","vm","selectedFolder","notSelectedComponent","currentCard","unselectCards","_","each","cards","confirmDeleteSelectedCards","confirm","then","selectedCards","filter","$deleteCards","data","status","saveSelectedCards","selectedUIDs","pluck","location","href","ApplicationBaseURL","copySelectedCards","folder","$copyCards","alert","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","newMessage","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","newMessageWithRecipient","recipient","fn","full","newMessageWithSelectedCards","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","this","service","AddressBooksController","$mdToast","FileUploader","User","select","params","editMode","value","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","$rename","confirmDelete","isSubscription","$delete","importCards","CardsImportDialogController","uploader","onProgressItem","item","progress","console","debug","onSuccessItem","response","headers","JSON","stringify","undefined","simple","content","imported","position","hideDelay","$reload","onCancelItem","onErrorItem","close","upload","uploadAll","exportCards","showLinks","LinksDialogController","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addBirthday","birthday","Date","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","exportCard","currentFolder","viewRawSource","$$resource","post","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"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","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoContacts */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.ContactsUI', ['ngSanitize', 'ui.router', 'angularFileUpload', 'ck', 'SOGo.Common', 'SOGo.PreferencesUI', 'SOGo.MailerUI'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('app', {\n url: '/addressbooks',\n abstract: true,\n views: {\n addressbooks: {\n templateUrl: 'UIxContactFoldersView', // UI/Templates/Contacts/UIxContactFoldersView.wox\n controller: 'AddressBooksController',\n controllerAs: 'app'\n }\n },\n resolve: {\n stateAddressbooks: stateAddressbooks\n }\n })\n .state('app.addressbook', {\n url: '/:addressbookId',\n views: {\n addressbook: {\n templateUrl: 'addressbook',\n controller: 'AddressBookController',\n controllerAs: 'addressbook'\n }\n },\n resolve: {\n stateAddressbook: stateAddressbook\n }\n })\n .state('app.addressbook.new', {\n url: '/{contactType:(?:card|list)}/new',\n views: {\n card: {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n },\n resolve: {\n stateCard: stateNewCard\n }\n })\n .state('app.addressbook.card', {\n url: '/:cardId',\n abstract: true,\n views: {\n card: {\n template: '<ui-view/>'\n }\n },\n resolve: {\n stateCard: stateCard\n }\n })\n .state('app.addressbook.card.view', {\n url: '/view',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactViewTemplate', // UI/Templates/Contacts/UIxContactViewTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n })\n .state('app.addressbook.card.editor', {\n url: '/edit',\n views: {\n 'card@app.addressbook': {\n templateUrl: 'UIxContactEditorTemplate', // UI/Templates/Contacts/UIxContactEditorTemplate.wox\n controller: 'CardController',\n controllerAs: 'editor'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/addressbooks/personal');\n }\n\n /**\n * @ngInject\n */\n stateAddressbooks.$inject = ['AddressBook'];\n function stateAddressbooks(AddressBook) {\n return AddressBook.$findAll(window.contactFolders);\n }\n\n /**\n * @ngInject\n */\n stateAddressbook.$inject = ['$stateParams', 'AddressBook'];\n function stateAddressbook($stateParams, AddressBook) {\n return AddressBook.$find($stateParams.addressbookId).$futureAddressBookData;\n }\n\n /**\n * @ngInject\n */\n stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];\n function stateNewCard($stateParams, stateAddressbook, Card) {\n var tag = 'v' + $stateParams.contactType,\n card = new Card({ pid: $stateParams.addressbookId, c_component: tag });\n stateAddressbook.selectedCard = true;\n return card;\n }\n\n /**\n * @ngInject\n */\n stateCard.$inject = ['$stateParams', 'stateAddressbook'];\n function stateCard($stateParams, stateAddressbook) {\n stateAddressbook.selectedCard = $stateParams.cardId;\n return stateAddressbook.$getCard($stateParams.cardId);\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope', '$log', '$state'];\n function runBlock($rootScope, $log, $state) {\n $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {\n $log.error(error);\n $state.go('app');\n });\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n $log.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBookController.$inject = ['$scope', '$q', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Account', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $q, $state, $timeout, $mdDialog, focus, Account, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.service = AddressBook;\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.toggleCardSelection = toggleCardSelection;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.copySelectedCards = copySelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\n vm.newMessage = newMessage;\n vm.newMessageWithSelectedCards = newMessageWithSelectedCards;\n vm.newMessageWithRecipient = newMessageWithRecipient;\n vm.mode = { search: false };\n \n function selectCard(card) {\n $state.go('app.addressbook.card.view', {addressbookId: stateAddressbook.id, cardId: card.id});\n }\n \n function toggleCardSelection($event, card) {\n card.selected = !card.selected;\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n function newComponent(ev) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '<md-dialog aria-label=\"' + l('Create component') + '\">',\n ' <md-dialog-content>',\n ' <div layout=\"column\">',\n ' <md-button ng-click=\"create(\\'card\\')\">',\n ' ' + l('Contact'),\n ' </md-button>',\n ' <md-button ng-click=\"create(\\'list\\')\">',\n ' ' + l('List'),\n ' </md-button>',\n ' </div>',\n ' </md-dialog-content>',\n '</md-dialog>'\n ].join(''),\n locals: {\n addressbookId: vm.selectedFolder.id\n },\n controller: ComponentDialogController\n });\n \n /**\n * @ngInject\n */\n ComponentDialogController.$inject = ['scope', '$mdDialog', '$state', 'addressbookId'];\n function ComponentDialogController(scope, $mdDialog, $state, addressbookId) {\n scope.create = function(type) {\n $mdDialog.hide();\n $state.go('app.addressbook.new', { addressbookId: addressbookId, contactType: type });\n };\n }\n }\n\n function notSelectedComponent(currentCard, type) {\n return (currentCard && currentCard.c_component == type && !currentCard.selected);\n }\n\n function unselectCards() {\n _.each(vm.selectedFolder.cards, function(card) { card.selected = false; });\n }\n \n function confirmDeleteSelectedCards() {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the selected contacts?'))\n .then(function() {\n // User confirmed the deletion\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$deleteCards(selectedCards);\n delete vm.selectedFolder.selectedCard;\n }, function(data, status) {\n // Delete failed\n });\n }\n\n function saveSelectedCards() {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var selectedUIDs = _.pluck(selectedCards, 'id');\n window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');\n }\n\n function copySelectedCards(folder) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {\n // TODO: refresh target addressbook?\n }, function(error) {\n Dialog.alert(l('Error'), error);\n });\n }\n\n function selectAll() {\n _.each(vm.selectedFolder.cards, function(card) {\n card.selected = true;\n });\n }\n\n function sort(field) {\n vm.selectedFolder.$filter('', { sort: field });\n }\n\n function sortedBy(field) {\n return AddressBook.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\n }\n\n function newMessage($event, recipients) {\n Account.$findAll().then(function(accounts) {\n var account = _.filter(accounts, function(o) {\n if (o.id === 0)\n return o;\n })[0];\n\n // We must initialize the Account with its mailbox\n // list before proceeding with message's creation\n account.$getMailboxes().then(function(mailboxes) {\n account.$newMessage().then(function(message) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: false,\n escapeToClose: false,\n templateUrl: '../Mail/UIxMailEditor',\n controller: 'MessageEditorController',\n controllerAs: 'editor',\n locals: {\n stateAccounts: accounts,\n stateMessage: message,\n stateRecipients: recipients\n }\n });\n });\n });\n });\n }\n\n function newMessageWithRecipient($event, recipient, fn) {\n var recipients = [{full: fn + ' <' + recipient + '>'}];\n vm.newMessage($event, recipients);\n }\n\n function newMessageWithSelectedCards($event) {\n var selectedCards = _.filter(vm.selectedFolder.cards, function(card) { return card.selected; });\n var promises = [], recipients = [];\n\n _.each(selectedCards, function(card) {\n if (card.c_component == 'vcard' && card.c_mail.length) {\n recipients.push({full: card.c_cn + ' <' + card.c_mail + '>'});\n }\n else if (card.c_component == 'vlist') {\n // If the list's members were already fetch, use them\n if (angular.isDefined(card.refs) && card.refs.length) {\n _.each(card.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n }\n else {\n promises.push(vm.selectedFolder.$getCard(card.id).then(function(card) {\n return card.$futureCardData.then(function(data) {\n _.each(data.refs, function(ref) {\n if (ref.email.length)\n recipients.push({full: ref.c_cn + ' <' + ref.email + '>'});\n });\n });\n }));\n }\n }\n });\n\n $q.all(promises).then(function() {\n if (recipients.length)\n vm.newMessage($event, recipients);\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI') \n .controller('AddressBookController', AddressBookController); \n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AddressBooksController.$inject = ['$state', '$scope', '$rootScope', '$stateParams', '$timeout', '$mdDialog', '$mdToast', 'FileUploader', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, $mdToast, FileUploader, focus, Card, AddressBook, Dialog, Settings, User, stateAddressbooks) {\n var vm = this;\n\n vm.activeUser = Settings.activeUser;\n vm.service = AddressBook;\n vm.select = select;\n vm.newAddressbook = newAddressbook;\n vm.edit = edit;\n vm.revertEditing = revertEditing;\n vm.save = save;\n vm.confirmDelete = confirmDelete;\n vm.importCards = importCards;\n vm.exportCards = exportCards;\n vm.showLinks = showLinks;\n vm.share = share;\n vm.subscribeToFolder = subscribeToFolder;\n\n function select($event, folder) {\n if ($state.params.addressbookId != folder.id &&\n vm.editMode != folder.id) {\n vm.editMode = false;\n AddressBook.$query.value = '';\n $state.go('app.addressbook', {addressbookId: folder.id});\n }\n else {\n $event.preventDefault();\n $event.stopPropagation();\n }\n }\n\n function newAddressbook() {\n Dialog.prompt(l('New addressbook'),\n l('Name of new addressbook'))\n .then(function(name) {\n var addressbook = new AddressBook(\n {\n name: name,\n isEditable: true,\n isRemote: false,\n owner: UserLogin\n }\n );\n AddressBook.$add(addressbook);\n });\n }\n\n function edit(folder) {\n if (!folder.isRemote) {\n vm.editMode = folder.id;\n vm.originalAddressbook = angular.extend({}, folder.$omit());\n focus('addressBookName_' + folder.id);\n }\n }\n\n function revertEditing(folder) {\n folder.name = vm.originalAddressbook.name;\n vm.editMode = false;\n }\n\n function save(folder) {\n var name = folder.name;\n if (name && name.length > 0 && name != vm.originalAddressbook.name) {\n folder.$rename(name)\n .then(function(data) {\n vm.editMode = false;\n }, function(data, status) {\n Dialog.alert(l('Warning'), data);\n });\n }\n }\n\n function confirmDelete() {\n if (vm.service.selectedFolder.isSubscription) {\n // Unsubscribe without confirmation\n vm.service.selectedFolder.$delete()\n .then(function() {\n vm.service.selectedFolder = null;\n $state.go('app.addressbook', { addressbookId: 'personal' });\n }, function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n else {\n Dialog.confirm(l('Warning'), l('Are you sure you want to delete the addressbook <em>%{0}</em>?',\n vm.service.selectedFolder.name))\n .then(function() {\n return vm.service.selectedFolder.$delete();\n })\n .then(function() {\n vm.service.selectedFolder = null;\n return true;\n })\n .catch(function(data, status) {\n Dialog.alert(l('An error occured while deleting the addressbook \"%{0}\".',\n vm.service.selectedFolder.name),\n l(data.error));\n });\n }\n }\n\n function importCards($event, folder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '<md-dialog flex=\"40\" flex-sm=\"100\" aria-label=\"' + l('Import Cards') + '\">',\n ' <md-toolbar class=\"sg-padded\">',\n ' <div class=\"md-toolbar-tools\">',\n ' <md-icon class=\"material-icons sg-icon-toolbar-bg\">import_export</md-icon>',\n ' <div class=\"md-flex\">',\n ' <div class=\"sg-md-title\">' + l('Import Cards') + '</div>',\n ' </div>',\n ' <md-button class=\"md-icon-button\" ng-click=\"close()\">',\n ' <md-icon aria-label=\"Close dialog\">close</md-icon>',\n ' </md-button>',\n ' </div>',\n ' </md-toolbar>',\n ' <md-dialog-content>',\n ' <div layout=\"column\">',\n ' <div layout=\"row\" layout-align=\"start center\">',\n ' <span>' + l('Select a vCard or LDIF file.') + '</span>',\n ' <label class=\"md-button\" for=\"file-input\">',\n ' <span>' + l('Choose File') + '</span>',\n ' </label>',\n ' <input id=\"file-input\" type=\"file\" nv-file-select=\"nv-file-select\" uploader=\"uploader\" ng-show=\"false\"/>',\n ' </div>',\n ' <span ng-show=\"uploader.queue.length == 0\">' + l('No file chosen') + '</span>',\n ' <span ng-show=\"uploader.queue.length > 0\">{{ uploader.queue[0].file.name }}</span>',\n ' </div>',\n ' </md-dialog-content>',\n ' <div class=\"md-actions\">',\n ' <md-button ng-disabled=\"uploader.queue.length == 0\" ng-click=\"upload()\">' + l('Upload') + '</md-button>',\n ' </div>',\n '</md-dialog>'\n ].join(''),\n controller: CardsImportDialogController,\n locals: {\n folder: folder\n }\n });\n\n /**\n * @ngInject\n */\n CardsImportDialogController.$inject = ['scope', '$mdDialog', 'folder'];\n function CardsImportDialogController(scope, $mdDialog, folder) {\n\n scope.uploader = new FileUploader({\n url: ApplicationBaseURL + '/' + folder.id + '/import',\n onProgressItem: function(item, progress) {\n console.debug(item); console.debug(progress);\n },\n onSuccessItem: function(item, response, status, headers) {\n console.debug(item); console.debug('success = ' + JSON.stringify(response, undefined, 2));\n $mdDialog.hide();\n $mdToast.show(\n $mdToast.simple()\n .content(l('A total of %{0} cards were imported in the addressbook.', response.imported))\n .position('top right')\n .hideDelay(3000));\n AddressBook.selectedFolder.$reload();\n },\n onCancelItem: function(item, response, status, headers) {\n console.debug(item); console.debug('cancel = ' + JSON.stringify(response, undefined, 2));\n },\n onErrorItem: function(item, response, status, headers) {\n console.debug(item); console.debug('error = ' + JSON.stringify(response, undefined, 2));\n }\n });\n\n scope.close = function() {\n $mdDialog.hide();\n };\n scope.upload = function() {\n scope.uploader.uploadAll();\n };\n }\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(addressbook) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: addressbook.id + '/links',\n controller: LinksDialogController,\n controllerAs: 'links',\n locals: {\n addressbook: addressbook\n }\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['$mdDialog', 'addressbook'];\n function LinksDialogController($mdDialog, addressbook) {\n var vm = this;\n this.addressbook = addressbook;\n this.close = close;\n\n function close() {\n $mdDialog.hide();\n }\n }\n }\n\n function share(addressbook) {\n // Fetch list of ACL users\n addressbook.$acl.$users().then(function() {\n // Show ACL editor\n $mdDialog.show({\n templateUrl: addressbook.id + '/UIxAclEditor', // UI/Templates/UIxAclEditor.wox\n controller: 'AclController', // from the ng module SOGo.Common\n controllerAs: 'acl',\n clickOutsideToClose: true,\n escapeToClose: true,\n locals: {\n usersWithACL: addressbook.$acl.users,\n User: User,\n folder: addressbook\n }\n });\n });\n }\n\n /**\n * subscribeToFolder - Callback of sgSubscribe directive\n */\n function subscribeToFolder(addressbookData) {\n console.debug('subscribeToFolder ' + addressbookData.owner + addressbookData.name);\n AddressBook.$subscribe(addressbookData.owner, addressbookData.name).catch(function(data) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('AddressBooksController', AddressBooksController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Controller to view and edit a card\n * @ngInject\n */\n CardController.$inject = ['$scope', '$timeout', '$mdDialog', 'AddressBook', 'Card', 'Dialog', 'sgFocus', '$state', '$stateParams', 'stateCard'];\n function CardController($scope, $timeout, $mdDialog, AddressBook, Card, Dialog, focus, $state, $stateParams, stateCard) {\n var vm = this;\n\n vm.card = stateCard;\n\n vm.currentFolder = AddressBook.selectedFolder;\n vm.allEmailTypes = Card.$EMAIL_TYPES;\n vm.allTelTypes = Card.$TEL_TYPES;\n vm.allUrlTypes = Card.$URL_TYPES;\n vm.allAddressTypes = Card.$ADDRESS_TYPES;\n vm.categories = {};\n vm.userFilterResults = [];\n vm.addOrgUnit = addOrgUnit;\n vm.addBirthday = addBirthday;\n vm.addEmail = addEmail;\n vm.addPhone = addPhone;\n vm.addUrl = addUrl;\n vm.addAddress = addAddress;\n vm.addMember = addMember;\n vm.userFilter = userFilter;\n vm.save = save;\n vm.close = close;\n vm.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.exportCard = exportCard;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\n }\n function addBirthday() {\n vm.card.birthday = new Date();\n }\n function addEmail() {\n var i = vm.card.$addEmail('');\n focus('email_' + i);\n }\n function addPhone() {\n var i = vm.card.$addPhone('');\n focus('phone_' + i);\n }\n function addUrl() {\n var i = vm.card.$addUrl('', '');\n focus('url_' + i);\n }\n function addAddress() {\n var i = vm.card.$addAddress('', '', '', '', '', '', '', '');\n focus('address_' + i);\n }\n function addMember() {\n var i = vm.card.$addMember('');\n focus('ref_' + i);\n }\n function userFilter($query, excludedCards) {\n AddressBook.selectedFolder.$filter($query, {dry: true, excludeLists: true}, excludedCards);\n return AddressBook.selectedFolder.$cards;\n }\n function save(form) {\n if (form.$valid) {\n vm.card.$save()\n .then(function(data) {\n var i = _.indexOf(_.pluck(AddressBook.selectedFolder.cards, 'id'), vm.card.id);\n if (i < 0) {\n // New card; reload contacts list and show addressbook in which the card has been created\n AddressBook.selectedFolder.$reload();\n }\n else {\n // Update contacts list with new version of the Card object\n AddressBook.selectedFolder.cards[i] = angular.copy(vm.card);\n }\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n })\n .catch(function(err) {\n console.log(err);\n });\n }\n }\n function close() {\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id }).then(function() {\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n });\n }\n function reset() {\n vm.card.$reset();\n }\n function cancel() {\n vm.card.$reset();\n if (vm.card.isNew) {\n // Cancelling the creation of a card\n vm.card = null;\n delete AddressBook.selectedFolder.selectedCard;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }\n else {\n // Cancelling the edition of an existing card\n $state.go('app.addressbook.card.view', { cardId: vm.card.id });\n }\n }\n function confirmDelete(card) {\n Dialog.confirm(l('Warning'),\n l('Are you sure you want to delete the card of %{0}?', card.$fullname()),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n // User confirmed the deletion\n card.$delete()\n .then(function() {\n // Remove card from list of addressbook\n AddressBook.selectedFolder.cards = _.reject(AddressBook.selectedFolder.cards, function(o) {\n return o.id == card.id;\n });\n // Remove card object from scope\n vm.card = null;\n $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id });\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured while deleting the card \"%{0}\".',\n card.$fullname()));\n });\n });\n }\n\n function exportCard() {\n window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;\n }\n\n function viewRawSource($event) {\n Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, \"raw\").then(function(data) {\n $mdDialog.show({\n parent: angular.element(document.body),\n targetEvent: $event,\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '<md-dialog flex=\"80\" flex-sm=\"100\" aria-label=\"' + l('View Card Source') + '\">',\n ' <md-dialog-content>',\n ' <pre>',\n data,\n ' </pre>',\n ' </md-dialog-content>',\n ' <div class=\"md-actions\">',\n ' <md-button ng-click=\"close()\">' + l('Close') + '</md-button>',\n ' </div>',\n '</md-dialog>'\n ].join(''),\n controller: CardRawSourceDialogController\n });\n\n /**\n * @ngInject\n */\n CardRawSourceDialogController.$inject = ['scope', '$mdDialog'];\n function CardRawSourceDialogController(scope, $mdDialog) {\n scope.close = function() {\n $mdDialog.hide();\n };\n }\n });\n }\n }\n\n angular\n .module('SOGo.ContactsUI')\n .controller('CardController', CardController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name sgAddress\n * @memberof ContactsUI\n * @desc Directive to format a postal address.\n * @ngInject\n */\n function sgAddress() {\n return {\n restrict: 'A',\n scope: { data: '=sgAddress' },\n controller: ['$scope', function($scope) {\n $scope.addressLines = function(data) {\n var lines = [],\n locality_region = [];\n if (data.street) lines.push(data.street);\n if (data.street2) lines.push(data.street2);\n if (data.locality) locality_region.push(data.locality);\n if (data.region) locality_region.push(data.region);\n if (locality_region.length > 0) lines.push(locality_region.join(', '));\n if (data.country) lines.push(data.country);\n if (data.postalcode) lines.push(data.postalcode);\n return lines.join('<br>');\n };\n }],\n template: '<address ng-bind-html=\"addressLines(data)\"></address>'\n };\n }\n \n angular\n .module('SOGo.Common')\n .directive('sgAddress', sgAddress);\n})();\n"]}