sogo/UI/WebServerResources/js/Contacts.js.map
2015-08-07 10:37:36 -04:00

1 line
31 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","$on","event","current","previous","rejection","console","error","angular","module","config","run","$inject","AddressBookController","$scope","$state","$timeout","$mdDialog","focus","Dialog","Settings","selectCard","go","id","newComponent","ev","ComponentDialogController","scope","create","type","hide","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","vm","selectedFolder","notSelectedComponent","currentCard","selected","unselectCards","_","each","cards","confirmDeleteSelectedCards","confirm","then","selectedCards","filter","$deleteCards","data","status","saveSelectedCards","selectedUIDs","pluck","location","href","ApplicationBaseURL","selectAll","sort","field","$filter","sortedBy","$query","cancelSearch","mode","search","this","AddressBooksController","User","select","folder","editMode","newAddressbook","prompt","name","isEditable","isRemote","owner","UserLogin","$add","edit","originalAddressbook","extend","$omit","revertEditing","save","length","$rename","alert","confirmDelete","service","isSubscription","$delete","importCards","exportCards","showLinks","LinksDialogController","close","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","debug","$subscribe","activeUser","CardController","addOrgUnit","i","$addOrgUnit","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","addAddress","$addAddress","addMember","$addMember","userFilter","excludedCards","dry","excludeLists","$cards","form","$valid","$save","indexOf","$reload","copy","err","log","reset","$reset","cancel","isNew","$fullname","ok","reject","o","viewRawSource","$event","$$resource","post","currentFolder","CardRawSourceDialogController","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","sgAddress","restrict","addressLines","lines","locality_region","street","push","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', 'SOGo.Common', 'SOGo.PreferencesUI'])\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'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.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', '$state', '$timeout', '$mdDialog', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'stateAddressbooks', 'stateAddressbook'];\n function AddressBookController($scope, $state, $timeout, $mdDialog, focus, Card, AddressBook, Dialog, Settings, stateAddressbooks, stateAddressbook) {\n var vm = this;\n\n AddressBook.selectedFolder = stateAddressbook;\n\n vm.selectedFolder = stateAddressbook;\n vm.selectCard = selectCard;\n vm.newComponent = newComponent;\n vm.notSelectedComponent = notSelectedComponent;\n vm.unselectCards = unselectCards;\n vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;\n vm.saveSelectedCards = saveSelectedCards;\n vm.selectAll = selectAll;\n vm.sort = sort;\n vm.sortedBy = sortedBy;\n vm.cancelSearch = cancelSearch;\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 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 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 vm.selectedFolder.$query.sort == field;\n }\n\n function cancelSearch() {\n vm.mode.search = false;\n vm.selectedFolder.$filter('');\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', 'sgFocus', 'Card', 'AddressBook', 'Dialog', 'sgSettings', 'User', 'stateAddressbooks'];\n function AddressBooksController($state, $scope, $rootScope, $stateParams, $timeout, $mdDialog, 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(folder) {\n vm.editMode = false;\n $state.go('app.addressbook', {addressbookId: folder.id});\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() {\n\n }\n\n function exportCards() {\n window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';\n }\n\n function showLinks(selectedFolder) {\n $mdDialog.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n templateUrl: selectedFolder.id + '/links',\n locals: {\n },\n controller: LinksDialogController\n });\n \n /**\n * @ngInject\n */\n LinksDialogController.$inject = ['scope', '$mdDialog'];\n function LinksDialogController(scope, $mdDialog) {\n scope.close = function() {\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.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.reset = reset;\n vm.cancel = cancel;\n vm.confirmDelete = confirmDelete;\n vm.viewRawSource = viewRawSource;\n\n function addOrgUnit() {\n var i = vm.card.$addOrgUnit('');\n focus('orgUnit_' + i);\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 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 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"]}