From 89fdbeee6b3b7fe367b23e52f66d818e68c87723 Mon Sep 17 00:00:00 2001 From: InverseBot Date: Tue, 1 Nov 2016 01:20:13 -0400 Subject: [PATCH] (js/css) Update generated files --- UI/WebServerResources/js/Administration.js | 2 +- UI/WebServerResources/js/Administration.js.map | 2 +- UI/WebServerResources/js/Preferences.services.js | 2 +- UI/WebServerResources/js/Preferences.services.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/UI/WebServerResources/js/Administration.js b/UI/WebServerResources/js/Administration.js index ba831156d..82dd0ffaf 100644 --- a/UI/WebServerResources/js/Administration.js +++ b/UI/WebServerResources/js/Administration.js @@ -1,2 +1,2 @@ -!function(){"use strict";function a(a,d){a.state("administration",{abstract:!0,views:{administration:{templateUrl:"administration.html",controller:"AdministrationController",controllerAs:"app"}}}).state("administration.rights",{url:"/rights",views:{module:{templateUrl:"rights.html"}}}).state("administration.rights.edit",{url:"/:userId/:folderId/edit",views:{acl:{templateUrl:"UIxAdministrationAclEditor",controller:"AdministrationAclController",controllerAs:"acl"}},resolve:{stateUser:b,stateFolder:c}}),d.otherwise("/rights")}function b(a,b,c){var d;return d=_.find(c.$users,function(a){return a.uid==b.userId}),angular.isUndefined(d)?c.$filter(b.userId).then(function(e){return d=_.find(c.$users,function(a){return a.uid==b.userId}),angular.isUndefined(d)?a.reject("User with ID "+b.userId+" not found"):d.$folders().then(function(){return d})}):d}function c(a,b,c,d,e,f){var g,h,i=c(b.folderId);return g=_.find(d.$$folders,function(a){return a.name==i}),h="Appointment"==g.type?new f({id:g.name.split("/").pop(),owner:g.owner,name:g.displayName}):new e({id:g.name.split("/").pop(),owner:g.owner,name:g.displayName}),d.selectedFolder=h.id,h}function d(a,b,c){b.$on("$stateChangeError",function(b,d,e,f,g,h){a.error(h),c.go("administration.rights")}),b.$on("$routeChangeError",function(b,c,d,e){a.error(b,c,d,e)})}angular.module("SOGo.AdministrationUI",["ui.router","SOGo.Common","SOGo.Authentication","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.SchedulerUI"]).config(a).run(d),a.$inject=["$stateProvider","$urlRouterProvider"],b.$inject=["$q","$stateParams","User"],c.$inject=["$state","$stateParams","decodeUriFilter","stateUser","AddressBook","Calendar"],d.$inject=["$log","$rootScope","$state"]}(),function(){"use strict";function a(a,b,c,d,e,f,g){function h(){return angular.isDefined(f.$cards)?"../"+f.owner+"/Contacts/"+f.id+"/UIxContactsUserRightsEditor":"../"+f.owner+"/Calendar/"+f.id+"/UIxCalUserRightsEditor"}function i(a){f.$acl.$selectAllRights(a)}function j(a,b){return(!b||!b.target.parentNode.classList.contains("md-secondary"))&&void(q.selectedUid==a.uid?q.selectedUid=null:(q.selectedUid=a.uid,q.selectedUser=a,q.selectedUser.$rights()))}function k(a){return g.$filter(a,f.$acl.users,{dry:!0})}function m(b){a(function(){f.$acl.$removeUser(b.uid,f.owner)},500)}function n(a){a&&f.$acl.$addUser(a,f.owner).then(function(a){q.userToAdd="",q.searchText="",q.selectedUid=null,a&&j(a)})}function o(){b.go("administration.rights").then(function(){delete q.user.selectedFolder,q.user=null})}function p(){f.$acl.$saveUsersRights(f.owner).then(function(){d.show(d.simple().content(l("ACLs saved")).position("top right").hideDelay(3e3)),c("xs")&&o()})}var q=this;q.user=e,q.folder=f,q.folderType=angular.isDefined(f.$cards)?"AddressBook":"Calendar",q.selectedUser=null,q.selectedUid=null,q.selectUser=j,q.selectAllRights=i,q.removeUser=m,q.getTemplate=h,q.close=o,q.save=p,q.userToAdd="",q.searchText="",q.userFilter=k,q.addUser=n,f.$acl.$users(f.owner).then(function(a){q.users=a})}a.$inject=["$timeout","$state","$mdMedia","$mdToast","stateUser","stateFolder","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationAclController",a)}(),function(){"use strict";function a(a,b,c,d,e,f,g,h){function i(b){a.go("administration."+b),c(e["gt-md"])||d("left").close()}function j(a){h.$filter(a)}function k(a){m.selectedUser==m.users[a]?m.selectedUser=null:m.users[a].$folders().then(function(){m.selectedUser=m.users[a]})}function l(b){a.go("administration.rights.edit",{userId:m.selectedUser.uid,folderId:g(b.name)})}var m=this;m.service=h,m.selectedUser=null,m.users=h.$users,m.go=i,m.filter=j,m.selectUser=k,m.selectFolder=l}a.$inject=["$state","$mdToast","$mdMedia","$mdSidenav","sgConstant","Dialog","encodeUriFilter","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationController",a)}(); +!function(){"use strict";function a(a,d){a.state("administration",{abstract:!0,views:{administration:{templateUrl:"administration.html",controller:"AdministrationController",controllerAs:"app"}}}).state("administration.rights",{url:"/rights",views:{module:{templateUrl:"rights.html"}}}).state("administration.rights.edit",{url:"/:userId/:folderId/edit",views:{acl:{templateUrl:"UIxAdministrationAclEditor",controller:"AdministrationAclController",controllerAs:"acl"}},resolve:{stateUser:b,stateFolder:c}}),d.otherwise("/rights")}function b(a,b,c){var d;return d=_.find(c.$users,function(a){return a.uid==b.userId}),angular.isUndefined(d)?c.$filter(b.userId).then(function(e){return d=_.find(c.$users,function(a){return a.uid==b.userId}),angular.isUndefined(d)?a.reject("User with ID "+b.userId+" not found"):d.$folders().then(function(){return d})}):d}function c(a,b,c,d,e,f){var g,h,i=c(b.folderId);return g=_.find(d.$$folders,function(a){return a.name==i}),h="Appointment"==g.type?new f({id:g.name.split("/").pop(),owner:g.owner,name:g.displayName}):new e({id:g.name.split("/").pop(),owner:g.owner,name:g.displayName}),d.selectedFolder=h.id,h}function d(a,b,c){b.$on("$stateChangeError",function(b,d,e,f,g,h){a.error(h),c.go("administration.rights")}),b.$on("$routeChangeError",function(b,c,d,e){a.error(b,c,d,e)})}angular.module("SOGo.AdministrationUI",["ui.router","SOGo.Common","SOGo.Authentication","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.SchedulerUI"]).config(a).run(d),a.$inject=["$stateProvider","$urlRouterProvider"],b.$inject=["$q","$stateParams","User"],c.$inject=["$state","$stateParams","decodeUriFilter","stateUser","AddressBook","Calendar"],d.$inject=["$log","$rootScope","$state"]}(),function(){"use strict";function a(a,b,c,d,e,f,g){function h(){return angular.isDefined(f.$cards)?"../"+f.owner+"/Contacts/"+f.id+"/UIxContactsUserRightsEditor":"../"+f.owner+"/Calendar/"+f.id+"/UIxCalUserRightsEditor"}function i(a){f.$acl.$selectAllRights(a)}function j(a,b){return(!b||!b.target.parentNode.classList.contains("md-secondary"))&&void(q.selectedUid==a.uid?q.selectedUid=null:(q.selectedUid=a.uid,q.selectedUser=a,q.selectedUser.$rights()))}function k(a){return g.$filter(a,f.$acl.users,{dry:!0})}function m(b){a(function(){f.$acl.$removeUser(b.uid,f.owner)},500)}function n(a){a&&f.$acl.$addUser(a,f.owner).then(function(a){q.userToAdd="",q.searchText="",q.selectedUid=null,a&&j(a)})}function o(){b.go("administration.rights").then(function(){delete q.user.selectedFolder,q.user=null})}function p(){f.$acl.$saveUsersRights(f.owner).then(function(){d.show(d.simple().content(l("ACLs saved")).position("bottom right").hideDelay(3e3)),c("xs")&&o()})}var q=this;q.user=e,q.folder=f,q.folderType=angular.isDefined(f.$cards)?"AddressBook":"Calendar",q.selectedUser=null,q.selectedUid=null,q.selectUser=j,q.selectAllRights=i,q.removeUser=m,q.getTemplate=h,q.close=o,q.save=p,q.userToAdd="",q.searchText="",q.userFilter=k,q.addUser=n,f.$acl.$users(f.owner).then(function(a){q.users=a})}a.$inject=["$timeout","$state","$mdMedia","$mdToast","stateUser","stateFolder","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationAclController",a)}(),function(){"use strict";function a(a,b,c,d,e,f,g,h){function i(b){a.go("administration."+b),c(e["gt-md"])||d("left").close()}function j(a){h.$filter(a)}function k(a){m.selectedUser==m.users[a]?m.selectedUser=null:m.users[a].$folders().then(function(){m.selectedUser=m.users[a]})}function l(b){a.go("administration.rights.edit",{userId:m.selectedUser.uid,folderId:g(b.name)})}var m=this;m.service=h,m.selectedUser=null,m.users=h.$users,m.go=i,m.filter=j,m.selectUser=k,m.selectFolder=l}a.$inject=["$state","$mdToast","$mdMedia","$mdSidenav","sgConstant","Dialog","encodeUriFilter","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationController",a)}(); //# sourceMappingURL=Administration.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Administration.js.map b/UI/WebServerResources/js/Administration.js.map index d8979b7db..2a3f5314c 100644 --- a/UI/WebServerResources/js/Administration.js.map +++ b/UI/WebServerResources/js/Administration.js.map @@ -1 +1 @@ -{"version":3,"sources":["Administration/Administration.app.js","Administration/AdministrationAclController.js","Administration/AdministrationController.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","abstract","views","administration","templateUrl","controller","controllerAs","url","module","acl","resolve","stateUser","stateFolder","otherwise","$q","$stateParams","User","user","_","find","$users","uid","userId","angular","isUndefined","$filter","then","users","reject","$folders","$state","decodeUriFilter","AddressBook","Calendar","folder","o","folderId","$$folders","name","type","id","split","pop","owner","displayName","selectedFolder","runBlock","$log","$rootScope","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","config","run","$inject","AdministrationAclController","$timeout","$mdMedia","$mdToast","getTemplate","isDefined","$cards","selectAllRights","$acl","$selectAllRights","selectUser","$event","target","parentNode","classList","contains","vm","selectedUid","selectedUser","$rights","userFilter","$query","dry","removeUser","$removeUser","addUser","data","$addUser","userToAdd","searchText","close","save","$saveUsersRights","show","simple","content","l","position","hideDelay","this","folderType","AdministrationController","$mdSidenav","sgConstant","Dialog","encodeUriFilter","filter","i","selectFolder","service"],"mappings":"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","file":"Administration.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.AdministrationUI', ['ui.router', 'SOGo.Common', 'SOGo.Authentication', 'SOGo.PreferencesUI', 'SOGo.ContactsUI', 'SOGo.SchedulerUI'])\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('administration', {\n abstract: true,\n views: {\n administration: {\n templateUrl: 'administration.html',\n controller: 'AdministrationController',\n controllerAs: 'app'\n }\n }\n })\n .state('administration.rights', {\n url: '/rights',\n views: {\n module: {\n templateUrl: 'rights.html'\n }\n }\n })\n .state('administration.rights.edit', {\n url: '/:userId/:folderId/edit',\n views: {\n acl: {\n templateUrl: 'UIxAdministrationAclEditor', // UI/Templates/Administration/UIxAdministrationAclEditor.wox\n controller: 'AdministrationAclController',\n controllerAs: 'acl'\n }\n },\n resolve: {\n stateUser: stateUser,\n stateFolder: stateFolder\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/rights');\n }\n\n /**\n * @ngInject\n */\n stateUser.$inject = ['$q', '$stateParams', 'User'];\n function stateUser($q, $stateParams, User) {\n var user;\n\n user = _.find(User.$users, function(user) {\n return user.uid == $stateParams.userId;\n });\n\n if (angular.isUndefined(user)) {\n return User.$filter($stateParams.userId).then(function(users) {\n user = _.find(User.$users, function(user) {\n return user.uid == $stateParams.userId;\n });\n if (angular.isUndefined(user)) {\n return $q.reject('User with ID ' + $stateParams.userId + ' not found');\n }\n else {\n // Resolve folders\n return user.$folders().then(function() {\n return user;\n });\n }\n return user;\n });\n }\n\n return user;\n }\n\n /**\n * @ngInject\n */\n stateFolder.$inject = ['$state', '$stateParams', 'decodeUriFilter', 'stateUser', 'AddressBook', 'Calendar'];\n function stateFolder($state, $stateParams, decodeUriFilter, stateUser, AddressBook, Calendar) {\n var folder, o,\n folderId = decodeUriFilter($stateParams.folderId);\n\n folder = _.find(stateUser.$$folders, function(folder) {\n return folder.name == folderId;\n });\n \n if (folder.type == \"Appointment\") {\n o = new Calendar({ id: folder.name.split('/').pop(),\n owner: folder.owner,\n name: folder.displayName });\n } else {\n o = new AddressBook({ id: folder.name.split('/').pop(),\n owner: folder.owner,\n name: folder.displayName });\n }\n\n stateUser.selectedFolder = o.id;\n\n return o;\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$log', '$rootScope', '$state'];\n function runBlock($log, $rootScope, $state) {\n $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {\n $log.error(error);\n $state.go('administration.rights');\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/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n AdministrationAclController.$inject = ['$timeout', '$state', '$mdMedia', '$mdToast', 'stateUser', 'stateFolder', 'User'];\n function AdministrationAclController($timeout, $state, $mdMedia, $mdToast, stateUser, stateFolder, User) {\n var vm = this;\n\n vm.user = stateUser;\n vm.folder = stateFolder;\n vm.folderType = angular.isDefined(stateFolder.$cards)? 'AddressBook' : 'Calendar';\n vm.selectedUser = null;\n vm.selectedUid = null;\n vm.selectUser = selectUser;\n vm.selectAllRights = selectAllRights;\n vm.removeUser = removeUser;\n vm.getTemplate = getTemplate;\n vm.close = close;\n vm.save = save;\n\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.addUser = addUser;\n\n stateFolder.$acl.$users(stateFolder.owner).then(function(data) {\n vm.users = data;\n });\n\n function getTemplate() {\n if (angular.isDefined(stateFolder.$cards))\n return '../' + stateFolder.owner + '/Contacts/' + stateFolder.id + '/UIxContactsUserRightsEditor';\n\n return '../' + stateFolder.owner + '/Calendar/' + stateFolder.id + '/UIxCalUserRightsEditor';\n }\n\n function selectAllRights(user) {\n stateFolder.$acl.$selectAllRights(user);\n }\n\n function selectUser(user, $event) {\n if ($event && $event.target.parentNode.classList.contains('md-secondary'))\n return false;\n if (vm.selectedUid == user.uid) {\n vm.selectedUid = null;\n }\n else {\n vm.selectedUid = user.uid;\n vm.selectedUser = user;\n vm.selectedUser.$rights();\n }\n }\n\n function userFilter($query) {\n return User.$filter($query, stateFolder.$acl.users, { dry: true });\n }\n\n function removeUser(user) {\n $timeout(function() {\n stateFolder.$acl.$removeUser(user.uid, stateFolder.owner);\n }, 500); // wait for CSS transition to complete (see card.scss)\n }\n\n function addUser(data) {\n if (data) {\n stateFolder.$acl.$addUser(data, stateFolder.owner).then(function(user) {\n vm.userToAdd = '';\n vm.searchText = '';\n vm.selectedUid = null;\n if (user)\n selectUser(user);\n });\n }\n }\n\n function close() {\n $state.go('administration.rights').then(function() {\n delete vm.user.selectedFolder;\n vm.user = null;\n });\n }\n\n function save() {\n stateFolder.$acl.$saveUsersRights(stateFolder.owner).then(function() {\n $mdToast.show(\n $mdToast.simple()\n .content(l('ACLs saved'))\n .position('top right')\n .hideDelay(3000)\n );\n // Close acls on small devices\n if ($mdMedia('xs'))\n close();\n });\n }\n }\n\n angular\n .module('SOGo.AdministrationUI')\n .controller('AdministrationAclController', AdministrationAclController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n AdministrationController.$inject = ['$state', '$mdToast', '$mdMedia', '$mdSidenav', 'sgConstant', 'Dialog', 'encodeUriFilter', 'User'];\n function AdministrationController($state, $mdToast, $mdMedia, $mdSidenav, sgConstant, Dialog, encodeUriFilter, User) {\n var vm = this;\n\n vm.service = User;\n\n vm.selectedUser = null;\n vm.users = User.$users;\n\n vm.go = go;\n vm.filter = filter;\n vm.selectUser = selectUser;\n vm.selectFolder = selectFolder;\n\n function go(module) {\n $state.go('administration.' + module);\n // Close sidenav on small devices\n if (!$mdMedia(sgConstant['gt-md']))\n $mdSidenav('left').close();\n }\n\n function filter(searchText) {\n User.$filter(searchText);\n }\n\n function selectUser(i) {\n if (vm.selectedUser == vm.users[i]) {\n vm.selectedUser = null;\n }\n else {\n // Fetch folders of specific type for selected user\n vm.users[i].$folders().then(function() {\n vm.selectedUser = vm.users[i];\n });\n }\n }\n\n function selectFolder(folder) {\n $state.go('administration.rights.edit', {userId: vm.selectedUser.uid, folderId: encodeUriFilter(folder.name)});\n }\n\n }\n\n angular\n .module('SOGo.AdministrationUI')\n .controller('AdministrationController', AdministrationController);\n\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["Administration/Administration.app.js","Administration/AdministrationAclController.js","Administration/AdministrationController.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","abstract","views","administration","templateUrl","controller","controllerAs","url","module","acl","resolve","stateUser","stateFolder","otherwise","$q","$stateParams","User","user","_","find","$users","uid","userId","angular","isUndefined","$filter","then","users","reject","$folders","$state","decodeUriFilter","AddressBook","Calendar","folder","o","folderId","$$folders","name","type","id","split","pop","owner","displayName","selectedFolder","runBlock","$log","$rootScope","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","config","run","$inject","AdministrationAclController","$timeout","$mdMedia","$mdToast","getTemplate","isDefined","$cards","selectAllRights","$acl","$selectAllRights","selectUser","$event","target","parentNode","classList","contains","vm","selectedUid","selectedUser","$rights","userFilter","$query","dry","removeUser","$removeUser","addUser","data","$addUser","userToAdd","searchText","close","save","$saveUsersRights","show","simple","content","l","position","hideDelay","this","folderType","AdministrationController","$mdSidenav","sgConstant","Dialog","encodeUriFilter","filter","i","selectFolder","service"],"mappings":"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","file":"Administration.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.AdministrationUI', ['ui.router', 'SOGo.Common', 'SOGo.Authentication', 'SOGo.PreferencesUI', 'SOGo.ContactsUI', 'SOGo.SchedulerUI'])\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('administration', {\n abstract: true,\n views: {\n administration: {\n templateUrl: 'administration.html',\n controller: 'AdministrationController',\n controllerAs: 'app'\n }\n }\n })\n .state('administration.rights', {\n url: '/rights',\n views: {\n module: {\n templateUrl: 'rights.html'\n }\n }\n })\n .state('administration.rights.edit', {\n url: '/:userId/:folderId/edit',\n views: {\n acl: {\n templateUrl: 'UIxAdministrationAclEditor', // UI/Templates/Administration/UIxAdministrationAclEditor.wox\n controller: 'AdministrationAclController',\n controllerAs: 'acl'\n }\n },\n resolve: {\n stateUser: stateUser,\n stateFolder: stateFolder\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/rights');\n }\n\n /**\n * @ngInject\n */\n stateUser.$inject = ['$q', '$stateParams', 'User'];\n function stateUser($q, $stateParams, User) {\n var user;\n\n user = _.find(User.$users, function(user) {\n return user.uid == $stateParams.userId;\n });\n\n if (angular.isUndefined(user)) {\n return User.$filter($stateParams.userId).then(function(users) {\n user = _.find(User.$users, function(user) {\n return user.uid == $stateParams.userId;\n });\n if (angular.isUndefined(user)) {\n return $q.reject('User with ID ' + $stateParams.userId + ' not found');\n }\n else {\n // Resolve folders\n return user.$folders().then(function() {\n return user;\n });\n }\n return user;\n });\n }\n\n return user;\n }\n\n /**\n * @ngInject\n */\n stateFolder.$inject = ['$state', '$stateParams', 'decodeUriFilter', 'stateUser', 'AddressBook', 'Calendar'];\n function stateFolder($state, $stateParams, decodeUriFilter, stateUser, AddressBook, Calendar) {\n var folder, o,\n folderId = decodeUriFilter($stateParams.folderId);\n\n folder = _.find(stateUser.$$folders, function(folder) {\n return folder.name == folderId;\n });\n \n if (folder.type == \"Appointment\") {\n o = new Calendar({ id: folder.name.split('/').pop(),\n owner: folder.owner,\n name: folder.displayName });\n } else {\n o = new AddressBook({ id: folder.name.split('/').pop(),\n owner: folder.owner,\n name: folder.displayName });\n }\n\n stateUser.selectedFolder = o.id;\n\n return o;\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$log', '$rootScope', '$state'];\n function runBlock($log, $rootScope, $state) {\n $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {\n $log.error(error);\n $state.go('administration.rights');\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/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n AdministrationAclController.$inject = ['$timeout', '$state', '$mdMedia', '$mdToast', 'stateUser', 'stateFolder', 'User'];\n function AdministrationAclController($timeout, $state, $mdMedia, $mdToast, stateUser, stateFolder, User) {\n var vm = this;\n\n vm.user = stateUser;\n vm.folder = stateFolder;\n vm.folderType = angular.isDefined(stateFolder.$cards)? 'AddressBook' : 'Calendar';\n vm.selectedUser = null;\n vm.selectedUid = null;\n vm.selectUser = selectUser;\n vm.selectAllRights = selectAllRights;\n vm.removeUser = removeUser;\n vm.getTemplate = getTemplate;\n vm.close = close;\n vm.save = save;\n\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.addUser = addUser;\n\n stateFolder.$acl.$users(stateFolder.owner).then(function(data) {\n vm.users = data;\n });\n\n function getTemplate() {\n if (angular.isDefined(stateFolder.$cards))\n return '../' + stateFolder.owner + '/Contacts/' + stateFolder.id + '/UIxContactsUserRightsEditor';\n\n return '../' + stateFolder.owner + '/Calendar/' + stateFolder.id + '/UIxCalUserRightsEditor';\n }\n\n function selectAllRights(user) {\n stateFolder.$acl.$selectAllRights(user);\n }\n\n function selectUser(user, $event) {\n if ($event && $event.target.parentNode.classList.contains('md-secondary'))\n return false;\n if (vm.selectedUid == user.uid) {\n vm.selectedUid = null;\n }\n else {\n vm.selectedUid = user.uid;\n vm.selectedUser = user;\n vm.selectedUser.$rights();\n }\n }\n\n function userFilter($query) {\n return User.$filter($query, stateFolder.$acl.users, { dry: true });\n }\n\n function removeUser(user) {\n $timeout(function() {\n stateFolder.$acl.$removeUser(user.uid, stateFolder.owner);\n }, 500); // wait for CSS transition to complete (see card.scss)\n }\n\n function addUser(data) {\n if (data) {\n stateFolder.$acl.$addUser(data, stateFolder.owner).then(function(user) {\n vm.userToAdd = '';\n vm.searchText = '';\n vm.selectedUid = null;\n if (user)\n selectUser(user);\n });\n }\n }\n\n function close() {\n $state.go('administration.rights').then(function() {\n delete vm.user.selectedFolder;\n vm.user = null;\n });\n }\n\n function save() {\n stateFolder.$acl.$saveUsersRights(stateFolder.owner).then(function() {\n $mdToast.show(\n $mdToast.simple()\n .content(l('ACLs saved'))\n .position('bottom right')\n .hideDelay(3000)\n );\n // Close acls on small devices\n if ($mdMedia('xs'))\n close();\n });\n }\n }\n\n angular\n .module('SOGo.AdministrationUI')\n .controller('AdministrationAclController', AdministrationAclController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoAdministration */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n AdministrationController.$inject = ['$state', '$mdToast', '$mdMedia', '$mdSidenav', 'sgConstant', 'Dialog', 'encodeUriFilter', 'User'];\n function AdministrationController($state, $mdToast, $mdMedia, $mdSidenav, sgConstant, Dialog, encodeUriFilter, User) {\n var vm = this;\n\n vm.service = User;\n\n vm.selectedUser = null;\n vm.users = User.$users;\n\n vm.go = go;\n vm.filter = filter;\n vm.selectUser = selectUser;\n vm.selectFolder = selectFolder;\n\n function go(module) {\n $state.go('administration.' + module);\n // Close sidenav on small devices\n if (!$mdMedia(sgConstant['gt-md']))\n $mdSidenav('left').close();\n }\n\n function filter(searchText) {\n User.$filter(searchText);\n }\n\n function selectUser(i) {\n if (vm.selectedUser == vm.users[i]) {\n vm.selectedUser = null;\n }\n else {\n // Fetch folders of specific type for selected user\n vm.users[i].$folders().then(function() {\n vm.selectedUser = vm.users[i];\n });\n }\n }\n\n function selectFolder(folder) {\n $state.go('administration.rights.edit', {userId: vm.selectedUser.uid, folderId: encodeUriFilter(folder.name)});\n }\n\n }\n\n angular\n .module('SOGo.AdministrationUI')\n .controller('AdministrationController', AdministrationController);\n\n})();\n"]} \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.services.js b/UI/WebServerResources/js/Preferences.services.js index cb819baa4..ba8d59ecc 100644 --- a/UI/WebServerResources/js/Preferences.services.js +++ b/UI/WebServerResources/js/Preferences.services.js @@ -1,2 +1,2 @@ -!function(){"use strict";function a(){var b=this;this.defaults={},this.settings={},this.defaultsPromise=a.$$resource.fetch("jsonDefaults").then(function(c){var d=c||{},e=_.fromPairs(_.map(d.SOGoMailLabelsColors,function(a,b){return"$"==b.charAt(0)?["_"+b,a]:[b,a]}));return d.SOGoMailLabelsColors=e,d.SOGoMailAutoSave=parseInt(d.SOGoMailAutoSave)||0,d.SOGoMailComposeFontSizeEnabled=parseInt(d.SOGoMailComposeFontSize)>0,window.CKEDITOR&&d.SOGoMailComposeFontSizeEnabled&&(window.CKEDITOR.config.fontSize_defaultLabel=d.SOGoMailComposeFontSize,window.CKEDITOR.addCss(".cke_editable { font-size: "+d.SOGoMailComposeFontSize+"px; }")),d.Vacation?(d.Vacation.startDate?d.Vacation.startDate=new Date(1e3*parseInt(d.Vacation.startDate)):(d.Vacation.startDateEnabled=0,d.Vacation.startDate=new Date,d.Vacation.startDate=d.Vacation.startDate.beginOfDay(),d.Vacation.startDate.addDays(1)),d.Vacation.endDate?d.Vacation.endDate=new Date(1e3*parseInt(d.Vacation.endDate)):(d.Vacation.endDateEnabled=0,d.Vacation.endDate=new Date(d.Vacation.startDate.getTime()),d.Vacation.endDate.addDays(1)),d.Vacation.autoReplyEmailAddresses&&d.Vacation.autoReplyEmailAddresses.length?d.Vacation.autoReplyEmailAddresses=d.Vacation.autoReplyEmailAddresses.join(","):delete d.Vacation.autoReplyEmailAddresses):d.Vacation={},angular.isUndefined(d.Vacation.autoReplyEmailAddresses)&&angular.isDefined(window.defaultEmailAddresses)&&(d.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses),angular.isUndefined(d.Vacation.daysBetweenResponse)&&(d.Vacation.daysBetweenResponse=7),angular.isUndefined(d.Vacation.startDate)&&(d.Vacation.startDateEnabled=0,d.Vacation.startDate=new Date),angular.isUndefined(d.Vacation.endDate)&&(d.Vacation.endDateEnabled=0,d.Vacation.endDate=new Date),d.Forward&&d.Forward.forwardAddress&&(d.Forward.forwardAddress=d.Forward.forwardAddress.join(",")),angular.isUndefined(d.SOGoCalendarCategoriesColors)&&(d.SOGoCalendarCategoriesColors={},d.SOGoCalendarCategories=[]),angular.isUndefined(d.SOGoContactsCategories)&&(d.SOGoContactsCategories=[]),angular.extend(b.defaults,d),b.$mdDateLocaleProvider=a.$mdDateLocaleProvider,angular.extend(b.$mdDateLocaleProvider,d.locale),angular.extend(b.$mdDateLocaleProvider,{firstDayOfWeek:d.SOGoFirstDayOfWeek,firstWeekOfYear:d.SOGoFirstWeekOfYear}),b.$mdDateLocaleProvider.firstDayOfWeek=parseInt(d.SOGoFirstDayOfWeek),b.$mdDateLocaleProvider.weekNumberFormatter=function(a){return l("Week %d",a)},b.$mdDateLocaleProvider.msgCalendar=l("Calender"),b.$mdDateLocaleProvider.msgOpenCalendar=l("Open Calendar"),b.$mdDateLocaleProvider.parseDate=function(a){return a?a.parseDate(b.$mdDateLocaleProvider,d.SOGoShortDateFormat):new Date(NaN)},b.$mdDateLocaleProvider.formatDate=function(a){return a?a.format(b.$mdDateLocaleProvider,a.$dateFormat||d.SOGoShortDateFormat):""},b.$mdDateLocaleProvider.parseTime=function(a){return a?a.parseDate(b.$mdDateLocaleProvider,d.SOGoTimeFormat):new Date(NaN)},b.$mdDateLocaleProvider.formatTime=function(a){return a?a.format(b.$mdDateLocaleProvider,d.SOGoTimeFormat):""},b.defaults}),this.settingsPromise=a.$$resource.fetch("jsonSettings").then(function(c){return c.Calendar&&(c.Calendar.PreventInvitationsWhitelist?c.Calendar.PreventInvitationsWhitelist=_.map(c.Calendar.PreventInvitationsWhitelist,function(c,d){var e=/^(.+)\s<(\S+)>$/.exec(c),f=new a.$User({uid:d,cn:e[1],c_email:e[2]});return f.$$image||b.avatar(f.c_email,32,{no_404:!0}).then(function(a){f.$$image=a}),f}):c.Calendar.PreventInvitationsWhitelist=[]),angular.extend(b.settings,c),b.settings})}a.$factory=["$q","$timeout","$log","$mdDateLocale","sgSettings","Gravatar","Resource","User",function(b,c,d,e,f,g,h,i){return angular.extend(a,{$q:b,$timeout:c,$log:d,$mdDateLocaleProvider:e,$gravatar:g,$$resource:new h(f.activeUser("folderURL"),f.activeUser()),$resourcesURL:f.resourcesURL(),$User:i}),new a}];try{angular.module("SOGo.PreferencesUI")}catch(a){angular.module("SOGo.PreferencesUI",["SOGo.Common"])}angular.module("SOGo.PreferencesUI").factory("Preferences",a.$factory),a.prototype.ready=function(){return a.$q.all([this.defaultsPromise,this.settingsPromise])},a.prototype.avatar=function(b,c,d){var e=this;return this.ready().then(function(){var f,g=e.defaults.SOGoAlternateAvatar;return f=e.defaults.SOGoGravatarEnabled?a.$gravatar(b,c,g,d):[a.$resourcesURL,"img","ic_person_grey_24px.svg"].join("/"),d&&d.dstObject&&d.dstAttr&&(d.dstObject[d.dstAttr]=f),f})},a.prototype.$save=function(){return a.$$resource.save("Preferences",this.$omit(!0)).then(function(a){return a})},a.prototype.$omit=function(a){var b,c,d;return b={},d={},angular.forEach(this,function(c,d){"constructor"!=d&&"$"!=d[0]&&(a?b[d]=angular.copy(c):b[d]=c)}),c=_.fromPairs(_.map(b.defaults.SOGoMailLabelsColors,function(a,b){return"_"==b.charAt(0)&&"$"==b.charAt(1)?b.length>2&&"$"==b.charAt(2)?[a[0].toLowerCase().replace(/[ \(\)\/\{%\*<>\\\"]/g,"_"),a]:[b.substring(1),a]:[b,a]})),b.defaults.SOGoMailLabelsColors=c,b.defaults.SOGoMailComposeFontSizeEnabled||(b.defaults.SOGoMailComposeFontSize=0),delete b.defaults.SOGoMailComposeFontSizeEnabled,b.defaults.Vacation&&(b.defaults.Vacation.startDateEnabled?b.defaults.Vacation.startDate=b.defaults.Vacation.startDate.getTime()/1e3:b.defaults.Vacation.startDate=0,b.defaults.Vacation.endDateEnabled?b.defaults.Vacation.endDate=b.defaults.Vacation.endDate.getTime()/1e3:b.defaults.Vacation.endDate=0,b.defaults.Vacation.autoReplyEmailAddresses?b.defaults.Vacation.autoReplyEmailAddresses=_.filter(b.defaults.Vacation.autoReplyEmailAddresses.split(","),function(a){return a.length}):b.defaults.Vacation.autoReplyEmailAddresses=[]),b.defaults.Forward&&b.defaults.Forward.forwardAddress&&(b.defaults.Forward.forwardAddress=b.defaults.Forward.forwardAddress.split(",")),b.settings.Calendar&&b.settings.Calendar.PreventInvitationsWhitelist&&(_.forEach(b.settings.Calendar.PreventInvitationsWhitelist,function(a){d[a.uid]=a.$shortFormat()}),b.settings.Calendar.PreventInvitationsWhitelist=d),b}}(); +!function(){"use strict";function a(){var b=this;this.defaults={},this.settings={},this.defaultsPromise=a.$$resource.fetch("jsonDefaults").then(function(c){var d=c||{},e=_.fromPairs(_.map(d.SOGoMailLabelsColors,function(a,b){return"$"==b.charAt(0)?["_"+b,a]:[b,a]}));return d.SOGoMailLabelsColors=e,d.SOGoRememberLastModule&&(d.SOGoLoginModule="Last"),d.SOGoMailAutoSave=parseInt(d.SOGoMailAutoSave)||0,d.SOGoMailComposeFontSizeEnabled=parseInt(d.SOGoMailComposeFontSize)>0,window.CKEDITOR&&d.SOGoMailComposeFontSizeEnabled&&(window.CKEDITOR.config.fontSize_defaultLabel=d.SOGoMailComposeFontSize,window.CKEDITOR.addCss(".cke_editable { font-size: "+d.SOGoMailComposeFontSize+"px; }")),d.Vacation?(d.Vacation.startDate?d.Vacation.startDate=new Date(1e3*parseInt(d.Vacation.startDate)):(d.Vacation.startDateEnabled=0,d.Vacation.startDate=new Date,d.Vacation.startDate=d.Vacation.startDate.beginOfDay(),d.Vacation.startDate.addDays(1)),d.Vacation.endDate?d.Vacation.endDate=new Date(1e3*parseInt(d.Vacation.endDate)):(d.Vacation.endDateEnabled=0,d.Vacation.endDate=new Date(d.Vacation.startDate.getTime()),d.Vacation.endDate.addDays(1)),d.Vacation.autoReplyEmailAddresses&&d.Vacation.autoReplyEmailAddresses.length?d.Vacation.autoReplyEmailAddresses=d.Vacation.autoReplyEmailAddresses.join(","):delete d.Vacation.autoReplyEmailAddresses):d.Vacation={},angular.isUndefined(d.Vacation.autoReplyEmailAddresses)&&angular.isDefined(window.defaultEmailAddresses)&&(d.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses),angular.isUndefined(d.Vacation.daysBetweenResponse)&&(d.Vacation.daysBetweenResponse=7),angular.isUndefined(d.Vacation.startDate)&&(d.Vacation.startDateEnabled=0,d.Vacation.startDate=new Date),angular.isUndefined(d.Vacation.endDate)&&(d.Vacation.endDateEnabled=0,d.Vacation.endDate=new Date),d.Forward&&d.Forward.forwardAddress&&(d.Forward.forwardAddress=d.Forward.forwardAddress.join(",")),angular.isUndefined(d.SOGoCalendarCategoriesColors)&&(d.SOGoCalendarCategoriesColors={},d.SOGoCalendarCategories=[]),angular.isUndefined(d.SOGoContactsCategories)&&(d.SOGoContactsCategories=[]),angular.extend(b.defaults,d),b.$mdDateLocaleProvider=a.$mdDateLocaleProvider,angular.extend(b.$mdDateLocaleProvider,d.locale),angular.extend(b.$mdDateLocaleProvider,{firstDayOfWeek:d.SOGoFirstDayOfWeek,firstWeekOfYear:d.SOGoFirstWeekOfYear}),b.$mdDateLocaleProvider.firstDayOfWeek=parseInt(d.SOGoFirstDayOfWeek),b.$mdDateLocaleProvider.weekNumberFormatter=function(a){return l("Week %d",a)},b.$mdDateLocaleProvider.msgCalendar=l("Calender"),b.$mdDateLocaleProvider.msgOpenCalendar=l("Open Calendar"),b.$mdDateLocaleProvider.parseDate=function(a){return a?a.parseDate(b.$mdDateLocaleProvider,d.SOGoShortDateFormat):new Date(NaN)},b.$mdDateLocaleProvider.formatDate=function(a){return a?a.format(b.$mdDateLocaleProvider,a.$dateFormat||d.SOGoShortDateFormat):""},b.$mdDateLocaleProvider.parseTime=function(a){return a?a.parseDate(b.$mdDateLocaleProvider,d.SOGoTimeFormat):new Date(NaN)},b.$mdDateLocaleProvider.formatTime=function(a){return a?a.format(b.$mdDateLocaleProvider,d.SOGoTimeFormat):""},b.defaults}),this.settingsPromise=a.$$resource.fetch("jsonSettings").then(function(c){return c.Calendar&&(c.Calendar.PreventInvitationsWhitelist?c.Calendar.PreventInvitationsWhitelist=_.map(c.Calendar.PreventInvitationsWhitelist,function(c,d){var e=/^(.+)\s<(\S+)>$/.exec(c),f=new a.$User({uid:d,cn:e[1],c_email:e[2]});return f.$$image||b.avatar(f.c_email,32,{no_404:!0}).then(function(a){f.$$image=a}),f}):c.Calendar.PreventInvitationsWhitelist=[]),angular.extend(b.settings,c),b.settings})}a.$factory=["$q","$timeout","$log","$mdDateLocale","sgSettings","Gravatar","Resource","User",function(b,c,d,e,f,g,h,i){return angular.extend(a,{$q:b,$timeout:c,$log:d,$mdDateLocaleProvider:e,$gravatar:g,$$resource:new h(f.activeUser("folderURL"),f.activeUser()),$resourcesURL:f.resourcesURL(),$User:i}),new a}];try{angular.module("SOGo.PreferencesUI")}catch(a){angular.module("SOGo.PreferencesUI",["SOGo.Common"])}angular.module("SOGo.PreferencesUI").factory("Preferences",a.$factory),a.prototype.ready=function(){return a.$q.all([this.defaultsPromise,this.settingsPromise])},a.prototype.avatar=function(b,c,d){var e=this;return this.ready().then(function(){var f,g=e.defaults.SOGoAlternateAvatar;return f=e.defaults.SOGoGravatarEnabled?a.$gravatar(b,c,g,d):[a.$resourcesURL,"img","ic_person_grey_24px.svg"].join("/"),d&&d.dstObject&&d.dstAttr&&(d.dstObject[d.dstAttr]=f),f})},a.prototype.$save=function(){return a.$$resource.save("Preferences",this.$omit(!0)).then(function(a){return a})},a.prototype.$omit=function(a){var b,c,d;return b={},d={},angular.forEach(this,function(c,d){"constructor"!=d&&"$"!=d[0]&&(a?b[d]=angular.copy(c):b[d]=c)}),c=_.fromPairs(_.map(b.defaults.SOGoMailLabelsColors,function(a,b){return"_"==b.charAt(0)&&"$"==b.charAt(1)?b.length>2&&"$"==b.charAt(2)?[a[0].toLowerCase().replace(/[ \(\)\/\{%\*<>\\\"]/g,"_"),a]:[b.substring(1),a]:[b,a]})),b.defaults.SOGoMailLabelsColors=c,b.defaults.SOGoMailComposeFontSizeEnabled||(b.defaults.SOGoMailComposeFontSize=0),delete b.defaults.SOGoMailComposeFontSizeEnabled,b.defaults.Vacation&&(b.defaults.Vacation.startDateEnabled?b.defaults.Vacation.startDate=b.defaults.Vacation.startDate.getTime()/1e3:b.defaults.Vacation.startDate=0,b.defaults.Vacation.endDateEnabled?b.defaults.Vacation.endDate=b.defaults.Vacation.endDate.getTime()/1e3:b.defaults.Vacation.endDate=0,b.defaults.Vacation.autoReplyEmailAddresses?b.defaults.Vacation.autoReplyEmailAddresses=_.filter(b.defaults.Vacation.autoReplyEmailAddresses.split(","),function(a){return a.length}):b.defaults.Vacation.autoReplyEmailAddresses=[]),b.defaults.Forward&&b.defaults.Forward.forwardAddress&&(b.defaults.Forward.forwardAddress=b.defaults.Forward.forwardAddress.split(",")),b.settings.Calendar&&b.settings.Calendar.PreventInvitationsWhitelist&&(_.forEach(b.settings.Calendar.PreventInvitationsWhitelist,function(a){d[a.uid]=a.$shortFormat()}),b.settings.Calendar.PreventInvitationsWhitelist=d),b}}(); //# sourceMappingURL=Preferences.services.js.map \ No newline at end of file diff --git a/UI/WebServerResources/js/Preferences.services.js.map b/UI/WebServerResources/js/Preferences.services.js.map index b3f5fd03a..e9d4a7666 100644 --- a/UI/WebServerResources/js/Preferences.services.js.map +++ b/UI/WebServerResources/js/Preferences.services.js.map @@ -1 +1 @@ -{"version":3,"sources":["Preferences/Preferences.service.js"],"names":["Preferences","_this","this","defaults","settings","defaultsPromise","$$resource","fetch","then","response","data","labels","_","fromPairs","map","SOGoMailLabelsColors","value","key","charAt","SOGoMailAutoSave","parseInt","SOGoMailComposeFontSizeEnabled","SOGoMailComposeFontSize","window","CKEDITOR","config","fontSize_defaultLabel","addCss","Vacation","startDate","Date","startDateEnabled","beginOfDay","addDays","endDate","endDateEnabled","getTime","autoReplyEmailAddresses","length","join","angular","isUndefined","isDefined","defaultEmailAddresses","daysBetweenResponse","Forward","forwardAddress","SOGoCalendarCategoriesColors","SOGoCalendarCategories","SOGoContactsCategories","extend","$mdDateLocaleProvider","locale","firstDayOfWeek","SOGoFirstDayOfWeek","firstWeekOfYear","SOGoFirstWeekOfYear","weekNumberFormatter","weekNumber","l","msgCalendar","msgOpenCalendar","parseDate","dateString","SOGoShortDateFormat","NaN","formatDate","date","format","$dateFormat","parseTime","timeString","SOGoTimeFormat","formatTime","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","user","$User","uid","cn","c_email","$$image","avatar","no_404","url","$factory","$q","$timeout","$log","Settings","Gravatar","Resource","User","$gravatar","activeUser","$resourcesURL","resourcesURL","module","e","factory","prototype","ready","all","email","size","options","alternate_avatar","SOGoAlternateAvatar","SOGoGravatarEnabled","dstObject","dstAttr","$save","save","$omit","deep","preferences","whitelist","forEach","copy","toLowerCase","replace","substring","filter","split","v","$shortFormat"],"mappings":"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","file":"Preferences.services.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Preferences\n * @constructor\n */\n function Preferences() {\n var _this = this;\n\n this.defaults = {};\n this.settings = {};\n\n this.defaultsPromise = Preferences.$$resource.fetch(\"jsonDefaults\").then(function(response) {\n var data = response || {};\n\n // We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n var labels = _.fromPairs(_.map(data.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '$')\n return ['_' + key, value];\n return [key, value];\n }));\n\n data.SOGoMailLabelsColors = labels;\n\n // Mail editor autosave is a number of minutes or 0 if disabled\n data.SOGoMailAutoSave = parseInt(data.SOGoMailAutoSave) || 0;\n\n // Specify a base font size for HTML messages when SOGoMailComposeFontSize is not zero\n data.SOGoMailComposeFontSizeEnabled = parseInt(data.SOGoMailComposeFontSize) > 0;\n\n if (window.CKEDITOR && data.SOGoMailComposeFontSizeEnabled) {\n // HTML editor is enabled; set user's preferred font size\n window.CKEDITOR.config.fontSize_defaultLabel = data.SOGoMailComposeFontSize;\n window.CKEDITOR.addCss('.cke_editable { font-size: ' + data.SOGoMailComposeFontSize + 'px; }');\n }\n\n // We convert our list of autoReplyEmailAddresses/forwardAddress into a string.\n // We also convert our date objects into real date, otherwise we'll have strings\n // or undefined values and the md-datepicker does NOT like this.\n if (data.Vacation) {\n if (data.Vacation.startDate)\n data.Vacation.startDate = new Date(parseInt(data.Vacation.startDate) * 1000);\n else {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n data.Vacation.startDate = data.Vacation.startDate.beginOfDay();\n data.Vacation.startDate.addDays(1);\n }\n if (data.Vacation.endDate)\n data.Vacation.endDate = new Date(parseInt(data.Vacation.endDate) * 1000);\n else {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date(data.Vacation.startDate.getTime());\n data.Vacation.endDate.addDays(1);\n }\n if (data.Vacation.autoReplyEmailAddresses && data.Vacation.autoReplyEmailAddresses.length)\n data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(\",\");\n else\n delete data.Vacation.autoReplyEmailAddresses;\n } else\n data.Vacation = {};\n\n if (angular.isUndefined(data.Vacation.autoReplyEmailAddresses) &&\n angular.isDefined(window.defaultEmailAddresses))\n data.Vacation.autoReplyEmailAddresses = window.defaultEmailAddresses;\n\n if (angular.isUndefined(data.Vacation.daysBetweenResponse))\n data.Vacation.daysBetweenResponse = 7;\n\n if (angular.isUndefined(data.Vacation.startDate)) {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n }\n\n if (angular.isUndefined(data.Vacation.endDate)) {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date();\n }\n\n if (data.Forward && data.Forward.forwardAddress)\n data.Forward.forwardAddress = data.Forward.forwardAddress.join(\",\");\n\n if (angular.isUndefined(data.SOGoCalendarCategoriesColors)) {\n data.SOGoCalendarCategoriesColors = {};\n data.SOGoCalendarCategories = [];\n }\n\n if (angular.isUndefined(data.SOGoContactsCategories))\n data.SOGoContactsCategories = [];\n\n angular.extend(_this.defaults, data);\n\n // Configure date locale\n _this.$mdDateLocaleProvider = Preferences.$mdDateLocaleProvider;\n angular.extend(_this.$mdDateLocaleProvider, data.locale);\n angular.extend(_this.$mdDateLocaleProvider, {\n firstDayOfWeek: data.SOGoFirstDayOfWeek,\n firstWeekOfYear: data.SOGoFirstWeekOfYear\n });\n _this.$mdDateLocaleProvider.firstDayOfWeek = parseInt(data.SOGoFirstDayOfWeek);\n _this.$mdDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\n return l('Week %d', weekNumber);\n };\n _this.$mdDateLocaleProvider.msgCalendar = l('Calender');\n _this.$mdDateLocaleProvider.msgOpenCalendar = l('Open Calendar');\n _this.$mdDateLocaleProvider.parseDate = function(dateString) {\n return dateString? dateString.parseDate(_this.$mdDateLocaleProvider, data.SOGoShortDateFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatDate = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, date.$dateFormat || data.SOGoShortDateFormat) : '';\n };\n _this.$mdDateLocaleProvider.parseTime = function(timeString) {\n return timeString? timeString.parseDate(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatTime = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : '';\n };\n\n return _this.defaults;\n });\n\n this.settingsPromise = Preferences.$$resource.fetch(\"jsonSettings\").then(function(data) {\n // We convert our PreventInvitationsWhitelist hash into a array of user\n if (data.Calendar) {\n if (data.Calendar.PreventInvitationsWhitelist) {\n data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {\n var match = /^(.+)\\s<(\\S+)>$/.exec(value),\n user = new Preferences.$User({uid: key, cn: match[1], c_email: match[2]});\n if (!user.$$image)\n _this.avatar(user.c_email, 32, {no_404: true}).then(function(url) {\n user.$$image = url;\n });\n return user;\n });\n }\n else\n data.Calendar.PreventInvitationsWhitelist = [];\n }\n\n angular.extend(_this.settings, data);\n\n return _this.settings;\n });\n }\n\n /**\n * @memberof Preferences\n * @desc The factory we'll use to register with Angular\n * @returns the Preferences constructor\n */\n Preferences.$factory = ['$q', '$timeout', '$log', '$mdDateLocale', 'sgSettings', 'Gravatar', 'Resource', 'User', function($q, $timeout, $log, $mdDateLocaleProvider, Settings, Gravatar, Resource, User) {\n angular.extend(Preferences, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $mdDateLocaleProvider: $mdDateLocaleProvider,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $resourcesURL: Settings.resourcesURL(),\n $User: User\n });\n\n return new Preferences(); // return unique instance\n }];\n\n /* Initialize module if necessary */\n try {\n angular.module('SOGo.PreferencesUI');\n }\n catch(e) {\n angular.module('SOGo.PreferencesUI', ['SOGo.Common']);\n }\n\n /* Factory registration in Angular module */\n angular.module('SOGo.PreferencesUI')\n .factory('Preferences', Preferences.$factory);\n\n /**\n * @function ready\n * @memberof Preferences.prototype\n * @desc Combine promises used to load user's defaults and settings.\n * @return a combined promise\n */\n Preferences.prototype.ready = function() {\n return Preferences.$q.all([this.defaultsPromise, this.settingsPromise]);\n };\n\n /**\n * @function avatar\n * @memberof Preferences.prototype\n * @desc Get the avatar URL associated to an email address\n * @return a combined promise\n */\n Preferences.prototype.avatar = function(email, size, options) {\n var _this = this;\n return this.ready().then(function() {\n var alternate_avatar = _this.defaults.SOGoAlternateAvatar, url;\n if (_this.defaults.SOGoGravatarEnabled)\n url = Preferences.$gravatar(email, size, alternate_avatar, options);\n else\n url = [Preferences.$resourcesURL, 'img', 'ic_person_grey_24px.svg'].join('/');\n if (options && options.dstObject && options.dstAttr)\n options.dstObject[options.dstAttr] = url;\n return url;\n });\n };\n\n /**\n * @function $save\n * @memberof Preferences.prototype\n * @desc Save the preferences to the server.\n */\n Preferences.prototype.$save = function() {\n var _this = this;\n\n return Preferences.$$resource.save(\"Preferences\", this.$omit(true))\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n //_this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $omit\n * @memberof Preferences.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {Boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Preferences instance\n */\n Preferences.prototype.$omit = function(deep) {\n var preferences, labels, whitelist;\n\n preferences = {};\n whitelist = {};\n\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n if (deep)\n preferences[key] = angular.copy(value);\n else\n preferences[key] = value;\n }\n });\n\n // We swap _$key -> $key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n labels = _.fromPairs(_.map(preferences.defaults.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '_' && key.charAt(1) == '$') {\n // New key, let's take the value and flatten it\n if (key.length > 2 && key.charAt(2) == '$') {\n return [value[0].toLowerCase().replace(/[ \\(\\)\\/\\{%\\*<>\\\\\\\"]/g, \"_\"), value];\n }\n return [key.substring(1), value];\n }\n return [key, value];\n }));\n\n preferences.defaults.SOGoMailLabelsColors = labels;\n\n if (!preferences.defaults.SOGoMailComposeFontSizeEnabled)\n preferences.defaults.SOGoMailComposeFontSize = 0;\n delete preferences.defaults.SOGoMailComposeFontSizeEnabled;\n\n if (preferences.defaults.Vacation) {\n if (preferences.defaults.Vacation.startDateEnabled)\n preferences.defaults.Vacation.startDate = preferences.defaults.Vacation.startDate.getTime()/1000;\n else\n preferences.defaults.Vacation.startDate = 0;\n if (preferences.defaults.Vacation.endDateEnabled)\n preferences.defaults.Vacation.endDate = preferences.defaults.Vacation.endDate.getTime()/1000;\n else\n preferences.defaults.Vacation.endDate = 0;\n\n if (preferences.defaults.Vacation.autoReplyEmailAddresses)\n preferences.defaults.Vacation.autoReplyEmailAddresses = _.filter(preferences.defaults.Vacation.autoReplyEmailAddresses.split(\",\"), function(v) { return v.length; });\n else\n preferences.defaults.Vacation.autoReplyEmailAddresses = [];\n }\n\n if (preferences.defaults.Forward && preferences.defaults.Forward.forwardAddress)\n preferences.defaults.Forward.forwardAddress = preferences.defaults.Forward.forwardAddress.split(\",\");\n\n if (preferences.settings.Calendar && preferences.settings.Calendar.PreventInvitationsWhitelist) {\n _.forEach(preferences.settings.Calendar.PreventInvitationsWhitelist, function(user) {\n whitelist[user.uid] = user.$shortFormat();\n });\n preferences.settings.Calendar.PreventInvitationsWhitelist = whitelist;\n }\n\n return preferences;\n };\n\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["Preferences/Preferences.service.js"],"names":["Preferences","_this","this","defaults","settings","defaultsPromise","$$resource","fetch","then","response","data","labels","_","fromPairs","map","SOGoMailLabelsColors","value","key","charAt","SOGoRememberLastModule","SOGoLoginModule","SOGoMailAutoSave","parseInt","SOGoMailComposeFontSizeEnabled","SOGoMailComposeFontSize","window","CKEDITOR","config","fontSize_defaultLabel","addCss","Vacation","startDate","Date","startDateEnabled","beginOfDay","addDays","endDate","endDateEnabled","getTime","autoReplyEmailAddresses","length","join","angular","isUndefined","isDefined","defaultEmailAddresses","daysBetweenResponse","Forward","forwardAddress","SOGoCalendarCategoriesColors","SOGoCalendarCategories","SOGoContactsCategories","extend","$mdDateLocaleProvider","locale","firstDayOfWeek","SOGoFirstDayOfWeek","firstWeekOfYear","SOGoFirstWeekOfYear","weekNumberFormatter","weekNumber","l","msgCalendar","msgOpenCalendar","parseDate","dateString","SOGoShortDateFormat","NaN","formatDate","date","format","$dateFormat","parseTime","timeString","SOGoTimeFormat","formatTime","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","user","$User","uid","cn","c_email","$$image","avatar","no_404","url","$factory","$q","$timeout","$log","Settings","Gravatar","Resource","User","$gravatar","activeUser","$resourcesURL","resourcesURL","module","e","factory","prototype","ready","all","email","size","options","alternate_avatar","SOGoAlternateAvatar","SOGoGravatarEnabled","dstObject","dstAttr","$save","save","$omit","deep","preferences","whitelist","forEach","copy","toLowerCase","replace","substring","filter","split","v","$shortFormat"],"mappings":"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","file":"Preferences.services.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Preferences\n * @constructor\n */\n function Preferences() {\n var _this = this;\n\n this.defaults = {};\n this.settings = {};\n\n this.defaultsPromise = Preferences.$$resource.fetch(\"jsonDefaults\").then(function(response) {\n var data = response || {};\n\n // We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n var labels = _.fromPairs(_.map(data.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '$')\n return ['_' + key, value];\n return [key, value];\n }));\n\n data.SOGoMailLabelsColors = labels;\n\n if (data.SOGoRememberLastModule)\n data.SOGoLoginModule = \"Last\";\n\n // Mail editor autosave is a number of minutes or 0 if disabled\n data.SOGoMailAutoSave = parseInt(data.SOGoMailAutoSave) || 0;\n\n // Specify a base font size for HTML messages when SOGoMailComposeFontSize is not zero\n data.SOGoMailComposeFontSizeEnabled = parseInt(data.SOGoMailComposeFontSize) > 0;\n\n if (window.CKEDITOR && data.SOGoMailComposeFontSizeEnabled) {\n // HTML editor is enabled; set user's preferred font size\n window.CKEDITOR.config.fontSize_defaultLabel = data.SOGoMailComposeFontSize;\n window.CKEDITOR.addCss('.cke_editable { font-size: ' + data.SOGoMailComposeFontSize + 'px; }');\n }\n\n // We convert our list of autoReplyEmailAddresses/forwardAddress into a string.\n // We also convert our date objects into real date, otherwise we'll have strings\n // or undefined values and the md-datepicker does NOT like this.\n if (data.Vacation) {\n if (data.Vacation.startDate)\n data.Vacation.startDate = new Date(parseInt(data.Vacation.startDate) * 1000);\n else {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n data.Vacation.startDate = data.Vacation.startDate.beginOfDay();\n data.Vacation.startDate.addDays(1);\n }\n if (data.Vacation.endDate)\n data.Vacation.endDate = new Date(parseInt(data.Vacation.endDate) * 1000);\n else {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date(data.Vacation.startDate.getTime());\n data.Vacation.endDate.addDays(1);\n }\n if (data.Vacation.autoReplyEmailAddresses && data.Vacation.autoReplyEmailAddresses.length)\n data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(\",\");\n else\n delete data.Vacation.autoReplyEmailAddresses;\n } else\n data.Vacation = {};\n\n if (angular.isUndefined(data.Vacation.autoReplyEmailAddresses) &&\n angular.isDefined(window.defaultEmailAddresses))\n data.Vacation.autoReplyEmailAddresses = window.defaultEmailAddresses;\n\n if (angular.isUndefined(data.Vacation.daysBetweenResponse))\n data.Vacation.daysBetweenResponse = 7;\n\n if (angular.isUndefined(data.Vacation.startDate)) {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n }\n\n if (angular.isUndefined(data.Vacation.endDate)) {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date();\n }\n\n if (data.Forward && data.Forward.forwardAddress)\n data.Forward.forwardAddress = data.Forward.forwardAddress.join(\",\");\n\n if (angular.isUndefined(data.SOGoCalendarCategoriesColors)) {\n data.SOGoCalendarCategoriesColors = {};\n data.SOGoCalendarCategories = [];\n }\n\n if (angular.isUndefined(data.SOGoContactsCategories))\n data.SOGoContactsCategories = [];\n\n angular.extend(_this.defaults, data);\n\n // Configure date locale\n _this.$mdDateLocaleProvider = Preferences.$mdDateLocaleProvider;\n angular.extend(_this.$mdDateLocaleProvider, data.locale);\n angular.extend(_this.$mdDateLocaleProvider, {\n firstDayOfWeek: data.SOGoFirstDayOfWeek,\n firstWeekOfYear: data.SOGoFirstWeekOfYear\n });\n _this.$mdDateLocaleProvider.firstDayOfWeek = parseInt(data.SOGoFirstDayOfWeek);\n _this.$mdDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\n return l('Week %d', weekNumber);\n };\n _this.$mdDateLocaleProvider.msgCalendar = l('Calender');\n _this.$mdDateLocaleProvider.msgOpenCalendar = l('Open Calendar');\n _this.$mdDateLocaleProvider.parseDate = function(dateString) {\n return dateString? dateString.parseDate(_this.$mdDateLocaleProvider, data.SOGoShortDateFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatDate = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, date.$dateFormat || data.SOGoShortDateFormat) : '';\n };\n _this.$mdDateLocaleProvider.parseTime = function(timeString) {\n return timeString? timeString.parseDate(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatTime = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : '';\n };\n\n return _this.defaults;\n });\n\n this.settingsPromise = Preferences.$$resource.fetch(\"jsonSettings\").then(function(data) {\n // We convert our PreventInvitationsWhitelist hash into a array of user\n if (data.Calendar) {\n if (data.Calendar.PreventInvitationsWhitelist) {\n data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {\n var match = /^(.+)\\s<(\\S+)>$/.exec(value),\n user = new Preferences.$User({uid: key, cn: match[1], c_email: match[2]});\n if (!user.$$image)\n _this.avatar(user.c_email, 32, {no_404: true}).then(function(url) {\n user.$$image = url;\n });\n return user;\n });\n }\n else\n data.Calendar.PreventInvitationsWhitelist = [];\n }\n\n angular.extend(_this.settings, data);\n\n return _this.settings;\n });\n }\n\n /**\n * @memberof Preferences\n * @desc The factory we'll use to register with Angular\n * @returns the Preferences constructor\n */\n Preferences.$factory = ['$q', '$timeout', '$log', '$mdDateLocale', 'sgSettings', 'Gravatar', 'Resource', 'User', function($q, $timeout, $log, $mdDateLocaleProvider, Settings, Gravatar, Resource, User) {\n angular.extend(Preferences, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $mdDateLocaleProvider: $mdDateLocaleProvider,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $resourcesURL: Settings.resourcesURL(),\n $User: User\n });\n\n return new Preferences(); // return unique instance\n }];\n\n /* Initialize module if necessary */\n try {\n angular.module('SOGo.PreferencesUI');\n }\n catch(e) {\n angular.module('SOGo.PreferencesUI', ['SOGo.Common']);\n }\n\n /* Factory registration in Angular module */\n angular.module('SOGo.PreferencesUI')\n .factory('Preferences', Preferences.$factory);\n\n /**\n * @function ready\n * @memberof Preferences.prototype\n * @desc Combine promises used to load user's defaults and settings.\n * @return a combined promise\n */\n Preferences.prototype.ready = function() {\n return Preferences.$q.all([this.defaultsPromise, this.settingsPromise]);\n };\n\n /**\n * @function avatar\n * @memberof Preferences.prototype\n * @desc Get the avatar URL associated to an email address\n * @return a combined promise\n */\n Preferences.prototype.avatar = function(email, size, options) {\n var _this = this;\n return this.ready().then(function() {\n var alternate_avatar = _this.defaults.SOGoAlternateAvatar, url;\n if (_this.defaults.SOGoGravatarEnabled)\n url = Preferences.$gravatar(email, size, alternate_avatar, options);\n else\n url = [Preferences.$resourcesURL, 'img', 'ic_person_grey_24px.svg'].join('/');\n if (options && options.dstObject && options.dstAttr)\n options.dstObject[options.dstAttr] = url;\n return url;\n });\n };\n\n /**\n * @function $save\n * @memberof Preferences.prototype\n * @desc Save the preferences to the server.\n */\n Preferences.prototype.$save = function() {\n var _this = this;\n\n return Preferences.$$resource.save(\"Preferences\", this.$omit(true))\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n //_this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $omit\n * @memberof Preferences.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {Boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Preferences instance\n */\n Preferences.prototype.$omit = function(deep) {\n var preferences, labels, whitelist;\n\n preferences = {};\n whitelist = {};\n\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n if (deep)\n preferences[key] = angular.copy(value);\n else\n preferences[key] = value;\n }\n });\n\n // We swap _$key -> $key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n labels = _.fromPairs(_.map(preferences.defaults.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '_' && key.charAt(1) == '$') {\n // New key, let's take the value and flatten it\n if (key.length > 2 && key.charAt(2) == '$') {\n return [value[0].toLowerCase().replace(/[ \\(\\)\\/\\{%\\*<>\\\\\\\"]/g, \"_\"), value];\n }\n return [key.substring(1), value];\n }\n return [key, value];\n }));\n\n preferences.defaults.SOGoMailLabelsColors = labels;\n\n if (!preferences.defaults.SOGoMailComposeFontSizeEnabled)\n preferences.defaults.SOGoMailComposeFontSize = 0;\n delete preferences.defaults.SOGoMailComposeFontSizeEnabled;\n\n if (preferences.defaults.Vacation) {\n if (preferences.defaults.Vacation.startDateEnabled)\n preferences.defaults.Vacation.startDate = preferences.defaults.Vacation.startDate.getTime()/1000;\n else\n preferences.defaults.Vacation.startDate = 0;\n if (preferences.defaults.Vacation.endDateEnabled)\n preferences.defaults.Vacation.endDate = preferences.defaults.Vacation.endDate.getTime()/1000;\n else\n preferences.defaults.Vacation.endDate = 0;\n\n if (preferences.defaults.Vacation.autoReplyEmailAddresses)\n preferences.defaults.Vacation.autoReplyEmailAddresses = _.filter(preferences.defaults.Vacation.autoReplyEmailAddresses.split(\",\"), function(v) { return v.length; });\n else\n preferences.defaults.Vacation.autoReplyEmailAddresses = [];\n }\n\n if (preferences.defaults.Forward && preferences.defaults.Forward.forwardAddress)\n preferences.defaults.Forward.forwardAddress = preferences.defaults.Forward.forwardAddress.split(\",\");\n\n if (preferences.settings.Calendar && preferences.settings.Calendar.PreventInvitationsWhitelist) {\n _.forEach(preferences.settings.Calendar.PreventInvitationsWhitelist, function(user) {\n whitelist[user.uid] = user.$shortFormat();\n });\n preferences.settings.Calendar.PreventInvitationsWhitelist = whitelist;\n }\n\n return preferences;\n };\n\n})();\n"]} \ No newline at end of file