sogo/UI/WebServerResources/js/Contacts.js
2017-07-05 01:25:31 -04:00

2 lines
18 KiB
JavaScript

!function(){"use strict";function e(e,a){e.state("app",{url:"/addressbooks",abstract:!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:t}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:o}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",params:{refs:{array:!0}},views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:r}}).state("app.addressbook.card",{url:"/:cardId",abstract:!0,views:{card:{template:"<ui-view/>"}},resolve:{stateCard:s},onEnter:d,onExit:n}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),a.otherwise("/addressbooks/personal")}function t(e){return e.$findAll(window.contactFolders)}function o(e,t,o,r){var s=_.find(r.$findAll(),function(e){return e.id==o.addressbookId});return s?(delete s.selectedCard,s.$reload(),s):e.reject("Addressbook "+o.addressbookId+" not found")}function r(e,t,o){var r="v"+e.contactType,s=new o({pid:e.addressbookId,c_component:r,refs:e.refs});return t.selectedCard=!0,s}function s(e,t,o){return o.$futureAddressBookData.then(function(){var r=_.find(o.$cards,function(e){return e.id==t.cardId});if(r)return r.$reload();e.go("app.addressbook")})}function d(e,t){t.selectedCard=e.cardId}function n(e){delete o.selectedCard}function a(e,t,o){e.$on("$stateChangeError",function(e,r,s,d,n,a){t.error(a),o.go("app.addressbook",{addressbookId:"personal"})}),e.$on("$routeChangeError",function(e,o,r,s){t.error(e,o,r,s)})}angular.module("SOGo.ContactsUI",["ngCookies","ui.router","angularFileUpload","ck","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).config(e).run(a),e.$inject=["$stateProvider","$urlRouterProvider"],t.$inject=["AddressBook"],o.$inject=["$q","$state","$stateParams","AddressBook"],r.$inject=["$stateParams","stateAddressbook","Card"],s.$inject=["$state","$stateParams","stateAddressbook"],d.$inject=["$stateParams","stateAddressbook"],n.$inject=["stateAddressbook"],a.$inject=["$rootScope","$log","$state"]}(),function(){"use strict";function e(e,t,o,r,s,d,n,a,c,i,u,f,p,h,m,g){function $(e){e.push(h.createHotkey({key:l("hotkey_search"),description:l("Search"),callback:angular.bind(y,y.searchMode)})),e.push(h.createHotkey({key:l("key_create_card"),description:l("Create a new address book card"),callback:angular.bind(y,y.newComponent,"card")})),e.push(h.createHotkey({key:l("key_create_list"),description:l("Create a new list"),callback:angular.bind(y,y.newComponent,"list")})),e.push(h.createHotkey({key:"space",description:l("Toggle item"),callback:angular.bind(y,y.toggleCardSelection)})),e.push(h.createHotkey({key:"shift+space",description:l("Toggle range of items"),callback:angular.bind(y,y.toggleCardSelection)})),e.push(h.createHotkey({key:"up",description:l("View next item"),callback:k})),e.push(h.createHotkey({key:"down",description:l("View previous item"),callback:b})),e.push(h.createHotkey({key:"shift+up",description:l("Add next item to selection"),callback:C})),e.push(h.createHotkey({key:"shift+down",description:l("Add previous item to selection"),callback:v})),_.forEach(["backspace","delete"],function(t){e.push(h.createHotkey({key:t,description:l("Delete selected card or address book"),callback:angular.bind(y,y.confirmDeleteSelectedCards)}))}),_.forEach(e,function(e){h.registerHotkey(e)})}function k(e){var t=y.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t--,y.selectedFolder.$topIndex>0&&y.selectedFolder.$topIndex--):(t=y.selectedFolder.$cards.length()-1,y.selectedFolder.$topIndex=y.selectedFolder.getLength()),t>-1&&y.selectCard(y.selectedFolder.$cards[t]),e.preventDefault(),t}function b(e){var t=y.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t++,y.selectedFolder.$topIndex<y.selectedFolder.$cards.length&&y.selectedFolder.$topIndex++):t=0,t<y.selectedFolder.$cards.length?y.selectCard(y.selectedFolder.$cards[t]):t=-1,e.preventDefault(),t}function C(e){var t;y.selectedFolder.hasSelectedCard()&&(t=k(e))>=0&&toggleCardSelection(e,y.selectedFolder.$cards[t])}function v(e){var t;y.selectedFolder.hasSelectedCard()&&(t=b(e))>=0&&toggleCardSelection(e,y.selectedFolder.$cards[t])}function w(e,t){var o,s,d,a,c,i,u;o=y.selectedFolder,c=!1,s=o.$selectedCards(),(d=_.filter(s,function(e){return e.$isCard()})).length!=s.length&&n.show(n.simple().content(l("Lists can't be moved or copied.")).position("top right").hideDelay(2e3)),d.length&&("copy"==e?(i=o.$copyCards(d,t),u=l("%{0} card(s) copied",d.length)):(i=o.$moveCards(d,t),u=l("%{0} card(s) moved",d.length),a=_.map(d,"id"),c=o.selectedCard&&a.indexOf(o.selectedCard)>=0),i.then(function(){c&&r.go("app.addressbook"),n.show(n.simple().content(u).position("top right").hideDelay(2e3))}))}var y=this,F=[];this.$onInit=function(){i.selectedFolder=g,this.service=i,this.selectedFolder=g,this.mode={search:!1,multiple:0},$(F),e.$on("$destroy",function(){_.forEach(F,function(e){h.deregisterHotkey(e)})})},this.selectCard=function(e){r.go("app.addressbook.card.view",{cardId:e.id})},this.toggleCardSelection=function(e,t){var o,r,s,d=this.selectedFolder;if(t||(t=d.$selectedCard()),t.selected=!t.selected,this.mode.multiple+=t.selected?1:-1,e.shiftKey&&d.$selectedCount()>1){for(r=(o=d.idsMap[t.id])-2;r>=0&&!d.$cards[r].selected;)r--;if(r<0)for(r=o+2;r<d.getLength()&&!d.$cards[r].selected;)r++;if(r>=0&&r<d.getLength())for(s=Math.min(o,r);s<=Math.max(o,r);s++)d.$cards[s].selected=!0}e.preventDefault(),e.stopPropagation()},this.newComponent=function(e){r.go("app.addressbook.new",{contactType:e})},this.unselectCards=function(){_.forEach(this.selectedFolder.$cards,function(e){e.selected=!1}),this.mode.multiple=0},this.confirmDeleteSelectedCards=function(e){var t=this.selectedFolder.$selectedCards();_.size(t)>0&&f.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?"),{ok:l("Delete")}).then(function(){y.selectedFolder.$deleteCards(t).then(function(){y.mode.multiple=0,y.selectedFolder.selectedCard||r.go("app.addressbook")})}),e.preventDefault()},this.copySelectedCards=function(e){w("copy",e)},this.moveSelectedCards=function(e){w("move",e)},this.selectAll=function(){_.forEach(this.selectedFolder.$cards,function(e){e.selected=!0}),this.mode.multiple=this.selectedFolder.$cards.length},this.sort=function(e){this.selectedFolder.$filter("",{sort:e})},this.sortedBy=function(e){return i.$query.sort==e},this.searchMode=function(){y.mode.search=!0,u("search")},this.cancelSearch=function(){this.mode.search=!1,this.selectedFolder.$filter("")},this.newMessage=function(e,t,o){a.$findAll().then(function(r){var s=_.find(r,function(e){if(0===e.id)return e});s.$getMailboxes().then(function(r){s.$newMessage().then(function(r){r.editable[o]=t,d.show({parent:angular.element(document.body),targetEvent:e,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"../Mail/UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccount:s,stateMessage:r}})})})})},this.newMessageWithRecipient=function(e,t,o){var r=[o+" <"+t+">"];this.newMessage(e,r,"to"),e.stopPropagation(),e.preventDefault()},this.newMessageWithSelectedCards=function(e,o){var r=_.filter(this.selectedFolder.$cards,function(e){return e.selected}),s=[],d=[];_.forEach(r,function(e){e.$isList({expandable:!0})?angular.isDefined(e.refs)&&e.refs.length?_.forEach(e.refs,function(e){e.email.length&&d.push(e.$shortFormat())}):s.push(e.$reload().then(function(e){_.forEach(e.refs,function(e){e.email.length&&d.push(e.$shortFormat())})})):e.c_mail.length&&d.push(e.$shortFormat())}),t.all(s).then(function(){(d=_.uniq(d)).length&&y.newMessage(e,d,o)})},this.newListWithSelectedCards=function(){var e=_.filter(this.selectedFolder.$cards,function(e){return e.selected}),o=[],s=[];_.forEach(e,function(e){e.$isList({expandable:!0})?angular.isDefined(e.refs)&&e.refs.length?_.forEach(e.refs,function(e){e.email.length&&s.push(e)}):o.push(e.$reload().then(function(e){_.forEach(e.refs,function(e){e.email.length&&s.push(e)})})):e.$$email&&e.$$email.length&&s.push(e)}),t.all(o).then(function(){(s=_.uniqBy(_.map(s,function(e){return{reference:e.id||e.reference,email:e.$$email||e.email}}),"reference")).length&&r.go("app.addressbook.new",{contactType:"list",refs:s})})}}e.$inject=["$scope","$q","$window","$state","$timeout","$mdDialog","$mdToast","Account","Card","AddressBook","sgFocus","Dialog","sgSettings","sgHotkeys","stateAddressbooks","stateAddressbook"],angular.module("SOGo.ContactsUI").controller("AddressBookController",e)}(),function(){"use strict";function e(e,t,o,r,s,d,n,a,c,i,u,f,p,h,m,g,$,k,b,C,v){function w(e,o){t.params.addressbookId!=o.id&&H.editMode!=o.id?(H.editMode=!1,$.$query.value="",i(p["gt-md"])||u("left").close(),t.go("app.addressbook",{addressbookId:o.id})):(e.preventDefault(),e.stopPropagation())}function y(){k.prompt(l("New Addressbook..."),l("Name of the Address Book")).then(function(e){var t=new $({name:e,isEditable:!0,isRemote:!1,owner:UserLogin});$.$add(t)})}function F(e){e.isRemote||(H.editMode=e.id,H.originalAddressbook=e.$omit(),m("addressBookName_"+e.id))}function A(e){e.name=H.originalAddressbook.name,H.editMode=!1}function S(e){var t=e.name;t&&t.length>0&&t!=H.originalAddressbook.name&&e.$rename(t).then(function(e){H.editMode=!1},function(e,t){k.alert(l("Warning"),e)})}function D(){H.service.selectedFolder.isSubscription?H.service.selectedFolder.$delete().then(function(){H.service.selectedFolder=null,t.go("app.addressbook",{addressbookId:"personal"})},function(e,t){k.alert(l('An error occured while deleting the addressbook "%{0}".',H.service.selectedFolder.name),l(e.error))}):k.confirm(l("Warning"),l('Are you sure you want to delete the addressbook "%{0}"?',H.service.selectedFolder.name),{ok:l("Delete")}).then(function(){return H.service.selectedFolder.$delete()}).then(function(){return H.service.selectedFolder=null,t.go("app.addressbook",{addressbookId:"personal"}),!0}).catch(function(e){if(e){var t=e.data.message||e.statusText;k.alert(l('An error occured while deleting the addressbook "%{0}".',H.service.selectedFolder.name),t)}})}function I(e,t){function o(e,t,o){function r(e){var t=0===e.type.indexOf("text")||/\.(ldif|vcf|vcard)$/.test(e.name);return t||c.show({template:["<md-toast>",' <div class="md-toast-content">',' <md-icon class="md-warn md-hue-1">error_outline</md-icon>'," <span>"+l("Select a vCard or LDIF file.")+"</span>"," </div>","</md-toast>"].join(""),position:"top right",hideDelay:3e3}),t}var s=this;s.uploader=new f({url:ApplicationBaseURL+[o.id,"import"].join("/"),autoUpload:!0,queueLimit:1,filters:[{name:r,fn:r}],onSuccessItem:function(e,o,r,s){var d;t.hide(),0===o.imported?d=l("No card was imported."):(d=l("A total of %{0} cards were imported in the addressbook.",o.imported),$.selectedFolder.$reload()),c.show(c.simple().content(d).position("top right").hideDelay(3e3))},onErrorItem:function(e,t,o,r){c.show({template:["<md-toast>",' <div class="md-toast-content">',' <md-icon class="md-warn md-hue-1">error_outline</md-icon>'," <span>"+l("An error occured while importing contacts.")+"</span>"," </div>","</md-toast>"].join(""),position:"top right",hideDelay:3e3})}}),s.close=function(){t.hide()}}a.show({parent:angular.element(document.body),targetEvent:e,clickOutsideToClose:!0,escapeToClose:!0,templateUrl:"UIxContactsImportDialog",controller:o,controllerAs:"$CardsImportDialogController",locals:{folder:t}}),o.$inject=["scope","$mdDialog","folder"]}function E(t){function o(e,t){function o(){e.hide()}this.addressbook=t,this.close=o}(t.urls?e.when():$.$reloadAll()).then(function(){a.show({parent:angular.element(document.body),clickOutsideToClose:!0,escapeToClose:!0,templateUrl:t.id+"/links",controller:o,controllerAs:"links",locals:{addressbook:t}})}),o.$inject=["$mdDialog","addressbook"]}function U(e){function t(e,t,o){function r(){d.addressbook.$save().then(function(){o.init(d.addressbook.$omit()),t.hide()})}function s(){t.cancel()}var d=this;d.addressbook=new $(o.$omit()),d.saveProperties=r,d.close=s}a.show({templateUrl:e.id+"/properties",controller:t,controllerAs:"properties",clickOutsideToClose:!0,escapeToClose:!0,locals:{srcAddressBook:e}}).catch(function(){}),t.$inject=["$scope","$mdDialog","srcAddressBook"]}function T(e){e.$acl.$users().then(function(){a.show({templateUrl:e.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:!0,escapeToClose:!0,locals:{usersWithACL:e.$acl.users,User:C,folder:e}})})}function x(e){console.debug("subscribeToFolder "+e.owner+e.name),$.$subscribe(e.owner,e.name).then(function(e){c.show(c.simple().content(l("Successfully subscribed to address book")).position("top right").hideDelay(3e3))})}function M(e,t){return t.id!=e.id&&(t.isOwned||t.acls.objectCreator)}function j(e,o,r){var s,d,n,a,i,u,f;s=o.id,i=!1,0===(d=e.$selectedCards()).length&&(d=[e.$selectedCard()]),(n=_.filter(d,function(e){return e.$isCard()})).length!=d.length&&c.show(c.simple().content(l("Lists can't be moved or copied.")).position("top right").hideDelay(2e3)),n.length&&("copy"==r?(u=e.$copyCards(n,s),f=l("%{0} card(s) copied",n.length)):(u=e.$moveCards(n,s),f=l("%{0} card(s) moved",n.length),a=_.map(n,"id"),i=e.selectedCard&&a.indexOf(e.selectedCard)>=0),u.then(function(){i&&t.go("app.addressbook"),c.show(c.simple().content(f).position("top right").hideDelay(2e3))}))}var H=this,L=[];H.activeUser=b.activeUser,H.service=$,H.select=w,H.newAddressbook=y,H.edit=F,H.revertEditing=A,H.save=S,H.confirmDelete=D,H.importCards=I,H.showLinks=E,H.showProperties=U,H.share=T,H.subscribeToFolder=x,H.isDroppableFolder=M,H.dragSelectedCards=j,function(e){_.forEach(["backspace","delete"],function(t){e.push(h.createHotkey({key:t,description:l("Delete selected card or address book"),callback:function(){$.selectedFolder&&!$.selectedFolder.hasSelectedCard()&&D()}}))}),_.forEach(e,function(e){h.registerHotkey(e)})}(L),o.$on("$destroy",function(){_.forEach(L,function(e){h.deregisterHotkey(e)})})}e.$inject=["$q","$state","$scope","$rootScope","$stateParams","$timeout","$window","$mdDialog","$mdToast","$mdMedia","$mdSidenav","FileUploader","sgConstant","sgHotkeys","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"],angular.module("SOGo.ContactsUI").controller("AddressBooksController",e)}(),function(){"use strict";function e(e,t,o,r,s,d,n,a,c,i,u,f,p){function h(e){return angular.isString(e)?{value:e}:e}function m(e,t,o){M.card.$delete(t,o),e.$setDirty()}function g(){var e=M.card.$addOrg({value:""});i("org_"+e)}function $(){M.card.birthday=new Date}function k(){M.card.$addScreenName("")}function b(){var e=M.card.$addEmail("");i("email_"+e)}function C(){var e=M.card.$addPhone("");i("phone_"+e)}function v(){var e=M.card.$addUrl("","");i("url_"+e)}function w(){return _.keys(p.customFields).length<4}function y(){angular.isDefined(M.card.customFields)||(M.card.customFields={});var e=_.pullAll(["1","2","3","4"],_.keys(p.customFields));M.card.customFields[e[0]]=""}function F(e){delete M.card.customFields[e]}function A(){var e=M.card.$addAddress("","","","","","","","");i("address_"+e)}function S(e,t){return e.length<s.minimumSearchLength()?[]:d.selectedFolder.$filter(e,{dry:!0,excludeLists:!0},t).then(function(e){return e})}function D(e){e.$valid&&M.card.$save().then(function(e){var t=_.indexOf(_.map(d.selectedFolder.$cards,"id"),M.card.id);t<0?d.selectedFolder.$reload():d.selectedFolder.$cards[t]=angular.copy(M.card),u.go("app.addressbook.card.view",{cardId:M.card.id})})}function I(){u.go("app.addressbook").then(function(){M.card=null,delete d.selectedFolder.selectedCard})}function E(e){M.card.$reset(),e.$setPristine()}function U(){M.card.$reset(),M.card.isNew?(M.card=null,delete d.selectedFolder.selectedCard,u.go("app.addressbook",{addressbookId:d.selectedFolder.id})):u.go("app.addressbook.card.view",{cardId:M.card.id})}function T(){var e=p;a.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?","<b>"+e.$fullname()+"</b>"),{ok:l("Delete")}).then(function(){d.selectedFolder.$deleteCards([e]).then(function(){I()},function(t,o){a.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',e.$fullname()))})})}function x(e){M.showRawSource||M.rawSource?M.showRawSource=!M.showRawSource:n.$$resource.post(M.currentFolder.id+"/"+M.card.id,"raw").then(function(e){M.rawSource=e,M.showRawSource=!0})}var M=this,j=[];M.card=p,M.currentFolder=d.selectedFolder,M.allEmailTypes=n.$EMAIL_TYPES,M.allTelTypes=n.$TEL_TYPES,M.allUrlTypes=n.$URL_TYPES,M.allAddressTypes=n.$ADDRESS_TYPES,M.categories={},M.userFilterResults=[],M.transformCategory=h,M.removeAttribute=m,M.addOrg=g,M.addBirthday=$,M.addScreenName=k,M.addEmail=b,M.addPhone=C,M.addUrl=v,M.addAddress=A,M.canAddCustomField=w,M.addCustomField=y,M.deleteCustomField=F,M.userFilter=S,M.save=D,M.close=I,M.reset=E,M.cancel=U,M.confirmDelete=T,M.toggleRawSource=x,M.showRawSource=!1,function(e){_.forEach(["backspace","delete"],function(t){e.push(c.createHotkey({key:t,description:l("Delete"),callback:function(e){0===M.currentFolder.$selectedCount()&&T(),e.preventDefault()}}))}),_.forEach(e,function(e){c.registerHotkey(e)})}(j),e.$on("$destroy",function(){_.forEach(j,function(e){c.deregisterHotkey(e)})})}e.$inject=["$scope","$timeout","$window","$mdDialog","sgSettings","AddressBook","Card","Dialog","sgHotkeys","sgFocus","$state","$stateParams","stateCard"],angular.module("SOGo.ContactsUI").controller("CardController",e)}(),function(){"use strict";function e(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function(e){e.addressLines=function(e){var t=[],o=[];return e.street&&t.push(e.street),e.street2&&t.push(e.street2),e.locality&&o.push(e.locality),e.region&&o.push(e.region),o.length>0&&t.push(o.join(", ")),e.country&&t.push(e.country),e.postalcode&&t.push(e.postalcode),t.join("<br>")}}],template:'<address ng-bind-html="addressLines(data)"></address>'}}angular.module("SOGo.Common").directive("sgAddress",e)}();
//# sourceMappingURL=Contacts.js.map