diff --git a/UI/WebServerResources/js/Common.js b/UI/WebServerResources/js/Common.js
index abe7333c1..a57890e12 100644
--- a/UI/WebServerResources/js/Common.js
+++ b/UI/WebServerResources/js/Common.js
@@ -1,4 +1,4 @@
-(function(){"use strict";angular.module("SOGo.Common",["ngAnimate","ngMaterial","mdColors"]).value("sgSettings",{isPopup:document.body.classList.contains("popup"),baseURL:function(){return ApplicationBaseURL||null},activeUser:function(param){var settings={login:UserLogin||null,identification:UserIdentification||null,email:UserEmail||null,language:UserLanguage||null,folderURL:UserFolderURL||null,isSuperUser:IsSuperUser||null,path:{calendar:UserCalendarPath||null,contacts:UserContactsPath||null,mail:UserMailPath||null,preferences:UserPreferencesPath||null,administration:IsSuperUser?UserAdministrationPath:null,logoff:UserLogoffPath||null}};if(param)return settings[param];else return settings}}).constant("sgColors",{selection:["#FFFFFF","#330033","#C0C0C0","#999999","#666666","#333333","#000000","#FFCCCC","#FF6666","#FF0000","#CC0000","#990000","#660000","#330000","#FFCC99","#FF9966","#FF9900","#FF6600","#CC6600","#993300","#663300","#FFFF99","#FFFF66","#FFCC66","#FFCC33","#CC9933","#996633","#663333","#FFFFCC","#FFFF33","#FFFF00","#FFCC00","#999900","#666600","#333300","#CCCCCC","#66FF99","#33FF33","#33CC00","#009900","#006600","#003300","#99FFFF","#33FFFF","#66CCCC","#00CCCC","#339999","#336666","#003333","#CCFFFF","#66FFFF","#33CCFF","#3366FF","#3333FF","#000099","#000066","#CCCCFF","#9999FF","#6666CC","#6633FF","#6600CC","#333399","#330099","#FFCCFF","#FF99FF","#CC66CC","#CC33CC","#993399","#663366","#99FF99"]}).constant("sgConstant",{xs:"(max-width: 599px)","gt-xs":"(min-width: 600px)",sm:"(min-width: 600px) and (max-width: 959px)","gt-sm":"(min-width: 960px)",md:"(min-width: 960px) and (max-width: 1279px)","gt-md":"(min-width: 1280px)",lg:"(min-width: 1280px) and (max-width: 1919px)","gt-lg":"(min-width: 1920px)",xl:"(min-width: 1920px)"}).config(configure).factory("AuthInterceptor",AuthInterceptor).factory("ErrorInterceptor",ErrorInterceptor);configure.$inject=["$logProvider","$compileProvider","$httpProvider","$mdThemingProvider"];function configure($logProvider,$compileProvider,$httpProvider,$mdThemingProvider){$mdThemingProvider.definePalette("sogo-green",{50:"eaf5e9",100:"cbe5c8",200:"aad6a5",300:"88c781",400:"66b86a",500:"56b04c",600:"4da143",700:"388e3c",800:"367d2e",900:"225e1b",A100:"ffffff",A200:"69f0ae",A400:"00e676",A700:"00c853",contrastDefaultColor:"dark",contrastLightColors:["300","400","500","600","700","800","900"]});$mdThemingProvider.definePalette("sogo-blue",{50:"f0faf9",100:"e1f5f3",200:"ceebe8",300:"bfe0dd",400:"b2d6d3",500:"a1ccc8",600:"8ebfbb",700:"7db3b0",800:"639997",900:"4d8080",A100:"d4f7fa",A200:"c3f5fa",A400:"53e3f0",A700:"00b0c0",contrastDefaultColor:"light",contrastDarkColors:["50","100","200"]});$mdThemingProvider.definePalette("sogo-paper",{50:"fcf7f8",100:"f7f1dc",200:"ede5ca",300:"e6d8ba",400:"e2d2a3",500:"d6c48d",600:"baa870",700:"857545",800:"524517",900:"433809",1000:"000000",A100:"ffffff",A200:"eeeeee",A400:"bdbdbd",A700:"616161",contrastDefaultColor:"dark",contrastLightColors:["800","900"]});$mdThemingProvider.theme("default").primaryPalette("sogo-blue",{"default":"900","hue-1":"400","hue-2":"800","hue-3":"A700"}).accentPalette("sogo-green",{"default":"500","hue-1":"A100","hue-2":"300","hue-3":"A700"}).backgroundPalette("grey",{"default":"A100","hue-1":"200","hue-2":"300","hue-3":"500"});if(!DebugEnabled){$logProvider.debugEnabled(false);$compileProvider.debugInfoEnabled(false)}$httpProvider.interceptors.push("AuthInterceptor");$httpProvider.interceptors.push("ErrorInterceptor")}AuthInterceptor.$inject=["$window","$q"];function AuthInterceptor($window,$q){return{response:function(response){if(/^application\/json/.test(response.config.headers.Accept)&&/^/.test(response.data)){$window.location.reload(true);return $q.reject()}return response}}}ErrorInterceptor.$inject=["$rootScope","$q"];function ErrorInterceptor($rootScope,$q){return{responseError:function(rejection){$rootScope.$broadcast("http:Error",rejection);return $q.reject(rejection)}}}})();(function(){"use strict";var _$mdThemingProvider;angular.module("mdColors",["ngMaterial"]).config(configure).run(runBlock);configure.$inject=["$mdThemingProvider"];function configure($mdThemingProvider){_$mdThemingProvider=$mdThemingProvider}runBlock.$inject=["$interpolate","$document","$log"];function runBlock($interpolate,$document,$log){function buildCssSelectors(selectors){var result=selectors.join("");return result}var fgDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-fg"])+" { color:{{value}};}"),bgDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-bg"])+" { background-color:{{value}};}"),bdrDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-bdr"])+" { border-color:{{value}};}"),fgDefaultHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{hue}}",".md-fg"])+" { color:{{value}};}"),bgDefaultHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{hue}}",".md-bg"])+" { background-color:{{value}};}"),fgColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-fg"])+" { color:{{value}};}"),bgColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-bg"])+" { background-color:{{value}}; color:{{contrast}}; }"),bdrColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-bdr"])+" { border-color:{{value}};}"),fgHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}.md-{{hue}}",".md-fg"])+" { color:{{value}};}"),bgHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}.md-{{hue}}",".md-bg"])+" { background-color:{{value}};}"),customSheet=getStyleSheet(),index=0;while(customSheet.cssRules.length>0){customSheet.deleteRule(0)}angular.forEach(_$mdThemingProvider._THEMES,function(theme,themeName){addRule(fgDefault,bgDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-2"]],"hue-2");addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-3"]],"hue-3");addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-1"]],"hue-1");addBorderRule(bdrDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);angular.forEach(theme.colors,function(color,paletteName){addRule(fgColor,bgColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues.default]);addBorderRule(bdrColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues.default]);addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-2"]],"hue-2");addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-3"]],"hue-3");addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-1"]],"hue-1")})});function addRule(fgInterpolate,bgInterpolate,themeName,paletteName,colorArray,hueName){if(!colorArray)return;var colorValue="rgb("+colorArray.value[0]+","+colorArray.value[1]+","+colorArray.value[2]+")",colorContrast="rgb("+colorArray.contrast[0]+","+colorArray.contrast[1]+","+colorArray.contrast[2]+")",context={theme:themeName,palette:paletteName,value:colorValue,contrast:colorContrast,hue:hueName};customSheet.insertRule(fgInterpolate(context),index);index+=1;customSheet.insertRule(bgInterpolate(context),index);index+=1}function addBorderRule(bdrInterpolate,themeName,paletteName,colorArray,hueName){if(!colorArray)return;var colorValue="rgb("+colorArray.value[0]+","+colorArray.value[1]+","+colorArray.value[2]+")";customSheet.insertRule(bdrInterpolate({theme:themeName,palette:paletteName,value:colorValue,hue:hueName}),index);index+=1}function getStyleSheet(){var style=$document[0].head.querySelector('style[title="Dynamic-Generated-by-mdColors"]');if(style===null){style=$document[0].createElement("style");style.title="Dynamic-Generated-by-mdColors";style.appendChild($document[0].createTextNode(""));$document[0].head.appendChild(style)}return style.sheet}}})();(function(){"use strict";decodeUri.$inject=["$window"];function decodeUri($window){return $window.decodeURIComponent}angular.module("SOGo.Common").filter("decodeUri",decodeUri)})();(function(){"use strict";encodeUri.$inject=["$window"];function encodeUri($window){return $window.encodeURIComponent}angular.module("SOGo.Common").filter("encodeUri",encodeUri)})();(function(){"use strict";ensureTarget.$inject=["$sce"];function ensureTarget($sce){return function(element){var tree=angular.element("
"+element+"
");tree.find("a").attr("target","_blank");return $sce.trustAs("html",tree.html())}}angular.module("SOGo.Common").filter("ensureTarget",ensureTarget)})();(function(){"use strict";function loc(){return l}angular.module("SOGo.Common").filter("loc",loc)})();(function(){"use strict";function range(){return function(n){var res=[];for(var i=0;i",' error_outline '," "+l(message)+" ",""].join(""),hideDelay:5e3,position:"top right"})}$rootScope.$on("http:Error",onHttpError);Alarm.getAlarms()}angular.module("SOGo.Common").controller("navController",navController)})();(function(){"use strict";function Acl(folderId){this.folderId=folderId}Acl.factory=["$q","$timeout","sgSettings","Resource","User",function($q,$timeout,Settings,Resource,User){angular.extend(Acl,{$q:$q,$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$User:User});return Acl}];angular.module("SOGo.Common").factory("Acl",Acl.factory);Acl.prototype.$users=function(owner){var _this=this,deferred=Acl.$q.defer(),user;if(this.users){deferred.resolve(this.users)}else{var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).fetch(this.folderId,"acls");else acls=Acl.$$resource.fetch(this.folderId,"acls");return acls.then(function(response){_this.users=[];angular.forEach(response.users,function(data){user=new Acl.$User(data);user.canSubscribeUser=user.isSubscribed;user.wasSubscribed=user.isSubscribed;user.$rights=angular.bind(user,user.$acl,_this.folderId,owner);_this.users.push(user)});deferred.resolve(_this.users);return _this.users})}return deferred.promise};Acl.prototype.$addUser=function(user,owner){var _this=this,deferred=Acl.$q.defer(),param={uid:user.uid};if(!user.uid||_.indexOf(_.pluck(this.users,"uid"),user.uid)>-1){deferred.resolve()}else{var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).fetch(this.folderId,"addUserInAcls",param);else acls=Acl.$$resource.fetch(this.folderId,"addUserInAcls",param);acls.then(function(){user.wasSubscribed=false;user.userClass=user.isGroup?"normal-group":"normal-user";user.$rights=angular.bind(user,user.$acl,_this.folderId);_this.users.push(user);deferred.resolve(user)},function(data,status){deferred.reject(l("An error occured please try again."))})}return deferred.promise};Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);if(i>=0){_this.users.splice(i,1)}})};Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})};Acl.prototype.$saveUsersRights=function(owner){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];angular.forEach(this.users,function(user){if(user.$rightsAreDirty()){users.push(user.$omit())}});if(users.length){var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).save(this.folderId,users,param);else acls=Acl.$$resource.save(this.folderId,users,param);acls.then(function(){angular.forEach(_this.users,function(user){if(user.$rightsAreDirty()){user.$shadowRights=angular.copy(user.rights)}});deferredSave.resolve()},deferredSave.reject)}else{deferredSave.resolve()}users=[];angular.forEach(this.users,function(user){if(!user.wasSubscribed&&user.isSubscribed){users.push(user.uid)}});if(users.length){param={uids:users.join(",")};Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed});deferredSubscribe.resolve()},deferredSubscribe.reject)}else{deferredSubscribe.resolve()}return Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}})();(function(){"use strict";function Alarm(){this.currentAlarm=null}Alarm.getAlarms=function(){var _this=this;var now=new Date;var browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function reverseSortByAlarmTime(a,b){var x=parseInt(a[2]);var y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop();var now=new Date;var utc=Math.floor(now.getTime()/1e3);var url=next[0]+"/"+next[1];var alarmTime=parseInt(next[2]);var delay=alarmTime;if(alarmTime>0)delay-=utc;var d=new Date(alarmTime*1e3);var f=angular.bind(_this,Alarm.showAlarm,url);if(_this.currentAlarm)_this.$timeout.cancel(_this.currentAlarm);_this.currentAlarm=_this.$timeout(f,delay*1e3)}})};Alarm.showAlarm=function(url){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){_this.$toast.show({position:"top right",hideDelay:0,template:[""," ",' '+data.summary+" ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," "," "].join(""),locals:{url:url},controller:AlarmController});AlarmController.$inject=["scope","$mdToast","url"];function AlarmController(scope,$mdToast,url){scope.reminder="10";scope.cancel=function(){$mdToast.hide()};scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder);$mdToast.hide()}}})};AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"];function AlarmService($timeout,Settings,Resource,$mdToast){angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast});return Alarm}angular.module("SOGo.Common").factory("Alarm",AlarmService)})();(function(){"use strict";angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication);function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;foundCookie=null;prefix=name+"=";pairs=document.cookie.split(";");for(i=0;!foundCookie&&i0)currentPair=currentPair.substr(start);if(currentPair.indexOf(prefix)===0)foundCookie=currentPair.substr(prefix.length)}return foundCookie}function readLoginCookie(){var loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo"),value;if(cookie&&cookie.length>8){value=decodeURIComponent(cookie.substr(8));loginValues=value.base64decode().split(":")}return loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;userName=username;if(domain)userName+="@"+domain.value;address=""+window.location.href;baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName);if(baseAddress[0]=="/"){parts=address.split("/");hostpart=parts[2];protocol=parts[0];baseAddress=protocol+"//"+hostpart+baseAddress}parts=baseAddress.split("/");parts.splice(0,3);altBaseAddress=parts.join("/");if((address.startsWith(baseAddress)||address.startsWith(altBaseAddress))&&!address.endsWith("/logoff")){newAddress=address}else{newAddress=baseAddress}return newAddress}this.$get=getService;getService.$inject=["$q","$http","passwordPolicyConfig"];function getService($q,$http,passwordPolicyConfig){var _this=this,service;service={login:function(data){var d=$q.defer(),username=data.username,password=data.password,domain=data.domain,language,rememberLogin=data.rememberLogin?1:0;if(data.loginSuffix&&!username.endsWith(data.loginSuffix)){username+=loginSuffix;domain=false}if(data.language&&data.language!="WONoSelectionString"){language=data.language}$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();if(!loginCookie){d.reject(l("cookiesNotEnabled"))}else{if(typeof data.expire!="undefined"&&typeof data.grace!="undefined"){if(data.expire<0&&data.grace>0){d.reject({grace:data.grace})}else if(data.expire>0&&data.grace==-1){d.reject({expire:data.expire})}else{d.resolve(redirectUrl(username,domain))}}else{d.resolve(redirectUrl(username,domain))}}}).error(function(data,status){var msg,perr;if(data&&data.LDAPPasswordPolicyError){perr=data.LDAPPasswordPolicyError;if(perr==passwordPolicyConfig.PolicyNoError){msg=l("Wrong username or password.")}else if(perr==passwordPolicyConfig.PolicyAccountLocked){msg=l("Your account was locked due to too many failed attempts.")}else{msg=l("Login failed due to unhandled error case: ")+perr}}else{msg=l("Unhandled error response")}d.reject({error:msg})});return d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();$http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;if(!perr){perr=passwordPolicyConfig.PolicyPasswordSystemUnknown;error=_("Unhandled error response")}else if(perr==passwordPolicyConfig.PolicyNoError){error=l("Password change failed")}else if(perr==passwordPolicyConfig.PolicyPasswordModNotAllowed){error=l("Password change failed - Permission denied")}else if(perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality){error=l("Password change failed - Insufficient password quality")}else if(perr==passwordPolicyConfig.PolicyPasswordTooShort){error=l("Password change failed - Password is too short")}else if(perr==passwordPolicyConfig.PolicyPasswordTooYoung){error=l("Password change failed - Password is too young")}else if(perr==passwordPolicyConfig.PolicyPasswordInHistory){error=l("Password change failed - Password is in history")}else{error=l("Unhandled policy error: %{0}").formatted(perr);perr=passwordPolicyConfig.PolicyPasswordUnknown}d.reject(error)});return d.promise}};return service}}})();(function(){"use strict";function Dialog(){}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).textContent(content).ok(l("OK"));this.$modal.show(alert)};Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).textContent(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)};Dialog.prompt=function(title,label,options){var o=options||{},d=this.$q.defer();this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,template:['',' ',' '," "," "+label+" ",' '," "," "," ",' '," "+l("Cancel")," ",' '," "+l("OK")," "," "," "].join(""),controller:PromptDialogController});PromptDialogController.$inject=["scope","$mdDialog"];function PromptDialogController(scope,$mdDialog){scope.title=title;scope.name="";scope.cancel=function(){d.reject();$mdDialog.hide()};scope.ok=function(){d.resolve(scope.name);$mdDialog.hide()}}return d.promise};DialogService.$inject=["$q","$mdDialog"];function DialogService($q,$mdDialog){angular.extend(Dialog,{$q:$q,$modal:$mdDialog});return Dialog}angular.module("SOGo.Common").factory("Dialog",DialogService)})();(function(){"use strict";function Gravatar(){return function(email,size,alternate_avatar){var x,y,hash,s=size;if(!email){return""}x=email.indexOf("<");if(x>=0){y=email.indexOf(">",x);if(y>x)email=email.substring(x+1,y)}if(!size){s=48}hash=email.md5();if(alternate_avatar=="none")alternate_avatar="404";return"https://www.gravatar.com/avatar/"+hash+"?s="+s+"&d="+alternate_avatar}}angular.module("SOGo.Common").factory("Gravatar",Gravatar)})();(function(){"use strict";function Resource($http,$q,path,activeUser,options){angular.extend(this,{_http:$http,_q:$q,_path:path,_activeUser:activeUser});angular.extend(this,options);this._path=this._path.replace(/\/$/,"")}Resource.$factory=["$http","$q",function($http,$q){return function(path,activeUser,options){return new Resource($http,$q,path,activeUser,options)}}];angular.module("SOGo.Common").factory("Resource",Resource.$factory);Resource.prototype.userResource=function(uid){var path=_.compact(this._activeUser.folderURL.split("/"));path.splice(path.length-1,1,escape(uid));return new Resource(this._http,this._q,"/"+path.join("/"),this._activeUser)};Resource.prototype.fetch=function(folderId,action,params){var deferred=this._q.defer(),path=[this._path];if(folderId)path.push(folderId.split("/"));if(action)path.push(action);path=_.compact(_.flatten(path)).join("/");this._http({method:"GET",url:path,params:params}).success(deferred.resolve).error(function(data,status){if(status==404)return deferred.reject()});return deferred.promise};Resource.prototype.newguid=function(folderId){var deferred=this._q.defer(),path=this._path+"/"+folderId+"/newguid";this._http.get(path).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.create=function(action,name){var deferred=this._q.defer(),path=this._path+"/"+action;this._http.post(path,{name:name}).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.post=function(id,action,data){var deferred=this._q.defer(),path=[this._path];if(id)path.push(id);if(action)path.push(action);path=_.compact(_.flatten(path)).join("/");this._http.post(path,data).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.save=function(id,newValue,options){var deferred=this._q.defer(),action=options&&options.action?options.action:"save";return this.post(id,action,newValue)};Resource.prototype.remove=function(uid){var deferred=this._q.defer(),path=this._path+"/"+uid+"/delete";this._http.get(path).success(deferred.resolve).error(deferred.reject);return deferred.promise}})();(function(){"use strict";function User(userData){if(userData){this.init(userData)}}User.factory=["$q","$log","sgSettings","Resource","Gravatar",function($q,$log,Settings,Resource,Gravatar){angular.extend(User,{$q:$q,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$gravatar:Gravatar,$query:"",$users:[]});return User}];angular.module("SOGo.Common").factory("User",User.factory);User.$filter=function(search,excludedUsers,options){var _this=this,param={search:search};if(!options||!options.dry){if(!search){User.$users.splice(0,User.$users.length);return User.$q.when(User.$users)}if(User.$query==search){return User.$q.when(User.$users)}User.$query=search}return User.$$resource.fetch(null,"usersSearch",param).then(function(response){var results,index,user,users,compareUids=function(data){return this.uid==data.uid};if(options&&options.dry)users=[];else users=User.$users;if(excludedUsers){results=_.filter(response.users,function(user){return!_.find(excludedUsers,compareUids,user)})}else{results=response.users}for(index=users.length-1;index>=0;index--){user=users[index];if(!_.find(results,compareUids,user)){users.splice(index,1)}}_.each(results,function(data,index){if(_.isUndefined(_.find(users,compareUids,data))){var user=new User(data);users.splice(index,0,user)}});User.$log.debug(users);return users})};User.prototype.init=function(data){angular.extend(this,data);if(!this.$$shortFormat)this.$$shortFormat=this.$shortFormat();if(!this.$$image)this.$$image=this.image||User.$gravatar(this.c_email,32,User.$alternateAvatar);this.empty=" "};User.prototype.$shortFormat=function(options){var fullname=this.cn||this.c_email;var email=this.c_email;var no_email=options&&options.email===false;if(!no_email&&email&&fullname!=email){fullname+=" <"+email+">"}return fullname};User.prototype.$acl=function(folderId,owner){var _this=this,deferred=User.$q.defer(),param={uid:this.uid};if(this.$shadowRights){deferred.resolve(this.rights)}else{var rights;if(angular.isDefined(owner))rights=User.$$resource.userResource(owner).fetch(folderId,"userRights",param);else rights=User.$$resource.fetch(folderId,"userRights",param);rights.then(function(data){_this.rights=data;_this.$shadowRights=angular.copy(data);deferred.resolve(data);return data})}return deferred.promise};User.prototype.$isAnonymous=function(){return this.uid=="anonymous"};User.prototype.$isSpecial=function(){return this.userClass&&this.userClass=="public-user"};User.prototype.$confirmRights=function(){var confirmation=false;if(this.$confirmation){return false}if(_.some(_.values(this.rights))){if(this.uid=="anonymous"){confirmation=l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?")}else if(this.uid==""){confirmation=l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?")}}this.$confirmation=confirmation;return confirmation};User.prototype.$rightsAreDirty=function(){return this.rights&&!_.isEqual(this.rights,this.$shadowRights)};User.prototype.$resetRights=function(zero){var _this=this;if(zero){_.map(_.keys(this.rights),function(key){if(angular.isString(_this.rights[key]))_this.rights[key]="None";else _this.rights[key]=0})}else{this.rights=angular.copy(this.$shadowRights)}};User.prototype.$folders=function(type){var _this=this,deferred=User.$q.defer(),param={type:type};if(this.$$folders){deferred.resolve(this.$$folders)}else{User.$$resource.userResource(this.uid).fetch(null,"foldersSearch",param).then(function(response){_this.$$folders=response.folders;deferred.resolve(response.folders)})}return deferred.promise};User.prototype.$omit=function(){var user={};angular.forEach(this,function(value,key){if(key!="constructor"&&key[0]!="$"){user[key]=value}});return user};User.prototype.toString=function(){return"[User "+this.c_email+"]"}})();(function(){"use strict";sgFocus.$inject=["$rootScope","$timeout"];function sgFocus($rootScope,$timeout){return function(name){$timeout(function(){$rootScope.$broadcast("sgFocusOn",name)})}}angular.module("SOGo.Common").factory("sgFocus",sgFocus)})();(function(){"use strict";function sgAvatarImage(){return{restrict:"AE",scope:{size:"@",email:"=sgEmail",src:"=sgSrc"},template:' ',link:link,bindToController:true,controller:"sgAvatarImageController",controllerAs:"vm"}}function link(scope,element,attrs,controller){var el=element[0],className=el.className,imgElement=element.find("img"),img=imgElement[0];if(attrs.size){imgElement.attr("width",attrs.size);imgElement.attr("height",attrs.size)}imgElement.bind("error",function(){controller.insertGenericAvatar(img)})}sgAvatarImageController.$inject=["$scope","$element","Preferences","Gravatar"];function sgAvatarImageController($scope,$element,Preferences,Gravatar){var vm=this;$scope.$watch("vm.email",function(email){Preferences.ready().then(function(){
-var img=$element.find("img")[0];if(!email&&!vm.genericAvatar){vm.insertGenericAvatar(img)}else if(email&&!vm.url){if(vm.genericAvatar){vm.genericAvatar.parentNode.removeChild(vm.genericAvatar);delete vm.genericAvatar;img.classList.remove("ng-hide")}vm.url=Gravatar(email,vm.size,Preferences.defaults.SOGoAlternateAvatar)}})});if("sg-src"in $element[0].attributes){$scope.$watch("vm.src",function(src){if(src){vm.url=src}})}vm.insertGenericAvatar=function(img){var avatar;if(!vm.genericAvatar){avatar=document.createElement("md-icon");avatar.className="material-icons icon-person";img.classList.add("ng-hide");vm.genericAvatar=img.parentNode.insertBefore(avatar,img)}}}angular.module("SOGo.Common").directive("sgAvatarImage",sgAvatarImage).controller("sgAvatarImageController",sgAvatarImageController)})();(function(){"use strict";function sgColorPicker(){return{restrict:"E",require:"ngModel",template:["",' ',' color_lens '," ",' ',' ',' ',' check_box '," "," "," "," "].join(""),replace:true,controller:sgColorPickerController,link:link};function link(scope,iElement,iAttr,ngModelController){ngModelController.$render=function(){scope.sgColor=ngModelController.$viewValue}}}sgColorPickerController.$inject=["$scope","$element","sgColors"];function sgColorPickerController($scope,$element,sgColors){var ngModelController=$element.controller("ngModel");$scope.sgColors=sgColors.selection;$scope.setColor=function(color){$scope.sgColor=color;ngModelController.$setViewValue(color)}}angular.module("SOGo.Common").directive("sgColorPicker",sgColorPicker)})();(function(){"use strict";sgCompile.$inject=["$compile"];function sgCompile($compile){return{restrict:"A",link:sgCompileLink};function sgCompileLink(scope,element,attrs){var ensureCompileRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgCompile)},function(value){element.html(value);$compile(element.contents())(scope);ensureCompileRunsOnce()})}}angular.module("SOGo.Common").directive("sgCompile",sgCompile)})();(function(){"use strict";function sgEnter(){var ENTER_KEY=13;return function(scope,element,attrs){element.bind("keydown keypress",function(event){if(event.which===ENTER_KEY){scope.$apply(attrs.sgEnter);event.preventDefault()}})}}angular.module("SOGo.Common").directive("sgEnter",sgEnter)})();(function(){"use strict";function sgEscape(){var ESCAPE_KEY=27;return function(scope,elem,attrs){elem.bind("keydown",function(event){if(event.keyCode===ESCAPE_KEY){scope.$apply(attrs.sgEscape)}})}}angular.module("SOGo.Common").directive("sgEscape",sgEscape)})();(function(){"use strict";function sgFocusOn(){return function(scope,elem,attr){scope.$on("sgFocusOn",function(e,name){if(name===attr.sgFocusOn){elem[0].focus();elem[0].select()}})}}angular.module("SOGo.Common").directive("sgFocusOn",sgFocusOn)})();(function(){"use strict";function sgFolderStylesheet(){return{restrict:"E",require:"ngModel",scope:{ngModel:"="},replace:true,bindToController:true,controller:sgFolderStylesheetController,controllerAs:"cssCtrl",template:['"].join("")};function sgFolderStylesheetController(){var vm=this;vm.contrast=contrast;function hexToRgb(hex){var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?{r:parseInt(result[1],16),g:parseInt(result[2],16),b:parseInt(result[3],16)}:null}function contrast(hex){var color,c,l=1;color=hexToRgb(hex);if(color){c=[color.r/255,color.g/255,color.b/255];for(var i=0;i.179){return"black"}else{return"white"}}}}angular.module("SOGo.Common").directive("sgFolderStylesheet",sgFolderStylesheet)})();(function(){"use strict";function sgPlaceholder(){return{restrict:"A",scope:{placeholder:"=sgPlaceholder"},link:function(scope,elem,attr){scope.$watch("placeholder",function(){elem[0].placeholder=scope.placeholder})}}}angular.module("SOGo.Common").directive("sgPlaceholder",sgPlaceholder)})();(function(){"use strict";sgSearchPreTransclude.$inject=["$parse"];function sgSearchPreTransclude($parse){return{restrict:"A",controller:"sgSearchController",controllerAs:"$sgSearchController",priority:1001,compile:compile};function compile(tElement,tAttr){var mdInputEl=tElement.find("md-input-container"),inputEl=tElement.find("input"),selectEl=tElement.find("md-select"),buttonEl=tElement.find("md-button");inputEl.attr("ng-model","$sgSearchController.searchText");inputEl.attr("ng-model-options","$sgSearchController.searchTextOptions");inputEl.attr("ng-change","$sgSearchController.onChange()");if(selectEl){selectEl.attr("ng-model","$sgSearchController.searchField");selectEl.attr("ng-change","$sgSearchController.onChange()")}if(buttonEl&&buttonEl.attr("sg-search-cancel")){buttonEl.attr("ng-click",buttonEl.attr("sg-search-cancel"));buttonEl.removeAttr("sg-search-cancel")}else{buttonEl=null}return function postLink(scope,iElement,iAttr,controller){var compiledButtonEl=iElement.find("button");controller.doSearch=$parse(iElement.attr("sg-search"));if(buttonEl&&compiledButtonEl){compiledButtonEl.on("click",controller.cancelSearch)}}}}function sgSearch(){return{restrict:"A",priority:1e3,transclude:true,compile:compile};function compile(tElement,tAttr){return function postLink(scope,iElement,iAttr,controller,transclude){transclude(function(clone){iElement.append(clone)})}}}sgSearchController.$inject=["$scope","$element"];function sgSearchController($scope,$element){var vm=this;vm.previous={searchText:"",searchField:""};vm.searchText=null;vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}};vm.onChange=function(){if(typeof vm.searchText!=="undefined"&&vm.searchText!==null){if(vm.searchText!=vm.previous.searchText||vm.searchField!=vm.previous.searchField){if(vm.searchText.length>2||vm.searchText.length===0||vm.searchText=="."){vm.doSearch($scope,{searchText:vm.searchText,searchField:vm.searchField})}vm.previous={searchText:vm.searchText,searchField:vm.searchField}}}};vm.cancelSearch=function(){vm.searchText=""}}angular.module("SOGo.Common").controller("sgSearchController",sgSearchController).directive("sgSearch",sgSearchPreTransclude).directive("sgSearch",sgSearch)})();(function(){"use strict";sgSubscribe.$inject=["User"];function sgSubscribe(User){return{restrict:"A",scope:{folderType:"@sgSubscribe",onFolderSelect:"&sgSubscribeOnSelect"},replace:false,bindToController:true,controller:sgSubscribeDialogController,controllerAs:"$sgSubscribeDialogController",link:link}}function link(scope,element,attrs,controller){var inputEl=element.find("input");element.on("click",controller.showDialog)}sgSubscribeDialogController.$inject=["$mdDialog"];function sgSubscribeDialogController($mdDialog){var vm=this;vm.showDialog=function(){$mdDialog.show({templateUrl:"../Contacts/UIxContactsUserFolders",clickOutsideToClose:true,locals:{folderType:vm.folderType,onFolderSelect:vm.onFolderSelect},controller:sgSubscribeController,controllerAs:"subscribe"})}}sgSubscribeController.$inject=["$mdDialog","folderType","onFolderSelect","User"];function sgSubscribeController($mdDialog,folderType,onFolderSelect,User){var vm=this;vm.selectedUser=null;vm.users=User.$users;vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}};vm.onChange=function(){User.$filter(vm.searchText).then(function(){if(vm.selectedUser){if(_.isUndefined(_.find(User.$users,function(user){return user.uid==vm.selectedUser.uid}))){vm.selectedUser=null}}})};vm.selectUser=function(i){if(vm.selectedUser==vm.users[i]){vm.selectedUser=null}else{vm.users[i].$folders(folderType).then(function(){vm.selectedUser=vm.users[i]})}};vm.selectFolder=function(folder){onFolderSelect({folderData:folder})};vm.close=function(){$mdDialog.hide()}}angular.module("SOGo.Common").directive("sgSubscribe",sgSubscribe)})();(function(){"use strict";angular.module("SOGo.Common").directive("sgTimePane",timePaneDirective);function timePaneDirective(){return{template:['','
','
','
',' {{hour.displayName}} ',"
","
","
",'
','
','
',' {{minute.displayName}} ',"
","
","
",'
",'
',' ',"
","
"].join(""),scope:{},require:["ngModel","sgTimePane"],controller:TimePaneCtrl,controllerAs:"ctrl",bindToController:true,link:function(scope,element,attrs,controllers){var ngModelCtrl=controllers[0];var sgTimePaneCtrl=controllers[1];var timePaneElement=element;sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl,timePaneElement)}}}var SELECTED_TIME_CLASS="md-bg";var FOCUSED_TIME_CLASS="md-focus";var nextTimePaneUniqueId=0;function TimePaneCtrl($element,$attrs,$scope,$animate,$q,$mdConstant,$mdTheming,$$mdDateUtil,$mdDateLocale,$mdInkRipple,$mdUtil){var m;this.$scope=$scope;this.$element=$element;this.timePaneElement=$element[0].querySelector(".sg-time-pane");this.$animate=$animate;this.$q=$q;this.$mdInkRipple=$mdInkRipple;this.$mdUtil=$mdUtil;this.keyCode=$mdConstant.KEY_CODE;this.dateUtil=$$mdDateUtil;this.id=nextTimePaneUniqueId++;this.ngModelCtrl=null;this.selectedTime=null;this.displayTime=null;this.isInitialized=false;$scope.hours=[];$scope.hours[0]=[];$scope.hours[0][0]=[];$scope.hours[0][1]=[];$scope.hours[1]=[];$scope.hours[1][0]=[];$scope.hours[1][1]=[];for(var i=0;i<6;i++){$scope.hours[0][0][i]={id:"tp-"+this.id+"-hour-"+i,displayName:i<10?"0"+i:""+i,selected:false};$scope.hours[0][1][i]={id:"tp-"+this.id+"-hour-"+(i+6),displayName:i+6<10?"0"+(i+6):""+(i+6),selected:false};$scope.hours[1][0][i]={id:"tp-"+this.id+"-hour-"+(i+12),displayName:""+(i+12),selected:false};$scope.hours[1][1][i]={id:"tp-"+this.id+"-hour-"+(i+18),displayName:""+(i+18),selected:false}}$scope.min5=[];$scope.min5[0]=[];$scope.min5[1]=[];for(i=0;i<6;i++){m=i*5;$scope.min5[0][i]={id:"tp-"+this.id+"-minute5-"+m,displayName:m<10?":0"+m:":"+m,selected:true};$scope.min5[1][i]={id:"tp-"+this.id+"-minute5-"+(m+30),displayName:":"+(m+30),selected:false}}$scope.min1=[];for(i=0;i<12;i++){$scope.min1[i]=[];for(var ii=0;ii<5;ii++){m=i*5+ii;$scope.min1[i][ii]={id:"tp-"+this.id+"-minute-"+m,displayName:m<10?":0"+m:":"+m,selected:true}}}$scope.show5min=true;$scope.getToggleBtnLbl=function(){return $scope.is5min()?">>":"<<"};$scope.toggleManual5min=function(){$scope.manual5min=!$scope.is5min()};$scope.is5min=function(){if($scope.manual5min===true||$scope.manual5min===false){return $scope.manual5min}else{return $scope.show5min}};if(!$attrs.tabindex){$element.attr("tabindex","-1")}var self=this;this.hourClickHandler=function(displayVal){var updated=new Date(self.displayTime);updated.setHours(Number(displayVal));self.setNgModelValue(updated,"hours")};$scope.hourClickHandler=this.hourClickHandler;this.minuteClickHandler=function(displayVal){var val=displayVal.substr(1);var updated=new Date(self.displayTime);updated.setMinutes(Number(val));self.setNgModelValue(updated,"minutes")};$scope.minuteClickHandler=this.minuteClickHandler;this.attachTimePaneEventListeners()}TimePaneCtrl.$inject=["$element","$attrs","$scope","$animate","$q","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil"];TimePaneCtrl.prototype.configureNgModel=function(ngModelCtrl,sgTimePaneCtrl,timePaneElement){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.changeSelectedTime(self.ngModelCtrl.$viewValue,sgTimePaneCtrl,timePaneElement)}};TimePaneCtrl.prototype.changeSelectedTime=function(date,sgTimePaneCtrl,timePaneElement){var self=this;var previousSelectedTime=this.selectedTime;this.selectedTime=date;this.changeDisplayTime(date).then(function(){if(previousSelectedTime){var prevH=previousSelectedTime.getHours();var prevHCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+prevH);if(prevHCell){prevHCell.classList.remove(SELECTED_TIME_CLASS);prevHCell.setAttribute("aria-selected","false")}var prevM=previousSelectedTime.getMinutes();var prevMCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+prevM);if(prevMCell){prevMCell.classList.remove(SELECTED_TIME_CLASS);prevMCell.setAttribute("aria-selected","false")}var prevM5Cell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+prevM);if(prevM5Cell){prevM5Cell.classList.remove(SELECTED_TIME_CLASS);prevM5Cell.setAttribute("aria-selected","false")}}if(date){var newH=date.getHours();var mCell,hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);if(hCell){hCell.classList.add(SELECTED_TIME_CLASS);hCell.setAttribute("aria-selected","true")}var newM=date.getMinutes();if(newM%5===0){sgTimePaneCtrl.$scope.show5min=true;mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+newM);if(mCell){mCell.classList.add(SELECTED_TIME_CLASS);mCell.setAttribute("aria-selected","true")}}else{sgTimePaneCtrl.$scope.show5min=false}mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+newM);if(mCell){mCell.classList.add(SELECTED_TIME_CLASS);mCell.setAttribute("aria-selected","true")}}})};TimePaneCtrl.prototype.changeDisplayTime=function(date){var d=new Date(date);if(!this.isInitialized){this.buildInitialTimePaneDisplay();return this.$q.when()}if(!this.dateUtil.isValidDate(d)){return this.$q.when()}this.displayTime=d;return this.$q.when()};TimePaneCtrl.prototype.buildInitialTimePaneDisplay=function(){this.displayTime=this.selectedTime||this.today;this.isInitialized=true};TimePaneCtrl.prototype.attachTimePaneEventListeners=function(){this.$element.on("keydown",angular.bind(this,this.handleKeyEvent))};TimePaneCtrl.prototype.handleKeyEvent=function(event){var self=this;this.$scope.$apply(function(){if(event.which==self.keyCode.ESCAPE||event.which==self.keyCode.TAB){self.$scope.$emit("md-time-pane-close");if(event.which==self.keyCode.TAB){event.preventDefault()}return}if(event.which===self.keyCode.ENTER){self.setNgModelValue(self.displayTime,"enter");event.preventDefault();return}})};TimePaneCtrl.prototype.setNgModelValue=function(date,mode){this.$scope.$emit("sg-time-pane-change",{date:date,changed:mode});this.ngModelCtrl.$setViewValue(date);this.ngModelCtrl.$render()};TimePaneCtrl.prototype.focus=function(opt_date,sgTimePaneCtrl){var date=opt_date||this.selectedTime||this.today;var previousFocus=this.timePaneElement.querySelector(".md-focus");if(previousFocus){previousFocus.classList.remove(FOCUSED_TIME_CLASS)}if(date){var newH=date.getHours();var hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);if(hCell){hCell.classList.add(FOCUSED_TIME_CLASS);hCell.focus()}}}})();(function(){"use strict";angular.module("SOGo.Common").directive("sgTimepicker",timePickerDirective);function timePickerDirective(){return{template:[''," access_time "," ",'",'"].join(""),require:["ngModel","sgTimepicker"],scope:{placeholder:"@mdPlaceholder"},controller:TimePickerCtrl,controllerAs:"ctrl",bindToController:true,link:function(scope,element,attr,controllers){var ngModelCtrl=controllers[0];var mdTimePickerCtrl=controllers[1];mdTimePickerCtrl.configureNgModel(ngModelCtrl)}}}var EXTRA_INPUT_SIZE=3;var INVALID_CLASS="sg-timepicker-invalid";var DEFAULT_DEBOUNCE_INTERVAL=500;var TIME_PANE_HEIGHT={MIN5:{GTSM:172+20,SM:292+20},MIN1:{GTSM:364+20,SM:454+20}};var TIME_PANE_WIDTH={GTSM:510+20,SM:272+20};function TimePickerCtrl($scope,$element,$attrs,$compile,$timeout,$mdConstant,$mdMedia,$mdTheming,$mdUtil,$mdDateLocale,$$mdDateUtil,$$rAF){this.$compile=$compile;this.$timeout=$timeout;this.dateLocale=$mdDateLocale;this.dateUtil=$$mdDateUtil;this.$mdConstant=$mdConstant;this.$mdMedia=$mdMedia;this.$mdUtil=$mdUtil;this.$$rAF=$$rAF;this.ngModelCtrl=null;this.inputElement=$element[0].querySelector("input");this.inputContainer=$element[0].querySelector(".sg-timepicker-input-container");this.ngInputElement=angular.element(this.inputElement);this.timePane=$element[0].querySelector(".sg-timepicker-time-pane");this.timeButton=$element[0].querySelector(".sg-timepicker-button");this.inputMask=$element[0].querySelector(".sg-timepicker-input-mask-opaque");this.$element=$element;this.$attrs=$attrs;this.$scope=$scope;this.date=null;this.isFocused=false;this.isDisabled=false;this.setDisabled($element[0].disabled||angular.isString($attrs.disabled));this.isTimeOpen=false;this.timePaneOpenedFrom=null;this.timePane.id="sg-time-pane"+$mdUtil.nextUid();$mdTheming($element);this.bodyClickHandler=angular.bind(this,this.handleBodyClick);this.windowResizeHandler=$mdUtil.debounce(angular.bind(this,this.closeTimePane),100);if(!$attrs.tabindex){$element.attr("tabindex","-1")}this.installPropertyInterceptors();this.attachChangeListeners();this.attachInteractionListeners();var self=this;$scope.$on("$destroy",function(){self.detachTimePane()})}TimePickerCtrl.$inject=["$scope","$element","$attrs","$compile","$timeout","$mdConstant","$mdMedia","$mdTheming","$mdUtil","$mdDateLocale","$$mdDateUtil","$$rAF"];TimePickerCtrl.prototype.configureNgModel=function(ngModelCtrl){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.time=self.ngModelCtrl.$viewValue;self.inputElement.value=self.formatTime(self.time);self.resizeInputElement()}};TimePickerCtrl.prototype.formatTime=function(time){var t=new Date(time);if(t){var h=t.getHours();var m=t.getMinutes();return(h<10?"0"+h:h)+":"+(m<10?"0"+m:m)}else return""};TimePickerCtrl.prototype.attachChangeListeners=function(){var self=this;self.$scope.$on("sg-time-pane-change",function(event,data){var time=new Date(data.date);self.ngModelCtrl.$setViewValue(time);self.time=time;self.inputElement.value=self.formatTime(self.time);if(data.changed=="minutes"){self.closeTimePane()}self.resizeInputElement();self.inputContainer.classList.remove(INVALID_CLASS)});self.ngInputElement.on("input",angular.bind(self,self.resizeInputElement));self.ngInputElement.on("input",self.$mdUtil.debounce(self.handleInputEvent,DEFAULT_DEBOUNCE_INTERVAL,self))};TimePickerCtrl.prototype.attachInteractionListeners=function(){var self=this;var $scope=this.$scope;var keyCodes=this.$mdConstant.KEY_CODE;self.ngInputElement.on("keydown",function(event){if(event.altKey&&event.keyCode==keyCodes.DOWN_ARROW){self.openTimePane(event);$scope.$digest()}});$scope.$on("md-time-close",function(){self.closeTimePane()})};TimePickerCtrl.prototype.installPropertyInterceptors=function(){var self=this;if(this.$attrs.ngDisabled){var scope=this.$mdUtil.validateScope(this.$element)?this.$element.scope():null;if(scope){scope.$watch(this.$attrs.ngDisabled,function(isDisabled){self.setDisabled(isDisabled)})}}Object.defineProperty(this,"placeholder",{get:function(){return self.inputElement.placeholder},set:function(value){self.inputElement.placeholder=value||""}})};TimePickerCtrl.prototype.setDisabled=function(isDisabled){this.isDisabled=isDisabled;this.inputElement.disabled=isDisabled;this.timeButton.disabled=isDisabled};TimePickerCtrl.prototype.resizeInputElement=function(){this.inputElement.size=this.inputElement.value.length+EXTRA_INPUT_SIZE};TimePickerCtrl.prototype.handleInputEvent=function(self){var inputString=this.inputElement.value;var arr=inputString.split(":");if(inputString===""){this.ngModelCtrl.$setViewValue(null);this.time=null;this.inputContainer.classList.remove(INVALID_CLASS)}else if(arr.length<2){this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}else{var h=Number(arr[0]);var m=Number(arr[1]);var newVal=new Date(this.time);if(h&&h>=0&&h<=23&&m&&m>=0&&m<=59&&angular.isDate(newVal)){newVal.setHours(h);newVal.setMinutes(m);this.ngModelCtrl.$setViewValue(newVal);this.time=newVal;this.inputContainer.classList.remove(INVALID_CLASS)}else{this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}}};TimePickerCtrl.prototype.attachTimePane=function(){var timePane=this.timePane;this.$element.addClass("sg-timepicker-open");this.$element.find("button").addClass("md-primary");var elementRect=this.inputContainer.getBoundingClientRect();var bodyRect=document.body.getBoundingClientRect();var paneTop=elementRect.top-bodyRect.top;var paneLeft=elementRect.left-bodyRect.left;var paneWidth=this.$mdMedia("sm")?TIME_PANE_WIDTH.SM:TIME_PANE_WIDTH.GTSM;if(paneLeft+paneWidth>bodyRect.right&&bodyRect.right-paneWidth>0){paneLeft=bodyRect.right-paneWidth;timePane.classList.add("sg-timepicker-pos-adjusted")}timePane.style.left=paneLeft+"px";var min=typeof this.time=="object"&&this.time.getMinutes()%5===0?"MIN5":"MIN1";var paneHeight=this.$mdMedia("sm")?TIME_PANE_HEIGHT[min].SM:TIME_PANE_HEIGHT[min].GTSM;if(paneTop+paneHeight>bodyRect.bottom&&bodyRect.bottom-paneHeight>0){paneTop=bodyRect.bottom-paneHeight;timePane.classList.add("sg-timepicker-pos-adjusted")}timePane.style.top=paneTop+"px";document.body.appendChild(this.timePane);this.inputMask.style.left=elementRect.width+"px";this.$$rAF(function(){timePane.classList.add("md-pane-open")})};TimePickerCtrl.prototype.detachTimePane=function(){this.$element.removeClass("sg-timepicker-open");this.$element.find("button").removeClass("md-primary");this.timePane.classList.remove("md-pane-open");this.timePane.classList.remove("md-timepicker-pos-adjusted");if(this.timePane.parentNode){this.timePane.parentNode.removeChild(this.timePane)}};TimePickerCtrl.prototype.openTimePane=function(event){if(!this.isTimeOpen&&!this.isDisabled){this.isTimeOpen=true;this.timePaneOpenedFrom=event.target;this.attachTimePane();this.$mdUtil.disableScrollAround(this.timePane);var self=this;this.$mdUtil.nextTick(function(){document.body.addEventListener("click",self.bodyClickHandler)},false);window.addEventListener("resize",this.windowResizeHandler)}};TimePickerCtrl.prototype.closeTimePane=function(){this.isTimeOpen=false;this.detachTimePane();this.timePaneOpenedFrom.focus();this.timePaneOpenedFrom=null;this.$mdUtil.enableScrolling();document.body.removeEventListener("click",this.bodyClickHandler);window.removeEventListener("resize",this.windowResizeHandler)};TimePickerCtrl.prototype.getTimePaneCtrl=function(){return angular.element(this.timePane.querySelector("sg-time-pane")).controller("sgTimePane")};TimePickerCtrl.prototype.focusTime=function(){var self=this;this.$mdUtil.nextTick(function(){var ctrl=self.getTimePaneCtrl();self.getTimePaneCtrl().focus(null,ctrl)},false)};TimePickerCtrl.prototype.setFocused=function(isFocused){this.isFocused=isFocused};TimePickerCtrl.prototype.handleBodyClick=function(event){if(this.isTimeOpen){var isInTime=this.$mdUtil.getClosest(event.target,"sg-time-pane");if(!isInTime){this.closeTimePane()}this.$scope.$digest()}}})();(function(){"use strict";sgToggleGrid.$inject=["$parse"];function sgToggleGrid($parse){return{restrict:"A",link:link};function link(scope,iElement,attrs,ctrl){var tiles=iElement.find("md-grid-tile"),tile,i,modelDays,modelAttr,ensureInitRunsOnce,toggleClass;ensureInitRunsOnce=scope.$watch(function(){return $parse(attrs.sgToggleGrid)(scope)},function(days){if(angular.isDefined(days)){var flattenedDays=days;modelDays=days;if(attrs.sgToggleGridAttr){modelAttr=attrs.sgToggleGridAttr;flattenedDays=_.pluck(days,attrs.sgToggleGridAttr)}_.each(tiles,function(o){var tile=angular.element(o);if(_.contains(flattenedDays,tile.attr("value"))){tile.addClass("sg-active")}});ensureInitRunsOnce()}});toggleClass=function(){var tile=angular.element(this),day=tile.attr("value");tile.toggleClass("sg-active");toggle(day)};for(i=0;i>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+this._base64_keyStr.charAt(enc1)+this._base64_keyStr.charAt(enc2)+this._base64_keyStr.charAt(enc3)+this._base64_keyStr.charAt(enc4)}return output};String.prototype.base64decode=function(){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;var input=""+this;while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output};String.prototype.md5=function(){if(!this.length){return}var md5=function(s){function L(k,d){return k<>>32-d}function K(G,k){var I,d,F,H,x;F=G&2147483648;H=k&2147483648;I=G&1073741824;d=k&1073741824;x=(G&1073741823)+(k&1073741823);if(I&d){return x^2147483648^F^H}if(I|d){if(x&1073741824){return x^3221225472^F^H}else{return x^1073741824^F^H}}else{return x^F^H}}function r(d,F,k){return d&F|~d&k}function q(d,F,k){return d&k|F&~k}function p(d,F,k){return d^F^k}function n(d,F,k){return F^(d|~k)}function u(G,F,aa,Z,k,H,I){G=K(G,K(K(r(F,aa,Z),k),I));return K(L(G,H),F)}function f(G,F,aa,Z,k,H,I){G=K(G,K(K(q(F,aa,Z),k),I));return K(L(G,H),F)}function D(G,F,aa,Z,k,H,I){G=K(G,K(K(p(F,aa,Z),k),I));return K(L(G,H),F)}function t(G,F,aa,Z,k,H,I){G=K(G,K(K(n(F,aa,Z),k),I));return K(L(G,H),F)}function e(G){var Z;var F=G.length;var x=F+8;var k=(x-x%64)/64;var I=(k+1)*16;var aa=Array(I-1);var d=0;var H=0;while(H>>29;return aa}function B(x){var k="",F="",G,d;for(d=0;d<=3;d++){G=x>>>d*8&255;F="0"+G.toString(16);k=k+F.substr(F.length-2,2)}return k}function J(k){k=k.replace(/rn/g,"n");var d="";for(var F=0;F127&&x<2048){d+=String.fromCharCode(x>>6|192);d+=String.fromCharCode(x&63|128)}else{d+=String.fromCharCode(x>>12|224);d+=String.fromCharCode(x>>6&63|128);d+=String.fromCharCode(x&63|128)}}}return d}var C=Array();var P,h,E,v,g,Y,X,W,V;var S=7,Q=12,N=17,M=22;var A=5,z=9,y=14,w=20;var o=4,m=11,l=16,j=23;var U=6,T=10,R=15,O=21;s=J(s);C=e(s);Y=1732584193;X=4023233417;W=2562383102;V=271733878;for(P=0;P12){p="pm";i=hours%12}if(minutes<10){m="0"+minutes}newString=newString.replace("%H",hours<10?"0"+hours:hours);newString=newString.replace("%I",i<10?"0"+i:i);newString=newString.replace("%M",m);newString=newString.replace("%p",p);return newString};String.prototype.isValidEmail=function(){var emailRE=/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i;return emailRE.test(this)};String.prototype.asCSSIdentifier=function(){var characters=["_","\\.","#","@","\\*",":",","," ","'","&","\\+"];var escapeds=["_U_","_D_","_H_","_A_","_S_","_C_","_CO_","_SP_","_SQ_","_AM_","_P_"];var newString=this;for(var i=0;iday2){var tmp=day1;day1=day2;day2=tmp}var nbrDays=Math.round((day2-day1)/864e5)+1;for(var i=0;i0)offset-=7;var beginOfWeek=this.beginOfDay();beginOfWeek.setHours(12);beginOfWeek.addDays(offset);return beginOfWeek};Date.prototype.endOfWeek=function(){var endOfWeek=this.beginOfWeek();endOfWeek.addDays(6);endOfWeek.setHours(23);endOfWeek.setMinutes(59);endOfWeek.setSeconds(59);endOfWeek.setMilliseconds(999);return endOfWeek};Date.prototype.getDayString=function(){var newString=this.getYear();if(newString<1e3)newString+=1900;var month=""+(this.getMonth()+1);if(month.length==1)month="0"+month;newString+=month;var day=""+this.getDate();if(day.length==1)day="0"+day;newString+=day;return newString};Date.prototype.getHourString=function(){var newString=this.getHours()+"00";if(newString.length==3)newString="0"+newString;return newString};function l(){var key=arguments[0];var value=key;if(labels[key]){value=labels[key]}else if(clabels[key]){value=clabels[key]}for(var i=1,j=0;i/.test(response.data)){$window.location.reload(true);return $q.reject()}return response}}}ErrorInterceptor.$inject=["$rootScope","$q"];function ErrorInterceptor($rootScope,$q){return{responseError:function(rejection){$rootScope.$broadcast("http:Error",rejection);return $q.reject(rejection)}}}})();(function(){"use strict";var _$mdThemingProvider;angular.module("mdColors",["ngMaterial"]).config(configure).run(runBlock);configure.$inject=["$mdThemingProvider"];function configure($mdThemingProvider){_$mdThemingProvider=$mdThemingProvider}runBlock.$inject=["$interpolate","$document","$log"];function runBlock($interpolate,$document,$log){function buildCssSelectors(selectors){var result=selectors.join("");return result}var fgDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-fg"])+" { color:{{value}};}"),bgDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-bg"])+" { background-color:{{value}};}"),bdrDefault=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-bdr"])+" { border-color:{{value}};}"),fgDefaultHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{hue}}",".md-fg"])+" { color:{{value}};}"),bgDefaultHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{hue}}",".md-bg"])+" { background-color:{{value}};}"),fgColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-fg"])+" { color:{{value}};}"),bgColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-bg"])+" { background-color:{{value}}; color:{{contrast}}; }"),bdrColor=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}",".md-bdr"])+" { border-color:{{value}};}"),fgHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}.md-{{hue}}",".md-fg"])+" { color:{{value}};}"),bgHue=$interpolate(buildCssSelectors([".md-{{theme}}-theme",".md-{{palette}}.md-{{hue}}",".md-bg"])+" { background-color:{{value}};}"),customSheet=getStyleSheet(),index=0;while(customSheet.cssRules.length>0){customSheet.deleteRule(0)}angular.forEach(_$mdThemingProvider._THEMES,function(theme,themeName){addRule(fgDefault,bgDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-2"]],"hue-2");addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-3"]],"hue-3");addRule(fgDefaultHue,bgDefaultHue,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues["hue-1"]],"hue-1");addBorderRule(bdrDefault,themeName,"primary",_$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);angular.forEach(theme.colors,function(color,paletteName){addRule(fgColor,bgColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues.default]);addBorderRule(bdrColor,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues.default]);addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-2"]],"hue-2");addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-3"]],"hue-3");addRule(fgHue,bgHue,themeName,paletteName,_$mdThemingProvider._PALETTES[color.name][color.hues["hue-1"]],"hue-1")})});function addRule(fgInterpolate,bgInterpolate,themeName,paletteName,colorArray,hueName){if(!colorArray)return;var colorValue="rgb("+colorArray.value[0]+","+colorArray.value[1]+","+colorArray.value[2]+")",colorContrast="rgb("+colorArray.contrast[0]+","+colorArray.contrast[1]+","+colorArray.contrast[2]+")",context={theme:themeName,palette:paletteName,value:colorValue,contrast:colorContrast,hue:hueName};customSheet.insertRule(fgInterpolate(context),index);index+=1;customSheet.insertRule(bgInterpolate(context),index);index+=1}function addBorderRule(bdrInterpolate,themeName,paletteName,colorArray,hueName){if(!colorArray)return;var colorValue="rgb("+colorArray.value[0]+","+colorArray.value[1]+","+colorArray.value[2]+")";customSheet.insertRule(bdrInterpolate({theme:themeName,palette:paletteName,value:colorValue,hue:hueName}),index);index+=1}function getStyleSheet(){var style=$document[0].head.querySelector('style[title="Dynamic-Generated-by-mdColors"]');if(style===null){style=$document[0].createElement("style");style.title="Dynamic-Generated-by-mdColors";style.appendChild($document[0].createTextNode(""));$document[0].head.appendChild(style)}return style.sheet}}})();(function(){"use strict";decodeUri.$inject=["$window"];function decodeUri($window){return $window.decodeURIComponent}angular.module("SOGo.Common").filter("decodeUri",decodeUri)})();(function(){"use strict";encodeUri.$inject=["$window"];function encodeUri($window){return $window.encodeURIComponent}angular.module("SOGo.Common").filter("encodeUri",encodeUri)})();(function(){"use strict";ensureTarget.$inject=["$sce"];function ensureTarget($sce){return function(element){var tree=angular.element(""+element+"
");tree.find("a").attr("target","_blank");return $sce.trustAs("html",tree.html())}}angular.module("SOGo.Common").filter("ensureTarget",ensureTarget)})();(function(){"use strict";function loc(){return l}angular.module("SOGo.Common").filter("loc",loc)})();(function(){"use strict";function range(){return function(n){var res=[];for(var i=0;i",' ',' error_outline '," "+l(message)+" ","
",""].join(""),hideDelay:5e3,position:"top right"})}$rootScope.$on("http:Error",onHttpError);Alarm.getAlarms()}angular.module("SOGo.Common").controller("navController",navController)})();(function(){"use strict";function Acl(folderId){this.folderId=folderId}Acl.factory=["$q","$timeout","sgSettings","Resource","User",function($q,$timeout,Settings,Resource,User){angular.extend(Acl,{$q:$q,$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$User:User});return Acl}];angular.module("SOGo.Common").factory("Acl",Acl.factory);Acl.prototype.$users=function(owner){var _this=this,deferred=Acl.$q.defer(),user;if(this.users){deferred.resolve(this.users)}else{var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).fetch(this.folderId,"acls");else acls=Acl.$$resource.fetch(this.folderId,"acls");return acls.then(function(response){_this.users=[];angular.forEach(response.users,function(data){user=new Acl.$User(data);user.canSubscribeUser=user.isSubscribed;user.wasSubscribed=user.isSubscribed;user.$rights=angular.bind(user,user.$acl,_this.folderId,owner);_this.users.push(user)});deferred.resolve(_this.users);return _this.users})}return deferred.promise};Acl.prototype.$addUser=function(user,owner){var _this=this,deferred=Acl.$q.defer(),param={uid:user.uid};if(!user.uid||_.indexOf(_.pluck(this.users,"uid"),user.uid)>-1){deferred.resolve()}else{var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).fetch(this.folderId,"addUserInAcls",param);else acls=Acl.$$resource.fetch(this.folderId,"addUserInAcls",param);acls.then(function(){user.wasSubscribed=false;user.userClass=user.isGroup?"normal-group":"normal-user";user.$rights=angular.bind(user,user.$acl,_this.folderId);_this.users.push(user);deferred.resolve(user)},function(data,status){deferred.reject(l("An error occured please try again."))})}return deferred.promise};Acl.prototype.$removeUser=function(uid){var _this=this,param={uid:uid};return Acl.$$resource.fetch(this.folderId,"removeUserFromAcls",param).then(function(){var i=_.indexOf(_.pluck(_this.users,"uid"),uid);if(i>=0){_this.users.splice(i,1)}})};Acl.prototype.$resetUsersRights=function(){angular.forEach(this.users,function(user){user.$resetRights()})};Acl.prototype.$saveUsersRights=function(owner){var _this=this,deferredSave=Acl.$q.defer(),deferredSubscribe=Acl.$q.defer(),param={action:"saveUserRights"},users=[];angular.forEach(this.users,function(user){if(user.$rightsAreDirty()){users.push(user.$omit())}});if(users.length){var acls;if(angular.isDefined(owner))acls=Acl.$$resource.userResource(owner).save(this.folderId,users,param);else acls=Acl.$$resource.save(this.folderId,users,param);acls.then(function(){angular.forEach(_this.users,function(user){if(user.$rightsAreDirty()){user.$shadowRights=angular.copy(user.rights)}});deferredSave.resolve()},deferredSave.reject)}else{deferredSave.resolve()}users=[];angular.forEach(this.users,function(user){if(!user.wasSubscribed&&user.isSubscribed){users.push(user.uid)}});if(users.length){param={uids:users.join(",")};Acl.$$resource.fetch(this.folderId,"subscribeUsers",param).then(function(){angular.forEach(_this.users,function(user){user.wasSubscribed=user.isSubscribed});deferredSubscribe.resolve()},deferredSubscribe.reject)}else{deferredSubscribe.resolve()}return Acl.$q.all([deferredSave.promise,deferredSubscribe.promise])}})();(function(){"use strict";function Alarm(){this.currentAlarm=null}Alarm.getAlarms=function(){var _this=this;var now=new Date;var browserTime=Math.floor(now.getTime()/1e3);this.$$resource.fetch("","alarmslist?browserTime="+browserTime).then(function(data){var alarms=data.alarms.sort(function reverseSortByAlarmTime(a,b){var x=parseInt(a[2]);var y=parseInt(b[2]);return y-x});if(alarms.length>0){var next=alarms.pop();var now=new Date;var utc=Math.floor(now.getTime()/1e3);var url=next[0]+"/"+next[1];var alarmTime=parseInt(next[2]);var delay=alarmTime;if(alarmTime>0)delay-=utc;var d=new Date(alarmTime*1e3);var f=angular.bind(_this,Alarm.showAlarm,url);if(_this.currentAlarm)_this.$timeout.cancel(_this.currentAlarm);_this.currentAlarm=_this.$timeout(f,delay*1e3)}})};Alarm.showAlarm=function(url){var _this=this;this.$$resource.fetch(url,"?resetAlarm=yes").then(function(data){_this.$toast.show({position:"top right",hideDelay:0,template:["",' '," ",' '+data.summary+" ",' '," ",l("5 minutes")," "," ",l("10 minutes")," "," ",l("15 minutes")," "," ",l("30 minutes")," "," ",l("45 minutes")," "," ",l("1 hour")," "," ",l("1 day")," "," "," ",' ',l("Cancel")," ",' ',l("Ok")," ","
"," "].join(""),locals:{url:url},controller:AlarmController});AlarmController.$inject=["scope","$mdToast","url"];function AlarmController(scope,$mdToast,url){scope.reminder="10";scope.cancel=function(){$mdToast.hide()};scope.ok=function(){_this.$$resource.fetch(url,"view?snoozeAlarm="+scope.reminder);$mdToast.hide()}}})};AlarmService.$inject=["$timeout","sgSettings","Resource","$mdToast"];function AlarmService($timeout,Settings,Resource,$mdToast){angular.extend(Alarm,{$timeout:$timeout,$$resource:new Resource(Settings.activeUser("folderURL")+"Calendar",Settings.activeUser()),$toast:$mdToast});return Alarm}angular.module("SOGo.Common").factory("Alarm",AlarmService)})();(function(){"use strict";angular.module("SOGo.Authentication",[]).constant("passwordPolicyConfig",{PolicyPasswordChangeUnsupported:-3,PolicyPasswordSystemUnknown:-2,PolicyPasswordUnknown:-1,PolicyPasswordExpired:0,PolicyAccountLocked:1,PolicyChangeAfterReset:2,PolicyPasswordModNotAllowed:3,PolicyMustSupplyOldPassword:4,PolicyInsufficientPasswordQuality:5,PolicyPasswordTooShort:6,PolicyPasswordTooYoung:7,PolicyPasswordInHistory:8,PolicyNoError:65535}).provider("Authentication",Authentication);function Authentication(){function readCookie(name){var foundCookie,prefix,pairs,i,currentPair,start;foundCookie=null;prefix=name+"=";pairs=document.cookie.split(";");for(i=0;!foundCookie&&i0)currentPair=currentPair.substr(start);if(currentPair.indexOf(prefix)===0)foundCookie=currentPair.substr(prefix.length)}return foundCookie}function readLoginCookie(){var loginValues=null,cookie=readCookie("0xHIGHFLYxSOGo"),value;if(cookie&&cookie.length>8){value=decodeURIComponent(cookie.substr(8));loginValues=value.base64decode().split(":")}return loginValues}function redirectUrl(username,domain){var userName,address,baseAddress,altBaseAddress,parts,hostpart,protocol,newAddress;userName=username;if(domain)userName+="@"+domain.value;address=""+window.location.href;baseAddress=ApplicationBaseURL+"/"+encodeURIComponent(userName);if(baseAddress[0]=="/"){parts=address.split("/");hostpart=parts[2];protocol=parts[0];baseAddress=protocol+"//"+hostpart+baseAddress}parts=baseAddress.split("/");parts.splice(0,3);altBaseAddress=parts.join("/");if((address.startsWith(baseAddress)||address.startsWith(altBaseAddress))&&!address.endsWith("/logoff")){newAddress=address}else{newAddress=baseAddress}return newAddress}this.$get=getService;getService.$inject=["$q","$http","passwordPolicyConfig"];function getService($q,$http,passwordPolicyConfig){var _this=this,service;service={login:function(data){var d=$q.defer(),username=data.username,password=data.password,domain=data.domain,language,rememberLogin=data.rememberLogin?1:0;if(data.loginSuffix&&!username.endsWith(data.loginSuffix)){username+=loginSuffix;domain=false}if(data.language&&data.language!="WONoSelectionString"){language=data.language}$http({method:"POST",url:"/SOGo/connect",data:{userName:username,password:password,domain:domain,language:language,rememberLogin:rememberLogin}}).success(function(data,status){var loginCookie=readLoginCookie();if(!loginCookie){d.reject(l("cookiesNotEnabled"))}else{if(typeof data.expire!="undefined"&&typeof data.grace!="undefined"){if(data.expire<0&&data.grace>0){d.reject({grace:data.grace})}else if(data.expire>0&&data.grace==-1){d.reject({expire:data.expire})}else{d.resolve(redirectUrl(username,domain))}}else{d.resolve(redirectUrl(username,domain))}}}).error(function(data,status){var msg,perr;if(data&&data.LDAPPasswordPolicyError){perr=data.LDAPPasswordPolicyError;if(perr==passwordPolicyConfig.PolicyNoError){msg=l("Wrong username or password.")}else if(perr==passwordPolicyConfig.PolicyAccountLocked){msg=l("Your account was locked due to too many failed attempts.")}else{msg=l("Login failed due to unhandled error case: ")+perr}}else{msg=l("Unhandled error response")}d.reject({error:msg})});return d.promise},changePassword:function(newPassword){var d=$q.defer(),loginCookie=_this.readLoginCookie();$http({method:"POST",url:"/SOGo/so/changePassword",data:{userName:loginCookie[0],password:loginCookie[1],newPassword:newPassword}}).success(function(data,status){d.resolve()}).error(function(data,status){var error,perr=data.LDAPPasswordPolicyError;if(!perr){perr=passwordPolicyConfig.PolicyPasswordSystemUnknown;error=_("Unhandled error response")}else if(perr==passwordPolicyConfig.PolicyNoError){error=l("Password change failed")}else if(perr==passwordPolicyConfig.PolicyPasswordModNotAllowed){error=l("Password change failed - Permission denied")}else if(perr==passwordPolicyConfig.PolicyInsufficientPasswordQuality){error=l("Password change failed - Insufficient password quality")}else if(perr==passwordPolicyConfig.PolicyPasswordTooShort){error=l("Password change failed - Password is too short")}else if(perr==passwordPolicyConfig.PolicyPasswordTooYoung){error=l("Password change failed - Password is too young")}else if(perr==passwordPolicyConfig.PolicyPasswordInHistory){error=l("Password change failed - Password is in history")}else{error=l("Unhandled policy error: %{0}").formatted(perr);perr=passwordPolicyConfig.PolicyPasswordUnknown}d.reject(error)});return d.promise}};return service}}})();(function(){"use strict";function Dialog(){}Dialog.alert=function(title,content){var alert=this.$modal.alert().title(title).textContent(content).ok(l("OK"));this.$modal.show(alert)};Dialog.confirm=function(title,content,options){var confirm=this.$modal.confirm().title(title).textContent(content).ok(options&&options.ok?options.ok:l("OK")).cancel(options&&options.cancel?options.cancel:l("Cancel"));return this.$modal.show(confirm)};Dialog.prompt=function(title,label,options){var o=options||{},d=this.$q.defer();this.$modal.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,template:['',' ',' '," "," "+label+" ",' '," "," "," ",' '," "+l("Cancel")," ",' '," "+l("OK")," "," "," "].join(""),controller:PromptDialogController});PromptDialogController.$inject=["scope","$mdDialog"];function PromptDialogController(scope,$mdDialog){scope.title=title;scope.name="";scope.cancel=function(){d.reject();$mdDialog.hide()};scope.ok=function(){d.resolve(scope.name);$mdDialog.hide()}}return d.promise};DialogService.$inject=["$q","$mdDialog"];function DialogService($q,$mdDialog){angular.extend(Dialog,{$q:$q,$modal:$mdDialog});return Dialog}angular.module("SOGo.Common").factory("Dialog",DialogService)})();(function(){"use strict";function Gravatar(){return function(email,size,alternate_avatar){var x,y,hash,s=size;if(!email){return""}x=email.indexOf("<");if(x>=0){y=email.indexOf(">",x);if(y>x)email=email.substring(x+1,y)}if(!size){s=48}hash=email.md5();if(alternate_avatar=="none")alternate_avatar="404";return"https://www.gravatar.com/avatar/"+hash+"?s="+s+"&d="+alternate_avatar}}angular.module("SOGo.Common").factory("Gravatar",Gravatar)})();(function(){"use strict";function Resource($http,$q,path,activeUser,options){angular.extend(this,{_http:$http,_q:$q,_path:path,_activeUser:activeUser});angular.extend(this,options);this._path=this._path.replace(/\/$/,"")}Resource.$factory=["$http","$q",function($http,$q){return function(path,activeUser,options){return new Resource($http,$q,path,activeUser,options)}}];angular.module("SOGo.Common").factory("Resource",Resource.$factory);Resource.prototype.userResource=function(uid){var path=_.compact(this._activeUser.folderURL.split("/"));path.splice(path.length-1,1,escape(uid));return new Resource(this._http,this._q,"/"+path.join("/"),this._activeUser)};Resource.prototype.fetch=function(folderId,action,params){var deferred=this._q.defer(),path=[this._path];if(folderId)path.push(folderId.split("/"));if(action)path.push(action);path=_.compact(_.flatten(path)).join("/");this._http({method:"GET",url:path,params:params}).success(deferred.resolve).error(function(data,status){if(status==404)return deferred.reject()});return deferred.promise};Resource.prototype.newguid=function(folderId){var deferred=this._q.defer(),path=this._path+"/"+folderId+"/newguid";this._http.get(path).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.create=function(action,name){var deferred=this._q.defer(),path=this._path+"/"+action;this._http.post(path,{name:name}).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.post=function(id,action,data){var deferred=this._q.defer(),path=[this._path];if(id)path.push(id);if(action)path.push(action);path=_.compact(_.flatten(path)).join("/");this._http.post(path,data).success(deferred.resolve).error(deferred.reject);return deferred.promise};Resource.prototype.save=function(id,newValue,options){var deferred=this._q.defer(),action=options&&options.action?options.action:"save";return this.post(id,action,newValue)};Resource.prototype.remove=function(uid){var deferred=this._q.defer(),path=this._path+"/"+uid+"/delete";this._http.get(path).success(deferred.resolve).error(deferred.reject);return deferred.promise}})();(function(){"use strict";function User(userData){if(userData){this.init(userData)}}User.factory=["$q","$log","sgSettings","Resource","Gravatar",function($q,$log,Settings,Resource,Gravatar){angular.extend(User,{$q:$q,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),$gravatar:Gravatar,$query:"",$users:[]});return User}];angular.module("SOGo.Common").factory("User",User.factory);User.$filter=function(search,excludedUsers,options){var _this=this,param={search:search};if(!options||!options.dry){if(!search){User.$users.splice(0,User.$users.length);return User.$q.when(User.$users)}if(User.$query==search){return User.$q.when(User.$users)}User.$query=search}return User.$$resource.fetch(null,"usersSearch",param).then(function(response){var results,index,user,users,compareUids=function(data){return this.uid==data.uid};if(options&&options.dry)users=[];else users=User.$users;if(excludedUsers){results=_.filter(response.users,function(user){return!_.find(excludedUsers,compareUids,user)})}else{results=response.users}for(index=users.length-1;index>=0;index--){user=users[index];if(!_.find(results,compareUids,user)){users.splice(index,1)}}_.each(results,function(data,index){if(_.isUndefined(_.find(users,compareUids,data))){var user=new User(data);users.splice(index,0,user)}});User.$log.debug(users);return users})};User.prototype.init=function(data){angular.extend(this,data);if(!this.$$shortFormat)this.$$shortFormat=this.$shortFormat();if(!this.$$image)this.$$image=this.image||User.$gravatar(this.c_email,32,User.$alternateAvatar);this.empty=" "};User.prototype.$shortFormat=function(options){var fullname=this.cn||this.c_email;var email=this.c_email;var no_email=options&&options.email===false;if(!no_email&&email&&fullname!=email){fullname+=" <"+email+">"}return fullname};User.prototype.$acl=function(folderId,owner){var _this=this,deferred=User.$q.defer(),param={uid:this.uid};if(this.$shadowRights){deferred.resolve(this.rights)}else{var rights;if(angular.isDefined(owner))rights=User.$$resource.userResource(owner).fetch(folderId,"userRights",param);else rights=User.$$resource.fetch(folderId,"userRights",param);rights.then(function(data){_this.rights=data;_this.$shadowRights=angular.copy(data);deferred.resolve(data);return data})}return deferred.promise};User.prototype.$isAnonymous=function(){return this.uid=="anonymous"};User.prototype.$isSpecial=function(){return this.userClass&&this.userClass=="public-user"};User.prototype.$confirmRights=function(){var confirmation=false;if(this.$confirmation){return false}if(_.some(_.values(this.rights))){if(this.uid=="anonymous"){confirmation=l("Potentially anyone on the Internet will be able to access your folder, even if they do not have an account on this system. Is this information suitable for the public Internet?")}else if(this.uid==""){confirmation=l("Any user with an account on this system will be able to access your folder. Are you certain you trust them all?")}}this.$confirmation=confirmation;return confirmation};User.prototype.$rightsAreDirty=function(){return this.rights&&!_.isEqual(this.rights,this.$shadowRights)};User.prototype.$resetRights=function(zero){var _this=this;if(zero){_.map(_.keys(this.rights),function(key){if(angular.isString(_this.rights[key]))_this.rights[key]="None";else _this.rights[key]=0})}else{this.rights=angular.copy(this.$shadowRights)}};User.prototype.$folders=function(type){var _this=this,deferred=User.$q.defer(),param={type:type};if(this.$$folders){deferred.resolve(this.$$folders)}else{User.$$resource.userResource(this.uid).fetch(null,"foldersSearch",param).then(function(response){_this.$$folders=response.folders;deferred.resolve(response.folders)})}return deferred.promise};User.prototype.$omit=function(){var user={};angular.forEach(this,function(value,key){if(key!="constructor"&&key[0]!="$"){user[key]=value}});return user};User.prototype.toString=function(){return"[User "+this.c_email+"]"}})();(function(){"use strict";sgFocus.$inject=["$rootScope","$timeout"];function sgFocus($rootScope,$timeout){return function(name){$timeout(function(){$rootScope.$broadcast("sgFocusOn",name)})}}angular.module("SOGo.Common").factory("sgFocus",sgFocus)})();(function(){"use strict";function sgAvatarImage(){return{restrict:"AE",scope:{size:"@",email:"=sgEmail",src:"=sgSrc"},template:' ',link:link,bindToController:true,controller:"sgAvatarImageController",controllerAs:"vm"}}function link(scope,element,attrs,controller){var el=element[0],className=el.className,imgElement=element.find("img"),img=imgElement[0];if(attrs.size){imgElement.attr("width",attrs.size);imgElement.attr("height",attrs.size)}imgElement.bind("error",function(){controller.insertGenericAvatar(img)})}sgAvatarImageController.$inject=["$scope","$element","Preferences","Gravatar"];
+function sgAvatarImageController($scope,$element,Preferences,Gravatar){var vm=this;$scope.$watch("vm.email",function(email){Preferences.ready().then(function(){var img=$element.find("img")[0];if(!email&&!vm.genericAvatar){vm.insertGenericAvatar(img)}else if(email&&!vm.url){if(vm.genericAvatar){vm.genericAvatar.parentNode.removeChild(vm.genericAvatar);delete vm.genericAvatar;img.classList.remove("ng-hide")}vm.url=Gravatar(email,vm.size,Preferences.defaults.SOGoAlternateAvatar)}})});if("sg-src"in $element[0].attributes){$scope.$watch("vm.src",function(src){if(src){vm.url=src}})}vm.insertGenericAvatar=function(img){var avatar;if(!vm.genericAvatar){avatar=document.createElement("md-icon");avatar.className="material-icons icon-person";img.classList.add("ng-hide");vm.genericAvatar=img.parentNode.insertBefore(avatar,img)}}}angular.module("SOGo.Common").directive("sgAvatarImage",sgAvatarImage).controller("sgAvatarImageController",sgAvatarImageController)})();(function(){"use strict";function sgColorPicker(){return{restrict:"E",require:"ngModel",template:["",' ',' color_lens '," ",' ',' ',' ',' check_box '," "," "," "," "].join(""),replace:true,controller:sgColorPickerController,link:link};function link(scope,iElement,iAttr,ngModelController){ngModelController.$render=function(){scope.sgColor=ngModelController.$viewValue}}}sgColorPickerController.$inject=["$scope","$element","sgColors"];function sgColorPickerController($scope,$element,sgColors){var ngModelController=$element.controller("ngModel");$scope.sgColors=sgColors.selection;$scope.setColor=function(color){$scope.sgColor=color;ngModelController.$setViewValue(color)}}angular.module("SOGo.Common").directive("sgColorPicker",sgColorPicker)})();(function(){"use strict";sgCompile.$inject=["$compile"];function sgCompile($compile){return{restrict:"A",link:sgCompileLink};function sgCompileLink(scope,element,attrs){var ensureCompileRunsOnce=scope.$watch(function(scope){return scope.$eval(attrs.sgCompile)},function(value){element.html(value);$compile(element.contents())(scope);ensureCompileRunsOnce()})}}angular.module("SOGo.Common").directive("sgCompile",sgCompile)})();(function(){"use strict";function sgEnter(){var ENTER_KEY=13;return function(scope,element,attrs){element.bind("keydown keypress",function(event){if(event.which===ENTER_KEY){scope.$apply(attrs.sgEnter);event.preventDefault()}})}}angular.module("SOGo.Common").directive("sgEnter",sgEnter)})();(function(){"use strict";function sgEscape(){var ESCAPE_KEY=27;return function(scope,elem,attrs){elem.bind("keydown",function(event){if(event.keyCode===ESCAPE_KEY){scope.$apply(attrs.sgEscape)}})}}angular.module("SOGo.Common").directive("sgEscape",sgEscape)})();(function(){"use strict";function sgFocusOn(){return function(scope,elem,attr){scope.$on("sgFocusOn",function(e,name){if(name===attr.sgFocusOn){elem[0].focus();elem[0].select()}})}}angular.module("SOGo.Common").directive("sgFocusOn",sgFocusOn)})();(function(){"use strict";function sgFolderStylesheet(){return{restrict:"E",require:"ngModel",scope:{ngModel:"="},replace:true,bindToController:true,controller:sgFolderStylesheetController,controllerAs:"cssCtrl",template:['"].join("")};function sgFolderStylesheetController(){var vm=this;vm.contrast=contrast;function hexToRgb(hex){var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?{r:parseInt(result[1],16),g:parseInt(result[2],16),b:parseInt(result[3],16)}:null}function contrast(hex){var color,c,l=1;color=hexToRgb(hex);if(color){c=[color.r/255,color.g/255,color.b/255];for(var i=0;i.179){return"black"}else{return"white"}}}}angular.module("SOGo.Common").directive("sgFolderStylesheet",sgFolderStylesheet)})();(function(){"use strict";function sgPlaceholder(){return{restrict:"A",scope:{placeholder:"=sgPlaceholder"},link:function(scope,elem,attr){scope.$watch("placeholder",function(){elem[0].placeholder=scope.placeholder})}}}angular.module("SOGo.Common").directive("sgPlaceholder",sgPlaceholder)})();(function(){"use strict";sgSearchPreTransclude.$inject=["$parse"];function sgSearchPreTransclude($parse){return{restrict:"A",controller:"sgSearchController",controllerAs:"$sgSearchController",priority:1001,compile:compile};function compile(tElement,tAttr){var mdInputEl=tElement.find("md-input-container"),inputEl=tElement.find("input"),selectEl=tElement.find("md-select"),buttonEl=tElement.find("md-button");inputEl.attr("ng-model","$sgSearchController.searchText");inputEl.attr("ng-model-options","$sgSearchController.searchTextOptions");inputEl.attr("ng-change","$sgSearchController.onChange()");if(selectEl){selectEl.attr("ng-model","$sgSearchController.searchField");selectEl.attr("ng-change","$sgSearchController.onChange()")}if(buttonEl&&buttonEl.attr("sg-search-cancel")){buttonEl.attr("ng-click",buttonEl.attr("sg-search-cancel"));buttonEl.removeAttr("sg-search-cancel")}else{buttonEl=null}return function postLink(scope,iElement,iAttr,controller){var compiledButtonEl=iElement.find("button");controller.doSearch=$parse(iElement.attr("sg-search"));if(buttonEl&&compiledButtonEl){compiledButtonEl.on("click",controller.cancelSearch)}}}}function sgSearch(){return{restrict:"A",priority:1e3,transclude:true,compile:compile};function compile(tElement,tAttr){return function postLink(scope,iElement,iAttr,controller,transclude){transclude(function(clone){iElement.append(clone)})}}}sgSearchController.$inject=["$scope","$element"];function sgSearchController($scope,$element){var vm=this;vm.previous={searchText:"",searchField:""};vm.searchText=null;vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}};vm.onChange=function(){if(typeof vm.searchText!=="undefined"&&vm.searchText!==null){if(vm.searchText!=vm.previous.searchText||vm.searchField!=vm.previous.searchField){if(vm.searchText.length>2||vm.searchText.length===0||vm.searchText=="."){vm.doSearch($scope,{searchText:vm.searchText,searchField:vm.searchField})}vm.previous={searchText:vm.searchText,searchField:vm.searchField}}}};vm.cancelSearch=function(){vm.searchText=""}}angular.module("SOGo.Common").controller("sgSearchController",sgSearchController).directive("sgSearch",sgSearchPreTransclude).directive("sgSearch",sgSearch)})();(function(){"use strict";sgSubscribe.$inject=["User"];function sgSubscribe(User){return{restrict:"A",scope:{folderType:"@sgSubscribe",onFolderSelect:"&sgSubscribeOnSelect"},replace:false,bindToController:true,controller:sgSubscribeDialogController,controllerAs:"$sgSubscribeDialogController",link:link}}function link(scope,element,attrs,controller){var inputEl=element.find("input");element.on("click",controller.showDialog)}sgSubscribeDialogController.$inject=["$mdDialog"];function sgSubscribeDialogController($mdDialog){var vm=this;vm.showDialog=function(){$mdDialog.show({templateUrl:"../Contacts/UIxContactsUserFolders",clickOutsideToClose:true,locals:{folderType:vm.folderType,onFolderSelect:vm.onFolderSelect},controller:sgSubscribeController,controllerAs:"subscribe"})}}sgSubscribeController.$inject=["$mdDialog","folderType","onFolderSelect","User"];function sgSubscribeController($mdDialog,folderType,onFolderSelect,User){var vm=this;vm.selectedUser=null;vm.users=User.$users;vm.searchTextOptions={updateOn:"default blur",debounce:{"default":300,blur:0}};vm.onChange=function(){User.$filter(vm.searchText).then(function(){if(vm.selectedUser){if(_.isUndefined(_.find(User.$users,function(user){return user.uid==vm.selectedUser.uid}))){vm.selectedUser=null}}})};vm.selectUser=function(i){if(vm.selectedUser==vm.users[i]){vm.selectedUser=null}else{vm.users[i].$folders(folderType).then(function(){vm.selectedUser=vm.users[i]})}};vm.selectFolder=function(folder){onFolderSelect({folderData:folder})};vm.close=function(){$mdDialog.hide()}}angular.module("SOGo.Common").directive("sgSubscribe",sgSubscribe)})();(function(){"use strict";angular.module("SOGo.Common").directive("sgTimePane",timePaneDirective);function timePaneDirective(){return{template:['','
','
','
',' {{hour.displayName}} ',"
","
","
",'
','
','
',' {{minute.displayName}} ',"
","
","
",'
",'
',' ',"
","
"].join(""),scope:{},require:["ngModel","sgTimePane"],controller:TimePaneCtrl,controllerAs:"ctrl",bindToController:true,link:function(scope,element,attrs,controllers){var ngModelCtrl=controllers[0];var sgTimePaneCtrl=controllers[1];var timePaneElement=element;sgTimePaneCtrl.configureNgModel(ngModelCtrl,sgTimePaneCtrl,timePaneElement)}}}var SELECTED_TIME_CLASS="md-bg";var FOCUSED_TIME_CLASS="md-focus";var nextTimePaneUniqueId=0;function TimePaneCtrl($element,$attrs,$scope,$animate,$q,$mdConstant,$mdTheming,$$mdDateUtil,$mdDateLocale,$mdInkRipple,$mdUtil){var m;this.$scope=$scope;this.$element=$element;this.timePaneElement=$element[0].querySelector(".sg-time-pane");this.$animate=$animate;this.$q=$q;this.$mdInkRipple=$mdInkRipple;this.$mdUtil=$mdUtil;this.keyCode=$mdConstant.KEY_CODE;this.dateUtil=$$mdDateUtil;this.id=nextTimePaneUniqueId++;this.ngModelCtrl=null;this.selectedTime=null;this.displayTime=null;this.isInitialized=false;$scope.hours=[];$scope.hours[0]=[];$scope.hours[0][0]=[];$scope.hours[0][1]=[];$scope.hours[1]=[];$scope.hours[1][0]=[];$scope.hours[1][1]=[];for(var i=0;i<6;i++){$scope.hours[0][0][i]={id:"tp-"+this.id+"-hour-"+i,displayName:i<10?"0"+i:""+i,selected:false};$scope.hours[0][1][i]={id:"tp-"+this.id+"-hour-"+(i+6),displayName:i+6<10?"0"+(i+6):""+(i+6),selected:false};$scope.hours[1][0][i]={id:"tp-"+this.id+"-hour-"+(i+12),displayName:""+(i+12),selected:false};$scope.hours[1][1][i]={id:"tp-"+this.id+"-hour-"+(i+18),displayName:""+(i+18),selected:false}}$scope.min5=[];$scope.min5[0]=[];$scope.min5[1]=[];for(i=0;i<6;i++){m=i*5;$scope.min5[0][i]={id:"tp-"+this.id+"-minute5-"+m,displayName:m<10?":0"+m:":"+m,selected:true};$scope.min5[1][i]={id:"tp-"+this.id+"-minute5-"+(m+30),displayName:":"+(m+30),selected:false}}$scope.min1=[];for(i=0;i<12;i++){$scope.min1[i]=[];for(var ii=0;ii<5;ii++){m=i*5+ii;$scope.min1[i][ii]={id:"tp-"+this.id+"-minute-"+m,displayName:m<10?":0"+m:":"+m,selected:true}}}$scope.show5min=true;$scope.getToggleBtnLbl=function(){return $scope.is5min()?">>":"<<"};$scope.toggleManual5min=function(){$scope.manual5min=!$scope.is5min()};$scope.is5min=function(){if($scope.manual5min===true||$scope.manual5min===false){return $scope.manual5min}else{return $scope.show5min}};if(!$attrs.tabindex){$element.attr("tabindex","-1")}var self=this;this.hourClickHandler=function(displayVal){var updated=new Date(self.displayTime);updated.setHours(Number(displayVal));self.setNgModelValue(updated,"hours")};$scope.hourClickHandler=this.hourClickHandler;this.minuteClickHandler=function(displayVal){var val=displayVal.substr(1);var updated=new Date(self.displayTime);updated.setMinutes(Number(val));self.setNgModelValue(updated,"minutes")};$scope.minuteClickHandler=this.minuteClickHandler;this.attachTimePaneEventListeners()}TimePaneCtrl.$inject=["$element","$attrs","$scope","$animate","$q","$mdConstant","$mdTheming","$$mdDateUtil","$mdDateLocale","$mdInkRipple","$mdUtil"];TimePaneCtrl.prototype.configureNgModel=function(ngModelCtrl,sgTimePaneCtrl,timePaneElement){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.changeSelectedTime(self.ngModelCtrl.$viewValue,sgTimePaneCtrl,timePaneElement)}};TimePaneCtrl.prototype.changeSelectedTime=function(date,sgTimePaneCtrl,timePaneElement){var self=this;var previousSelectedTime=this.selectedTime;this.selectedTime=date;this.changeDisplayTime(date).then(function(){if(previousSelectedTime){var prevH=previousSelectedTime.getHours();var prevHCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+prevH);if(prevHCell){prevHCell.classList.remove(SELECTED_TIME_CLASS);prevHCell.setAttribute("aria-selected","false")}var prevM=previousSelectedTime.getMinutes();var prevMCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+prevM);if(prevMCell){prevMCell.classList.remove(SELECTED_TIME_CLASS);prevMCell.setAttribute("aria-selected","false")}var prevM5Cell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+prevM);if(prevM5Cell){prevM5Cell.classList.remove(SELECTED_TIME_CLASS);prevM5Cell.setAttribute("aria-selected","false")}}if(date){var newH=date.getHours();var mCell,hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);if(hCell){hCell.classList.add(SELECTED_TIME_CLASS);hCell.setAttribute("aria-selected","true")}var newM=date.getMinutes();if(newM%5===0){sgTimePaneCtrl.$scope.show5min=true;mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute5-"+newM);if(mCell){mCell.classList.add(SELECTED_TIME_CLASS);mCell.setAttribute("aria-selected","true")}}else{sgTimePaneCtrl.$scope.show5min=false}mCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-minute-"+newM);if(mCell){mCell.classList.add(SELECTED_TIME_CLASS);mCell.setAttribute("aria-selected","true")}}})};TimePaneCtrl.prototype.changeDisplayTime=function(date){var d=new Date(date);if(!this.isInitialized){this.buildInitialTimePaneDisplay();return this.$q.when()}if(!this.dateUtil.isValidDate(d)){return this.$q.when()}this.displayTime=d;return this.$q.when()};TimePaneCtrl.prototype.buildInitialTimePaneDisplay=function(){this.displayTime=this.selectedTime||this.today;this.isInitialized=true};TimePaneCtrl.prototype.attachTimePaneEventListeners=function(){this.$element.on("keydown",angular.bind(this,this.handleKeyEvent))};TimePaneCtrl.prototype.handleKeyEvent=function(event){var self=this;this.$scope.$apply(function(){if(event.which==self.keyCode.ESCAPE||event.which==self.keyCode.TAB){self.$scope.$emit("md-time-pane-close");if(event.which==self.keyCode.TAB){event.preventDefault()}return}if(event.which===self.keyCode.ENTER){self.setNgModelValue(self.displayTime,"enter");event.preventDefault();return}})};TimePaneCtrl.prototype.setNgModelValue=function(date,mode){this.$scope.$emit("sg-time-pane-change",{date:date,changed:mode});this.ngModelCtrl.$setViewValue(date);this.ngModelCtrl.$render()};TimePaneCtrl.prototype.focus=function(opt_date,sgTimePaneCtrl){var date=opt_date||this.selectedTime||this.today;var previousFocus=this.timePaneElement.querySelector(".md-focus");if(previousFocus){previousFocus.classList.remove(FOCUSED_TIME_CLASS)}if(date){var newH=date.getHours();var hCell=document.getElementById("tp-"+sgTimePaneCtrl.id+"-hour-"+newH);if(hCell){hCell.classList.add(FOCUSED_TIME_CLASS);hCell.focus()}}}})();(function(){"use strict";angular.module("SOGo.Common").directive("sgTimepicker",timePickerDirective);function timePickerDirective(){return{template:[''," access_time "," ",'",'"].join(""),require:["ngModel","sgTimepicker"],scope:{placeholder:"@mdPlaceholder"},controller:TimePickerCtrl,controllerAs:"ctrl",bindToController:true,link:function(scope,element,attr,controllers){var ngModelCtrl=controllers[0];var mdTimePickerCtrl=controllers[1];mdTimePickerCtrl.configureNgModel(ngModelCtrl)}}}var EXTRA_INPUT_SIZE=3;var INVALID_CLASS="sg-timepicker-invalid";var DEFAULT_DEBOUNCE_INTERVAL=500;var TIME_PANE_HEIGHT={MIN5:{GTSM:172+20,SM:292+20},MIN1:{GTSM:364+20,SM:454+20}};var TIME_PANE_WIDTH={GTSM:510+20,SM:272+20};function TimePickerCtrl($scope,$element,$attrs,$compile,$timeout,$mdConstant,$mdMedia,$mdTheming,$mdUtil,$mdDateLocale,$$mdDateUtil,$$rAF){this.$compile=$compile;this.$timeout=$timeout;this.dateLocale=$mdDateLocale;this.dateUtil=$$mdDateUtil;this.$mdConstant=$mdConstant;this.$mdMedia=$mdMedia;this.$mdUtil=$mdUtil;this.$$rAF=$$rAF;this.ngModelCtrl=null;this.inputElement=$element[0].querySelector("input");this.inputContainer=$element[0].querySelector(".sg-timepicker-input-container");this.ngInputElement=angular.element(this.inputElement);this.timePane=$element[0].querySelector(".sg-timepicker-time-pane");this.timeButton=$element[0].querySelector(".sg-timepicker-button");this.inputMask=$element[0].querySelector(".sg-timepicker-input-mask-opaque");this.$element=$element;this.$attrs=$attrs;this.$scope=$scope;this.date=null;this.isFocused=false;this.isDisabled=false;this.setDisabled($element[0].disabled||angular.isString($attrs.disabled));this.isTimeOpen=false;this.timePaneOpenedFrom=null;this.timePane.id="sg-time-pane"+$mdUtil.nextUid();$mdTheming($element);this.bodyClickHandler=angular.bind(this,this.handleBodyClick);this.windowResizeHandler=$mdUtil.debounce(angular.bind(this,this.closeTimePane),100);if(!$attrs.tabindex){$element.attr("tabindex","-1")}this.installPropertyInterceptors();this.attachChangeListeners();this.attachInteractionListeners();var self=this;$scope.$on("$destroy",function(){self.detachTimePane()})}TimePickerCtrl.$inject=["$scope","$element","$attrs","$compile","$timeout","$mdConstant","$mdMedia","$mdTheming","$mdUtil","$mdDateLocale","$$mdDateUtil","$$rAF"];TimePickerCtrl.prototype.configureNgModel=function(ngModelCtrl){this.ngModelCtrl=ngModelCtrl;var self=this;ngModelCtrl.$render=function(){self.time=self.ngModelCtrl.$viewValue;self.inputElement.value=self.formatTime(self.time);self.resizeInputElement()}};TimePickerCtrl.prototype.formatTime=function(time){var t=new Date(time);if(t){var h=t.getHours();var m=t.getMinutes();return(h<10?"0"+h:h)+":"+(m<10?"0"+m:m)}else return""};TimePickerCtrl.prototype.attachChangeListeners=function(){var self=this;self.$scope.$on("sg-time-pane-change",function(event,data){var time=new Date(data.date);self.ngModelCtrl.$setViewValue(time);self.time=time;self.inputElement.value=self.formatTime(self.time);if(data.changed=="minutes"){self.closeTimePane()}self.resizeInputElement();self.inputContainer.classList.remove(INVALID_CLASS)});self.ngInputElement.on("input",angular.bind(self,self.resizeInputElement));self.ngInputElement.on("input",self.$mdUtil.debounce(self.handleInputEvent,DEFAULT_DEBOUNCE_INTERVAL,self))};TimePickerCtrl.prototype.attachInteractionListeners=function(){var self=this;var $scope=this.$scope;var keyCodes=this.$mdConstant.KEY_CODE;self.ngInputElement.on("keydown",function(event){if(event.altKey&&event.keyCode==keyCodes.DOWN_ARROW){self.openTimePane(event);$scope.$digest()}});$scope.$on("md-time-close",function(){self.closeTimePane()})};TimePickerCtrl.prototype.installPropertyInterceptors=function(){var self=this;if(this.$attrs.ngDisabled){var scope=this.$mdUtil.validateScope(this.$element)?this.$element.scope():null;if(scope){scope.$watch(this.$attrs.ngDisabled,function(isDisabled){self.setDisabled(isDisabled)})}}Object.defineProperty(this,"placeholder",{get:function(){return self.inputElement.placeholder},set:function(value){self.inputElement.placeholder=value||""}})};TimePickerCtrl.prototype.setDisabled=function(isDisabled){this.isDisabled=isDisabled;this.inputElement.disabled=isDisabled;this.timeButton.disabled=isDisabled};TimePickerCtrl.prototype.resizeInputElement=function(){this.inputElement.size=this.inputElement.value.length+EXTRA_INPUT_SIZE};TimePickerCtrl.prototype.handleInputEvent=function(self){var inputString=this.inputElement.value;var arr=inputString.split(":");if(inputString===""){this.ngModelCtrl.$setViewValue(null);this.time=null;this.inputContainer.classList.remove(INVALID_CLASS)}else if(arr.length<2){this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}else{var h=Number(arr[0]);var m=Number(arr[1]);var newVal=new Date(this.time);if(h&&h>=0&&h<=23&&m&&m>=0&&m<=59&&angular.isDate(newVal)){newVal.setHours(h);newVal.setMinutes(m);this.ngModelCtrl.$setViewValue(newVal);this.time=newVal;this.inputContainer.classList.remove(INVALID_CLASS)}else{this.inputContainer.classList.toggle(INVALID_CLASS,inputString)}}};TimePickerCtrl.prototype.attachTimePane=function(){var timePane=this.timePane;this.$element.addClass("sg-timepicker-open");this.$element.find("button").addClass("md-primary");var elementRect=this.inputContainer.getBoundingClientRect();var bodyRect=document.body.getBoundingClientRect();var paneTop=elementRect.top-bodyRect.top;var paneLeft=elementRect.left-bodyRect.left;var paneWidth=this.$mdMedia("sm")?TIME_PANE_WIDTH.SM:TIME_PANE_WIDTH.GTSM;if(paneLeft+paneWidth>bodyRect.right&&bodyRect.right-paneWidth>0){paneLeft=bodyRect.right-paneWidth;timePane.classList.add("sg-timepicker-pos-adjusted")}timePane.style.left=paneLeft+"px";var min=typeof this.time=="object"&&this.time.getMinutes()%5===0?"MIN5":"MIN1";var paneHeight=this.$mdMedia("sm")?TIME_PANE_HEIGHT[min].SM:TIME_PANE_HEIGHT[min].GTSM;if(paneTop+paneHeight>bodyRect.bottom&&bodyRect.bottom-paneHeight>0){paneTop=bodyRect.bottom-paneHeight;timePane.classList.add("sg-timepicker-pos-adjusted")}timePane.style.top=paneTop+"px";document.body.appendChild(this.timePane);this.inputMask.style.left=elementRect.width+"px";this.$$rAF(function(){timePane.classList.add("md-pane-open")})};TimePickerCtrl.prototype.detachTimePane=function(){this.$element.removeClass("sg-timepicker-open");this.$element.find("button").removeClass("md-primary");this.timePane.classList.remove("md-pane-open");this.timePane.classList.remove("md-timepicker-pos-adjusted");if(this.timePane.parentNode){this.timePane.parentNode.removeChild(this.timePane)}};TimePickerCtrl.prototype.openTimePane=function(event){if(!this.isTimeOpen&&!this.isDisabled){this.isTimeOpen=true;this.timePaneOpenedFrom=event.target;this.attachTimePane();this.$mdUtil.disableScrollAround(this.timePane);var self=this;this.$mdUtil.nextTick(function(){document.body.addEventListener("click",self.bodyClickHandler)},false);window.addEventListener("resize",this.windowResizeHandler)}};TimePickerCtrl.prototype.closeTimePane=function(){this.isTimeOpen=false;this.detachTimePane();this.timePaneOpenedFrom.focus();this.timePaneOpenedFrom=null;this.$mdUtil.enableScrolling();document.body.removeEventListener("click",this.bodyClickHandler);window.removeEventListener("resize",this.windowResizeHandler)};TimePickerCtrl.prototype.getTimePaneCtrl=function(){return angular.element(this.timePane.querySelector("sg-time-pane")).controller("sgTimePane")};TimePickerCtrl.prototype.focusTime=function(){var self=this;this.$mdUtil.nextTick(function(){var ctrl=self.getTimePaneCtrl();self.getTimePaneCtrl().focus(null,ctrl)},false)};TimePickerCtrl.prototype.setFocused=function(isFocused){this.isFocused=isFocused};TimePickerCtrl.prototype.handleBodyClick=function(event){if(this.isTimeOpen){var isInTime=this.$mdUtil.getClosest(event.target,"sg-time-pane");if(!isInTime){this.closeTimePane()}this.$scope.$digest()}}})();(function(){"use strict";sgToggleGrid.$inject=["$parse"];function sgToggleGrid($parse){return{restrict:"A",link:link};function link(scope,iElement,attrs,ctrl){var tiles=iElement.find("md-grid-tile"),tile,i,modelDays,modelAttr,ensureInitRunsOnce,toggleClass;ensureInitRunsOnce=scope.$watch(function(){return $parse(attrs.sgToggleGrid)(scope)},function(days){if(angular.isDefined(days)){var flattenedDays=days;modelDays=days;if(attrs.sgToggleGridAttr){modelAttr=attrs.sgToggleGridAttr;flattenedDays=_.pluck(days,attrs.sgToggleGridAttr)}_.each(tiles,function(o){var tile=angular.element(o);if(_.contains(flattenedDays,tile.attr("value"))){tile.addClass("sg-active")}});ensureInitRunsOnce()}});toggleClass=function(){var tile=angular.element(this),day=tile.attr("value");tile.toggleClass("sg-active");toggle(day)};for(i=0;i>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+this._base64_keyStr.charAt(enc1)+this._base64_keyStr.charAt(enc2)+this._base64_keyStr.charAt(enc3)+this._base64_keyStr.charAt(enc4)}return output};String.prototype.base64decode=function(){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;var input=""+this;while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output};String.prototype.md5=function(){if(!this.length){return}var md5=function(s){function L(k,d){return k<>>32-d}function K(G,k){var I,d,F,H,x;F=G&2147483648;H=k&2147483648;I=G&1073741824;d=k&1073741824;x=(G&1073741823)+(k&1073741823);if(I&d){return x^2147483648^F^H}if(I|d){if(x&1073741824){return x^3221225472^F^H}else{return x^1073741824^F^H}}else{return x^F^H}}function r(d,F,k){return d&F|~d&k}function q(d,F,k){return d&k|F&~k}function p(d,F,k){return d^F^k}function n(d,F,k){return F^(d|~k)}function u(G,F,aa,Z,k,H,I){G=K(G,K(K(r(F,aa,Z),k),I));return K(L(G,H),F)}function f(G,F,aa,Z,k,H,I){G=K(G,K(K(q(F,aa,Z),k),I));return K(L(G,H),F)}function D(G,F,aa,Z,k,H,I){G=K(G,K(K(p(F,aa,Z),k),I));return K(L(G,H),F)}function t(G,F,aa,Z,k,H,I){G=K(G,K(K(n(F,aa,Z),k),I));return K(L(G,H),F)}function e(G){var Z;var F=G.length;var x=F+8;var k=(x-x%64)/64;var I=(k+1)*16;var aa=Array(I-1);var d=0;var H=0;while(H>>29;return aa}function B(x){var k="",F="",G,d;for(d=0;d<=3;d++){G=x>>>d*8&255;F="0"+G.toString(16);k=k+F.substr(F.length-2,2)}return k}function J(k){k=k.replace(/rn/g,"n");var d="";for(var F=0;F127&&x<2048){d+=String.fromCharCode(x>>6|192);d+=String.fromCharCode(x&63|128)}else{d+=String.fromCharCode(x>>12|224);d+=String.fromCharCode(x>>6&63|128);d+=String.fromCharCode(x&63|128)}}}return d}var C=Array();var P,h,E,v,g,Y,X,W,V;var S=7,Q=12,N=17,M=22;var A=5,z=9,y=14,w=20;var o=4,m=11,l=16,j=23;var U=6,T=10,R=15,O=21;s=J(s);C=e(s);Y=1732584193;X=4023233417;W=2562383102;V=271733878;for(P=0;P12){p="pm";i=hours%12}if(minutes<10){m="0"+minutes}newString=newString.replace("%H",hours<10?"0"+hours:hours);newString=newString.replace("%I",i<10?"0"+i:i);newString=newString.replace("%M",m);newString=newString.replace("%p",p);return newString};String.prototype.isValidEmail=function(){var emailRE=/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i;return emailRE.test(this)};String.prototype.asCSSIdentifier=function(){var characters=["_","\\.","#","@","\\*",":",","," ","'","&","\\+"];var escapeds=["_U_","_D_","_H_","_A_","_S_","_C_","_CO_","_SP_","_SQ_","_AM_","_P_"];var newString=this;for(var i=0;iday2){var tmp=day1;day1=day2;day2=tmp}var nbrDays=Math.round((day2-day1)/864e5)+1;for(var i=0;i0)offset-=7;var beginOfWeek=this.beginOfDay();beginOfWeek.setHours(12);beginOfWeek.addDays(offset);return beginOfWeek};Date.prototype.endOfWeek=function(){var endOfWeek=this.beginOfWeek();endOfWeek.addDays(6);endOfWeek.setHours(23);endOfWeek.setMinutes(59);endOfWeek.setSeconds(59);endOfWeek.setMilliseconds(999);return endOfWeek};Date.prototype.getDayString=function(){var newString=this.getYear();if(newString<1e3)newString+=1900;var month=""+(this.getMonth()+1);if(month.length==1)month="0"+month;newString+=month;var day=""+this.getDate();if(day.length==1)day="0"+day;newString+=day;return newString};Date.prototype.getHourString=function(){var newString=this.getHours()+"00";if(newString.length==3)newString="0"+newString;return newString};function l(){var key=arguments[0];var value=key;if(labels[key]){value=labels[key]}else if(clabels[key]){value=clabels[key]}for(var i=1,j=0;i "}},resolve:{stateCard:stateCard}}).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"}}});$urlRouterProvider.otherwise("/addressbooks/personal")}stateAddressbooks.$inject=["AddressBook"];function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}stateAddressbook.$inject=["$stateParams","stateAddressbooks","AddressBook"];function stateAddressbook($stateParams,stateAddressbooks,AddressBook){var addressbook=_.find(stateAddressbooks,function(addressbook){return addressbook.id==$stateParams.addressbookId});addressbook.$reload();return addressbook}stateNewCard.$inject=["$stateParams","stateAddressbook","Card"];function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});stateAddressbook.selectedCard=true;return card}stateCard.$inject=["$stateParams","stateAddressbook"];function stateCard($stateParams,stateAddressbook){stateAddressbook.selectedCard=$stateParams.cardId;return stateAddressbook.$getCard($stateParams.cardId)}runBlock.$inject=["$rootScope","$log","$state"];function runBlock($rootScope,$log,$state){$rootScope.$on("$stateChangeError",function(event,toState,toParams,fromState,fromParams,error){$log.error(error);$state.go("app")});$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){$log.error(event,current,previous,rejection)})}})();(function(){"use strict";AddressBookController.$inject=["$scope","$q","$state","$timeout","$mdDialog","Account","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"];function AddressBookController($scope,$q,$state,$timeout,$mdDialog,Account,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){var vm=this;AddressBook.selectedFolder=stateAddressbook;vm.service=AddressBook;vm.selectedFolder=stateAddressbook;vm.selectCard=selectCard;vm.toggleCardSelection=toggleCardSelection;vm.newComponent=newComponent;vm.notSelectedComponent=notSelectedComponent;vm.unselectCards=unselectCards;vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards;vm.saveSelectedCards=saveSelectedCards;vm.copySelectedCards=copySelectedCards;vm.selectAll=selectAll;vm.sort=sort;vm.sortedBy=sortedBy;vm.cancelSearch=cancelSearch;vm.newMessage=newMessage;vm.newMessageWithSelectedCards=newMessageWithSelectedCards;vm.newMessageWithRecipient=newMessageWithRecipient;vm.mode={search:false};function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function toggleCardSelection($event,card){card.selected=!card.selected;$event.preventDefault();$event.stopPropagation()}function newComponent(ev){$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:true,escapeToClose:true,template:[''," ",' '," "," "+l("Contact")," "," "," "+l("List")," ","
"," "," "].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController});ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"];function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide();$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=false})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards);delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});var selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function copySelectedCards(folder){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$copyCards(selectedCards,folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=true})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return AddressBook.$query.sort==field}function cancelSearch(){vm.mode.search=false;vm.selectedFolder.$filter("")}function newMessage($event,recipients){Account.$findAll().then(function(accounts){var account=_.filter(accounts,function(o){if(o.id===0)return o})[0];account.$getMailboxes().then(function(mailboxes){account.$newMessage().then(function(message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:false,escapeToClose:false,templateUrl:"../Mail/UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:accounts,stateMessage:message,stateRecipients:recipients}})})})})}function newMessageWithRecipient($event,recipient,fn){var recipients=[{full:fn+" <"+recipient+">"}];vm.newMessage($event,recipients);$event.stopPropagation();$event.preventDefault()}function newMessageWithSelectedCards($event){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});var promises=[],recipients=[];_.each(selectedCards,function(card){if(card.c_component=="vcard"&&card.c_mail.length){recipients.push({full:card.c_cn+" <"+card.c_mail+">"})}else if(card.c_component=="vlist"){if(angular.isDefined(card.refs)&&card.refs.length){_.each(card.refs,function(ref){if(ref.email.length)recipients.push({full:ref.c_cn+" <"+ref.email+">"})})}else{promises.push(vm.selectedFolder.$getCard(card.id).then(function(card){return card.$futureCardData.then(function(data){_.each(data.refs,function(ref){if(ref.email.length)recipients.push({full:ref.c_cn+" <"+ref.email+">"})})})}))}}});$q.all(promises).then(function(){if(recipients.length)vm.newMessage($event,recipients)})}}angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)})();(function(){"use strict";AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","$mdToast","$mdMedia","$mdSidenav","FileUploader","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"];function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,$mdToast,$mdMedia,$mdSidenav,FileUploader,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){var vm=this;vm.activeUser=Settings.activeUser;vm.service=AddressBook;vm.select=select;vm.newAddressbook=newAddressbook;vm.edit=edit;vm.revertEditing=revertEditing;vm.save=save;vm.confirmDelete=confirmDelete;vm.importCards=importCards;vm.exportCards=exportCards;vm.showLinks=showLinks;vm.showProperties=showProperties;vm.share=share;vm.subscribeToFolder=subscribeToFolder;function select($event,folder){if($state.params.addressbookId!=folder.id&&vm.editMode!=folder.id){vm.editMode=false;AddressBook.$query.value="";if($mdMedia("sm"))$mdSidenav("left").close();$state.go("app.addressbook",{addressbookId:folder.id})}else{$event.preventDefault();$event.stopPropagation()}}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:true,isRemote:false,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){if(!folder.isRemote){vm.editMode=folder.id;vm.originalAddressbook=angular.extend({},folder.$omit());focus("addressBookName_"+folder.id)}}function revertEditing(folder){folder.name=vm.originalAddressbook.name;vm.editMode=false}function save(folder){var name=folder.name;if(name&&name.length>0&&name!=vm.originalAddressbook.name){folder.$rename(name).then(function(data){vm.editMode=false},function(data,status){Dialog.alert(l("Warning"),data)})}}function confirmDelete(){if(vm.service.selectedFolder.isSubscription){vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null;$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}else{Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0} ?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){vm.service.selectedFolder=null;return true}).catch(function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}}function importCards($event,folder){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:"UIxContactsImportDialog",controller:CardsImportDialogController,controllerAs:"$CardsImportDialogController",locals:{folder:folder}});CardsImportDialogController.$inject=["scope","$mdDialog","folder"];function CardsImportDialogController(scope,$mdDialog,folder){var vm=this;vm.uploader=new FileUploader({url:ApplicationBaseURL+[folder.id,"import"].join("/"),autoUpload:true,queueLimit:1,filters:[{name:filterByExtension,fn:filterByExtension}],onSuccessItem:function(item,response,status,headers){var msg;$mdDialog.hide();if(response.imported===0)msg=l("No card was imported.");else{msg=l("A total of %{0} cards were imported in the addressbook.",response.imported);AddressBook.selectedFolder.$reload()}$mdToast.show($mdToast.simple().content(msg).position("top right").hideDelay(3e3))},onErrorItem:function(item,response,status,headers){$mdToast.show({template:["",' error_outline '," "+l("An error occured while importing contacts.")+" "," "].join(""),position:"top right",hideDelay:3e3})}});vm.close=function(){$mdDialog.hide()};function filterByExtension(item){var isTextFile=item.type.indexOf("text")===0||/\.(ldif|vcf|vcard)$/.test(item.name);if(!isTextFile)$mdToast.show({template:["",' error_outline '," "+l("Select a vCard or LDIF file.")+" "," "].join(""),position:"top right",hideDelay:3e3});return isTextFile}}}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}});LinksDialogController.$inject=["$mdDialog","addressbook"];function LinksDialogController($mdDialog,addressbook){var vm=this;this.addressbook=addressbook;this.close=close;function close(){$mdDialog.hide()}}}function showProperties(addressbook){$mdDialog.show({templateUrl:addressbook.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:true,escapeToClose:true,locals:{srcAddressBook:addressbook}}).catch(function(){});PropertiesDialogController.$inject=["$scope","$mdDialog","srcAddressBook"];function PropertiesDialogController($scope,$mdDialog,srcAddressBook){var vm=this;vm.addressbook=new AddressBook(srcAddressBook.$omit());vm.saveProperties=saveProperties;vm.close=close;function saveProperties(){vm.addressbook.$save().then(function(){srcAddressBook.init(vm.addressbook.$omit());$mdDialog.hide()},function(){})}function close(){$mdDialog.cancel()}}}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:true,escapeToClose:true,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name);AddressBook.$subscribe(addressbookData.owner,addressbookData.name).catch(function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}}angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)})();(function(){"use strict";CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"];function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){var vm=this;vm.card=stateCard;vm.currentFolder=AddressBook.selectedFolder;vm.allEmailTypes=Card.$EMAIL_TYPES;vm.allTelTypes=Card.$TEL_TYPES;vm.allUrlTypes=Card.$URL_TYPES;vm.allAddressTypes=Card.$ADDRESS_TYPES;vm.categories={};vm.userFilterResults=[];vm.addOrgUnit=addOrgUnit;vm.addBirthday=addBirthday;vm.addScreenName=addScreenName;vm.addEmail=addEmail;vm.addPhone=addPhone;vm.addUrl=addUrl;vm.addAddress=addAddress;vm.addMember=addMember;vm.userFilter=userFilter;vm.save=save;vm.close=close;vm.reset=reset;vm.cancel=cancel;vm.confirmDelete=confirmDelete;vm.exportCard=exportCard;vm.toggleRawSource=toggleRawSource;vm.showRawSource=false;function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addBirthday(){vm.card.birthday=new Date}function addScreenName(){vm.card.$addScreenName("")}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){AddressBook.selectedFolder.$filter($query,{dry:true,excludeLists:true},excludedCards);return AddressBook.selectedFolder.$cards}function save(form){if(form.$valid){vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);if(i<0){AddressBook.selectedFolder.$reload()}else{AddressBook.selectedFolder.cards[i]=angular.copy(vm.card)}$state.go("app.addressbook.card.view",{cardId:vm.card.id})}).catch(function(err){console.log(err)})}}function close(){$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id}).then(function(){vm.card=null;delete AddressBook.selectedFolder.selectedCard})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset();if(vm.card.isNew){vm.card=null;delete AddressBook.selectedFolder.selectedCard;$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})}else{$state.go("app.addressbook.card.view",{cardId:vm.card.id})}}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id});close()},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}function toggleRawSource($event){if(!vm.showRawSource&&!vm.rawSource){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){vm.rawSource=data;vm.showRawSource=true})}else{vm.showRawSource=!vm.showRawSource}}}angular.module("SOGo.ContactsUI").controller("CardController",CardController)})();(function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];if(data.street)lines.push(data.street);if(data.street2)lines.push(data.street2);if(data.locality)locality_region.push(data.locality);if(data.region)locality_region.push(data.region);if(locality_region.length>0)lines.push(locality_region.join(", "));if(data.country)lines.push(data.country);if(data.postalcode)lines.push(data.postalcode);return lines.join(" ")}}],template:' '}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)})();
+(function(){"use strict";angular.module("SOGo.ContactsUI",["ngSanitize","ui.router","angularFileUpload","ck","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).config(configure).run(runBlock);configure.$inject=["$stateProvider","$urlRouterProvider"];function configure($stateProvider,$urlRouterProvider){$stateProvider.state("app",{url:"/addressbooks","abstract":true,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:stateAddressbooks}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:stateAddressbook}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:stateNewCard}}).state("app.addressbook.card",{url:"/:cardId","abstract":true,views:{card:{template:" "}},resolve:{stateCard:stateCard}}).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"}}});$urlRouterProvider.otherwise("/addressbooks/personal")}stateAddressbooks.$inject=["AddressBook"];function stateAddressbooks(AddressBook){return AddressBook.$findAll(window.contactFolders)}stateAddressbook.$inject=["$stateParams","stateAddressbooks","AddressBook"];function stateAddressbook($stateParams,stateAddressbooks,AddressBook){var addressbook=_.find(stateAddressbooks,function(addressbook){return addressbook.id==$stateParams.addressbookId});addressbook.$reload();return addressbook}stateNewCard.$inject=["$stateParams","stateAddressbook","Card"];function stateNewCard($stateParams,stateAddressbook,Card){var tag="v"+$stateParams.contactType,card=new Card({pid:$stateParams.addressbookId,c_component:tag});stateAddressbook.selectedCard=true;return card}stateCard.$inject=["$stateParams","stateAddressbook"];function stateCard($stateParams,stateAddressbook){stateAddressbook.selectedCard=$stateParams.cardId;return stateAddressbook.$getCard($stateParams.cardId)}runBlock.$inject=["$rootScope","$log","$state"];function runBlock($rootScope,$log,$state){$rootScope.$on("$stateChangeError",function(event,toState,toParams,fromState,fromParams,error){$log.error(error);$state.go("app")});$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){$log.error(event,current,previous,rejection)})}})();(function(){"use strict";AddressBookController.$inject=["$scope","$q","$state","$timeout","$mdDialog","Account","Card","AddressBook","Dialog","sgSettings","stateAddressbooks","stateAddressbook"];function AddressBookController($scope,$q,$state,$timeout,$mdDialog,Account,Card,AddressBook,Dialog,Settings,stateAddressbooks,stateAddressbook){var vm=this;AddressBook.selectedFolder=stateAddressbook;vm.service=AddressBook;vm.selectedFolder=stateAddressbook;vm.selectCard=selectCard;vm.toggleCardSelection=toggleCardSelection;vm.newComponent=newComponent;vm.notSelectedComponent=notSelectedComponent;vm.unselectCards=unselectCards;vm.confirmDeleteSelectedCards=confirmDeleteSelectedCards;vm.saveSelectedCards=saveSelectedCards;vm.copySelectedCards=copySelectedCards;vm.selectAll=selectAll;vm.sort=sort;vm.sortedBy=sortedBy;vm.cancelSearch=cancelSearch;vm.newMessage=newMessage;vm.newMessageWithSelectedCards=newMessageWithSelectedCards;vm.newMessageWithRecipient=newMessageWithRecipient;vm.mode={search:false};function selectCard(card){$state.go("app.addressbook.card.view",{addressbookId:stateAddressbook.id,cardId:card.id})}function toggleCardSelection($event,card){card.selected=!card.selected;$event.preventDefault();$event.stopPropagation()}function newComponent(ev){$mdDialog.show({parent:angular.element(document.body),targetEvent:ev,clickOutsideToClose:true,escapeToClose:true,template:[''," ",' '," "," "+l("Contact")," "," "," "+l("List")," ","
"," "," "].join(""),locals:{addressbookId:vm.selectedFolder.id},controller:ComponentDialogController});ComponentDialogController.$inject=["scope","$mdDialog","$state","addressbookId"];function ComponentDialogController(scope,$mdDialog,$state,addressbookId){scope.create=function(type){$mdDialog.hide();$state.go("app.addressbook.new",{addressbookId:addressbookId,contactType:type})}}}function notSelectedComponent(currentCard,type){return currentCard&¤tCard.c_component==type&&!currentCard.selected}function unselectCards(){_.each(vm.selectedFolder.cards,function(card){card.selected=false})}function confirmDeleteSelectedCards(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected contacts?")).then(function(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$deleteCards(selectedCards);delete vm.selectedFolder.selectedCard},function(data,status){})}function saveSelectedCards(){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});var selectedUIDs=_.pluck(selectedCards,"id");window.location.href=ApplicationBaseURL+"/"+vm.selectedFolder.id+"/export?uid="+selectedUIDs.join("&uid=")}function copySelectedCards(folder){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});vm.selectedFolder.$copyCards(selectedCards,folder).then(function(){},function(error){Dialog.alert(l("Error"),error)})}function selectAll(){_.each(vm.selectedFolder.cards,function(card){card.selected=true})}function sort(field){vm.selectedFolder.$filter("",{sort:field})}function sortedBy(field){return AddressBook.$query.sort==field}function cancelSearch(){vm.mode.search=false;vm.selectedFolder.$filter("")}function newMessage($event,recipients){Account.$findAll().then(function(accounts){var account=_.filter(accounts,function(o){if(o.id===0)return o})[0];account.$getMailboxes().then(function(mailboxes){account.$newMessage().then(function(message){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:false,escapeToClose:false,templateUrl:"../Mail/UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",locals:{stateAccounts:accounts,stateMessage:message,stateRecipients:recipients}})})})})}function newMessageWithRecipient($event,recipient,fn){var recipients=[{full:fn+" <"+recipient+">"}];vm.newMessage($event,recipients);$event.stopPropagation();$event.preventDefault()}function newMessageWithSelectedCards($event){var selectedCards=_.filter(vm.selectedFolder.cards,function(card){return card.selected});var promises=[],recipients=[];_.each(selectedCards,function(card){if(card.c_component=="vcard"&&card.c_mail.length){recipients.push({full:card.c_cn+" <"+card.c_mail+">"})}else if(card.c_component=="vlist"){if(angular.isDefined(card.refs)&&card.refs.length){_.each(card.refs,function(ref){if(ref.email.length)recipients.push({full:ref.c_cn+" <"+ref.email+">"})})}else{promises.push(vm.selectedFolder.$getCard(card.id).then(function(card){return card.$futureCardData.then(function(data){_.each(data.refs,function(ref){if(ref.email.length)recipients.push({full:ref.c_cn+" <"+ref.email+">"})})})}))}}});$q.all(promises).then(function(){if(recipients.length)vm.newMessage($event,recipients)})}}angular.module("SOGo.ContactsUI").controller("AddressBookController",AddressBookController)})();(function(){"use strict";AddressBooksController.$inject=["$state","$scope","$rootScope","$stateParams","$timeout","$mdDialog","$mdToast","$mdMedia","$mdSidenav","FileUploader","sgFocus","Card","AddressBook","Dialog","sgSettings","User","stateAddressbooks"];function AddressBooksController($state,$scope,$rootScope,$stateParams,$timeout,$mdDialog,$mdToast,$mdMedia,$mdSidenav,FileUploader,focus,Card,AddressBook,Dialog,Settings,User,stateAddressbooks){var vm=this;vm.activeUser=Settings.activeUser;vm.service=AddressBook;vm.select=select;vm.newAddressbook=newAddressbook;vm.edit=edit;vm.revertEditing=revertEditing;vm.save=save;vm.confirmDelete=confirmDelete;vm.importCards=importCards;vm.exportCards=exportCards;vm.showLinks=showLinks;vm.showProperties=showProperties;vm.share=share;vm.subscribeToFolder=subscribeToFolder;function select($event,folder){if($state.params.addressbookId!=folder.id&&vm.editMode!=folder.id){vm.editMode=false;AddressBook.$query.value="";if($mdMedia("sm"))$mdSidenav("left").close();$state.go("app.addressbook",{addressbookId:folder.id})}else{$event.preventDefault();$event.stopPropagation()}}function newAddressbook(){Dialog.prompt(l("New addressbook"),l("Name of new addressbook")).then(function(name){var addressbook=new AddressBook({name:name,isEditable:true,isRemote:false,owner:UserLogin});AddressBook.$add(addressbook)})}function edit(folder){if(!folder.isRemote){vm.editMode=folder.id;vm.originalAddressbook=angular.extend({},folder.$omit());focus("addressBookName_"+folder.id)}}function revertEditing(folder){folder.name=vm.originalAddressbook.name;vm.editMode=false}function save(folder){var name=folder.name;if(name&&name.length>0&&name!=vm.originalAddressbook.name){folder.$rename(name).then(function(data){vm.editMode=false},function(data,status){Dialog.alert(l("Warning"),data)})}}function confirmDelete(){if(vm.service.selectedFolder.isSubscription){vm.service.selectedFolder.$delete().then(function(){vm.service.selectedFolder=null;$state.go("app.addressbook",{addressbookId:"personal"})},function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}else{Dialog.confirm(l("Warning"),l("Are you sure you want to delete the addressbook %{0} ?",vm.service.selectedFolder.name)).then(function(){return vm.service.selectedFolder.$delete()}).then(function(){vm.service.selectedFolder=null;return true}).catch(function(data,status){Dialog.alert(l('An error occured while deleting the addressbook "%{0}".',vm.service.selectedFolder.name),l(data.error))})}}function importCards($event,folder){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:"UIxContactsImportDialog",controller:CardsImportDialogController,controllerAs:"$CardsImportDialogController",locals:{folder:folder}});CardsImportDialogController.$inject=["scope","$mdDialog","folder"];function CardsImportDialogController(scope,$mdDialog,folder){var vm=this;vm.uploader=new FileUploader({url:ApplicationBaseURL+[folder.id,"import"].join("/"),autoUpload:true,queueLimit:1,filters:[{name:filterByExtension,fn:filterByExtension}],onSuccessItem:function(item,response,status,headers){var msg;$mdDialog.hide();if(response.imported===0)msg=l("No card was imported.");else{msg=l("A total of %{0} cards were imported in the addressbook.",response.imported);AddressBook.selectedFolder.$reload()}$mdToast.show($mdToast.simple().content(msg).position("top right").hideDelay(3e3))},onErrorItem:function(item,response,status,headers){$mdToast.show({template:["",' ',' error_outline '," "+l("An error occured while importing contacts.")+" ","
"," "].join(""),position:"top right",hideDelay:3e3})}});vm.close=function(){$mdDialog.hide()};function filterByExtension(item){var isTextFile=item.type.indexOf("text")===0||/\.(ldif|vcf|vcard)$/.test(item.name);if(!isTextFile)$mdToast.show({template:["",' ',' error_outline '," "+l("Select a vCard or LDIF file.")+" ","
"," "].join(""),position:"top right",hideDelay:3e3});return isTextFile}}}function exportCards(){window.location.href=ApplicationBaseURL+"/"+vm.service.selectedFolder.id+"/exportFolder"}function showLinks(addressbook){$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:addressbook.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{addressbook:addressbook}});LinksDialogController.$inject=["$mdDialog","addressbook"];function LinksDialogController($mdDialog,addressbook){var vm=this;this.addressbook=addressbook;this.close=close;function close(){$mdDialog.hide()}}}function showProperties(addressbook){$mdDialog.show({templateUrl:addressbook.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:true,escapeToClose:true,locals:{srcAddressBook:addressbook}}).catch(function(){});PropertiesDialogController.$inject=["$scope","$mdDialog","srcAddressBook"];function PropertiesDialogController($scope,$mdDialog,srcAddressBook){var vm=this;vm.addressbook=new AddressBook(srcAddressBook.$omit());vm.saveProperties=saveProperties;vm.close=close;function saveProperties(){vm.addressbook.$save().then(function(){srcAddressBook.init(vm.addressbook.$omit());$mdDialog.hide()},function(){})}function close(){$mdDialog.cancel()}}}function share(addressbook){addressbook.$acl.$users().then(function(){$mdDialog.show({templateUrl:addressbook.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:true,escapeToClose:true,locals:{usersWithACL:addressbook.$acl.users,User:User,folder:addressbook}})})}function subscribeToFolder(addressbookData){console.debug("subscribeToFolder "+addressbookData.owner+addressbookData.name);AddressBook.$subscribe(addressbookData.owner,addressbookData.name).catch(function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}}angular.module("SOGo.ContactsUI").controller("AddressBooksController",AddressBooksController)})();(function(){"use strict";CardController.$inject=["$scope","$timeout","$mdDialog","AddressBook","Card","Dialog","sgFocus","$state","$stateParams","stateCard"];function CardController($scope,$timeout,$mdDialog,AddressBook,Card,Dialog,focus,$state,$stateParams,stateCard){var vm=this;vm.card=stateCard;vm.currentFolder=AddressBook.selectedFolder;vm.allEmailTypes=Card.$EMAIL_TYPES;vm.allTelTypes=Card.$TEL_TYPES;vm.allUrlTypes=Card.$URL_TYPES;vm.allAddressTypes=Card.$ADDRESS_TYPES;vm.categories={};vm.userFilterResults=[];vm.addOrgUnit=addOrgUnit;vm.addBirthday=addBirthday;vm.addScreenName=addScreenName;vm.addEmail=addEmail;vm.addPhone=addPhone;vm.addUrl=addUrl;vm.addAddress=addAddress;vm.addMember=addMember;vm.userFilter=userFilter;vm.save=save;vm.close=close;vm.reset=reset;vm.cancel=cancel;vm.confirmDelete=confirmDelete;vm.exportCard=exportCard;vm.toggleRawSource=toggleRawSource;vm.showRawSource=false;function addOrgUnit(){var i=vm.card.$addOrgUnit("");focus("orgUnit_"+i)}function addBirthday(){vm.card.birthday=new Date}function addScreenName(){vm.card.$addScreenName("")}function addEmail(){var i=vm.card.$addEmail("");focus("email_"+i)}function addPhone(){var i=vm.card.$addPhone("");focus("phone_"+i)}function addUrl(){var i=vm.card.$addUrl("","");focus("url_"+i)}function addAddress(){var i=vm.card.$addAddress("","","","","","","","");focus("address_"+i)}function addMember(){var i=vm.card.$addMember("");focus("ref_"+i)}function userFilter($query,excludedCards){AddressBook.selectedFolder.$filter($query,{dry:true,excludeLists:true},excludedCards);return AddressBook.selectedFolder.$cards}function save(form){if(form.$valid){vm.card.$save().then(function(data){var i=_.indexOf(_.pluck(AddressBook.selectedFolder.cards,"id"),vm.card.id);if(i<0){AddressBook.selectedFolder.$reload()}else{AddressBook.selectedFolder.cards[i]=angular.copy(vm.card)}$state.go("app.addressbook.card.view",{cardId:vm.card.id})}).catch(function(err){console.log(err)})}}function close(){$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id}).then(function(){vm.card=null;delete AddressBook.selectedFolder.selectedCard})}function reset(){vm.card.$reset()}function cancel(){vm.card.$reset();if(vm.card.isNew){vm.card=null;delete AddressBook.selectedFolder.selectedCard;$state.go("app.addressbook",{addressbookId:AddressBook.selectedFolder.id})}else{$state.go("app.addressbook.card.view",{cardId:vm.card.id})}}function confirmDelete(card){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the card of %{0}?",card.$fullname()),{ok:l("Yes"),cancel:l("No")}).then(function(){card.$delete().then(function(){AddressBook.selectedFolder.cards=_.reject(AddressBook.selectedFolder.cards,function(o){return o.id==card.id});close()},function(data,status){Dialog.alert(l("Warning"),l('An error occured while deleting the card "%{0}".',card.$fullname()))})})}function exportCard(){window.location.href=ApplicationBaseURL+"/"+vm.currentFolder.id+"/export?uid="+vm.card.id}function toggleRawSource($event){if(!vm.showRawSource&&!vm.rawSource){Card.$$resource.post(vm.currentFolder.id+"/"+vm.card.id,"raw").then(function(data){vm.rawSource=data;vm.showRawSource=true})}else{vm.showRawSource=!vm.showRawSource}}}angular.module("SOGo.ContactsUI").controller("CardController",CardController)})();(function(){"use strict";function sgAddress(){return{restrict:"A",scope:{data:"=sgAddress"},controller:["$scope",function($scope){$scope.addressLines=function(data){var lines=[],locality_region=[];if(data.street)lines.push(data.street);if(data.street2)lines.push(data.street2);if(data.locality)locality_region.push(data.locality);if(data.region)locality_region.push(data.region);if(locality_region.length>0)lines.push(locality_region.join(", "));if(data.country)lines.push(data.country);if(data.postalcode)lines.push(data.postalcode);return lines.join(" ")}}],template:' '}}angular.module("SOGo.Common").directive("sgAddress",sgAddress)})();
//# sourceMappingURL=Contacts.js.map
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Contacts.js.map b/UI/WebServerResources/js/Contacts.js.map
index 4422ef1ce..81c93212c 100644
--- a/UI/WebServerResources/js/Contacts.js.map
+++ b/UI/WebServerResources/js/Contacts.js.map
@@ -1 +1 @@
-{"version":3,"sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$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","id","addressbookId","$reload","Card","tag","contactType","pid","c_component","selectedCard","cardId","$getCard","$rootScope","$log","$state","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","AddressBookController","$scope","$q","$timeout","$mdDialog","Account","Dialog","Settings","vm","this","selectedFolder","service","selectCard","toggleCardSelection","newComponent","notSelectedComponent","unselectCards","confirmDeleteSelectedCards","saveSelectedCards","copySelectedCards","selectAll","sort","sortedBy","cancelSearch","newMessage","newMessageWithSelectedCards","newMessageWithRecipient","mode","search","$event","selected","preventDefault","stopPropagation","ev","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","ComponentDialogController","scope","create","type","hide","currentCard","each","cards","confirm","then","selectedCards","filter","$deleteCards","data","status","selectedUIDs","pluck","location","href","ApplicationBaseURL","folder","$copyCards","alert","field","$filter","$query","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","recipient","fn","full","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","AddressBooksController","$mdToast","$mdMedia","$mdSidenav","FileUploader","focus","User","activeUser","select","newAddressbook","edit","revertEditing","save","confirmDelete","importCards","exportCards","showLinks","showProperties","share","subscribeToFolder","params","editMode","value","close","prompt","name","isEditable","isRemote","owner","UserLogin","$add","originalAddressbook","extend","$omit","$rename","isSubscription","$delete","catch","CardsImportDialogController","uploader","autoUpload","queueLimit","filters","filterByExtension","onSuccessItem","item","response","headers","msg","imported","simple","content","position","hideDelay","onErrorItem","isTextFile","indexOf","test","LinksDialogController","PropertiesDialogController","srcAddressBook","saveProperties","$save","init","cancel","$acl","$users","usersWithACL","users","addressbookData","console","debug","$subscribe","CardController","currentFolder","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","addOrgUnit","addBirthday","addScreenName","addEmail","addPhone","addUrl","addAddress","addMember","userFilter","reset","exportCard","toggleRawSource","showRawSource","i","$addOrgUnit","birthday","Date","$addScreenName","$addEmail","$addPhone","$addUrl","$addAddress","$addMember","excludedCards","dry","excludeLists","$cards","form","$valid","copy","err","log","$reset","isNew","$fullname","ok","reject","rawSource","$$resource","post","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"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","file":"Contacts.js"}
\ No newline at end of file
+{"version":3,"sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$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","id","addressbookId","$reload","Card","tag","contactType","pid","c_component","selectedCard","cardId","$getCard","$rootScope","$log","$state","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","AddressBookController","$scope","$q","$timeout","$mdDialog","Account","Dialog","Settings","vm","this","selectedFolder","service","selectCard","toggleCardSelection","newComponent","notSelectedComponent","unselectCards","confirmDeleteSelectedCards","saveSelectedCards","copySelectedCards","selectAll","sort","sortedBy","cancelSearch","newMessage","newMessageWithSelectedCards","newMessageWithRecipient","mode","search","$event","selected","preventDefault","stopPropagation","ev","show","parent","element","document","body","targetEvent","clickOutsideToClose","escapeToClose","l","join","locals","ComponentDialogController","scope","create","type","hide","currentCard","each","cards","confirm","then","selectedCards","filter","$deleteCards","data","status","selectedUIDs","pluck","location","href","ApplicationBaseURL","folder","$copyCards","alert","field","$filter","$query","recipients","accounts","account","o","$getMailboxes","mailboxes","$newMessage","message","stateAccounts","stateMessage","stateRecipients","recipient","fn","full","promises","c_mail","length","push","c_cn","isDefined","refs","ref","email","$futureCardData","all","AddressBooksController","$mdToast","$mdMedia","$mdSidenav","FileUploader","focus","User","activeUser","select","newAddressbook","edit","revertEditing","save","confirmDelete","importCards","exportCards","showLinks","showProperties","share","subscribeToFolder","params","editMode","value","close","prompt","name","isEditable","isRemote","owner","UserLogin","$add","originalAddressbook","extend","$omit","$rename","isSubscription","$delete","catch","CardsImportDialogController","uploader","autoUpload","queueLimit","filters","filterByExtension","onSuccessItem","item","response","headers","msg","imported","simple","content","position","hideDelay","onErrorItem","isTextFile","indexOf","test","LinksDialogController","PropertiesDialogController","srcAddressBook","saveProperties","$save","init","cancel","$acl","$users","usersWithACL","users","addressbookData","console","debug","$subscribe","CardController","currentFolder","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","addOrgUnit","addBirthday","addScreenName","addEmail","addPhone","addUrl","addAddress","addMember","userFilter","reset","exportCard","toggleRawSource","showRawSource","i","$addOrgUnit","birthday","Date","$addScreenName","$addEmail","$addPhone","$addUrl","$addAddress","$addMember","excludedCards","dry","excludeLists","$cards","form","$valid","copy","err","log","$reset","isNew","$fullname","ok","reject","rawSource","$$resource","post","sgAddress","restrict","addressLines","lines","locality_region","street","street2","locality","region","country","postalcode","directive"],"mappings":"CAGA,WACE,YAEAA,SAAQC,OAAO,mBAAoB,aAAc,YAAa,oBAAqB,KAAM,cAAe,qBAAsB,kBAC3HC,OAAOC,WACPC,IAAIC,SAKPF,WAAUG,SAAW,iBAAkB,qBACvC,SAASH,WAAUI,eAAgBC,oBACjCD,eACGE,MAAM,OACLC,IAAK,gBACLC,WAAU,KACVC,OACEC,cACEC,YAAa,wBACbC,WAAY,yBACZC,aAAc,QAGlBC,SACEC,kBAAmBA,qBAGtBT,MAAM,mBACLC,IAAK,kBACLE,OACEO,aACEL,YAAa,cACbC,WAAY,wBACZC,aAAc,gBAGlBC,SACEG,iBAAkBA,oBAGrBX,MAAM,uBACLC,IAAK,mCACLE,OACES,MACEP,YAAa,2BACbC,WAAY,iBACZC,aAAc,WAGlBC,SACEK,UAAWC,gBAGdd,MAAM,wBACLC,IAAK,WACLC,WAAU,KACVC,OACES,MACEG,SAAU,eAGdP,SACEK,UAAWA,aAGdb,MAAM,6BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,yBACbC,WAAY,iBACZC,aAAc,aAInBP,MAAM,+BACLC,IAAK,QACLE,OACEa,wBACEX,YAAa,2BACbC,WAAY,iBACZC,aAAc,YAMtBR,oBAAmBkB,UAAU,0BAM/BR,kBAAkBZ,SAAW,cAC7B,SAASY,mBAAkBS,aACzB,MAAOA,aAAYC,SAASC,OAAOC,gBAMrCV,iBAAiBd,SAAW,eAAgB,oBAAqB,cACjE,SAASc,kBAAiBW,aAAcb,kBAAmBS,aACzD,GAAIR,aAAca,EAAEC,KAAKf,kBAAmB,SAASC,aACnD,MAAOA,aAAYe,IAAMH,aAAaI,eAExChB,aAAYiB,SACZ,OAAOjB,aAMTI,aAAajB,SAAW,eAAgB,mBAAoB,OAC5D,SAASiB,cAAaQ,aAAcX,iBAAkBiB,MACpD,GAAIC,KAAM,IAAMP,aAAaQ,YACzBlB,KAAO,GAAIgB,OAAOG,IAAKT,aAAaI,cAAeM,YAAaH,KACpElB,kBAAiBsB,aAAe,IAChC,OAAOrB,MAMTC,UAAUhB,SAAW,eAAgB,mBACrC,SAASgB,WAAUS,aAAcX,kBAC/BA,iBAAiBsB,aAAeX,aAAaY,MAC7C,OAAOvB,kBAAiBwB,SAASb,aAAaY,QAMhDtC,SAASC,SAAW,aAAc,OAAQ,SAC1C,SAASD,UAASwC,WAAYC,KAAMC,QAClCF,WAAWG,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,UAAWC,WAAYC,OAC5FR,KAAKQ,MAAMA,MACXP,QAAOQ,GAAG,QAEZV,YAAWG,IAAI,oBAAqB,SAASC,MAAOO,QAASC,SAAUC,WACrEZ,KAAKQ,MAAML,MAAOO,QAASC,SAAUC,mBC7I3C,WACE,YAKAC,uBAAsBrD,SAAW,SAAU,KAAM,SAAU,WAAY,YAAa,UAAW,OAAQ,cAAe,SAAU,aAAc,oBAAqB,mBACnK,SAASqD,uBAAsBC,OAAQC,GAAId,OAAQe,SAAUC,UAAWC,QAAS3B,KAAMV,YAAasC,OAAQC,SAAUhD,kBAAmBE,kBACvI,GAAI+C,IAAKC,IAETzC,aAAY0C,eAAiBjD,gBAE7B+C,IAAGG,QAAU3C,WACbwC,IAAGE,eAAiBjD,gBACpB+C,IAAGI,WAAaA,UAChBJ,IAAGK,oBAAsBA,mBACzBL,IAAGM,aAAeA,YAClBN,IAAGO,qBAAuBA,oBAC1BP,IAAGQ,cAAgBA,aACnBR,IAAGS,2BAA6BA,0BAChCT,IAAGU,kBAAoBA,iBACvBV,IAAGW,kBAAoBA,iBACvBX,IAAGY,UAAYA,SACfZ,IAAGa,KAAOA,IACVb,IAAGc,SAAWA,QACdd,IAAGe,aAAeA,YAClBf,IAAGgB,WAAaA,UAChBhB,IAAGiB,4BAA8BA,2BACjCjB,IAAGkB,wBAA0BA,uBAC7BlB,IAAGmB,MAASC,OAAQ,MAEpB,SAAShB,YAAWlD,MAClB0B,OAAOQ,GAAG,6BAA8BpB,cAAef,iBAAiBc,GAAIS,OAAQtB,KAAKa,KAG3F,QAASsC,qBAAoBgB,OAAQnE,MACnCA,KAAKoE,UAAYpE,KAAKoE,QACtBD,QAAOE,gBACPF,QAAOG,kBAGT,QAASlB,cAAamB,IACpB7B,UAAU8B,MACRC,OAAQ9F,QAAQ+F,QAAQC,SAASC,MACjCC,YAAaN,GACbO,oBAAqB,KACrBC,cAAe,KACf5E,UACE,0BAA4B6E,EAAE,oBAAsB,KACpD,wBACA,4BACA,gDACA,WAAaA,EAAE,WACf,qBACA,gDACA,WAAaA,EAAE,QACf,qBACA,aACA,yBACA,gBACAC,KAAK,IACPC,QACEpE,cAAegC,GAAGE,eAAenC,IAEnCnB,WAAYyF,2BAMdA,2BAA0BlG,SAAW,QAAS,YAAa,SAAU,gBACrE,SAASkG,2BAA0BC,MAAO1C,UAAWhB,OAAQZ,eAC3DsE,MAAMC,OAAS,SAASC,MACtB5C,UAAU6C,MACV7D,QAAOQ,GAAG,uBAAyBpB,cAAeA,cAAeI,YAAaoE,SAKpF,QAASjC,sBAAqBmC,YAAaF,MACzC,MAAQE,cAAeA,YAAYpE,aAAekE,OAASE,YAAYpB,SAGzE,QAASd,iBACP3C,EAAE8E,KAAK3C,GAAGE,eAAe0C,MAAO,SAAS1F,MAAQA,KAAKoE,SAAW,QAGnE,QAASb,8BACPX,OAAO+C,QAAQX,EAAE,WACFA,EAAE,2DACdY,KAAK,WAEJ,GAAIC,eAAgBlF,EAAEmF,OAAOhD,GAAGE,eAAe0C,MAAO,SAAS1F,MAAQ,MAAOA,MAAKoE,UACnFtB,IAAGE,eAAe+C,aAAaF,qBACxB/C,IAAGE,eAAe3B,cACvB,SAAS2E,KAAMC,WAKvB,QAASzC,qBACP,GAAIqC,eAAgBlF,EAAEmF,OAAOhD,GAAGE,eAAe0C,MAAO,SAAS1F,MAAQ,MAAOA,MAAKoE,UACnF,IAAI8B,cAAevF,EAAEwF,MAAMN,cAAe,KAC1CrF,QAAO4F,SAASC,KAAOC,mBAAqB,IAAMxD,GAAGE,eAAenC,GAAK,eAAiBqF,aAAajB,KAAK,SAG9G,QAASxB,mBAAkB8C,QACzB,GAAIV,eAAgBlF,EAAEmF,OAAOhD,GAAGE,eAAe0C,MAAO,SAAS1F,MAAQ,MAAOA,MAAKoE,UACnFtB,IAAGE,eAAewD,WAAWX,cAAeU,QAAQX,KAAK,aAEtD,SAAS3D,OACVW,OAAO6D,MAAMzB,EAAE,SAAU/C,SAI7B,QAASyB,aACP/C,EAAE8E,KAAK3C,GAAGE,eAAe0C,MAAO,SAAS1F,MACvCA,KAAKoE,SAAW,OAIpB,QAAST,MAAK+C,OACZ5D,GAAGE,eAAe2D,QAAQ,IAAMhD,KAAM+C,QAGxC,QAAS9C,UAAS8C,OAChB,MAAOpG,aAAYsG,OAAOjD,MAAQ+C,MAGpC,QAAS7C,gBACPf,GAAGmB,KAAKC,OAAS,KACjBpB,IAAGE,eAAe2D,QAAQ,IAG5B,QAAS7C,YAAWK,OAAQ0C,YAC1BlE,QAAQpC,WAAWqF,KAAK,SAASkB,UAC/B,GAAIC,SAAUpG,EAAEmF,OAAOgB,SAAU,SAASE,GACxC,GAAIA,EAAEnG,KAAO,EACX,MAAOmG,KACR,EAIHD,SAAQE,gBAAgBrB,KAAK,SAASsB,WACpCH,QAAQI,cAAcvB,KAAK,SAASwB,SAClC1E,UAAU8B,MACRC,OAAQ9F,QAAQ+F,QAAQC,SAASC,MACjCC,YAAaV,OACbW,oBAAqB,MACrBC,cAAe,MACftF,YAAa,wBACbC,WAAY,0BACZC,aAAc,SACduF,QACEmC,cAAeP,SACfQ,aAAcF,QACdG,gBAAiBV,oBAQ7B,QAAS7C,yBAAwBG,OAAQqD,UAAWC,IAClD,GAAIZ,cAAea,KAAMD,GAAK,KAAOD,UAAY,KACjD1E,IAAGgB,WAAWK,OAAQ0C,WACtB1C,QAAOG,iBACPH,QAAOE,iBAGT,QAASN,6BAA4BI,QACnC,GAAI0B,eAAgBlF,EAAEmF,OAAOhD,GAAGE,eAAe0C,MAAO,SAAS1F,MAAQ,MAAOA,MAAKoE,UACnF,IAAIuD,aAAed,aAEnBlG,GAAE8E,KAAKI,cAAe,SAAS7F,MAC7B,GAAIA,KAAKoB,aAAe,SAAWpB,KAAK4H,OAAOC,OAAQ,CACrDhB,WAAWiB,MAAMJ,KAAM1H,KAAK+H,KAAO,KAAO/H,KAAK4H,OAAS,UAErD,IAAI5H,KAAKoB,aAAe,QAAS,CAEpC,GAAIzC,QAAQqJ,UAAUhI,KAAKiI,OAASjI,KAAKiI,KAAKJ,OAAQ,CACpDlH,EAAE8E,KAAKzF,KAAKiI,KAAM,SAASC,KACzB,GAAIA,IAAIC,MAAMN,OACZhB,WAAWiB,MAAMJ,KAAMQ,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,YAGtD,CACHR,SAASG,KAAKhF,GAAGE,eAAezB,SAASvB,KAAKa,IAAI+E,KAAK,SAAS5F,MAC9D,MAAOA,MAAKoI,gBAAgBxC,KAAK,SAASI,MACxCrF,EAAE8E,KAAKO,KAAKiC,KAAM,SAASC,KACzB,GAAIA,IAAIC,MAAMN,OACZhB,WAAWiB,MAAMJ,KAAMQ,IAAIH,KAAO,KAAOG,IAAIC,MAAQ,gBAQnE3F,IAAG6F,IAAIV,UAAU/B,KAAK,WACpB,GAAIiB,WAAWgB,OACb/E,GAAGgB,WAAWK,OAAQ0C,eAK9BlI,QACGC,OAAO,mBACPc,WAAW,wBAAyB4C,4BCjNzC,WACE,YAKAgG,wBAAuBrJ,SAAW,SAAU,SAAU,aAAc,eAAgB,WAAY,YAAa,WAAY,WAAY,aAAc,eAAgB,UAAW,OAAQ,cAAe,SAAU,aAAc,OAAQ,oBACrO,SAASqJ,wBAAuB5G,OAAQa,OAAQf,WAAYd,aAAc+B,SAAUC,UAAW6F,SAAUC,SAAUC,WAAYC,aAAcC,MAAO3H,KAAMV,YAAasC,OAAQC,SAAU+F,KAAM/I,mBAC7L,GAAIiD,IAAKC,IAETD,IAAG+F,WAAahG,SAASgG,UACzB/F,IAAGG,QAAU3C,WACbwC,IAAGgG,OAASA,MACZhG,IAAGiG,eAAiBA,cACpBjG,IAAGkG,KAAOA,IACVlG,IAAGmG,cAAgBA,aACnBnG,IAAGoG,KAAOA,IACVpG,IAAGqG,cAAgBA,aACnBrG,IAAGsG,YAAcA,WACjBtG,IAAGuG,YAAcA,WACjBvG,IAAGwG,UAAYA,SACfxG,IAAGyG,eAAiBA,cACpBzG,IAAG0G,MAAQA,KACX1G,IAAG2G,kBAAoBA,iBAEvB,SAASX,QAAO3E,OAAQoC,QACtB,GAAI7E,OAAOgI,OAAO5I,eAAiByF,OAAO1F,IACtCiC,GAAG6G,UAAYpD,OAAO1F,GAAI,CAC5BiC,GAAG6G,SAAW,KACdrJ,aAAYsG,OAAOgD,MAAQ,EAE3B,IAAIpB,SAAS,MACXC,WAAW,QAAQoB,OACrBnI,QAAOQ,GAAG,mBAAoBpB,cAAeyF,OAAO1F,SAEjD,CACHsD,OAAOE,gBACPF,QAAOG,mBAIX,QAASyE,kBACPnG,OAAOkH,OAAO9E,EAAE,mBACFA,EAAE,4BACbY,KAAK,SAASmE,MACb,GAAIjK,aAAc,GAAIQ,cAElByJ,KAAMA,KACNC,WAAY,KACZC,SAAU,MACVC,MAAOC,WAGX7J,aAAY8J,KAAKtK,eAIvB,QAASkJ,MAAKzC,QACZ,IAAKA,OAAO0D,SAAU,CACpBnH,GAAG6G,SAAWpD,OAAO1F,EACrBiC,IAAGuH,oBAAsB1L,QAAQ2L,UAAW/D,OAAOgE,QACnD5B,OAAM,mBAAqBpC,OAAO1F,KAItC,QAASoI,eAAc1C,QACrBA,OAAOwD,KAAOjH,GAAGuH,oBAAoBN,IACrCjH,IAAG6G,SAAW,MAGhB,QAAST,MAAK3C,QACZ,GAAIwD,MAAOxD,OAAOwD,IAClB,IAAIA,MAAQA,KAAKlC,OAAS,GAAKkC,MAAQjH,GAAGuH,oBAAoBN,KAAM,CAClExD,OAAOiE,QAAQT,MACZnE,KAAK,SAASI,MACblD,GAAG6G,SAAW,OACb,SAAS3D,KAAMC,QAChBrD,OAAO6D,MAAMzB,EAAE,WAAYgB,SAKnC,QAASmD,iBACP,GAAIrG,GAAGG,QAAQD,eAAeyH,eAAgB,CAE5C3H,GAAGG,QAAQD,eAAe0H,UACvB9E,KAAK,WACJ9C,GAAGG,QAAQD,eAAiB,IAC5BtB,QAAOQ,GAAG,mBAAqBpB,cAAe,cAC7C,SAASkF,KAAMC,QAChBrD,OAAO6D,MAAMzB,EAAE,0DACAlC,GAAGG,QAAQD,eAAe+G,MAC5B/E,EAAEgB,KAAK/D,cAGrB,CACHW,OAAO+C,QAAQX,EAAE,WAAYA,EAAE,iEACAlC,GAAGG,QAAQD,eAAe+G,OACtDnE,KAAK,WACJ,MAAO9C,IAAGG,QAAQD,eAAe0H,YAElC9E,KAAK,WACJ9C,GAAGG,QAAQD,eAAiB,IAC5B,OAAO,QAER2H,MAAM,SAAS3E,KAAMC,QACpBrD,OAAO6D,MAAMzB,EAAE,0DACAlC,GAAGG,QAAQD,eAAe+G,MAC5B/E,EAAEgB,KAAK/D,WAK5B,QAASmH,aAAYjF,OAAQoC,QAC3B7D,UAAU8B,MACRC,OAAQ9F,QAAQ+F,QAAQC,SAASC,MACjCC,YAAaV,OACbW,oBAAqB,KACrBC,cAAe,KACftF,YAAa,0BACbC,WAAYkL,4BACZjL,aAAc,+BACduF,QACEqB,OAAQA,SAOZqE,6BAA4B3L,SAAW,QAAS,YAAa,SAC7D,SAAS2L,6BAA4BxF,MAAO1C,UAAW6D,QACrD,GAAIzD,IAAKC,IAETD,IAAG+H,SAAW,GAAInC,eAChBrJ,IAAKiH,oBAAsBC,OAAO1F,GAAI,UAAUoE,KAAK,KACrD6F,WAAY,KACZC,WAAY,EACZC,UAAYjB,KAAMkB,kBAAmBxD,GAAIwD,oBACzCC,cAAe,SAASC,KAAMC,SAAUnF,OAAQoF,SAC9C,GAAIC,IAEJ5I,WAAU6C,MAEV,IAAI6F,SAASG,WAAa,EACxBD,IAAMtG,EAAE,6BACL,CACHsG,IAAMtG,EAAE,0DAA2DoG,SAASG,SAC5EjL,aAAY0C,eAAejC,UAG7BwH,SAAS/D,KACP+D,SAASiD,SACNC,QAAQH,KACRI,SAAS,aACTC,UAAU,OAEjBC,YAAa,SAAST,KAAMC,SAAUnF,OAAQoF,SAC5C9C,SAAS/D,MACPrE,UACE,aACA,mCACA,gEACA,aAAe6E,EAAE,8CAAgD,UACjE,WACA,eACAC,KAAK,IACPyG,SAAU,YACVC,UAAW,QAKjB7I,IAAG+G,MAAQ,WACTnH,UAAU6C,OAGZ,SAAS0F,mBAAkBE,MACzB,GAAIU,YAAaV,KAAK7F,KAAKwG,QAAQ,UAAY,GAC3C,sBAAsBC,KAAKZ,KAAKpB,KAEpC,KAAK8B,WACHtD,SAAS/D,MACPrE,UACE,aACA,mCACA,gEACA,aAAe6E,EAAE,gCAAkC,UACnD,WACA,eACAC,KAAK,IACPyG,SAAU,YACVC,UAAW,KAGf,OAAOE,cAKb,QAASxC,eACP7I,OAAO4F,SAASC,KAAOC,mBAAqB,IAAMxD,GAAGG,QAAQD,eAAenC,GAAK,gBAGnF,QAASyI,WAAUxJ,aACjB4C,UAAU8B,MACRC,OAAQ9F,QAAQ+F,QAAQC,SAASC,MACjCE,oBAAqB,KACrBC,cAAe,KACftF,YAAaK,YAAYe,GAAK,SAC9BnB,WAAYsM,sBACZrM,aAAc,QACduF,QACEpF,YAAaA,cAOjBkM,uBAAsB/M,SAAW,YAAa,cAC9C,SAAS+M,uBAAsBtJ,UAAW5C,aACxC,GAAIgD,IAAKC,IACTA,MAAKjD,YAAcA,WACnBiD,MAAK8G,MAAQA,KAEb,SAASA,SACPnH,UAAU6C,SAKhB,QAASgE,gBAAezJ,aACtB4C,UAAU8B,MACR/E,YAAaK,YAAYe,GAAK,cAC9BnB,WAAYuM,2BACZtM,aAAc,aACdmF,oBAAqB,KACrBC,cAAe,KACfG,QACEgH,eAAgBpM,eAEjB6K,MAAM,aAOTsB,4BAA2BhN,SAAW,SAAU,YAAa,iBAC7D,SAASgN,4BAA2B1J,OAAQG,UAAWwJ,gBACrD,GAAIpJ,IAAKC,IAETD,IAAGhD,YAAc,GAAIQ,aAAY4L,eAAe3B,QAChDzH,IAAGqJ,eAAiBA,cACpBrJ,IAAG+G,MAAQA,KAEX,SAASsC,kBACPrJ,GAAGhD,YAAYsM,QAAQxG,KAAK,WAE1BsG,eAAeG,KAAKvJ,GAAGhD,YAAYyK,QACnC7H,WAAU6C,QACT,cAKL,QAASsE,SACPnH,UAAU4J,WAKhB,QAAS9C,OAAM1J,aAEbA,YAAYyM,KAAKC,SAAS5G,KAAK,WAE7BlD,UAAU8B,MACR/E,YAAaK,YAAYe,GAAK,gBAC9BnB,WAAY,gBACZC,aAAc,MACdmF,oBAAqB,KACrBC,cAAe,KACfG,QACEuH,aAAc3M,YAAYyM,KAAKG,MAC/B9D,KAAMA,KACNrC,OAAQzG,iBAShB,QAAS2J,mBAAkBkD,iBACzBC,QAAQC,MAAM,qBAAuBF,gBAAgBzC,MAAQyC,gBAAgB5C,KAC7EzJ,aAAYwM,WAAWH,gBAAgBzC,MAAOyC,gBAAgB5C,MAAMY,MAAM,SAAS3E,MACjFpD,OAAO6D,MAAMzB,EAAE,WAAYA,EAAE,0CAKnCrG,QACGC,OAAO,mBACPc,WAAW,yBAA0B4I,6BCjT1C,WACE,YAMAyE,gBAAe9N,SAAW,SAAU,WAAY,YAAa,cAAe,OAAQ,SAAU,UAAW,SAAU,eAAgB,YACnI,SAAS8N,gBAAexK,OAAQE,SAAUC,UAAWpC,YAAaU,KAAM4B,OAAQ+F,MAAOjH,OAAQhB,aAAcT,WAC3G,GAAI6C,IAAKC,IAETD,IAAG9C,KAAOC,SAEV6C,IAAGkK,cAAgB1M,YAAY0C,cAC/BF,IAAGmK,cAAgBjM,KAAKkM,YACxBpK,IAAGqK,YAAcnM,KAAKoM,UACtBtK,IAAGuK,YAAcrM,KAAKsM,UACtBxK,IAAGyK,gBAAkBvM,KAAKwM,cAC1B1K,IAAG2K,aACH3K,IAAG4K,oBACH5K,IAAG6K,WAAaA,UAChB7K,IAAG8K,YAAcA,WACjB9K,IAAG+K,cAAgBA,aACnB/K,IAAGgL,SAAWA,QACdhL,IAAGiL,SAAWA,QACdjL,IAAGkL,OAASA,MACZlL,IAAGmL,WAAaA,UAChBnL,IAAGoL,UAAYA,SACfpL,IAAGqL,WAAaA,UAChBrL,IAAGoG,KAAOA,IACVpG,IAAG+G,MAAQA,KACX/G,IAAGsL,MAAQA,KACXtL,IAAGwJ,OAASA,MACZxJ,IAAGqG,cAAgBA,aACnBrG,IAAGuL,WAAaA,UAChBvL,IAAGwL,gBAAkBA,eACrBxL,IAAGyL,cAAgB,KAEnB,SAASZ,cACP,GAAIa,GAAI1L,GAAG9C,KAAKyO,YAAY,GAC5B9F,OAAM,WAAa6F,GAErB,QAASZ,eACP9K,GAAG9C,KAAK0O,SAAW,GAAIC,MAEzB,QAASd,iBACP/K,GAAG9C,KAAK4O,eAAe,IAEzB,QAASd,YACP,GAAIU,GAAI1L,GAAG9C,KAAK6O,UAAU,GAC1BlG,OAAM,SAAW6F,GAEnB,QAAST,YACP,GAAIS,GAAI1L,GAAG9C,KAAK8O,UAAU,GAC1BnG,OAAM,SAAW6F,GAEnB,QAASR,UACP,GAAIQ,GAAI1L,GAAG9C,KAAK+O,QAAQ,GAAI,GAC5BpG,OAAM,OAAS6F,GAEjB,QAASP,cACP,GAAIO,GAAI1L,GAAG9C,KAAKgP,YAAY,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxDrG,OAAM,WAAa6F,GAErB,QAASN,aACP,GAAIM,GAAI1L,GAAG9C,KAAKiP,WAAW,GAC3BtG,OAAM,OAAS6F,GAEjB,QAASL,YAAWvH,OAAQsI,eAC1B5O,YAAY0C,eAAe2D,QAAQC,QAASuI,IAAK,KAAMC,aAAc,MAAOF,cAC5E,OAAO5O,aAAY0C,eAAeqM,OAEpC,QAASnG,MAAKoG,MACZ,GAAIA,KAAKC,OAAQ,CACfzM,GAAG9C,KAAKoM,QACLxG,KAAK,SAASI,MACb,GAAIwI,GAAI7N,EAAEmL,QAAQnL,EAAEwF,MAAM7F,YAAY0C,eAAe0C,MAAO,MAAO5C,GAAG9C,KAAKa,GAC3E,IAAI2N,EAAI,EAAG,CAETlO,YAAY0C,eAAejC,cAExB,CAEHT,YAAY0C,eAAe0C,MAAM8I,GAAK7P,QAAQ6Q,KAAK1M,GAAG9C,MAExD0B,OAAOQ,GAAG,6BAA+BZ,OAAQwB,GAAG9C,KAAKa,OAE1D8J,MAAM,SAAS8E,KACd7C,QAAQ8C,IAAID,QAIpB,QAAS5F,SACPnI,OAAOQ,GAAG,mBAAqBpB,cAAeR,YAAY0C,eAAenC,KAAM+E,KAAK,WAClF9C,GAAG9C,KAAO,WACHM,aAAY0C,eAAe3B,eAGtC,QAAS+M,SACPtL,GAAG9C,KAAK2P,SAEV,QAASrD,UACPxJ,GAAG9C,KAAK2P,QACR,IAAI7M,GAAG9C,KAAK4P,MAAO,CAEjB9M,GAAG9C,KAAO,WACHM,aAAY0C,eAAe3B,YAClCK,QAAOQ,GAAG,mBAAqBpB,cAAeR,YAAY0C,eAAenC,SAEtE,CAEHa,OAAOQ,GAAG,6BAA+BZ,OAAQwB,GAAG9C,KAAKa,MAG7D,QAASsI,eAAcnJ,MACrB4C,OAAO+C,QAAQX,EAAE,WACFA,EAAE,oDAAqDhF,KAAK6P,cAC3DC,GAAI9K,EAAE,OAAQsH,OAAQtH,EAAE,QACrCY,KAAK,WAEJ5F,KAAK0K,UACF9E,KAAK,WAEJtF,YAAY0C,eAAe0C,MAAQ/E,EAAEoP,OAAOzP,YAAY0C,eAAe0C,MAAO,SAASsB,GACrF,MAAOA,GAAEnG,IAAMb,KAAKa,IAEtBgJ,UACC,SAAS7D,KAAMC,QAChBrD,OAAO6D,MAAMzB,EAAE,WAAYA,EAAE,mDACAhF,KAAK6P,kBAK5C,QAASxB,cACP7N,OAAO4F,SAASC,KAAOC,mBAAqB,IAAMxD,GAAGkK,cAAcnM,GAAK,eAAiBiC,GAAG9C,KAAKa,GAGnG,QAASyN,iBAAgBnK,QACvB,IAAKrB,GAAGyL,gBAAkBzL,GAAGkN,UAAW,CACtChP,KAAKiP,WAAWC,KAAKpN,GAAGkK,cAAcnM,GAAK,IAAMiC,GAAG9C,KAAKa,GAAI,OAAO+E,KAAK,SAASI,MAChFlD,GAAGkN,UAAYhK,IACflD,IAAGyL,cAAgB,WAGlB,CACHzL,GAAGyL,eAAiBzL,GAAGyL,gBAK7B5P,QACGC,OAAO,mBACPc,WAAW,iBAAkBqN,qBCzJlC,WACE,YAQA,SAASoD,aACP,OACEC,SAAU,IACVhL,OAASY,KAAM,cACftG,YAAa,SAAU,SAAS6C,QAC9BA,OAAO8N,aAAe,SAASrK,MAC7B,GAAIsK,UACAC,kBACJ,IAAIvK,KAAKwK,OAAQF,MAAMxI,KAAK9B,KAAKwK,OACjC,IAAIxK,KAAKyK,QAASH,MAAMxI,KAAK9B,KAAKyK,QAClC,IAAIzK,KAAK0K,SAAUH,gBAAgBzI,KAAK9B,KAAK0K,SAC7C,IAAI1K,KAAK2K,OAAQJ,gBAAgBzI,KAAK9B,KAAK2K,OAC3C,IAAIJ,gBAAgB1I,OAAS,EAAGyI,MAAMxI,KAAKyI,gBAAgBtL,KAAK,MAChE,IAAIe,KAAK4K,QAASN,MAAMxI,KAAK9B,KAAK4K,QAClC,IAAI5K,KAAK6K,WAAYP,MAAMxI,KAAK9B,KAAK6K,WACrC,OAAOP,OAAMrL,KAAK,WAGtB9E,SAAU,yDAIdxB,QACGC,OAAO,eACPkS,UAAU,YAAaX","file":"Contacts.js"}
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Preferences.js b/UI/WebServerResources/js/Preferences.js
index 14b7fc32d..75e6e6078 100644
--- a/UI/WebServerResources/js/Preferences.js
+++ b/UI/WebServerResources/js/Preferences.js
@@ -1,2 +1,2 @@
-(function(){"use strict";angular.module("SOGo.PreferencesUI",["ngSanitize","ui.router","ck","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication"]).config(configure).run(runBlock);configure.$inject=["$stateProvider","$urlRouterProvider"];function configure($stateProvider,$urlRouterProvider){$stateProvider.state("preferences",{"abstract":true,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}},resolve:{statePreferences:statePreferences}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}});$urlRouterProvider.otherwise("/general")}statePreferences.$inject=["Preferences"];function statePreferences(Preferences){return Preferences}runBlock.$inject=["$rootScope"];function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}})();(function(){"use strict";AccountDialogController.$inject=["$mdDialog","defaults","account","accountId","mailCustomFromEnabled"];function AccountDialogController($mdDialog,defaults,account,accountId,mailCustomFromEnabled){var vm=this;vm.defaults=defaults;vm.account=account;vm.accountId=accountId;vm.customFromIsReadonly=customFromIsReadonly;vm.cancel=cancel;vm.save=save;function customFromIsReadonly(){if(accountId>0)return false;return!mailCustomFromEnabled}function cancel(){$mdDialog.cancel()}function save(){$mdDialog.hide()}}angular.module("SOGo.PreferencesUI").controller("AccountDialogController",AccountDialogController)})();(function(){"use strict";FiltersDialogController.$inject=["$scope","$window","$mdDialog","filter","mailboxes","labels"];function FiltersDialogController($scope,$window,$mdDialog,filter,mailboxes,labels){var vm=this,sieveCapabilities=$window.sieveCapabilities;vm.filter=filter;vm.mailboxes=mailboxes;vm.labels=labels;vm.cancel=cancel;vm.save=save;vm.addMailFilterRule=addMailFilterRule;vm.removeMailFilterRule=removeMailFilterRule;vm.addMailFilterAction=addMailFilterAction;vm.removeMailFilterAction=removeMailFilterAction;vm.fieldLabels={subject:l("Subject"),from:l("From"),to:l("To"),cc:l("Cc"),to_or_cc:l("To or Cc"),size:l("Size (Kb)"),header:l("Header")};if(sieveCapabilities.indexOf("body")>-1)vm.fieldLabels.body=l("Body");vm.methodLabels={discard:l("Discard the message"),keep:l("Keep the message"),redirect:l("Forward the message to:"),vacation:l("Send a vacation message"),stop:l("Stop processing filter rules")};if(sieveCapabilities.indexOf("reject")>-1)vm.methodLabels.reject=l("Send a reject message:");if(sieveCapabilities.indexOf("fileinto")>-1)vm.methodLabels.fileinto=l("File the message in:");if(sieveCapabilities.indexOf("imapflags")>-1||sieveCapabilities.indexOf("imap4flags")>-1)vm.methodLabels.addflag=l("Flag the message with:");vm.numberOperatorLabels={under:l("is under"),over:l("is over")};vm.textOperatorLabels={is:l("is"),is_not:l("is not"),contains:l("contains"),contains_not:l("does not contain"),matches:l("matches"),matches_not:l("does not match")};if(sieveCapabilities.indexOf("regex")>-1){vm.textOperatorLabels.regex=l("matches regex");vm.textOperatorLabels.regex_not=l("does not match regex")}vm.flagLabels={seen:l("Seen"),deleted:l("Deleted"),answered:l("Answered"),flagged:l("Flagged"),junk:l("Junk"),not_junk:l("Not Junk")};function cancel(){$mdDialog.cancel()}function save(form){$mdDialog.hide()}function addMailFilterRule(event){if(!vm.filter.rules)vm.filter.rules=[];vm.filter.rules.push({field:"subject",operator:"contains"})}function removeMailFilterRule(index){vm.filter.rules.splice(index,1)}function addMailFilterAction(event){if(!vm.filter.actions)vm.filter.actions=[];vm.filter.actions.push({method:"discard"})}function removeMailFilterAction(index){vm.filter.actions.splice(index,1)}}angular.module("SOGo.PreferencesUI").controller("FiltersDialogController",FiltersDialogController)})();(function(){"use strict";PreferencesController.$inject=["$q","$window","$state","$mdDialog","$mdToast","Dialog","User","Account","statePreferences","Authentication"];function PreferencesController($q,$window,$state,$mdDialog,$mdToast,Dialog,User,Account,statePreferences,Authentication){var vm=this,account,mailboxes=[];vm.preferences=statePreferences;vm.passwords={newPassword:null,newPasswordConfirmation:null};vm.go=go;vm.onLanguageChange=onLanguageChange;vm.addCalendarCategory=addCalendarCategory;vm.removeCalendarCategory=removeCalendarCategory;vm.addContactCategory=addContactCategory;vm.removeContactCategory=removeContactCategory;vm.addMailAccount=addMailAccount;vm.editMailAccount=editMailAccount;vm.removeMailAccount=removeMailAccount;vm.addMailLabel=addMailLabel;vm.removeMailLabel=removeMailLabel;vm.addMailFilter=addMailFilter;vm.editMailFilter=editMailFilter;vm.removeMailFilter=removeMailFilter;vm.addDefaultEmailAddresses=addDefaultEmailAddresses;vm.userFilter=User.$filter;vm.save=save;vm.canChangePassword=canChangePassword;vm.changePassword=changePassword;vm.timeZonesList=window.timeZonesList;vm.timeZonesListFilter=timeZonesListFilter;vm.timeZonesSearchText="";account=new Account({id:0});account.$getMailboxes().then(function(){var allMailboxes=account.$flattenMailboxes({all:true}),index=-1,length=allMailboxes.length;while(++index0&&angular.isDefined(vm.preferences.defaults.Forward)&&vm.preferences.defaults.Forward.enabled&&angular.isDefined(vm.preferences.defaults.Forward.forwardAddress)){addresses=vm.preferences.defaults.Forward.forwardAddress.split(",");defaultAddresses=window.defaultEmailAddresses.split(/, */);_.forEach(defaultAddresses,function(adr){var domain=adr.split("@")[1];if(domain){domains.push(domain.toLowerCase())}});for(i=0;i=0&&window.forwardConstraints==2){Dialog.alert(l("Error"),l("You are not allowed to forward your messages to an internal email address."));sendForm=false}}}if(sendForm)return vm.preferences.$save().then(function(data){$mdToast.show({controller:"savePreferencesToastCtrl",template:[""," "+l("Preferences saved")+" ",' '," close "," "," "].join(""),hideDelay:2e3,position:"top right"})});return $q.reject()}function canChangePassword(){if(vm.passwords.newPassword&&vm.passwords.newPassword.length>0&&vm.passwords.newPasswordConfirmation&&vm.passwords.newPasswordConfirmation.length&&vm.passwords.newPassword==vm.passwords.newPasswordConfirmation)return true;return false}function changePassword(){Authentication.changePassword(vm.passwords.newPassword).then(function(){var alert=$mdDialog.alert({title:l("Password"),content:l("The password was changed successfully."),ok:l("OK")});$mdDialog.show(alert).finally(function(){alert=undefined})},function(msg){var alert=$mdDialog.alert({title:l("Password"),content:msg,ok:l("OK")});$mdDialog.show(alert).finally(function(){alert=undefined})})}function timeZonesListFilter(filter){return _.filter(vm.timeZonesList,function(value){return value.toUpperCase().indexOf(filter.toUpperCase())>=0})}}savePreferencesToastCtrl.$inject=["$scope","$mdToast"];function savePreferencesToastCtrl($scope,$mdToast){$scope.closeToast=function(){$mdToast.hide()}}angular.module("SOGo.PreferencesUI").controller("savePreferencesToastCtrl",savePreferencesToastCtrl).controller("PreferencesController",PreferencesController)})();
+(function(){"use strict";angular.module("SOGo.PreferencesUI",["ngSanitize","ui.router","ck","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication"]).config(configure).run(runBlock);configure.$inject=["$stateProvider","$urlRouterProvider"];function configure($stateProvider,$urlRouterProvider){$stateProvider.state("preferences",{"abstract":true,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}},resolve:{statePreferences:statePreferences}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}});$urlRouterProvider.otherwise("/general")}statePreferences.$inject=["Preferences"];function statePreferences(Preferences){return Preferences}runBlock.$inject=["$rootScope"];function runBlock($rootScope){$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){console.error(event,current,previous,rejection)})}})();(function(){"use strict";AccountDialogController.$inject=["$mdDialog","defaults","account","accountId","mailCustomFromEnabled"];function AccountDialogController($mdDialog,defaults,account,accountId,mailCustomFromEnabled){var vm=this;vm.defaults=defaults;vm.account=account;vm.accountId=accountId;vm.customFromIsReadonly=customFromIsReadonly;vm.cancel=cancel;vm.save=save;function customFromIsReadonly(){if(accountId>0)return false;return!mailCustomFromEnabled}function cancel(){$mdDialog.cancel()}function save(){$mdDialog.hide()}}angular.module("SOGo.PreferencesUI").controller("AccountDialogController",AccountDialogController)})();(function(){"use strict";FiltersDialogController.$inject=["$scope","$window","$mdDialog","filter","mailboxes","labels"];function FiltersDialogController($scope,$window,$mdDialog,filter,mailboxes,labels){var vm=this,sieveCapabilities=$window.sieveCapabilities;vm.filter=filter;vm.mailboxes=mailboxes;vm.labels=labels;vm.cancel=cancel;vm.save=save;vm.addMailFilterRule=addMailFilterRule;vm.removeMailFilterRule=removeMailFilterRule;vm.addMailFilterAction=addMailFilterAction;vm.removeMailFilterAction=removeMailFilterAction;vm.fieldLabels={subject:l("Subject"),from:l("From"),to:l("To"),cc:l("Cc"),to_or_cc:l("To or Cc"),size:l("Size (Kb)"),header:l("Header")};if(sieveCapabilities.indexOf("body")>-1)vm.fieldLabels.body=l("Body");vm.methodLabels={discard:l("Discard the message"),keep:l("Keep the message"),redirect:l("Forward the message to:"),vacation:l("Send a vacation message"),stop:l("Stop processing filter rules")};if(sieveCapabilities.indexOf("reject")>-1)vm.methodLabels.reject=l("Send a reject message:");if(sieveCapabilities.indexOf("fileinto")>-1)vm.methodLabels.fileinto=l("File the message in:");if(sieveCapabilities.indexOf("imapflags")>-1||sieveCapabilities.indexOf("imap4flags")>-1)vm.methodLabels.addflag=l("Flag the message with:");vm.numberOperatorLabels={under:l("is under"),over:l("is over")};vm.textOperatorLabels={is:l("is"),is_not:l("is not"),contains:l("contains"),contains_not:l("does not contain"),matches:l("matches"),matches_not:l("does not match")};if(sieveCapabilities.indexOf("regex")>-1){vm.textOperatorLabels.regex=l("matches regex");vm.textOperatorLabels.regex_not=l("does not match regex")}vm.flagLabels={seen:l("Seen"),deleted:l("Deleted"),answered:l("Answered"),flagged:l("Flagged"),junk:l("Junk"),not_junk:l("Not Junk")};function cancel(){$mdDialog.cancel()}function save(form){$mdDialog.hide()}function addMailFilterRule(event){if(!vm.filter.rules)vm.filter.rules=[];vm.filter.rules.push({field:"subject",operator:"contains"})}function removeMailFilterRule(index){vm.filter.rules.splice(index,1)}function addMailFilterAction(event){if(!vm.filter.actions)vm.filter.actions=[];vm.filter.actions.push({method:"discard"})}function removeMailFilterAction(index){vm.filter.actions.splice(index,1)}}angular.module("SOGo.PreferencesUI").controller("FiltersDialogController",FiltersDialogController)})();(function(){"use strict";PreferencesController.$inject=["$q","$window","$state","$mdDialog","$mdToast","Dialog","User","Account","statePreferences","Authentication"];function PreferencesController($q,$window,$state,$mdDialog,$mdToast,Dialog,User,Account,statePreferences,Authentication){var vm=this,account,mailboxes=[];vm.preferences=statePreferences;vm.passwords={newPassword:null,newPasswordConfirmation:null};vm.go=go;vm.onLanguageChange=onLanguageChange;vm.addCalendarCategory=addCalendarCategory;vm.removeCalendarCategory=removeCalendarCategory;vm.addContactCategory=addContactCategory;vm.removeContactCategory=removeContactCategory;vm.addMailAccount=addMailAccount;vm.editMailAccount=editMailAccount;vm.removeMailAccount=removeMailAccount;vm.addMailLabel=addMailLabel;vm.removeMailLabel=removeMailLabel;vm.addMailFilter=addMailFilter;vm.editMailFilter=editMailFilter;vm.removeMailFilter=removeMailFilter;vm.addDefaultEmailAddresses=addDefaultEmailAddresses;vm.userFilter=User.$filter;vm.save=save;vm.canChangePassword=canChangePassword;vm.changePassword=changePassword;vm.timeZonesList=window.timeZonesList;vm.timeZonesListFilter=timeZonesListFilter;vm.timeZonesSearchText="";account=new Account({id:0});account.$getMailboxes().then(function(){var allMailboxes=account.$flattenMailboxes({all:true}),index=-1,length=allMailboxes.length;while(++index0&&angular.isDefined(vm.preferences.defaults.Forward)&&vm.preferences.defaults.Forward.enabled&&angular.isDefined(vm.preferences.defaults.Forward.forwardAddress)){addresses=vm.preferences.defaults.Forward.forwardAddress.split(",");defaultAddresses=window.defaultEmailAddresses.split(/, */);_.forEach(defaultAddresses,function(adr){var domain=adr.split("@")[1];if(domain){domains.push(domain.toLowerCase())}});for(i=0;i=0&&window.forwardConstraints==2){Dialog.alert(l("Error"),l("You are not allowed to forward your messages to an internal email address."));sendForm=false}}}if(sendForm)return vm.preferences.$save().then(function(data){$mdToast.show({controller:"savePreferencesToastCtrl",template:["",' '," "+l("Preferences saved")+" ",' '," close "," ","
"," "].join(""),hideDelay:2e3,position:"top right"})});return $q.reject()}function canChangePassword(){if(vm.passwords.newPassword&&vm.passwords.newPassword.length>0&&vm.passwords.newPasswordConfirmation&&vm.passwords.newPasswordConfirmation.length&&vm.passwords.newPassword==vm.passwords.newPasswordConfirmation)return true;return false}function changePassword(){Authentication.changePassword(vm.passwords.newPassword).then(function(){var alert=$mdDialog.alert({title:l("Password"),content:l("The password was changed successfully."),ok:l("OK")});$mdDialog.show(alert).finally(function(){alert=undefined})},function(msg){var alert=$mdDialog.alert({title:l("Password"),content:msg,ok:l("OK")});$mdDialog.show(alert).finally(function(){alert=undefined})})}function timeZonesListFilter(filter){return _.filter(vm.timeZonesList,function(value){return value.toUpperCase().indexOf(filter.toUpperCase())>=0})}}savePreferencesToastCtrl.$inject=["$scope","$mdToast"];function savePreferencesToastCtrl($scope,$mdToast){$scope.closeToast=function(){$mdToast.hide()}}angular.module("SOGo.PreferencesUI").controller("savePreferencesToastCtrl",savePreferencesToastCtrl).controller("PreferencesController",PreferencesController)})();
//# sourceMappingURL=Preferences.js.map
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Preferences.js.map b/UI/WebServerResources/js/Preferences.js.map
index 1047a8747..e75a367c4 100644
--- a/UI/WebServerResources/js/Preferences.js.map
+++ b/UI/WebServerResources/js/Preferences.js.map
@@ -1 +1 @@
-{"version":3,"sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$stateProvider","$urlRouterProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","resolve","statePreferences","url","otherwise","Preferences","$rootScope","$on","event","current","previous","rejection","console","error","AccountDialogController","$mdDialog","defaults","account","accountId","mailCustomFromEnabled","vm","this","customFromIsReadonly","cancel","save","hide","FiltersDialogController","$scope","$window","filter","mailboxes","labels","sieveCapabilities","addMailFilterRule","removeMailFilterRule","addMailFilterAction","removeMailFilterAction","fieldLabels","subject","l","from","to","cc","to_or_cc","size","header","indexOf","body","methodLabels","discard","keep","redirect","vacation","stop","reject","fileinto","addflag","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","flagLabels","seen","deleted","answered","flagged","junk","not_junk","form","rules","push","field","operator","index","splice","actions","method","PreferencesController","$q","$state","$mdToast","Dialog","User","Account","Authentication","passwords","newPassword","newPasswordConfirmation","go","onLanguageChange","addCalendarCategory","removeCalendarCategory","addContactCategory","removeContactCategory","addMailAccount","editMailAccount","removeMailAccount","addMailLabel","removeMailLabel","addMailFilter","editMailFilter","removeMailFilter","addDefaultEmailAddresses","userFilter","$filter","canChangePassword","changePassword","timeZonesList","window","timeZonesListFilter","timeZonesSearchText","id","$getMailboxes","then","allMailboxes","$flattenMailboxes","all","length","ready","SOGoAlternateAvatar","$alternateAvatar","confirm","ok","location","reload","SOGoCalendarCategoriesColors","SOGoCalendarCategories","key","SOGoContactsCategories","ev","AuxiliaryMailAccounts","_","last","name","identities","fullName","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","SOGoMailLabelsColors","new_label","match","SOGoSieveFilters","copy","v","isDefined","Vacation","autoReplyEmailAddresses","split","union","defaultEmailAddresses","join","i","sendForm","addresses","defaultAddresses","domains","domain","forwardConstraints","Forward","enabled","forwardAddress","forEach","adr","toLowerCase","alert","$save","data","template","hideDelay","position","title","content","finally","undefined","msg","value","toUpperCase","savePreferencesToastCtrl","closeToast"],"mappings":"CAGA,WACE,YAEAA,SAAQC,OAAO,sBAAuB,aAAc,YAAa,KAAM,cAAe,gBAAiB,kBAAmB,wBACvHC,OAAOC,WACPC,IAAIC,SAKPF,WAAUG,SAAW,iBAAkB,qBACvC,SAASH,WAAUI,eAAgBC,oBACjCD,eACGE,MAAM,eACLC,WAAU,KACVC,OACEC,aACEC,YAAa,mBACbC,WAAY,wBACZC,aAAc,QAGlBC,SACEC,iBAAkBA,oBAGrBR,MAAM,uBACLS,IAAK,WACLP,OACEV,QACEY,YAAa,8BAIlBJ,MAAM,yBACLS,IAAK,aACLP,OACEV,QACEY,YAAa,gCAIlBJ,MAAM,4BACLS,IAAK,gBACLP,OACEV,QACEY,YAAa,mCAIlBJ,MAAM,sBACLS,IAAK,UACLP,OACEV,QACEY,YAAa,4BAMrBL,oBAAmBW,UAAU,YAM/BF,iBAAiBX,SAAW,cAC5B,SAASW,kBAAiBG,aACxB,MAAOA,aAMTf,SAASC,SAAW,aACpB,SAASD,UAASgB,YAChBA,WAAWC,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,WACrEC,QAAQC,MAAML,MAAOC,QAASC,SAAUC,mBC7E9C,WACE,YAKAG,yBAAwBvB,SAAW,YAAa,WAAY,UAAW,YAAa,wBACpF,SAASuB,yBAAwBC,UAAWC,SAAUC,QAASC,UAAWC,uBACxE,GAAIC,IAAKC,IAETD,IAAGJ,SAAWA,QACdI,IAAGH,QAAUA,OACbG,IAAGF,UAAYA,SACfE,IAAGE,qBAAuBA,oBAC1BF,IAAGG,OAASA,MACZH,IAAGI,KAAOA,IAEV,SAASF,wBACP,GAAIJ,UAAY,EACd,MAAO,MAET,QAAQC,sBAGV,QAASI,UACPR,UAAUQ,SAGZ,QAASC,QACPT,UAAUU,QAIdxC,QACGC,OAAO,sBACPa,WAAW,0BAA2Be,8BCnC3C,WACE,YAKAY,yBAAwBnC,SAAW,SAAU,UAAW,YAAa,SAAU,YAAa,SAC5F,SAASmC,yBAAwBC,OAAQC,QAASb,UAAWc,OAAQC,UAAWC,QAC9E,GAAIX,IAAKC,KAAMW,kBAAoBJ,QAAQI,iBAE3CZ,IAAGS,OAASA,MACZT,IAAGU,UAAYA,SACfV,IAAGW,OAASA,MACZX,IAAGG,OAASA,MACZH,IAAGI,KAAOA,IACVJ,IAAGa,kBAAoBA,iBACvBb,IAAGc,qBAAuBA,oBAC1Bd,IAAGe,oBAAsBA,mBACzBf,IAAGgB,uBAAyBA,sBAE5BhB,IAAGiB,aACDC,QAAWC,EAAE,WACbC,KAAQD,EAAE,QACVE,GAAMF,EAAE,MACRG,GAAMH,EAAE,MACRI,SAAYJ,EAAE,YACdK,KAAQL,EAAE,aACVM,OAAUN,EAAE,UAGd,IAAIP,kBAAkBc,QAAQ,SAAW,EACvC1B,GAAGiB,YAAYU,KAAOR,EAAE,OAE1BnB,IAAG4B,cACDC,QAAWV,EAAE,uBACbW,KAAQX,EAAE,oBACVY,SAAYZ,EAAE,2BACda,SAAYb,EAAE,2BACdc,KAAQd,EAAE,gCAGZ,IAAIP,kBAAkBc,QAAQ,WAAa,EACzC1B,GAAG4B,aAAaM,OAASf,EAAE,yBAE7B,IAAIP,kBAAkBc,QAAQ,aAAe,EAC3C1B,GAAG4B,aAAaO,SAAWhB,EAAE,uBAE/B,IAAIP,kBAAkBc,QAAQ,cAAgB,GAAKd,kBAAkBc,QAAQ,eAAiB,EAC5F1B,GAAG4B,aAAaQ,QAAUjB,EAAE,yBAE9BnB,IAAGqC,sBACDC,MAASnB,EAAE,YACXoB,KAAQpB,EAAE,WAGZnB,IAAGwC,oBACDC,GAAMtB,EAAE,MACRuB,OAAUvB,EAAE,UACZwB,SAAYxB,EAAE,YACdyB,aAAgBzB,EAAE,oBAClB0B,QAAW1B,EAAE,WACb2B,YAAe3B,EAAE,kBAGnB,IAAIP,kBAAkBc,QAAQ,UAAY,EAAG,CAC3C1B,GAAGwC,mBAAmBO,MAAQ5B,EAAE,gBAChCnB,IAAGwC,mBAAmBQ,UAAY7B,EAAE,wBAGtCnB,GAAGiD,YACDC,KAAQ/B,EAAE,QACVgC,QAAWhC,EAAE,WACbiC,SAAYjC,EAAE,YACdkC,QAAWlC,EAAE,WACbmC,KAAQnC,EAAE,QACVoC,SAAYpC,EAAE,YAGhB,SAAShB,UACPR,UAAUQ,SAGZ,QAASC,MAAKoD,MACZ7D,UAAUU,OAGZ,QAASQ,mBAAkBzB,OACzB,IAAKY,GAAGS,OAAOgD,MACbzD,GAAGS,OAAOgD,QAEZzD,IAAGS,OAAOgD,MAAMC,MAAOC,MAAO,UAAWC,SAAU,aAGrD,QAAS9C,sBAAqB+C,OAC5B7D,GAAGS,OAAOgD,MAAMK,OAAOD,MAAO,GAGhC,QAAS9C,qBAAoB3B,OAC3B,IAAKY,GAAGS,OAAOsD,QACb/D,GAAGS,OAAOsD,UAEZ/D,IAAGS,OAAOsD,QAAQL,MAAOM,OAAQ,YAGnC,QAAShD,wBAAuB6C,OAC9B7D,GAAGS,OAAOsD,QAAQD,OAAOD,MAAO,IAIpChG,QACGC,OAAO,sBACPa,WAAW,0BAA2B2B,8BC/G3C,WACE,YAKA2D,uBAAsB9F,SAAW,KAAM,UAAW,SAAU,YAAa,WAAY,SAAU,OAAQ,UAAW,mBAAoB,iBACtI,SAAS8F,uBAAsBC,GAAI1D,QAAS2D,OAAQxE,UAAWyE,SAAUC,OAAQC,KAAMC,QAASzF,iBAAkB0F,gBAChH,GAAIxE,IAAKC,KAAMJ,QAASa,YAExBV,IAAGvB,YAAcK,gBACjBkB,IAAGyE,WAAcC,YAAa,KAAMC,wBAAyB,KAE7D3E,IAAG4E,GAAKA,EACR5E,IAAG6E,iBAAmBA,gBACtB7E,IAAG8E,oBAAsBA,mBACzB9E,IAAG+E,uBAAyBA,sBAC5B/E,IAAGgF,mBAAqBA,kBACxBhF,IAAGiF,sBAAwBA,qBAC3BjF,IAAGkF,eAAiBA,cACpBlF,IAAGmF,gBAAkBA,eACrBnF,IAAGoF,kBAAoBA,iBACvBpF,IAAGqF,aAAeA,YAClBrF,IAAGsF,gBAAkBA,eACrBtF,IAAGuF,cAAgBA,aACnBvF,IAAGwF,eAAiBA,cACpBxF,IAAGyF,iBAAmBA,gBACtBzF,IAAG0F,yBAA2BA,wBAC9B1F,IAAG2F,WAAarB,KAAKsB,OACrB5F,IAAGI,KAAOA,IACVJ,IAAG6F,kBAAoBA,iBACvB7F,IAAG8F,eAAiBA,cACpB9F,IAAG+F,cAAgBC,OAAOD,aAC1B/F,IAAGiG,oBAAsBA,mBACzBjG,IAAGkG,oBAAsB,EAIzBrG,SAAU,GAAI0E,UAAU4B,GAAI,GAC5BtG,SAAQuG,gBAAgBC,KAAK,WAC3B,GAAIC,cAAezG,QAAQ0G,mBAAmBC,IAAK,OAC/C3C,OAAS,EACT4C,OAASH,aAAaG,MAC1B,SAAS5C,MAAQ4C,OAAQ,CACvB/F,UAAUgD,KAAK4C,aAAazC,UAKhC/E,kBAAiB4H,QAAQL,KAAK,WAC5B,GAAIvH,iBAAiBc,SAAS+G,oBAC5BrC,KAAKsC,iBAAmB9H,iBAAiBc,SAAS+G,qBAGtD,SAAS/B,IAAG9G,QACVqG,OAAOS,GAAG,eAAiB9G,QAG7B,QAAS+G,oBACPR,OAAOwC,QAAQ1F,EAAE,WACFA,EAAE,0CACD2F,GAAI3F,EAAE,OAAQhB,OAAQgB,EAAE,QACrCkF,KAAK,WACJjG,OAAOiG,KAAK,WACV7F,QAAQuG,SAASC,OAAO,UAKhC,QAASlC,uBACP9E,GAAGvB,YAAYmB,SAASqH,6BAA6B,gBAAkB,MACvEjH,IAAGvB,YAAYmB,SAASsH,uBAAuBxD,KAAK,gBAGtD,QAASqB,wBAAuBlB,OAC9B,GAAIsD,KAAMnH,GAAGvB,YAAYmB,SAASsH,uBAAuBrD,MACzD7D,IAAGvB,YAAYmB,SAASsH,uBAAuBpD,OAAOD,MAAO,SACtD7D,IAAGvB,YAAYmB,SAASqH,6BAA6BE,KAG9D,QAASnC,sBACPhF,GAAGvB,YAAYmB,SAASwH,uBAAuB1D,KAAK,IAGtD,QAASuB,uBAAsBpB,OAC7B7D,GAAGvB,YAAYmB,SAASwH,uBAAuBtD,OAAOD,MAAO,GAG/D,QAASqB,gBAAemC,IACtB,GAAIxH,QAEJG,IAAGvB,YAAYmB,SAAS0H,sBAAsB5D,QAE9C7D,SAAU0H,EAAEC,KAAKxH,GAAGvB,YAAYmB,SAAS0H,sBACzCzH,SAAQ4H,KAAOtG,EAAE,cACjBtB,SAAQ6H,aAEJC,SAAU,GACVC,MAAO,IAGX/H,SAAQgI,UACNC,cAAe,SACfC,0BAA2B,SAC3BC,2BAA4B,SAC5BC,iBAAkB,SAGpBtI,WAAUuI,MACRvJ,WAAY,0BACZC,aAAc,2BACdF,YAAa,0BACbyJ,YAAad,GACbe,QACExI,SAAUI,GAAGvB,YAAYmB,SACzBC,QAASA,QACTC,UAAYE,GAAGvB,YAAYmB,SAAS0H,sBAAsBb,OAAO,EACjE1G,sBAAuBiG,OAAOjG,yBAKpC,QAASoF,iBAAgB/F,MAAOyE,OAC9B,GAAIhE,SAAUG,GAAGvB,YAAYmB,SAAS0H,sBAAsBzD,MAC5DlE,WAAUuI,MACRvJ,WAAY,0BACZC,aAAc,2BACdF,YAAa,uBAAyBmF,MACtCsE,YAAa/I,MACbgJ,QACExI,SAAUI,GAAGvB,YAAYmB,SACzBC,QAASA,QACTC,UAAW+D,MACX9D,sBAAuBiG,OAAOjG,yBAE/BsG,KAAK,WACNrG,GAAGvB,YAAYmB,SAAS0H,sBAAsBzD,OAAShE,UAI3D,QAASuF,mBAAkBvB,OACzB7D,GAAGvB,YAAYmB,SAAS0H,sBAAsBxD,OAAOD,MAAO,GAG9D,QAASwB,gBACPrF,GAAGvB,YAAYmB,SAASyI,qBAAqBC,WAAc,YAAa,QAG1E,QAAShD,iBAAgB6B,WAChBnH,IAAGvB,YAAYmB,SAASyI,qBAAqBlB,KAGtD,QAAS5B,eAAc8B,IACrB,GAAI5G,SAAW8H,MAAO,MAEtB5I,WAAUuI,MACRxJ,YAAa,wBACbC,WAAY,0BACZC,aAAc,eACduJ,YAAad,GACbe,QACE3H,OAAQA,OACRC,UAAWA,UACXC,OAAQX,GAAGvB,YAAYmB,SAASyI,wBAEjChC,KAAK,WACN,IAAKrG,GAAGvB,YAAYmB,SAAS4I,iBAC3BxI,GAAGvB,YAAYmB,SAAS4I,mBAC1BxI,IAAGvB,YAAYmB,SAAS4I,iBAAiB9E,KAAKjD,UAIlD,QAAS+E,gBAAe6B,GAAIxD,OAC1B,GAAIpD,QAAS5C,QAAQ4K,KAAKzI,GAAGvB,YAAYmB,SAAS4I,iBAAiB3E,OAEnElE,WAAUuI,MACRxJ,YAAa,qBAAuBmF,MACpClF,WAAY,0BACZC,aAAc,eACduJ,YAAa,KACbC,QACE3H,OAAQA,OACRC,UAAWA,UACXC,OAAQX,GAAGvB,YAAYmB,SAASyI,wBAEjChC,KAAK,WACNrG,GAAGvB,YAAYmB,SAAS4I,iBAAiB3E,OAASpD,SAItD,QAASgF,kBAAiB5B,OACxB7D,GAAGvB,YAAYmB,SAAS4I,iBAAiB1E,OAAOD,MAAO,GAGzD,QAAS6B,4BACP,GAAIgD,KAEJ,IAAI7K,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAASgJ,SAASC,yBAA0B,CAC/EH,EAAI1I,GAAGvB,YAAYmB,SAASgJ,SAASC,wBAAwBC,MAAM,KAGrE9I,GAAGvB,YAAYmB,SAASgJ,SAASC,wBAA2BtB,EAAEwB,MAAM/C,OAAOgD,sBAAsBF,MAAM,KAAMJ,GAAIO,KAAK,KAGxH,QAAS7I,QACP,GAAI8I,GAAGC,SAAUC,UAAWC,iBAAkBC,QAASC,MAEvDJ,UAAW,IACXG,WAGA,IAAItD,OAAOwD,mBAAqB,GAC5B3L,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAAS6J,UAC1CzJ,GAAGvB,YAAYmB,SAAS6J,QAAQC,SAChC7L,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAAS6J,QAAQE,gBAAiB,CAErEP,UAAYpJ,GAAGvB,YAAYmB,SAAS6J,QAAQE,eAAeb,MAAM,IAGjEO,kBAAmBrD,OAAOgD,sBAAsBF,MAAM,MAEtDvB,GAAEqC,QAAQP,iBAAkB,SAASQ,KACnC,GAAIN,QAASM,IAAIf,MAAM,KAAK,EAC5B,IAAIS,OAAQ,CACVD,QAAQ5F,KAAK6F,OAAOO,iBAKxB,KAAKZ,EAAI,EAAGA,EAAIE,UAAU3C,QAAU0C,SAAUD,IAAK,CACjDK,OAASH,UAAUF,GAAGJ,MAAM,KAAK,GAAGgB,aACpC,IAAIR,QAAQ5H,QAAQ6H,QAAU,GAAKvD,OAAOwD,oBAAsB,EAAG,CACjEnF,OAAO0F,MAAM5I,EAAE,SAAUA,EAAE,8EAC3BgI,UAAW,UAER,IAAIG,QAAQ5H,QAAQ6H,SAAW,GAAKvD,OAAOwD,oBAAsB,EAAG,CACvEnF,OAAO0F,MAAM5I,EAAE,SAAUA,EAAE,8EAC3BgI,UAAW,QAKjB,GAAIA,SACF,MAAOnJ,IAAGvB,YAAYuL,QAAQ3D,KAAK,SAAS4D,MAC1C7F,SAAS8D,MACPvJ,WAAY,2BACZuL,UACE,aACA,iBAAmB/I,EAAE,qBAAuB,UAC5C,2EACA,iCACA,kBACA,eACA8H,KAAK,IACPkB,UAAW,IACXC,SAAU,eAIhB,OAAOlG,IAAGhC,SAGZ,QAAS2D,qBACP,GAAI7F,GAAGyE,UAAUC,aAAe1E,GAAGyE,UAAUC,YAAY+B,OAAS,GAC9DzG,GAAGyE,UAAUE,yBAA2B3E,GAAGyE,UAAUE,wBAAwB8B,QAC7EzG,GAAGyE,UAAUC,aAAe1E,GAAGyE,UAAUE,wBAC3C,MAAO,KAET,OAAO,OAGT,QAASmB,kBACPtB,eAAesB,eAAe9F,GAAGyE,UAAUC,aAAa2B,KAAK,WAC3D,GAAI0D,OAAQpK,UAAUoK,OACpBM,MAAOlJ,EAAE,YACTmJ,QAASnJ,EAAE,0CACX2F,GAAI3F,EAAE,OAERxB,WAAUuI,KAAM6B,OACbQ,QAAQ,WACPR,MAAQS,aAEX,SAASC,KACV,GAAIV,OAAQpK,UAAUoK,OACpBM,MAAOlJ,EAAE,YACTmJ,QAASG,IACT3D,GAAI3F,EAAE,OAERxB,WAAUuI,KAAM6B,OACbQ,QAAQ,WACPR,MAAQS,cAKhB,QAASvE,qBAAoBxF,QAC3B,MAAO8G,GAAE9G,OAAOT,GAAG+F,cAAe,SAAS2E,OACzC,MAAOA,OAAMC,cAAcjJ,QAAQjB,OAAOkK,gBAAkB,KAKlEC,yBAAyBzM,SAAW,SAAU,WAC9C,SAASyM,0BAAyBrK,OAAQ6D,UACxC7D,OAAOsK,WAAa,WAClBzG,SAAS/D,QAIbxC,QACGC,OAAO,sBACPa,WAAW,2BAA4BiM,0BACvCjM,WAAW,wBAAyBsF","file":"Preferences.js"}
\ No newline at end of file
+{"version":3,"sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$stateProvider","$urlRouterProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","resolve","statePreferences","url","otherwise","Preferences","$rootScope","$on","event","current","previous","rejection","console","error","AccountDialogController","$mdDialog","defaults","account","accountId","mailCustomFromEnabled","vm","this","customFromIsReadonly","cancel","save","hide","FiltersDialogController","$scope","$window","filter","mailboxes","labels","sieveCapabilities","addMailFilterRule","removeMailFilterRule","addMailFilterAction","removeMailFilterAction","fieldLabels","subject","l","from","to","cc","to_or_cc","size","header","indexOf","body","methodLabels","discard","keep","redirect","vacation","stop","reject","fileinto","addflag","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","flagLabels","seen","deleted","answered","flagged","junk","not_junk","form","rules","push","field","operator","index","splice","actions","method","PreferencesController","$q","$state","$mdToast","Dialog","User","Account","Authentication","passwords","newPassword","newPasswordConfirmation","go","onLanguageChange","addCalendarCategory","removeCalendarCategory","addContactCategory","removeContactCategory","addMailAccount","editMailAccount","removeMailAccount","addMailLabel","removeMailLabel","addMailFilter","editMailFilter","removeMailFilter","addDefaultEmailAddresses","userFilter","$filter","canChangePassword","changePassword","timeZonesList","window","timeZonesListFilter","timeZonesSearchText","id","$getMailboxes","then","allMailboxes","$flattenMailboxes","all","length","ready","SOGoAlternateAvatar","$alternateAvatar","confirm","ok","location","reload","SOGoCalendarCategoriesColors","SOGoCalendarCategories","key","SOGoContactsCategories","ev","AuxiliaryMailAccounts","_","last","name","identities","fullName","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","SOGoMailLabelsColors","new_label","match","SOGoSieveFilters","copy","v","isDefined","Vacation","autoReplyEmailAddresses","split","union","defaultEmailAddresses","join","i","sendForm","addresses","defaultAddresses","domains","domain","forwardConstraints","Forward","enabled","forwardAddress","forEach","adr","toLowerCase","alert","$save","data","template","hideDelay","position","title","content","finally","undefined","msg","value","toUpperCase","savePreferencesToastCtrl","closeToast"],"mappings":"CAGA,WACE,YAEAA,SAAQC,OAAO,sBAAuB,aAAc,YAAa,KAAM,cAAe,gBAAiB,kBAAmB,wBACvHC,OAAOC,WACPC,IAAIC,SAKPF,WAAUG,SAAW,iBAAkB,qBACvC,SAASH,WAAUI,eAAgBC,oBACjCD,eACGE,MAAM,eACLC,WAAU,KACVC,OACEC,aACEC,YAAa,mBACbC,WAAY,wBACZC,aAAc,QAGlBC,SACEC,iBAAkBA,oBAGrBR,MAAM,uBACLS,IAAK,WACLP,OACEV,QACEY,YAAa,8BAIlBJ,MAAM,yBACLS,IAAK,aACLP,OACEV,QACEY,YAAa,gCAIlBJ,MAAM,4BACLS,IAAK,gBACLP,OACEV,QACEY,YAAa,mCAIlBJ,MAAM,sBACLS,IAAK,UACLP,OACEV,QACEY,YAAa,4BAMrBL,oBAAmBW,UAAU,YAM/BF,iBAAiBX,SAAW,cAC5B,SAASW,kBAAiBG,aACxB,MAAOA,aAMTf,SAASC,SAAW,aACpB,SAASD,UAASgB,YAChBA,WAAWC,IAAI,oBAAqB,SAASC,MAAOC,QAASC,SAAUC,WACrEC,QAAQC,MAAML,MAAOC,QAASC,SAAUC,mBC7E9C,WACE,YAKAG,yBAAwBvB,SAAW,YAAa,WAAY,UAAW,YAAa,wBACpF,SAASuB,yBAAwBC,UAAWC,SAAUC,QAASC,UAAWC,uBACxE,GAAIC,IAAKC,IAETD,IAAGJ,SAAWA,QACdI,IAAGH,QAAUA,OACbG,IAAGF,UAAYA,SACfE,IAAGE,qBAAuBA,oBAC1BF,IAAGG,OAASA,MACZH,IAAGI,KAAOA,IAEV,SAASF,wBACP,GAAIJ,UAAY,EACd,MAAO,MAET,QAAQC,sBAGV,QAASI,UACPR,UAAUQ,SAGZ,QAASC,QACPT,UAAUU,QAIdxC,QACGC,OAAO,sBACPa,WAAW,0BAA2Be,8BCnC3C,WACE,YAKAY,yBAAwBnC,SAAW,SAAU,UAAW,YAAa,SAAU,YAAa,SAC5F,SAASmC,yBAAwBC,OAAQC,QAASb,UAAWc,OAAQC,UAAWC,QAC9E,GAAIX,IAAKC,KAAMW,kBAAoBJ,QAAQI,iBAE3CZ,IAAGS,OAASA,MACZT,IAAGU,UAAYA,SACfV,IAAGW,OAASA,MACZX,IAAGG,OAASA,MACZH,IAAGI,KAAOA,IACVJ,IAAGa,kBAAoBA,iBACvBb,IAAGc,qBAAuBA,oBAC1Bd,IAAGe,oBAAsBA,mBACzBf,IAAGgB,uBAAyBA,sBAE5BhB,IAAGiB,aACDC,QAAWC,EAAE,WACbC,KAAQD,EAAE,QACVE,GAAMF,EAAE,MACRG,GAAMH,EAAE,MACRI,SAAYJ,EAAE,YACdK,KAAQL,EAAE,aACVM,OAAUN,EAAE,UAGd,IAAIP,kBAAkBc,QAAQ,SAAW,EACvC1B,GAAGiB,YAAYU,KAAOR,EAAE,OAE1BnB,IAAG4B,cACDC,QAAWV,EAAE,uBACbW,KAAQX,EAAE,oBACVY,SAAYZ,EAAE,2BACda,SAAYb,EAAE,2BACdc,KAAQd,EAAE,gCAGZ,IAAIP,kBAAkBc,QAAQ,WAAa,EACzC1B,GAAG4B,aAAaM,OAASf,EAAE,yBAE7B,IAAIP,kBAAkBc,QAAQ,aAAe,EAC3C1B,GAAG4B,aAAaO,SAAWhB,EAAE,uBAE/B,IAAIP,kBAAkBc,QAAQ,cAAgB,GAAKd,kBAAkBc,QAAQ,eAAiB,EAC5F1B,GAAG4B,aAAaQ,QAAUjB,EAAE,yBAE9BnB,IAAGqC,sBACDC,MAASnB,EAAE,YACXoB,KAAQpB,EAAE,WAGZnB,IAAGwC,oBACDC,GAAMtB,EAAE,MACRuB,OAAUvB,EAAE,UACZwB,SAAYxB,EAAE,YACdyB,aAAgBzB,EAAE,oBAClB0B,QAAW1B,EAAE,WACb2B,YAAe3B,EAAE,kBAGnB,IAAIP,kBAAkBc,QAAQ,UAAY,EAAG,CAC3C1B,GAAGwC,mBAAmBO,MAAQ5B,EAAE,gBAChCnB,IAAGwC,mBAAmBQ,UAAY7B,EAAE,wBAGtCnB,GAAGiD,YACDC,KAAQ/B,EAAE,QACVgC,QAAWhC,EAAE,WACbiC,SAAYjC,EAAE,YACdkC,QAAWlC,EAAE,WACbmC,KAAQnC,EAAE,QACVoC,SAAYpC,EAAE,YAGhB,SAAShB,UACPR,UAAUQ,SAGZ,QAASC,MAAKoD,MACZ7D,UAAUU,OAGZ,QAASQ,mBAAkBzB,OACzB,IAAKY,GAAGS,OAAOgD,MACbzD,GAAGS,OAAOgD,QAEZzD,IAAGS,OAAOgD,MAAMC,MAAOC,MAAO,UAAWC,SAAU,aAGrD,QAAS9C,sBAAqB+C,OAC5B7D,GAAGS,OAAOgD,MAAMK,OAAOD,MAAO,GAGhC,QAAS9C,qBAAoB3B,OAC3B,IAAKY,GAAGS,OAAOsD,QACb/D,GAAGS,OAAOsD,UAEZ/D,IAAGS,OAAOsD,QAAQL,MAAOM,OAAQ,YAGnC,QAAShD,wBAAuB6C,OAC9B7D,GAAGS,OAAOsD,QAAQD,OAAOD,MAAO,IAIpChG,QACGC,OAAO,sBACPa,WAAW,0BAA2B2B,8BC/G3C,WACE,YAKA2D,uBAAsB9F,SAAW,KAAM,UAAW,SAAU,YAAa,WAAY,SAAU,OAAQ,UAAW,mBAAoB,iBACtI,SAAS8F,uBAAsBC,GAAI1D,QAAS2D,OAAQxE,UAAWyE,SAAUC,OAAQC,KAAMC,QAASzF,iBAAkB0F,gBAChH,GAAIxE,IAAKC,KAAMJ,QAASa,YAExBV,IAAGvB,YAAcK,gBACjBkB,IAAGyE,WAAcC,YAAa,KAAMC,wBAAyB,KAE7D3E,IAAG4E,GAAKA,EACR5E,IAAG6E,iBAAmBA,gBACtB7E,IAAG8E,oBAAsBA,mBACzB9E,IAAG+E,uBAAyBA,sBAC5B/E,IAAGgF,mBAAqBA,kBACxBhF,IAAGiF,sBAAwBA,qBAC3BjF,IAAGkF,eAAiBA,cACpBlF,IAAGmF,gBAAkBA,eACrBnF,IAAGoF,kBAAoBA,iBACvBpF,IAAGqF,aAAeA,YAClBrF,IAAGsF,gBAAkBA,eACrBtF,IAAGuF,cAAgBA,aACnBvF,IAAGwF,eAAiBA,cACpBxF,IAAGyF,iBAAmBA,gBACtBzF,IAAG0F,yBAA2BA,wBAC9B1F,IAAG2F,WAAarB,KAAKsB,OACrB5F,IAAGI,KAAOA,IACVJ,IAAG6F,kBAAoBA,iBACvB7F,IAAG8F,eAAiBA,cACpB9F,IAAG+F,cAAgBC,OAAOD,aAC1B/F,IAAGiG,oBAAsBA,mBACzBjG,IAAGkG,oBAAsB,EAIzBrG,SAAU,GAAI0E,UAAU4B,GAAI,GAC5BtG,SAAQuG,gBAAgBC,KAAK,WAC3B,GAAIC,cAAezG,QAAQ0G,mBAAmBC,IAAK,OAC/C3C,OAAS,EACT4C,OAASH,aAAaG,MAC1B,SAAS5C,MAAQ4C,OAAQ,CACvB/F,UAAUgD,KAAK4C,aAAazC,UAKhC/E,kBAAiB4H,QAAQL,KAAK,WAC5B,GAAIvH,iBAAiBc,SAAS+G,oBAC5BrC,KAAKsC,iBAAmB9H,iBAAiBc,SAAS+G,qBAGtD,SAAS/B,IAAG9G,QACVqG,OAAOS,GAAG,eAAiB9G,QAG7B,QAAS+G,oBACPR,OAAOwC,QAAQ1F,EAAE,WACFA,EAAE,0CACD2F,GAAI3F,EAAE,OAAQhB,OAAQgB,EAAE,QACrCkF,KAAK,WACJjG,OAAOiG,KAAK,WACV7F,QAAQuG,SAASC,OAAO,UAKhC,QAASlC,uBACP9E,GAAGvB,YAAYmB,SAASqH,6BAA6B,gBAAkB,MACvEjH,IAAGvB,YAAYmB,SAASsH,uBAAuBxD,KAAK,gBAGtD,QAASqB,wBAAuBlB,OAC9B,GAAIsD,KAAMnH,GAAGvB,YAAYmB,SAASsH,uBAAuBrD,MACzD7D,IAAGvB,YAAYmB,SAASsH,uBAAuBpD,OAAOD,MAAO,SACtD7D,IAAGvB,YAAYmB,SAASqH,6BAA6BE,KAG9D,QAASnC,sBACPhF,GAAGvB,YAAYmB,SAASwH,uBAAuB1D,KAAK,IAGtD,QAASuB,uBAAsBpB,OAC7B7D,GAAGvB,YAAYmB,SAASwH,uBAAuBtD,OAAOD,MAAO,GAG/D,QAASqB,gBAAemC,IACtB,GAAIxH,QAEJG,IAAGvB,YAAYmB,SAAS0H,sBAAsB5D,QAE9C7D,SAAU0H,EAAEC,KAAKxH,GAAGvB,YAAYmB,SAAS0H,sBACzCzH,SAAQ4H,KAAOtG,EAAE,cACjBtB,SAAQ6H,aAEJC,SAAU,GACVC,MAAO,IAGX/H,SAAQgI,UACNC,cAAe,SACfC,0BAA2B,SAC3BC,2BAA4B,SAC5BC,iBAAkB,SAGpBtI,WAAUuI,MACRvJ,WAAY,0BACZC,aAAc,2BACdF,YAAa,0BACbyJ,YAAad,GACbe,QACExI,SAAUI,GAAGvB,YAAYmB,SACzBC,QAASA,QACTC,UAAYE,GAAGvB,YAAYmB,SAAS0H,sBAAsBb,OAAO,EACjE1G,sBAAuBiG,OAAOjG,yBAKpC,QAASoF,iBAAgB/F,MAAOyE,OAC9B,GAAIhE,SAAUG,GAAGvB,YAAYmB,SAAS0H,sBAAsBzD,MAC5DlE,WAAUuI,MACRvJ,WAAY,0BACZC,aAAc,2BACdF,YAAa,uBAAyBmF,MACtCsE,YAAa/I,MACbgJ,QACExI,SAAUI,GAAGvB,YAAYmB,SACzBC,QAASA,QACTC,UAAW+D,MACX9D,sBAAuBiG,OAAOjG,yBAE/BsG,KAAK,WACNrG,GAAGvB,YAAYmB,SAAS0H,sBAAsBzD,OAAShE,UAI3D,QAASuF,mBAAkBvB,OACzB7D,GAAGvB,YAAYmB,SAAS0H,sBAAsBxD,OAAOD,MAAO,GAG9D,QAASwB,gBACPrF,GAAGvB,YAAYmB,SAASyI,qBAAqBC,WAAc,YAAa,QAG1E,QAAShD,iBAAgB6B,WAChBnH,IAAGvB,YAAYmB,SAASyI,qBAAqBlB,KAGtD,QAAS5B,eAAc8B,IACrB,GAAI5G,SAAW8H,MAAO,MAEtB5I,WAAUuI,MACRxJ,YAAa,wBACbC,WAAY,0BACZC,aAAc,eACduJ,YAAad,GACbe,QACE3H,OAAQA,OACRC,UAAWA,UACXC,OAAQX,GAAGvB,YAAYmB,SAASyI,wBAEjChC,KAAK,WACN,IAAKrG,GAAGvB,YAAYmB,SAAS4I,iBAC3BxI,GAAGvB,YAAYmB,SAAS4I,mBAC1BxI,IAAGvB,YAAYmB,SAAS4I,iBAAiB9E,KAAKjD,UAIlD,QAAS+E,gBAAe6B,GAAIxD,OAC1B,GAAIpD,QAAS5C,QAAQ4K,KAAKzI,GAAGvB,YAAYmB,SAAS4I,iBAAiB3E,OAEnElE,WAAUuI,MACRxJ,YAAa,qBAAuBmF,MACpClF,WAAY,0BACZC,aAAc,eACduJ,YAAa,KACbC,QACE3H,OAAQA,OACRC,UAAWA,UACXC,OAAQX,GAAGvB,YAAYmB,SAASyI,wBAEjChC,KAAK,WACNrG,GAAGvB,YAAYmB,SAAS4I,iBAAiB3E,OAASpD,SAItD,QAASgF,kBAAiB5B,OACxB7D,GAAGvB,YAAYmB,SAAS4I,iBAAiB1E,OAAOD,MAAO,GAGzD,QAAS6B,4BACP,GAAIgD,KAEJ,IAAI7K,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAASgJ,SAASC,yBAA0B,CAC/EH,EAAI1I,GAAGvB,YAAYmB,SAASgJ,SAASC,wBAAwBC,MAAM,KAGrE9I,GAAGvB,YAAYmB,SAASgJ,SAASC,wBAA2BtB,EAAEwB,MAAM/C,OAAOgD,sBAAsBF,MAAM,KAAMJ,GAAIO,KAAK,KAGxH,QAAS7I,QACP,GAAI8I,GAAGC,SAAUC,UAAWC,iBAAkBC,QAASC,MAEvDJ,UAAW,IACXG,WAGA,IAAItD,OAAOwD,mBAAqB,GAC5B3L,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAAS6J,UAC1CzJ,GAAGvB,YAAYmB,SAAS6J,QAAQC,SAChC7L,QAAQ8K,UAAU3I,GAAGvB,YAAYmB,SAAS6J,QAAQE,gBAAiB,CAErEP,UAAYpJ,GAAGvB,YAAYmB,SAAS6J,QAAQE,eAAeb,MAAM,IAGjEO,kBAAmBrD,OAAOgD,sBAAsBF,MAAM,MAEtDvB,GAAEqC,QAAQP,iBAAkB,SAASQ,KACnC,GAAIN,QAASM,IAAIf,MAAM,KAAK,EAC5B,IAAIS,OAAQ,CACVD,QAAQ5F,KAAK6F,OAAOO,iBAKxB,KAAKZ,EAAI,EAAGA,EAAIE,UAAU3C,QAAU0C,SAAUD,IAAK,CACjDK,OAASH,UAAUF,GAAGJ,MAAM,KAAK,GAAGgB,aACpC,IAAIR,QAAQ5H,QAAQ6H,QAAU,GAAKvD,OAAOwD,oBAAsB,EAAG,CACjEnF,OAAO0F,MAAM5I,EAAE,SAAUA,EAAE,8EAC3BgI,UAAW,UAER,IAAIG,QAAQ5H,QAAQ6H,SAAW,GAAKvD,OAAOwD,oBAAsB,EAAG,CACvEnF,OAAO0F,MAAM5I,EAAE,SAAUA,EAAE,8EAC3BgI,UAAW,QAKjB,GAAIA,SACF,MAAOnJ,IAAGvB,YAAYuL,QAAQ3D,KAAK,SAAS4D,MAC1C7F,SAAS8D,MACPvJ,WAAY,2BACZuL,UACE,aACA,mCACA,kBAAoB/I,EAAE,qBAAuB,UAC7C,4EACA,iCACA,mBACA,WACA,eACA8H,KAAK,IACPkB,UAAW,IACXC,SAAU,eAIhB,OAAOlG,IAAGhC,SAGZ,QAAS2D,qBACP,GAAI7F,GAAGyE,UAAUC,aAAe1E,GAAGyE,UAAUC,YAAY+B,OAAS,GAC9DzG,GAAGyE,UAAUE,yBAA2B3E,GAAGyE,UAAUE,wBAAwB8B,QAC7EzG,GAAGyE,UAAUC,aAAe1E,GAAGyE,UAAUE,wBAC3C,MAAO,KAET,OAAO,OAGT,QAASmB,kBACPtB,eAAesB,eAAe9F,GAAGyE,UAAUC,aAAa2B,KAAK,WAC3D,GAAI0D,OAAQpK,UAAUoK,OACpBM,MAAOlJ,EAAE,YACTmJ,QAASnJ,EAAE,0CACX2F,GAAI3F,EAAE,OAERxB,WAAUuI,KAAM6B,OACbQ,QAAQ,WACPR,MAAQS,aAEX,SAASC,KACV,GAAIV,OAAQpK,UAAUoK,OACpBM,MAAOlJ,EAAE,YACTmJ,QAASG,IACT3D,GAAI3F,EAAE,OAERxB,WAAUuI,KAAM6B,OACbQ,QAAQ,WACPR,MAAQS,cAKhB,QAASvE,qBAAoBxF,QAC3B,MAAO8G,GAAE9G,OAAOT,GAAG+F,cAAe,SAAS2E,OACzC,MAAOA,OAAMC,cAAcjJ,QAAQjB,OAAOkK,gBAAkB,KAKlEC,yBAAyBzM,SAAW,SAAU,WAC9C,SAASyM,0BAAyBrK,OAAQ6D,UACxC7D,OAAOsK,WAAa,WAClBzG,SAAS/D,QAIbxC,QACGC,OAAO,sBACPa,WAAW,2BAA4BiM,0BACvCjM,WAAW,wBAAyBsF","file":"Preferences.js"}
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Preferences.services.js b/UI/WebServerResources/js/Preferences.services.js
index 8e405a377..34dab4616 100644
--- a/UI/WebServerResources/js/Preferences.services.js
+++ b/UI/WebServerResources/js/Preferences.services.js
@@ -1,2 +1,2 @@
-(function(){"use strict";function Preferences(){var _this=this;this.defaults={};this.settings={};this.defaultsPromise=Preferences.$$resource.fetch("jsonDefaults").then(function(data){var labels=_.object(_.map(data.SOGoMailLabelsColors,function(value,key){if(key.charAt(0)=="$")return["_"+key,value];return[key,value]}));data.SOGoMailLabelsColors=labels;if(data.Vacation){if(data.Vacation.endDate)data.Vacation.endDate=new Date(parseInt(data.Vacation.endDate)*1e3);else{data.Vacation.endDateEnabled=0;data.Vacation.endDate=new Date}if(data.Vacation.autoReplyEmailAddresses&&data.Vacation.autoReplyEmailAddresses.length)data.Vacation.autoReplyEmailAddresses=data.Vacation.autoReplyEmailAddresses.join(",");else delete data.Vacation.autoReplyEmailAddresses}else data.Vacation={};if(!angular.isDefined(data.Vacation.autoReplyEmailAddresses)&&angular.isDefined(window.defaultEmailAddresses))data.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses;if(!angular.isDefined(data.Vacation.daysBetweenResponse))data.Vacation.daysBetweenResponse=7;if(!angular.isDefined(data.Vacation.endDate)){data.Vacation.endDateEnabled=0;data.Vacation.endDate=new Date}if(data.Forward&&data.Forward.forwardAddress)data.Forward.forwardAddress=data.Forward.forwardAddress.join(",");angular.extend(_this.defaults,data);return _this.defaults});this.settingsPromise=Preferences.$$resource.fetch("jsonSettings").then(function(data){if(data.Calendar){if(data.Calendar.PreventInvitationsWhitelist)data.Calendar.PreventInvitationsWhitelist=_.map(data.Calendar.PreventInvitationsWhitelist,function(value,key){var match=/^(.+)\s<(\S+)>$/.exec(value);return new Preferences.$User({uid:key,cn:match[1],c_email:match[2]})});else data.Calendar.PreventInvitationsWhitelist=[]}angular.extend(_this.settings,data);return _this.settings})}Preferences.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function($q,$timeout,$log,Settings,Resource,User){angular.extend(Preferences,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),activeUser:Settings.activeUser(),$User:User});return new Preferences}];try{angular.module("SOGo.PreferencesUI")}catch(e){angular.module("SOGo.PreferencesUI",["SOGo.Common"])}angular.module("SOGo.PreferencesUI").factory("Preferences",Preferences.$factory);Preferences.prototype.ready=function(){return Preferences.$q.all([this.defaultsPromise,this.settingsPromise])};Preferences.prototype.$save=function(){var _this=this;return Preferences.$$resource.save("Preferences",this.$omit(true)).then(function(data){return data})};Preferences.prototype.$omit=function(deep){var preferences,labels,whitelist;preferences={};whitelist={};angular.forEach(this,function(value,key){if(key!="constructor"&&key[0]!="$"){if(deep)preferences[key]=angular.copy(value);else preferences[key]=value}});labels=_.object(_.map(preferences.defaults.SOGoMailLabelsColors,function(value,key){if(key.charAt(0)=="_"&&key.charAt(1)=="$")return[key.substring(1),value];return[key,value]}));preferences.defaults.SOGoMailLabelsColors=labels;if(preferences.defaults.Vacation){if(preferences.defaults.Vacation.endDateEnabled)preferences.defaults.Vacation.endDate=preferences.defaults.Vacation.endDate.getTime()/1e3;else preferences.defaults.Vacation.endDate=0;if(preferences.defaults.Vacation.autoReplyEmailAddresses)preferences.defaults.Vacation.autoReplyEmailAddresses=preferences.defaults.Vacation.autoReplyEmailAddresses.split(",");else preferences.defaults.Vacation.autoReplyEmailAddresses=[]}if(preferences.defaults.Forward&&preferences.defaults.Forward.forwardAddress)preferences.defaults.Forward.forwardAddress=preferences.defaults.Forward.forwardAddress.split(",");if(preferences.settings.Calendar&&preferences.settings.Calendar.PreventInvitationsWhitelist){_.each(preferences.settings.Calendar.PreventInvitationsWhitelist,function(user){whitelist[user.uid]=user.$shortFormat()});preferences.settings.Calendar.PreventInvitationsWhitelist=whitelist}return preferences}})();
+(function(){"use strict";function Preferences(){var _this=this;this.defaults={};this.settings={};this.defaultsPromise=Preferences.$$resource.fetch("jsonDefaults").then(function(data){var labels=_.object(_.map(data.SOGoMailLabelsColors,function(value,key){if(key.charAt(0)=="$")return["_"+key,value];return[key,value]}));data.SOGoMailLabelsColors=labels;if(data.Vacation){if(data.Vacation.endDate)data.Vacation.endDate=new Date(parseInt(data.Vacation.endDate)*1e3);else{data.Vacation.endDateEnabled=0;data.Vacation.endDate=new Date}if(data.Vacation.autoReplyEmailAddresses&&data.Vacation.autoReplyEmailAddresses.length)data.Vacation.autoReplyEmailAddresses=data.Vacation.autoReplyEmailAddresses.join(",");else delete data.Vacation.autoReplyEmailAddresses}else data.Vacation={};if(!angular.isDefined(data.Vacation.autoReplyEmailAddresses)&&angular.isDefined(window.defaultEmailAddresses))data.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses;if(!angular.isDefined(data.Vacation.daysBetweenResponse))data.Vacation.daysBetweenResponse=7;if(!angular.isDefined(data.Vacation.endDate)){data.Vacation.endDateEnabled=0;data.Vacation.endDate=new Date}if(data.Forward&&data.Forward.forwardAddress)data.Forward.forwardAddress=data.Forward.forwardAddress.join(",");angular.extend(_this.defaults,data);return _this.defaults});this.settingsPromise=Preferences.$$resource.fetch("jsonSettings").then(function(data){if(data.Calendar){if(data.Calendar.PreventInvitationsWhitelist)data.Calendar.PreventInvitationsWhitelist=_.map(data.Calendar.PreventInvitationsWhitelist,function(value,key){var match=/^(.+)\s<(\S+)>$/.exec(value);return new Preferences.$User({uid:key,cn:match[1],c_email:match[2]})});else data.Calendar.PreventInvitationsWhitelist=[]}angular.extend(_this.settings,data);return _this.settings})}Preferences.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function($q,$timeout,$log,Settings,Resource,User){angular.extend(Preferences,{$q:$q,$timeout:$timeout,$log:$log,$$resource:new Resource(Settings.activeUser("folderURL"),Settings.activeUser()),activeUser:Settings.activeUser(),$User:User});return new Preferences}];try{angular.module("SOGo.PreferencesUI")}catch(e){angular.module("SOGo.PreferencesUI",["SOGo.Common"])}angular.module("SOGo.PreferencesUI").factory("Preferences",Preferences.$factory);Preferences.prototype.ready=function(){return Preferences.$q.all([this.defaultsPromise,this.settingsPromise])};Preferences.prototype.$save=function(){var _this=this;return Preferences.$$resource.save("Preferences",this.$omit(true)).then(function(data){return data})};Preferences.prototype.$omit=function(deep){var preferences,labels,whitelist;preferences={};whitelist={};angular.forEach(this,function(value,key){if(key!="constructor"&&key[0]!="$"){if(deep)preferences[key]=angular.copy(value);else preferences[key]=value}});labels=_.object(_.map(preferences.defaults.SOGoMailLabelsColors,function(value,key){if(key.charAt(0)=="_"&&key.charAt(1)=="$")return[key.substring(1),value];return[key,value]}));preferences.defaults.SOGoMailLabelsColors=labels;if(preferences.defaults.Vacation){if(preferences.defaults.Vacation.endDateEnabled)preferences.defaults.Vacation.endDate=preferences.defaults.Vacation.endDate.getTime()/1e3;else preferences.defaults.Vacation.endDate=0;if(preferences.defaults.Vacation.autoReplyEmailAddresses)preferences.defaults.Vacation.autoReplyEmailAddresses=_.filter(preferences.defaults.Vacation.autoReplyEmailAddresses.split(","),function(v){return v.length});else preferences.defaults.Vacation.autoReplyEmailAddresses=[]}if(preferences.defaults.Forward&&preferences.defaults.Forward.forwardAddress)preferences.defaults.Forward.forwardAddress=preferences.defaults.Forward.forwardAddress.split(",");if(preferences.settings.Calendar&&preferences.settings.Calendar.PreventInvitationsWhitelist){_.each(preferences.settings.Calendar.PreventInvitationsWhitelist,function(user){whitelist[user.uid]=user.$shortFormat()});preferences.settings.Calendar.PreventInvitationsWhitelist=whitelist}return preferences}})();
//# 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 6e6ccb0a7..d9fb396c8 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","data","labels","_","object","map","SOGoMailLabelsColors","value","key","charAt","Vacation","endDate","Date","parseInt","endDateEnabled","autoReplyEmailAddresses","length","join","angular","isDefined","window","defaultEmailAddresses","daysBetweenResponse","Forward","forwardAddress","extend","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","$User","uid","cn","c_email","$factory","$q","$timeout","$log","Settings","Resource","User","activeUser","module","e","factory","prototype","ready","all","$save","save","$omit","deep","preferences","whitelist","forEach","copy","substring","getTime","split","each","user","$shortFormat"],"mappings":"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","file":"Preferences.services.js"}
\ No newline at end of file
+{"version":3,"sources":["Preferences/Preferences.service.js"],"names":["Preferences","_this","this","defaults","settings","defaultsPromise","$$resource","fetch","then","data","labels","_","object","map","SOGoMailLabelsColors","value","key","charAt","Vacation","endDate","Date","parseInt","endDateEnabled","autoReplyEmailAddresses","length","join","angular","isDefined","window","defaultEmailAddresses","daysBetweenResponse","Forward","forwardAddress","extend","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","$User","uid","cn","c_email","$factory","$q","$timeout","$log","Settings","Resource","User","activeUser","module","e","factory","prototype","ready","all","$save","save","$omit","deep","preferences","whitelist","forEach","copy","substring","getTime","filter","split","v","each","user","$shortFormat"],"mappings":"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","file":"Preferences.services.js"}
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Scheduler.js b/UI/WebServerResources/js/Scheduler.js
index 55c651d63..f9310d10a 100644
--- a/UI/WebServerResources/js/Scheduler.js
+++ b/UI/WebServerResources/js/Scheduler.js
@@ -1,3 +1,3 @@
-(function(){"use strict";angular.module("SOGo.SchedulerUI",["ngSanitize","ui.router","angularFileUpload","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI"]).config(configure).run(runBlock);configure.$inject=["$stateProvider","$urlRouterProvider"];function configure($stateProvider,$urlRouterProvider){$stateProvider.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainView",controller:"CalendarsController",controllerAs:"app"}},resolve:{stateCalendars:stateCalendars}}).state("calendars.view",{url:"/{view:(?:day|week|month|multicolumnday)}/:day",views:{calendarView:{templateUrl:function($stateParams){return $stateParams.view+"view?day="+$stateParams.day},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:stateEventsBlocks}});$urlRouterProvider.when("/calendar/day",function(){var now=new Date;return"/calendar/day/"+now.getDayString()});$urlRouterProvider.when("/calendar/multicolumnday",function(){var now=new Date;return"/calendar/multicolumnday/"+now.getDayString()});$urlRouterProvider.when("/calendar/week",function(){var now=new Date;return"/calendar/week/"+now.getDayString()});$urlRouterProvider.when("/calendar/month",function(){var now=new Date;return"/calendar/month/"+now.getDayString()});$urlRouterProvider.otherwise("/calendar")}stateCalendars.$inject=["Calendar"];function stateCalendars(Calendar){return Calendar.$calendars||Calendar.$findAll(window.calendarsData)}stateEventsBlocks.$inject=["$stateParams","Component","Calendar"];function stateEventsBlocks($stateParams,Component,Calendar){return Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(views){_.forEach(views,function(view){if(view.id){view.calendar=new Calendar({id:view.id,name:view.calendarName})}});return views})}runBlock.$inject=["$rootScope","$log","$location","$state","Preferences"];function runBlock($rootScope,$log,$location,$state,Preferences){$rootScope.$on("$stateChangeError",function(event,toState,toParams,fromState,fromParams,error){$log.error(error);$state.go("calendar")});$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){$log.error(event,current,previous,rejection)});if($location.url().length===0){Preferences.ready().then(function(){var url="/calendar/",view=/(.+)view/.exec(Preferences.settings.Calendar.View);if(view)url+=view[1];else url+="week";$location.replace().url(url)})}}})();(function(){"use strict";CalendarController.$inject=["$scope","$rootScope","$state","$stateParams","Calendar","Component","stateEventsBlocks"];function CalendarController($scope,$rootScope,$state,$stateParams,Calendar,Component,stateEventsBlocks){var vm=this,deregisterCalendarsList;vm.views=stateEventsBlocks;vm.changeView=changeView;deregisterCalendarsList=$rootScope.$on("calendars:list",updateView);$scope.$on("$destroy",deregisterCalendarsList);function updateView(){Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(data){vm.views=data;_.forEach(vm.views,function(view){if(view.id){view.calendar=new Calendar({id:view.id,name:view.calendarName})}})})}function changeView($event){var date=angular.element($event.currentTarget).attr("date");$state.go("calendars.view",{view:$stateParams.view,day:date})}}angular.module("SOGo.SchedulerUI").controller("CalendarController",CalendarController)})();(function(){"use strict";CalendarListController.$inject=["$rootScope","$timeout","$state","$mdDialog","Dialog","Preferences","Calendar","Component"];function CalendarListController($rootScope,$timeout,$state,$mdDialog,Dialog,Preferences,Calendar,Component){var vm=this;vm.component=Component;vm.componentType="events";vm.selectedList=0;vm.selectComponentType=selectComponentType;vm.unselectComponents=unselectComponents;vm.selectAll=selectAll;vm.toggleComponentSelection=toggleComponentSelection;vm.confirmDeleteSelectedComponents=confirmDeleteSelectedComponents;vm.openEvent=openEvent;vm.openTask=openTask;vm.newComponent=newComponent;vm.filter=filter;vm.filteredBy=filteredBy;vm.sort=sort;vm.sortedBy=sortedBy;vm.reload=reload;vm.cancelSearch=cancelSearch;vm.mode={search:false};Preferences.ready().then(function(){var type="events";if(Preferences.settings.Calendar.SelectedList=="tasksListView"){vm.selectedList=1;type="tasks"}selectComponentType(type,{reload:true})});$rootScope.$on("calendars:list",function(){Component.$filter(vm.componentType,{reload:true})});$rootScope.$on("calendar:dragend",updateComponentFromGhost);function selectComponentType(type,options){if(options&&options.reload||vm.componentType!=type){if(angular.isUndefined(Component["$"+type]))Component.$filter(type);vm.unselectComponents();vm.componentType=type;Component.saveSelectedList(type)}}function unselectComponents(){_.each(Component["$"+vm.componentType],function(component){component.selected=false})}function selectAll(){_.each(Component["$"+vm.componentType],function(component){component.selected=true})}function toggleComponentSelection($event,component){component.selected=!component.selected;$event.preventDefault();$event.stopPropagation()}function confirmDeleteSelectedComponents(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected components?")).then(function(){var components=_.filter(Component["$"+vm.componentType],function(component){return component.selected});Calendar.$deleteComponents(components)},function(data,status){})}function openEvent($event,event){openComponent($event,event,"appointment")}function openTask($event,task){openComponent($event,task,"task")}function openComponent($event,component,type){if(component.viewable){var templateUrl="UIx"+type.capitalize()+"ViewTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentController",controllerAs:"editor",locals:{stateComponent:component}})}}function newComponent($event,baseComponent){var type="appointment",component;if(baseComponent){component=baseComponent;type=baseComponent.type}else{if(vm.componentType=="tasks")type="task";component=new Component({pid:"personal",type:type})}var templateUrl="UIx"+type.capitalize()+"EditorTemplate";return $mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:component}})}function updateComponentFromGhost($event){var component,pointerHandler,coordinates,delta,params;component=Component.$ghost.component;pointerHandler=Component.$ghost.pointerHandler;if(component.isNew){coordinates=pointerHandler.currentEventCoordinates;if(component.isAllDay)coordinates.duration-=96;component.setDelta(coordinates.duration*15);newComponent(null,component).finally(function(){$timeout(function(){Component.$ghost.pointerHandler=null;Component.$ghost.component=null})})}else{delta=pointerHandler.currentEventCoordinates.getDelta(pointerHandler.originalEventCoordinates);params={days:delta.dayNumber,start:delta.start*15,duration:delta.duration*15};if(component.isException||!component.occurrenceId)component.$adjust(params).then(function(){$rootScope.$emit("calendars:list");$timeout(function(){Component.$ghost={}})});else if(component.occurrenceId){$mdDialog.show({clickOutsideToClose:true,escapeToClose:true,locals:{component:component,params:params},template:['',' '," "+l("editRepeatingItem")+"
"," "," ",' '+l("button_thisOccurrenceOnly")+" ",' '+l("button_allOccurrences")+" "," "," "].join(""),controller:RecurrentComponentDialogController}).then(function(){$rootScope.$emit("calendars:list")}).finally(function(){$timeout(function(){Component.$ghost={}})})}}RecurrentComponentDialogController.$inject=["$scope","$mdDialog","component","params"];function RecurrentComponentDialogController($scope,$mdDialog,component,params){$scope.updateThisOccurrence=function(){component.$adjust(params).then($mdDialog.hide,$mdDialog.cancel)};$scope.updateAllOccurrences=function(){delete component.occurrenceId;component.$adjust(params).then($mdDialog.hide,$mdDialog.cancel)}}}function filter(filterpopup){Component.$filter(vm.componentType,{filterpopup:filterpopup})}function filteredBy(filterpopup){return Component["$query"+vm.componentType.capitalize()].filterpopup==filterpopup}function sort(field){Component.$filter(vm.componentType,{sort:field})}function sortedBy(field){return Component["$query"+vm.componentType.capitalize()].sort==field}function reload(){$rootScope.$emit("calendars:list")}function cancelSearch(){vm.mode.search=false;Component.$filter(vm.componentType,{value:""})}}angular.module("SOGo.SchedulerUI").controller("CalendarListController",CalendarListController)})();(function(){"use strict";CalendarsController.$inject=["$rootScope","$scope","$window","$mdDialog","$log","$mdToast","FileUploader","sgFocus","Dialog","sgSettings","Preferences","Calendar","User","stateCalendars"];function CalendarsController($rootScope,$scope,$window,$mdDialog,$log,$mdToast,FileUploader,focus,Dialog,Settings,Preferences,Calendar,User,stateCalendars){var vm=this;vm.activeUser=Settings.activeUser;vm.service=Calendar;vm.newCalendar=newCalendar;vm.addWebCalendar=addWebCalendar;vm.confirmDelete=confirmDelete;vm.editFolder=editFolder;vm.revertEditing=revertEditing;vm.renameFolder=renameFolder;vm.share=share;vm.importCalendar=importCalendar;vm.exportCalendar=exportCalendar;vm.showLinks=showLinks;vm.showProperties=showProperties;vm.subscribeToFolder=subscribeToFolder;vm.today=today;Preferences.ready().then(function(){vm.categories=_.map(Preferences.defaults.SOGoCalendarCategories,function(name){return{id:name.asCSSIdentifier(),name:name,color:Preferences.defaults.SOGoCalendarCategoriesColors[name]}})});$scope.$watch(function(){return _.union(_.map(Calendar.$calendars,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$subscriptions,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$webcalendars,function(o){return _.pick(o,["id","active","color"])}))},function(newList,oldList){var ids=_.pluck(_.filter(newList,function(o,i){return!_.isEqual(o,oldList[i])}),"id");if(ids.length>0){$log.debug(ids.join(", ")+" changed");_.each(ids,function(id){var calendar=Calendar.$get(id);calendar.$setActivation().then(function(){$rootScope.$emit("calendars:list")})})}},true);function newCalendar(ev){Dialog.prompt(l("New calendar"),l("Name of the Calendar")).then(function(name){var calendar=new Calendar({name:name,isEditable:true,isRemote:false,owner:UserLogin});calendar.$id().then(function(){Calendar.$add(calendar)})})}function addWebCalendar(){Dialog.prompt(l("Subscribe to a web calendar..."),l("URL of the Calendar"),{inputType:"url"}).then(function(url){Calendar.$addWebCalendar(url)})}function confirmDelete(folder){if(folder.isSubscription){folder.$delete().then(function(){$rootScope.$emit("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the calendar "%{0}".',folder.name),l(data.error))})}else{Dialog.confirm(l("Warning"),l("Are you sure you want to delete the calendar %{0} ?",folder.name)).then(function(){folder.$delete().then(function(){$rootScope.$emit("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the calendar "%{0}".',folder.name),l(data.error))})})}}function importCalendar($event,folder){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:"UIxCalendarImportDialog",controller:CalendarImportDialogController,controllerAs:"$CalendarImportDialogController",locals:{folder:folder}});CalendarImportDialogController.$inject=["scope","$mdDialog","folder"];function CalendarImportDialogController(scope,$mdDialog,folder){var vm=this;vm.uploader=new FileUploader({url:ApplicationBaseURL+[folder.id,"import"].join("/"),autoUpload:true,queueLimit:1,filters:[{name:filterByExtension,fn:filterByExtension}],onSuccessItem:function(item,response,status,headers){var msg;$mdDialog.hide();if(response.imported===0)msg=l("No event was imported.");else{msg=l("A total of %{0} events were imported in the calendar.",response.imported);$rootScope.$emit("calendars:list")}$mdToast.show($mdToast.simple().content(msg).position("top right").hideDelay(3e3))},onErrorItem:function(item,response,status,headers){$mdToast.show({template:["",' error_outline '," "+l("An error occurred while importing calendar.")+" "," "].join(""),position:"top right",hideDelay:3e3})}});vm.close=function(){$mdDialog.hide()};function filterByExtension(item){var isTextFile=item.type.indexOf("text")===0||/\.(ics)$/.test(item.name);if(!isTextFile)$mdToast.show({template:["",' error_outline '," "+l("Select an iCalendar file (.ics).")+" "," "].join(""),position:"top right",hideDelay:3e3});return isTextFile}}}function exportCalendar(calendar){window.location.href=ApplicationBaseURL+"/"+calendar.id+".ics"+"/export"}function showLinks(calendar){$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:calendar.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{calendar:calendar}});LinksDialogController.$inject=["$mdDialog","calendar"];function LinksDialogController($mdDialog,calendar){var vm=this;vm.calendar=calendar;vm.close=close;function close(){$mdDialog.hide()}}}function showProperties(calendar){var color=calendar.color;$mdDialog.show({templateUrl:calendar.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:true,escapeToClose:true,locals:{srcCalendar:calendar}}).catch(function(){calendar.color=color});PropertiesDialogController.$inject=["$scope","$mdDialog","srcCalendar"];function PropertiesDialogController($scope,$mdDialog,srcCalendar){var vm=this;vm.calendar=new Calendar(srcCalendar.$omit());vm.saveProperties=saveProperties;vm.close=close;$scope.$watch("properties.calendar.color",function(){srcCalendar.color=vm.calendar.color});function saveProperties(){vm.calendar.$save();srcCalendar.init(vm.calendar.$omit());$mdDialog.hide()}function close(){$mdDialog.cancel()}}}function editFolder(folder){vm.calendarName=folder.name;vm.editMode=folder.id;focus("calendarName_"+folder.id)}function revertEditing(folder){folder.$reset();vm.editMode=false}function renameFolder(folder){folder.$rename().then(function(data){vm.editMode=false},function(data,status){Dialog.alert(l("Warning"),data)})}function share(calendar){calendar.$acl.$users().then(function(){$mdDialog.show({templateUrl:calendar.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:true,escapeToClose:true,locals:{usersWithACL:calendar.$acl.users,User:User,folder:calendar}})})}function subscribeToFolder(calendarData){$log.debug("subscribeToFolder "+calendarData.owner+calendarData.name);Calendar.$subscribe(calendarData.owner,calendarData.name).catch(function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}function today(){var fragments=$window.location.hash.split("/"),state=fragments[1],view=fragments[2],now=new Date,path=["#",state,view,now.getDayString()];$window.location=path.join("/")}}angular.module("SOGo.SchedulerUI").controller("CalendarsController",CalendarsController)})();(function(){"use strict";ComponentController.$inject=["$rootScope","$mdDialog","Calendar","AddressBook","Alarm","stateComponent"];function ComponentController($rootScope,$mdDialog,Calendar,AddressBook,Alarm,stateComponent){var vm=this,component;vm.component=stateComponent;vm.close=close;vm.cardFilter=cardFilter;vm.edit=edit;vm.editAllOccurrences=editAllOccurrences;vm.reply=reply;vm.replyAllOccurrences=replyAllOccurrences;vm.deleteOccurrence=deleteOccurrence;vm.deleteAllOccurrences=deleteAllOccurrences;vm.toggleRawSource=toggleRawSource;if(angular.isUndefined(vm.component.$futureComponentData)){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id,vm.component.occurrenceId);component.$futureComponentData.then(function(){vm.component=component;vm.organizer=[vm.component.organizer]})}function close(){$mdDialog.hide()}function cardFilter($query){AddressBook.$filterAll($query);return AddressBook.$cards}function edit(){var type=vm.component.component=="vevent"?"Appointment":"Task";$mdDialog.hide().then(function(){var templateUrl="UIx"+type+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:vm.component}})})}function editAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id);component.$futureComponentData.then(function(){vm.component=component;edit()})}function reply(component){var c=component||vm.component;c.$reply().then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide();Alarm.getAlarms()})}function replyAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id);component.$futureComponentData.then(function(){component.reply=vm.component.reply;component.delegatedTo=vm.component.delegatedTo;component.$hasAlarm=vm.component.$hasAlarm;component.alarm=vm.component.alarm;reply(component)})}function deleteOccurrence(){vm.component.remove(true).then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide()})}function deleteAllOccurrences(){vm.component.remove().then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide()})}function toggleRawSource($event){Calendar.$$resource.post(vm.component.pid+"/"+vm.component.id,"raw").then(function(data){$mdDialog.hide();$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,template:['',' '," ",data," "," "," ",' '+l("Close")+" "," "," "].join(""),controller:ComponentRawSourceDialogController});ComponentRawSourceDialogController.$inject=["scope","$mdDialog"];function ComponentRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}})}}ComponentEditorController.$inject=["$rootScope","$scope","$log","$timeout","$mdDialog","User","Calendar","Component","AddressBook","Card","Alarm","stateComponent"];function ComponentEditorController($rootScope,$scope,$log,$timeout,$mdDialog,User,Calendar,Component,AddressBook,Card,Alarm,stateComponent){var vm=this,component,oldStartDate,oldEndDate,oldDueDate;vm.calendars=Calendar.$calendars;vm.component=stateComponent;vm.categories={};vm.showRecurrenceEditor=vm.component.$hasCustomRepeat;vm.toggleRecurrenceEditor=toggleRecurrenceEditor;vm.showAttendeesEditor=angular.isDefined(vm.component.attendees);vm.toggleAttendeesEditor=toggleAttendeesEditor;vm.cardFilter=cardFilter;vm.addAttendee=addAttendee;vm.addAttachUrl=addAttachUrl;vm.cancel=cancel;vm.save=save;vm.attendeesEditor={days:getDays(),hours:getHours()};vm.addStartDate=addStartDate;vm.addDueDate=addDueDate;vm.updateStartTime=updateStartTime;vm.adjustStartTime=adjustStartTime;vm.updateEndTime=updateEndTime;vm.adjustEndTime=adjustEndTime;vm.updateDueTime=updateDueTime;vm.adjustDueTime=adjustDueTime;if(vm.component.start)oldStartDate=new Date(vm.component.start.getTime());if(vm.component.end)oldEndDate=new Date(vm.component.end.getTime());if(vm.component.due)oldDueDate=new Date(vm.component.due.getTime());function addAttachUrl(){var i=vm.component.addAttachUrl("");focus("attachUrl_"+i)}function toggleRecurrenceEditor(){vm.showRecurrenceEditor=!vm.showRecurrenceEditor;vm.component.$hasCustomRepeat=vm.showRecurrenceEditor}function toggleAttendeesEditor(){vm.showAttendeesEditor=!vm.showAttendeesEditor}function cardFilter($query){AddressBook.$filterAll($query);return AddressBook.$cards}function addAttendee(card){if(angular.isString(card)){if(card.isValidEmail()){vm.component.addAttendee(new Card({emails:[{value:card}]}));vm.searchText=""}}else{vm.component.addAttendee(card)}}function save(form){if(form.$valid){vm.component.$save().then(function(data){$rootScope.$emit("calendars:list");$mdDialog.hide();Alarm.getAlarms()},function(data,status){$log.debug("failed")})}}function cancel(){vm.component.$reset();if(vm.component.isNew){vm.component=null}$mdDialog.cancel()}function getDays(){var days=[];if(vm.component.start&&vm.component.end)days=vm.component.start.daysUpTo(vm.component.end);return _.map(days,function(date){return{stringWithSeparator:date.stringWithSeparator(),getDayString:date.getDayString()}})}function getHours(){var hours=[];for(var i=0;i<=23;i++){hours.push(i.toString())}return hours}function addStartDate(){vm.component.$addStartDate();oldStartDate=new Date(vm.component.start.getTime())}function addDueDate(){vm.component.$addDueDate();oldDueDate=new Date(vm.component.due.getTime())}function updateStartTime(){vm.component.start.addMinutes(oldStartDate.getHours()*60+oldStartDate.getMinutes());adjustStartTime()}function adjustStartTime(){var delta;delta=oldStartDate.valueOf()-vm.component.start.valueOf();if(delta!==0){oldStartDate=new Date(vm.component.start.getTime());if(vm.component.type==="appointment"){vm.component.end=new Date(vm.component.start.getTime());vm.component.end.addMinutes(vm.component.delta);oldEndDate=new Date(vm.component.end.getTime())}}updateFreeBusy()}function updateEndTime(){vm.component.end.addMinutes(oldEndDate.getHours()*60+oldEndDate.getMinutes());adjustEndTime()}function adjustEndTime(){var delta=vm.component.start.minutesTo(vm.component.end);if(delta<0)vm.component.end=new Date(oldEndDate.getTime());else{vm.component.delta=delta;oldEndDate=new Date(vm.component.end.getTime())}updateFreeBusy()}function updateDueTime(){vm.component.due.addMinutes(oldDueDate.getHours()*60+oldDueDate.getMinutes());adjustDueTime()}function adjustDueTime(){oldDueDate=new Date(vm.component.due.getTime())}function updateFreeBusy(){vm.attendeesEditor.days=getDays();vm.component.updateFreeBusy()}}angular.module("SOGo.SchedulerUI").controller("ComponentController",ComponentController).controller("ComponentEditorController",ComponentEditorController)})();(function(){"use strict";function sgCalendarDay(){return{restrict:"E",scope:{day:"@sgDay",dayNumber:"@sgDayNumber",dayString:"@sgDayString"},controller:sgCalendarDayController}}sgCalendarDayController.$inject=["$scope"];function sgCalendarDayController($scope){this.day=$scope.day;this.dayNumber=$scope.dayNumber;this.dayString=$scope.dayString}angular.module("SOGo.SchedulerUI").directive("sgCalendarDay",sgCalendarDay)})();(function(){"use strict";sgCalendarDayBlock.$inject=["CalendarSettings"];function sgCalendarDayBlock(CalendarSettings){return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:true,template:['",'
','
",'
{{ block.component.summary }}','
',' ',' ',' ',' '," ",'
'," place {{block.component.c_location}}","
","
","
","
"].join(""),link:link};function link(scope,iElement,attrs){var pc,left,right;pc=100/scope.block.siblings;left=scope.block.position*pc;right=100-(scope.block.position+1)*pc;if(pc<100){if(left>0)left-=2;if(right>0)right-=2}if(left===0)left=2;if(right===0)right=2;iElement.css("left",left+"%");iElement.css("right",right+"%");iElement.addClass("starts"+scope.block.start);iElement.addClass("lasts"+scope.block.length);if(scope.block.component)iElement.addClass("bg-folder"+scope.block.component.pid)}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayBlock",sgCalendarDayBlock)})();(function(){"use strict";function sgCalendarDayTable(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayTable",sgCalendarDayTable)})();(function(){"use strict";sgCalendarGhost.$inject=["$rootScope","$timeout","CalendarSettings","Calendar","Component"];function sgCalendarGhost($rootScope,$timeout,CalendarSettings,Calendar,Component){return{restrict:"A",require:["^sgCalendarDay","^sgCalendarScrollView"],link:link};function link(scope,iElement,attrs,ctrls){var domElement,calendarDayCtrl,scrollViewCtrl;domElement=iElement[0];calendarDayCtrl=ctrls[0];scrollViewCtrl=ctrls[1];iElement.addClass("sg-event--ghost md-whiteframe-3dp ng-hide");var deregisterDragStart=$rootScope.$on("calendar:dragstart",initGhost);var deregisterDrag=$rootScope.$on("calendar:drag",updateGhost);var deregisterDragEnd=$rootScope.$on("calendar:dragend",hideGhost);scope.$on("$destroy",function(){deregisterDragStart();deregisterDrag();deregisterDragEnd()});function initGhost(){scope.block=Component.$ghost;iElement.addClass("bg-folder"+scope.block.component.pid)}function hideGhost(){_.forEachRight(domElement.classList,function(c){if(/^bg-folder/.test(c))iElement.removeClass(c)});iElement.addClass("ng-hide")}function updateGhost(){var showGhost,isRelative,originalDay,currentDay,wasOtherBlock,start,duration,durationLeft,maxDuration,enableTransition;showGhost=false;enableTransition=function(){iElement.removeClass("sg-event--notransition")};if(Calendar.$view&&Calendar.$view.type==scrollViewCtrl.type){isRelative=scrollViewCtrl.type==="multiday-allday";originalDay=scope.block.pointerHandler.originalEventCoordinates.dayNumber;currentDay=scope.block.pointerHandler.currentEventCoordinates.dayNumber;start=scope.block.pointerHandler.currentEventCoordinates.start;durationLeft=scope.block.pointerHandler.currentEventCoordinates.duration;maxDuration=CalendarSettings.EventDragDayLength-start;if(angular.isUndefined(durationLeft))return;duration=durationLeft;if(duration>maxDuration)duration=maxDuration;delete scope.startHour;delete scope.endHour;if(currentDay>-1&¤tDay==calendarDayCtrl.dayNumber){showGhost=true;if(!isRelative){scope.startHour=getStartTime(start);wasOtherBlock=parseInt(iElement.css("top"))===0;if(wasOtherBlock)iElement.addClass("sg-event--notransition");if(Calendar.$view.quarterHeight){iElement.css("top",start*Calendar.$view.quarterHeight+"px");iElement.css("height",duration*Calendar.$view.quarterHeight+"px")}else iElement.css("top",Calendar.$view.topOffset+"px");if(wasOtherBlock)$timeout(enableTransition)}iElement.removeClass("fg-folder"+scope.block.component.pid);iElement.removeClass("sg-event--ghost--last");iElement.addClass("sg-event--ghost--first")}durationLeft-=duration;currentDay++;while(!showGhost&&durationLeft&¤tDay<=calendarDayCtrl.dayNumber){duration=durationLeft;if(duration>CalendarSettings.EventDragDayLength)duration=CalendarSettings.EventDragDayLength;if(currentDay>-1&¤tDay==calendarDayCtrl.dayNumber){showGhost=true;if(!isRelative){wasOtherBlock=parseInt(iElement.css("top"))!==0;if(wasOtherBlock)iElement.addClass("sg-event--notransition");iElement.css("top",Calendar.$view.topOffset+"px");if(Calendar.$view.quarterHeight)iElement.css("height",duration*Calendar.$view.quarterHeight+"px");if(wasOtherBlock)$timeout(enableTransition)}iElement.removeClass("sg-event--ghost--first");iElement.removeClass("sg-event--ghost--last");iElement.addClass("fg-folder"+scope.block.component.pid)}durationLeft-=duration;currentDay++;start=0}if(!durationLeft){if(isRelative){iElement.addClass("sg-event--ghost--last")}else{scope.endHour=getEndTime(start,duration)}}}if(showGhost)iElement.removeClass("ng-hide");else iElement.addClass("ng-hide")}function quartersToHM(quarters){var minutes,hours,mins;minutes=quarters*15;hours=Math.floor(minutes/60);if(hours<10)hours="0"+hours;mins=minutes%60;if(mins<10)mins="0"+mins;return""+hours+":"+mins}function getStartTime(start){return quartersToHM(start)}function getEndTime(start,duration){var end=(start+duration)%CalendarSettings.EventDragDayLength;return quartersToHM(end)}}}angular.module("SOGo.SchedulerUI").directive("sgCalendarGhost",sgCalendarGhost)})();(function(){"use strict";function sgCalendarMonthDay(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthDay",sgCalendarMonthDay)})();(function(){"use strict";function sgCalendarMonthEvent(){return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:true,template:['',' {{ block.starthour }} '," {{ block.component.summary }}",' ',' ',' ',' ',' '," ","
"].join(""),link:link};function link(scope,iElement,attrs){if(scope.block.component)iElement.addClass("bg-folder"+scope.block.component.pid)}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthEvent",sgCalendarMonthEvent)})();(function(){"use strict";sgCalendarScrollView.$inject=["$rootScope","$window","$document","$q","$timeout","$mdGesture","Calendar","Component","Preferences"];function sgCalendarScrollView($rootScope,$window,$document,$q,$timeout,$mdGesture,Calendar,Component,Preferences){return{restrict:"A",scope:{type:"@sgCalendarScrollView"},controller:sgCalendarScrollViewController,link:function(scope,element,attrs,controller){var view,scrollView,type,lastScroll,deregisterDragStart,deregisterDragStop;scrollView=element[0];type=scope.type;lastScroll=0;deregisterDragStart=$rootScope.$on("calendar:dragstart",onDragStart);deregisterDragStop=$rootScope.$on("calendar:dragend",onDragEnd);$timeout(initView);scope.$on("$destroy",function(){deregisterDragStart();deregisterDragStop();element.off("mouseover",updateFromPointerHandler);angular.element($window).off("resize",updateCoordinates);
-});function initView(){var quarterHeight;quarterHeight=getQuarterHeight();view={type:type,quarterHeight:quarterHeight,scrollStep:6*quarterHeight,maxX:getMaxColumns(),element:scrollView};angular.element($window).on("resize",updateCoordinates);updateCoordinates();if(type!="monthly")Preferences.ready().then(function(){var time,hourCell,quartersOffset;if(Preferences.defaults.SOGoDayStartTime){time=Preferences.defaults.SOGoDayStartTime.split(":");hourCell=document.getElementById("hour"+parseInt(time[0]));quartersOffset=parseInt(time[1])*quarterHeight;scrollView.scrollTop=hourCell.offsetTop+quartersOffset}})}function getQuarterHeight(){var hour0,hour23,height=null;hour0=document.getElementById("hour0");hour23=document.getElementById("hour23");if(hour0&&hour23)height=(hour23.offsetTop-hour0.offsetTop)/(23*4);return height}function getDayDimensions(viewLeft){var width,height,leftOffset,topOffset,nodes,domRect,tileHeader;height=width=leftOffset=topOffset=0;nodes=scrollView.getElementsByClassName("day0");if(nodes.length>0){domRect=nodes[0].getBoundingClientRect();height=domRect.height;width=domRect.width;leftOffset=domRect.left-viewLeft;tileHeader=nodes[0].getElementsByClassName("sg-calendar-tile-header");if(tileHeader.length>0)topOffset=tileHeader[0].clientHeight}return{height:height,width:width,offset:{left:leftOffset,top:topOffset}}}function getMaxColumns(){var max=0;max=scrollView.getElementsByClassName("day").length-1;return max}function updateCoordinates(){var domRect,dayDimensions;domRect=scrollView.getBoundingClientRect();dayDimensions=getDayDimensions(domRect.left);angular.extend(view,{coordinates:{x:domRect.left,y:domRect.top},dayHeight:dayDimensions.height,dayWidth:dayDimensions.width,daysOffset:dayDimensions.offset.left,topOffset:dayDimensions.offset.top})}function onDragStart(){element.on("mouseover",updateFromPointerHandler);updateFromPointerHandler()}function onDragEnd(){element.off("mouseover",updateFromPointerHandler);Calendar.$view=null}function updateFromPointerHandler(){var scrollStep,pointerHandler,pointerCoordinates,now,scrollY,minY,delta;scrollStep=view.scrollStep;pointerHandler=Component.$ghost.pointerHandler;if(pointerHandler){pointerCoordinates=pointerHandler.getContainerBasedCoordinates(view);if(pointerCoordinates){Calendar.$view=view;now=(new Date).getTime();if(!lastScroll||now>lastScroll+100){lastScroll=now;scrollY=pointerCoordinates.y-scrollStep;if(scrollY<0){minY=-scrollView.scrollTop;if(scrollY0){scrollView.scrollTop+=delta}}}}}}}}}sgCalendarScrollViewController.$inject=["$scope"];function sgCalendarScrollViewController($scope){this.type=$scope.type}angular.module("SOGo.SchedulerUI").directive("sgCalendarScrollView",sgCalendarScrollView)})();(function(){"use strict";function sgCalendarTable(){return{restrict:"E",scope:{calendars:"=sgCalendars",calendar:"@sgCalendar",blocksType:"@sgBlocksType",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarTable",sgCalendarTable)})();(function(){"use strict";function sgCategoryStylesheet(){return{restrict:"E",require:"ngModel",scope:{ngModel:"="},replace:true,template:['"].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCategoryStylesheet",sgCategoryStylesheet)})();(function(){"use strict";sgDraggableCalendarBlock.$inject=["$rootScope","$timeout","$log","Calendar","CalendarSettings","Component"];function sgDraggableCalendarBlock($rootScope,$timeout,$log,Calendar,CalendarSettings,Component){return{restrict:"CA",require:"^sgCalendarDay",link:link};function link(scope,element,attrs,calendarDayCtrl){if(scope.block){if(scope.block.component.editable)initGrips();else return}element.on("mousedown",onDragDetect);scope.$on("$destroy",function(){element.off("mousedown",onDragDetect);element.off("mousemove",onDrag)});function initGrips(){var component,dayNumber,blockIndex,isFirstBlock,isLastBlock,dragGrip,leftGrip,rightGrip,topGrip,bottomGrip;component=scope.block.component;dayNumber=scope.block.dayNumber;blockIndex=_.findIndex(component.blocks,_.matchesProperty("dayNumber",dayNumber));isFirstBlock=blockIndex===0;isLastBlock=blockIndex===component.blocks.length-1;dragGrip=angular.element('
');dragGrip.addClass("bdr-folder"+component.pid);if(component.c_isallday||element[0].parentNode.tagName==="SG-CALENDAR-MONTH-DAY"){if(isFirstBlock){leftGrip=angular.element('
').append(dragGrip);element.append(leftGrip)}if(isLastBlock){rightGrip=angular.element('
').append(dragGrip.clone());element.append(rightGrip)}}else{if(isFirstBlock){topGrip=angular.element('
').append(dragGrip);element.append(topGrip)}if(isLastBlock){bottomGrip=angular.element('
').append(dragGrip.clone());element.append(bottomGrip)}}}function onDragDetect(ev){var block,dragMode,eventType,startDate,newData,newComponent,pointerHandler;ev.stopPropagation();dragMode="move-event";if(scope.block&&scope.block.component){if(ev.target.className=="dragGrip-top"||ev.target.className=="dragGrip-left")dragMode="change-start";else if(ev.target.className=="dragGrip-bottom"||ev.target.className=="dragGrip-right")dragMode="change-end"}else{dragMode="change-end"}pointerHandler=new SOGoEventDragPointerHandler(dragMode);pointerHandler.initFromEvent(ev);Component.$ghost.pointerHandler=pointerHandler;angular.element(document).one("mouseup",onDragEnd);angular.element(document).on("mousemove",onDrag)}function dragStart(ev){var block,dragMode,eventType,isHourCell,isMonthly,startDate,newData,newComponent,pointerHandler;isHourCell=element.hasClass("clickableHourCell");isMonthly=element[0].parentNode.tagName=="SG-CALENDAR-MONTH-DAY"||element.hasClass("clickableDayCell");if(scope.block&&scope.block.component){block=scope.block}else{startDate=new Date(calendarDayCtrl.dayString.substring(0,10)+" "+calendarDayCtrl.dayString.substring(11,16));newData={type:"appointment",pid:"personal",summary:l("New Event"),startDate:startDate,isAllDay:isHourCell?0:1};newComponent=new Component(newData);block={component:newComponent,dayNumber:calendarDayCtrl.dayNumber,length:0};block.component.blocks=[block]}eventType="multiday";if(isMonthly)eventType="monthly";else if(block.component.c_isallday)eventType="multiday-allday";_.forEach(block.component.blocks,function(b){b.dragging=true});pointerHandler=Component.$ghost.pointerHandler;pointerHandler.prepareWithEventType(eventType);pointerHandler.initFromBlock(block);Component.$ghost.starthour=block.starthour;Component.$ghost.component=block.component;$log.debug("emit calendar:dragstart");$rootScope.$emit("calendar:dragstart")}function onDrag(ev){var pointerHandler=Component.$ghost.pointerHandler;$timeout(function(){pointerHandler.updateFromEvent(ev)})}function onDragEnd(ev){var block,pointer;block=scope.block;pointer=Component.$ghost.pointerHandler;angular.element(document).off("mousemove",onDrag);if(pointer.dragHasStarted){$rootScope.$emit("calendar:dragend");pointer.dragHasStarted=false}if(block)_.forEach(block.component.blocks,function(b){b.dragging=false})}function SOGoCoordinates(){}SOGoCoordinates.prototype={x:-1,y:-1,getDelta:function SC_getDelta(otherCoordinates){var delta=new SOGoCoordinates;delta.x=this.x-otherCoordinates.x;delta.y=this.y-otherCoordinates.y;return delta},getDistance:function SC_getDistance(otherCoordinates){var delta=this.getDelta(otherCoordinates);return Math.sqrt(delta.x*delta.x+delta.y*delta.y)},clone:function SC_clone(){var coordinates=new SOGoCoordinates;coordinates.x=this.x;coordinates.y=this.y;return coordinates}};function SOGoEventDragEventCoordinates(eventType){this.setEventType(eventType)}SOGoEventDragEventCoordinates.prototype={dayNumber:-1,start:-1,duration:-1,eventType:null,setEventType:function(eventType){this.eventType=eventType},initFromBlock:function(block){if(this.eventType==="monthly"){this.start=0;this.duration=block.component.blocks.length*96}else{this.start=block.component.blocks[0].start;this.duration=_.sum(block.component.blocks,function(b){return b.length})}this.dayNumber=block.component.blocks[0].dayNumber},getDelta:function(otherCoordinates){var delta=new SOGoEventDragEventCoordinates;delta.dayNumber=this.dayNumber-otherCoordinates.dayNumber;delta.start=this.start-otherCoordinates.start;delta.duration=this.duration-otherCoordinates.duration;return delta},_quartersToHM:function(quarters){var minutes=quarters*15;var hours=Math.floor(minutes/60);if(hours<10)hours="0"+hours;var mins=minutes%60;if(mins<10)mins="0"+mins;return""+hours+":"+mins},getStartTime:function(){return this._quartersToHM(this.start)},getEndTime:function(){var end=(this.start+this.duration)%CalendarSettings.EventDragDayLength;return this._quartersToHM(end)},clone:function(){var coordinates=new SOGoEventDragEventCoordinates;coordinates.dayNumber=this.dayNumber;coordinates.start=this.start;coordinates.duration=this.duration;return coordinates}};function SOGoEventDragPointerHandler(dragMode){this.dragMode=dragMode}SOGoEventDragPointerHandler.prototype={originalCoordinates:null,currentCoordinates:null,originalViewCoordinates:null,currentViewCoordinates:null,originalEventCoordinates:null,currentEventCoordinates:null,dragHasStarted:false,getEventViewCoordinates:null,initFromBlock:function SEDPH_initFromBlock(block){this.currentEventCoordinates=new SOGoEventDragEventCoordinates(this.eventType);this.originalEventCoordinates=new SOGoEventDragEventCoordinates(this.eventType);this.originalEventCoordinates.initFromBlock(block)},initFromEvent:function SEDPH_initFromEvent(event){this.currentCoordinates=new SOGoCoordinates;this.updateFromEvent(event);this.originalCoordinates=this.currentCoordinates.clone()},updateFromEvent:function SEDPH_updateFromEvent(event){this.currentCoordinates.x=event.pageX;this.currentCoordinates.y=event.pageY;if(this.dragHasStarted&&Calendar.$view){var newEventCoordinates=this.getEventViewCoordinates(Calendar.$view);if(!this.originalViewCoordinates){this.originalViewCoordinates=this.getEventViewCoordinates(Calendar.$view,this.originalCoordinates);if(Component.$ghost.component.isNew){this.setTimeFromQuarters(Component.$ghost.component.start,this.originalViewCoordinates.y);$log.debug("new event start date "+Component.$ghost.component.start)}}if(!this.currentViewCoordinates||!newEventCoordinates||newEventCoordinates.x!=this.currentViewCoordinates.x||newEventCoordinates.y!=this.currentViewCoordinates.y){this.currentViewCoordinates=newEventCoordinates;if(this.originalViewCoordinates){if(!newEventCoordinates){this.currentViewCoordinates=this.originalViewCoordinates.clone()}this.updateEventCoordinates()}}}else if(this.originalCoordinates&&this.currentCoordinates&&!this.dragHasStarted){var distance=this.getDistance();if(distance>3){this.dragHasStarted=true;dragStart(event)}}},updateEventCoordinates:function SEDGC__updateCoordinates(){var newDuration;var delta=this.currentViewCoordinates.getDelta(this.originalViewCoordinates);var deltaQuarters=delta.x*CalendarSettings.EventDragDayLength+delta.y;$log.debug("quarters delta "+deltaQuarters);if(angular.isUndefined(this.originalEventCoordinates.start)){this.originalEventCoordinates.dayNumber=this.originalViewCoordinates.x;this.originalEventCoordinates.start=this.originalViewCoordinates.y}this.currentEventCoordinates.dayNumber=this.originalEventCoordinates.dayNumber;if(this.dragMode=="move-event"){this.currentEventCoordinates.start=this.originalEventCoordinates.start+deltaQuarters;this.currentEventCoordinates.duration=this.originalEventCoordinates.duration}else{if(this.dragMode=="change-start"){newDuration=this.originalEventCoordinates.duration-deltaQuarters;if(newDuration>0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+deltaQuarters;this.currentEventCoordinates.duration=newDuration}else if(newDuration<0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+this.originalEventCoordinates.duration;this.currentEventCoordinates.duration=-newDuration}}else if(this.dragMode=="change-end"){newDuration=this.originalEventCoordinates.duration+deltaQuarters;if(newDuration>0){this.currentEventCoordinates.start=this.originalEventCoordinates.start;this.currentEventCoordinates.duration=newDuration}else if(newDuration<0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+newDuration;this.currentEventCoordinates.duration=-newDuration}}}var deltaDays;if(this.currentEventCoordinates.start<0){deltaDays=Math.ceil(-this.currentEventCoordinates.start/CalendarSettings.EventDragDayLength);this.currentEventCoordinates.start+=deltaDays*CalendarSettings.EventDragDayLength;this.currentEventCoordinates.dayNumber-=deltaDays}else if(this.currentEventCoordinates.start>=CalendarSettings.EventDragDayLength){deltaDays=Math.floor(this.currentEventCoordinates.start/CalendarSettings.EventDragDayLength);this.currentEventCoordinates.start-=deltaDays*CalendarSettings.EventDragDayLength;this.currentEventCoordinates.dayNumber+=deltaDays}$log.debug("event coordinates "+JSON.stringify(this.currentEventCoordinates));$rootScope.$emit("calendar:drag")},getContainerBasedCoordinates:function SEDPH_getCBC(view,pointerCoordinates){var currentCoordinates=pointerCoordinates||this.currentCoordinates;var coordinates=currentCoordinates.getDelta(view.coordinates);var container=view.element;if(coordinates.xcontainer.clientWidth||coordinates.y<0||coordinates.y>container.clientHeight)coordinates=null;return coordinates},prepareWithEventType:function SEDPH_prepareWithEventType(eventType){var methods={multiday:this.getEventMultiDayViewCoordinates,"multiday-allday":this.getEventMultiDayAllDayViewCoordinates,monthly:this.getEventMonthlyViewCoordinates,unknown:null};var method=methods[eventType];this.eventType=eventType;this.getEventViewCoordinates=method},getEventMultiDayViewCoordinates:function SEDPH_gEMultiDayViewC(view,pointerCoordinates){var coordinates=this.getEventMultiDayAllDayViewCoordinates(view,pointerCoordinates);if(coordinates){var quarterHeight=view.quarterHeight;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);pxCoordinates.y+=view.element.scrollTop;coordinates.y=Math.floor((pxCoordinates.y-CalendarSettings.EventDragHorizontalOffset)/quarterHeight);var maxY=CalendarSettings.EventDragDayLength-1;if(coordinates.y<0)coordinates.y=0;else if(coordinates.y>maxY)coordinates.y=maxY}return coordinates},getEventMultiDayAllDayViewCoordinates:function SEDPH_gEMultiDayADVC(view,pointerCoordinates){var coordinates;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);if(pxCoordinates){coordinates=new SOGoCoordinates;var dayWidth=view.dayWidth;var daysOffset=view.daysOffset;coordinates.x=Math.floor((pxCoordinates.x-daysOffset)/dayWidth);var maxX=Calendar.$view.maxX;if(coordinates.x<0)coordinates.x=0;else if(coordinates.x>maxX)coordinates.x=maxX;coordinates.y=0}else{coordinates=null}return coordinates},getEventMonthlyViewCoordinates:function SEDPH_gEMonthlyViewC(view,pointerCoordinates){var coordinates;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);if(pxCoordinates){coordinates=new SOGoCoordinates;var daysTopOffset=0;var dayWidth=view.dayWidth;var daysOffset=view.daysOffset;var dayHeight=view.dayHeight;var daysY=Math.floor((pxCoordinates.y-daysTopOffset)/dayHeight);if(daysY<0)daysY=0;coordinates.x=Math.floor((pxCoordinates.x-daysOffset)/dayWidth);if(coordinates.x<0)coordinates.x=0;else if(coordinates.x>6)coordinates.x=6;coordinates.x+=7*daysY;coordinates.y=0}else{coordinates=null}return coordinates},getDistance:function SEDPH_getDistance(){return this.currentCoordinates.getDistance(this.originalCoordinates)},setTimeFromQuarters:function SEDPH_setTimeFromQuarters(date,quarters){var hours,minutes;hours=Math.floor(quarters/4);minutes=quarters%4*15;date.setHours(hours,minutes)}}}}angular.module("SOGo.SchedulerUI").directive("sgDraggableCalendarBlock",sgDraggableCalendarBlock)})();(function(){"use strict";sgDroppableBlock.$inject=["$rootScope","$timeout","$mdGesture","Calendar","CalendarSettings","Component"];function sgDroppableBlock($rootScope,$timeout,$mdGesture,Calendar,CalendarSettings,Component){return{restrict:"CA",scope:{onDrop:"&sgOnDrop"},link:function(scope,element,attrs,controller){var deregister=$rootScope.$on("calendar:dragend",scope.onDrop);scope.$on("$destroy",deregister)}}}angular.module("SOGo.SchedulerUI").directive("sgDroppableBlock",sgDroppableBlock)})();
+(function(){"use strict";angular.module("SOGo.SchedulerUI",["ngSanitize","ui.router","angularFileUpload","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI"]).config(configure).run(runBlock);configure.$inject=["$stateProvider","$urlRouterProvider"];function configure($stateProvider,$urlRouterProvider){$stateProvider.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainView",controller:"CalendarsController",controllerAs:"app"}},resolve:{stateCalendars:stateCalendars}}).state("calendars.view",{url:"/{view:(?:day|week|month|multicolumnday)}/:day",views:{calendarView:{templateUrl:function($stateParams){return $stateParams.view+"view?day="+$stateParams.day},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:stateEventsBlocks}});$urlRouterProvider.when("/calendar/day",function(){var now=new Date;return"/calendar/day/"+now.getDayString()});$urlRouterProvider.when("/calendar/multicolumnday",function(){var now=new Date;return"/calendar/multicolumnday/"+now.getDayString()});$urlRouterProvider.when("/calendar/week",function(){var now=new Date;return"/calendar/week/"+now.getDayString()});$urlRouterProvider.when("/calendar/month",function(){var now=new Date;return"/calendar/month/"+now.getDayString()});$urlRouterProvider.otherwise("/calendar")}stateCalendars.$inject=["Calendar"];function stateCalendars(Calendar){return Calendar.$calendars||Calendar.$findAll(window.calendarsData)}stateEventsBlocks.$inject=["$stateParams","Component","Calendar"];function stateEventsBlocks($stateParams,Component,Calendar){return Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(views){_.forEach(views,function(view){if(view.id){view.calendar=new Calendar({id:view.id,name:view.calendarName})}});return views})}runBlock.$inject=["$rootScope","$log","$location","$state","Preferences"];function runBlock($rootScope,$log,$location,$state,Preferences){$rootScope.$on("$stateChangeError",function(event,toState,toParams,fromState,fromParams,error){$log.error(error);$state.go("calendar")});$rootScope.$on("$routeChangeError",function(event,current,previous,rejection){$log.error(event,current,previous,rejection)});if($location.url().length===0){Preferences.ready().then(function(){var url="/calendar/",view=/(.+)view/.exec(Preferences.settings.Calendar.View);if(view)url+=view[1];else url+="week";$location.replace().url(url)})}}})();(function(){"use strict";CalendarController.$inject=["$scope","$rootScope","$state","$stateParams","Calendar","Component","stateEventsBlocks"];function CalendarController($scope,$rootScope,$state,$stateParams,Calendar,Component,stateEventsBlocks){var vm=this,deregisterCalendarsList;vm.views=stateEventsBlocks;vm.changeView=changeView;deregisterCalendarsList=$rootScope.$on("calendars:list",updateView);$scope.$on("$destroy",deregisterCalendarsList);function updateView(){Component.$eventsBlocksForView($stateParams.view,$stateParams.day.asDate()).then(function(data){vm.views=data;_.forEach(vm.views,function(view){if(view.id){view.calendar=new Calendar({id:view.id,name:view.calendarName})}})})}function changeView($event){var date=angular.element($event.currentTarget).attr("date");$state.go("calendars.view",{view:$stateParams.view,day:date})}}angular.module("SOGo.SchedulerUI").controller("CalendarController",CalendarController)})();(function(){"use strict";CalendarListController.$inject=["$rootScope","$timeout","$state","$mdDialog","Dialog","Preferences","Calendar","Component"];function CalendarListController($rootScope,$timeout,$state,$mdDialog,Dialog,Preferences,Calendar,Component){var vm=this;vm.component=Component;vm.componentType="events";vm.selectedList=0;vm.selectComponentType=selectComponentType;vm.unselectComponents=unselectComponents;vm.selectAll=selectAll;vm.toggleComponentSelection=toggleComponentSelection;vm.confirmDeleteSelectedComponents=confirmDeleteSelectedComponents;vm.openEvent=openEvent;vm.openTask=openTask;vm.newComponent=newComponent;vm.filter=filter;vm.filteredBy=filteredBy;vm.sort=sort;vm.sortedBy=sortedBy;vm.reload=reload;vm.cancelSearch=cancelSearch;vm.mode={search:false};Preferences.ready().then(function(){var type="events";if(Preferences.settings.Calendar.SelectedList=="tasksListView"){vm.selectedList=1;type="tasks"}selectComponentType(type,{reload:true})});$rootScope.$on("calendars:list",function(){Component.$filter(vm.componentType,{reload:true})});$rootScope.$on("calendar:dragend",updateComponentFromGhost);function selectComponentType(type,options){if(options&&options.reload||vm.componentType!=type){if(angular.isUndefined(Component["$"+type]))Component.$filter(type);vm.unselectComponents();vm.componentType=type;Component.saveSelectedList(type)}}function unselectComponents(){_.each(Component["$"+vm.componentType],function(component){component.selected=false})}function selectAll(){_.each(Component["$"+vm.componentType],function(component){component.selected=true})}function toggleComponentSelection($event,component){component.selected=!component.selected;$event.preventDefault();$event.stopPropagation()}function confirmDeleteSelectedComponents(){Dialog.confirm(l("Warning"),l("Are you sure you want to delete the selected components?")).then(function(){var components=_.filter(Component["$"+vm.componentType],function(component){return component.selected});Calendar.$deleteComponents(components)},function(data,status){})}function openEvent($event,event){openComponent($event,event,"appointment")}function openTask($event,task){openComponent($event,task,"task")}function openComponent($event,component,type){if(component.viewable){var templateUrl="UIx"+type.capitalize()+"ViewTemplate";$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentController",controllerAs:"editor",locals:{stateComponent:component}})}}function newComponent($event,baseComponent){var type="appointment",component;if(baseComponent){component=baseComponent;type=baseComponent.type}else{if(vm.componentType=="tasks")type="task";component=new Component({pid:"personal",type:type})}var templateUrl="UIx"+type.capitalize()+"EditorTemplate";return $mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:component}})}function updateComponentFromGhost($event){var component,pointerHandler,coordinates,delta,params;component=Component.$ghost.component;pointerHandler=Component.$ghost.pointerHandler;if(component.isNew){coordinates=pointerHandler.currentEventCoordinates;if(component.isAllDay)coordinates.duration-=96;component.setDelta(coordinates.duration*15);newComponent(null,component).finally(function(){$timeout(function(){Component.$ghost.pointerHandler=null;Component.$ghost.component=null})})}else{delta=pointerHandler.currentEventCoordinates.getDelta(pointerHandler.originalEventCoordinates);params={days:delta.dayNumber,start:delta.start*15,duration:delta.duration*15};if(component.isException||!component.occurrenceId)component.$adjust(params).then(function(){$rootScope.$emit("calendars:list");$timeout(function(){Component.$ghost={}})});else if(component.occurrenceId){$mdDialog.show({clickOutsideToClose:true,escapeToClose:true,locals:{component:component,params:params},template:['',' '," "+l("editRepeatingItem")+"
"," "," ",' '+l("button_thisOccurrenceOnly")+" ",' '+l("button_allOccurrences")+" "," "," "].join(""),controller:RecurrentComponentDialogController}).then(function(){$rootScope.$emit("calendars:list")}).finally(function(){$timeout(function(){Component.$ghost={}})})}}RecurrentComponentDialogController.$inject=["$scope","$mdDialog","component","params"];function RecurrentComponentDialogController($scope,$mdDialog,component,params){$scope.updateThisOccurrence=function(){component.$adjust(params).then($mdDialog.hide,$mdDialog.cancel)};$scope.updateAllOccurrences=function(){delete component.occurrenceId;component.$adjust(params).then($mdDialog.hide,$mdDialog.cancel)}}}function filter(filterpopup){Component.$filter(vm.componentType,{filterpopup:filterpopup})}function filteredBy(filterpopup){return Component["$query"+vm.componentType.capitalize()].filterpopup==filterpopup}function sort(field){Component.$filter(vm.componentType,{sort:field})}function sortedBy(field){return Component["$query"+vm.componentType.capitalize()].sort==field}function reload(){$rootScope.$emit("calendars:list")}function cancelSearch(){vm.mode.search=false;Component.$filter(vm.componentType,{value:""})}}angular.module("SOGo.SchedulerUI").controller("CalendarListController",CalendarListController)})();(function(){"use strict";CalendarsController.$inject=["$rootScope","$scope","$window","$mdDialog","$log","$mdToast","FileUploader","sgFocus","Dialog","sgSettings","Preferences","Calendar","User","stateCalendars"];function CalendarsController($rootScope,$scope,$window,$mdDialog,$log,$mdToast,FileUploader,focus,Dialog,Settings,Preferences,Calendar,User,stateCalendars){var vm=this;vm.activeUser=Settings.activeUser;vm.service=Calendar;vm.newCalendar=newCalendar;vm.addWebCalendar=addWebCalendar;vm.confirmDelete=confirmDelete;vm.editFolder=editFolder;vm.revertEditing=revertEditing;vm.renameFolder=renameFolder;vm.share=share;vm.importCalendar=importCalendar;vm.exportCalendar=exportCalendar;vm.showLinks=showLinks;vm.showProperties=showProperties;vm.subscribeToFolder=subscribeToFolder;vm.today=today;Preferences.ready().then(function(){vm.categories=_.map(Preferences.defaults.SOGoCalendarCategories,function(name){return{id:name.asCSSIdentifier(),name:name,color:Preferences.defaults.SOGoCalendarCategoriesColors[name]}})});$scope.$watch(function(){return _.union(_.map(Calendar.$calendars,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$subscriptions,function(o){return _.pick(o,["id","active","color"])}),_.map(Calendar.$webcalendars,function(o){return _.pick(o,["id","active","color"])}))},function(newList,oldList){var ids=_.pluck(_.filter(newList,function(o,i){return!_.isEqual(o,oldList[i])}),"id");if(ids.length>0){$log.debug(ids.join(", ")+" changed");_.each(ids,function(id){var calendar=Calendar.$get(id);calendar.$setActivation().then(function(){$rootScope.$emit("calendars:list")})})}},true);function newCalendar(ev){Dialog.prompt(l("New calendar"),l("Name of the Calendar")).then(function(name){var calendar=new Calendar({name:name,isEditable:true,isRemote:false,owner:UserLogin});calendar.$id().then(function(){Calendar.$add(calendar)})})}function addWebCalendar(){Dialog.prompt(l("Subscribe to a web calendar..."),l("URL of the Calendar"),{inputType:"url"}).then(function(url){Calendar.$addWebCalendar(url)})}function confirmDelete(folder){if(folder.isSubscription){folder.$delete().then(function(){$rootScope.$emit("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the calendar "%{0}".',folder.name),l(data.error))})}else{Dialog.confirm(l("Warning"),l("Are you sure you want to delete the calendar %{0} ?",folder.name)).then(function(){folder.$delete().then(function(){$rootScope.$emit("calendars:list")},function(data,status){Dialog.alert(l('An error occured while deleting the calendar "%{0}".',folder.name),l(data.error))})})}}function importCalendar($event,folder){$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,templateUrl:"UIxCalendarImportDialog",controller:CalendarImportDialogController,controllerAs:"$CalendarImportDialogController",locals:{folder:folder}});CalendarImportDialogController.$inject=["scope","$mdDialog","folder"];function CalendarImportDialogController(scope,$mdDialog,folder){var vm=this;vm.uploader=new FileUploader({url:ApplicationBaseURL+[folder.id,"import"].join("/"),autoUpload:true,queueLimit:1,filters:[{name:filterByExtension,fn:filterByExtension}],onSuccessItem:function(item,response,status,headers){var msg;$mdDialog.hide();if(response.imported===0)msg=l("No event was imported.");else{msg=l("A total of %{0} events were imported in the calendar.",response.imported);$rootScope.$emit("calendars:list")}$mdToast.show($mdToast.simple().content(msg).position("top right").hideDelay(3e3))},onErrorItem:function(item,response,status,headers){$mdToast.show({template:["",' ',' error_outline '," "+l("An error occurred while importing calendar.")+" ","
"," "].join(""),position:"top right",hideDelay:3e3})}});vm.close=function(){$mdDialog.hide()};function filterByExtension(item){var isTextFile=item.type.indexOf("text")===0||/\.(ics)$/.test(item.name);if(!isTextFile)$mdToast.show({template:["",' ',' error_outline '," "+l("Select an iCalendar file (.ics).")+" ","
"," "].join(""),position:"top right",hideDelay:3e3});return isTextFile}}}function exportCalendar(calendar){window.location.href=ApplicationBaseURL+"/"+calendar.id+".ics"+"/export"}function showLinks(calendar){$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:calendar.id+"/links",controller:LinksDialogController,controllerAs:"links",locals:{calendar:calendar}});LinksDialogController.$inject=["$mdDialog","calendar"];function LinksDialogController($mdDialog,calendar){var vm=this;vm.calendar=calendar;vm.close=close;function close(){$mdDialog.hide()}}}function showProperties(calendar){var color=calendar.color;$mdDialog.show({templateUrl:calendar.id+"/properties",controller:PropertiesDialogController,controllerAs:"properties",clickOutsideToClose:true,escapeToClose:true,locals:{srcCalendar:calendar}}).catch(function(){calendar.color=color});PropertiesDialogController.$inject=["$scope","$mdDialog","srcCalendar"];function PropertiesDialogController($scope,$mdDialog,srcCalendar){var vm=this;vm.calendar=new Calendar(srcCalendar.$omit());vm.saveProperties=saveProperties;vm.close=close;$scope.$watch("properties.calendar.color",function(){srcCalendar.color=vm.calendar.color});function saveProperties(){vm.calendar.$save();srcCalendar.init(vm.calendar.$omit());$mdDialog.hide()}function close(){$mdDialog.cancel()}}}function editFolder(folder){vm.calendarName=folder.name;vm.editMode=folder.id;focus("calendarName_"+folder.id)}function revertEditing(folder){folder.$reset();vm.editMode=false}function renameFolder(folder){folder.$rename().then(function(data){vm.editMode=false},function(data,status){Dialog.alert(l("Warning"),data)})}function share(calendar){calendar.$acl.$users().then(function(){$mdDialog.show({templateUrl:calendar.id+"/UIxAclEditor",controller:"AclController",controllerAs:"acl",clickOutsideToClose:true,escapeToClose:true,locals:{usersWithACL:calendar.$acl.users,User:User,folder:calendar}})})}function subscribeToFolder(calendarData){$log.debug("subscribeToFolder "+calendarData.owner+calendarData.name);Calendar.$subscribe(calendarData.owner,calendarData.name).catch(function(data){Dialog.alert(l("Warning"),l("An error occured please try again."))})}function today(){var fragments=$window.location.hash.split("/"),state=fragments[1],view=fragments[2],now=new Date,path=["#",state,view,now.getDayString()];$window.location=path.join("/")}}angular.module("SOGo.SchedulerUI").controller("CalendarsController",CalendarsController)})();(function(){"use strict";ComponentController.$inject=["$rootScope","$mdDialog","Calendar","AddressBook","Alarm","stateComponent"];function ComponentController($rootScope,$mdDialog,Calendar,AddressBook,Alarm,stateComponent){var vm=this,component;vm.component=stateComponent;vm.close=close;vm.cardFilter=cardFilter;vm.edit=edit;vm.editAllOccurrences=editAllOccurrences;vm.reply=reply;vm.replyAllOccurrences=replyAllOccurrences;vm.deleteOccurrence=deleteOccurrence;vm.deleteAllOccurrences=deleteAllOccurrences;vm.toggleRawSource=toggleRawSource;if(angular.isUndefined(vm.component.$futureComponentData)){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id,vm.component.occurrenceId);component.$futureComponentData.then(function(){vm.component=component;vm.organizer=[vm.component.organizer]})}function close(){$mdDialog.hide()}function cardFilter($query){AddressBook.$filterAll($query);return AddressBook.$cards}function edit(){var type=vm.component.component=="vevent"?"Appointment":"Task";$mdDialog.hide().then(function(){var templateUrl="UIx"+type+"EditorTemplate";$mdDialog.show({parent:angular.element(document.body),clickOutsideToClose:true,escapeToClose:true,templateUrl:templateUrl,controller:"ComponentEditorController",controllerAs:"editor",locals:{stateComponent:vm.component}})})}function editAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id);component.$futureComponentData.then(function(){vm.component=component;edit()})}function reply(component){var c=component||vm.component;c.$reply().then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide();Alarm.getAlarms()})}function replyAllOccurrences(){component=Calendar.$get(vm.component.pid).$getComponent(vm.component.id);component.$futureComponentData.then(function(){component.reply=vm.component.reply;component.delegatedTo=vm.component.delegatedTo;component.$hasAlarm=vm.component.$hasAlarm;component.alarm=vm.component.alarm;reply(component)})}function deleteOccurrence(){vm.component.remove(true).then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide()})}function deleteAllOccurrences(){vm.component.remove().then(function(){$rootScope.$emit("calendars:list");$mdDialog.hide()})}function toggleRawSource($event){Calendar.$$resource.post(vm.component.pid+"/"+vm.component.id,"raw").then(function(data){$mdDialog.hide();$mdDialog.show({parent:angular.element(document.body),targetEvent:$event,clickOutsideToClose:true,escapeToClose:true,template:['',' '," ",data," "," "," ",' '+l("Close")+" "," "," "].join(""),controller:ComponentRawSourceDialogController});ComponentRawSourceDialogController.$inject=["scope","$mdDialog"];function ComponentRawSourceDialogController(scope,$mdDialog){scope.close=function(){$mdDialog.hide()}}})}}ComponentEditorController.$inject=["$rootScope","$scope","$log","$timeout","$mdDialog","User","Calendar","Component","AddressBook","Card","Alarm","stateComponent"];function ComponentEditorController($rootScope,$scope,$log,$timeout,$mdDialog,User,Calendar,Component,AddressBook,Card,Alarm,stateComponent){var vm=this,component,oldStartDate,oldEndDate,oldDueDate;vm.calendars=Calendar.$calendars;vm.component=stateComponent;vm.categories={};vm.showRecurrenceEditor=vm.component.$hasCustomRepeat;vm.toggleRecurrenceEditor=toggleRecurrenceEditor;vm.showAttendeesEditor=angular.isDefined(vm.component.attendees);vm.toggleAttendeesEditor=toggleAttendeesEditor;vm.cardFilter=cardFilter;vm.addAttendee=addAttendee;vm.addAttachUrl=addAttachUrl;vm.cancel=cancel;vm.save=save;vm.attendeesEditor={days:getDays(),hours:getHours()};vm.addStartDate=addStartDate;vm.addDueDate=addDueDate;vm.updateStartTime=updateStartTime;vm.adjustStartTime=adjustStartTime;vm.updateEndTime=updateEndTime;vm.adjustEndTime=adjustEndTime;vm.updateDueTime=updateDueTime;vm.adjustDueTime=adjustDueTime;if(vm.component.start)oldStartDate=new Date(vm.component.start.getTime());if(vm.component.end)oldEndDate=new Date(vm.component.end.getTime());if(vm.component.due)oldDueDate=new Date(vm.component.due.getTime());function addAttachUrl(){var i=vm.component.addAttachUrl("");focus("attachUrl_"+i)}function toggleRecurrenceEditor(){vm.showRecurrenceEditor=!vm.showRecurrenceEditor;vm.component.$hasCustomRepeat=vm.showRecurrenceEditor}function toggleAttendeesEditor(){vm.showAttendeesEditor=!vm.showAttendeesEditor}function cardFilter($query){AddressBook.$filterAll($query);return AddressBook.$cards}function addAttendee(card){if(angular.isString(card)){if(card.isValidEmail()){vm.component.addAttendee(new Card({emails:[{value:card}]}));vm.searchText=""}}else{vm.component.addAttendee(card)}}function save(form){if(form.$valid){vm.component.$save().then(function(data){$rootScope.$emit("calendars:list");$mdDialog.hide();Alarm.getAlarms()},function(data,status){$log.debug("failed")})}}function cancel(){vm.component.$reset();if(vm.component.isNew){vm.component=null}$mdDialog.cancel()}function getDays(){var days=[];if(vm.component.start&&vm.component.end)days=vm.component.start.daysUpTo(vm.component.end);return _.map(days,function(date){return{stringWithSeparator:date.stringWithSeparator(),getDayString:date.getDayString()}})}function getHours(){var hours=[];for(var i=0;i<=23;i++){hours.push(i.toString())}return hours}function addStartDate(){vm.component.$addStartDate();oldStartDate=new Date(vm.component.start.getTime())}function addDueDate(){vm.component.$addDueDate();oldDueDate=new Date(vm.component.due.getTime())}function updateStartTime(){vm.component.start.addMinutes(oldStartDate.getHours()*60+oldStartDate.getMinutes());adjustStartTime()}function adjustStartTime(){var delta;delta=oldStartDate.valueOf()-vm.component.start.valueOf();if(delta!==0){oldStartDate=new Date(vm.component.start.getTime());if(vm.component.type==="appointment"){vm.component.end=new Date(vm.component.start.getTime());vm.component.end.addMinutes(vm.component.delta);oldEndDate=new Date(vm.component.end.getTime())}}updateFreeBusy()}function updateEndTime(){vm.component.end.addMinutes(oldEndDate.getHours()*60+oldEndDate.getMinutes());adjustEndTime()}function adjustEndTime(){var delta=vm.component.start.minutesTo(vm.component.end);if(delta<0)vm.component.end=new Date(oldEndDate.getTime());else{vm.component.delta=delta;oldEndDate=new Date(vm.component.end.getTime())}updateFreeBusy()}function updateDueTime(){vm.component.due.addMinutes(oldDueDate.getHours()*60+oldDueDate.getMinutes());adjustDueTime()}function adjustDueTime(){oldDueDate=new Date(vm.component.due.getTime())}function updateFreeBusy(){vm.attendeesEditor.days=getDays();vm.component.updateFreeBusy()}}angular.module("SOGo.SchedulerUI").controller("ComponentController",ComponentController).controller("ComponentEditorController",ComponentEditorController)})();(function(){"use strict";function sgCalendarDay(){return{restrict:"E",scope:{day:"@sgDay",dayNumber:"@sgDayNumber",dayString:"@sgDayString"},controller:sgCalendarDayController}}sgCalendarDayController.$inject=["$scope"];function sgCalendarDayController($scope){this.day=$scope.day;this.dayNumber=$scope.dayNumber;this.dayString=$scope.dayString}angular.module("SOGo.SchedulerUI").directive("sgCalendarDay",sgCalendarDay)})();(function(){"use strict";sgCalendarDayBlock.$inject=["CalendarSettings"];function sgCalendarDayBlock(CalendarSettings){return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:true,template:['",'
','
",'
{{ block.component.summary }}','
',' ',' ',' ',' '," ",'
'," place {{block.component.c_location}}","
","
","
","
"].join(""),link:link};function link(scope,iElement,attrs){var pc,left,right;pc=100/scope.block.siblings;left=scope.block.position*pc;right=100-(scope.block.position+1)*pc;if(pc<100){if(left>0)left-=2;if(right>0)right-=2}if(left===0)left=2;if(right===0)right=2;iElement.css("left",left+"%");iElement.css("right",right+"%");iElement.addClass("starts"+scope.block.start);iElement.addClass("lasts"+scope.block.length);if(scope.block.component)iElement.addClass("bg-folder"+scope.block.component.pid)}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayBlock",sgCalendarDayBlock)})();(function(){"use strict";function sgCalendarDayTable(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarDayTable",sgCalendarDayTable)})();(function(){"use strict";sgCalendarGhost.$inject=["$rootScope","$timeout","CalendarSettings","Calendar","Component"];function sgCalendarGhost($rootScope,$timeout,CalendarSettings,Calendar,Component){return{restrict:"A",require:["^sgCalendarDay","^sgCalendarScrollView"],link:link};function link(scope,iElement,attrs,ctrls){var domElement,calendarDayCtrl,scrollViewCtrl;domElement=iElement[0];calendarDayCtrl=ctrls[0];scrollViewCtrl=ctrls[1];iElement.addClass("sg-event--ghost md-whiteframe-3dp ng-hide");var deregisterDragStart=$rootScope.$on("calendar:dragstart",initGhost);var deregisterDrag=$rootScope.$on("calendar:drag",updateGhost);var deregisterDragEnd=$rootScope.$on("calendar:dragend",hideGhost);scope.$on("$destroy",function(){deregisterDragStart();deregisterDrag();deregisterDragEnd()});function initGhost(){scope.block=Component.$ghost;iElement.addClass("bg-folder"+scope.block.component.pid)}function hideGhost(){_.forEachRight(domElement.classList,function(c){if(/^bg-folder/.test(c))iElement.removeClass(c)});iElement.addClass("ng-hide")}function updateGhost(){var showGhost,isRelative,originalDay,currentDay,wasOtherBlock,start,duration,durationLeft,maxDuration,enableTransition;showGhost=false;enableTransition=function(){iElement.removeClass("sg-event--notransition")};if(Calendar.$view&&Calendar.$view.type==scrollViewCtrl.type){isRelative=scrollViewCtrl.type==="multiday-allday";originalDay=scope.block.pointerHandler.originalEventCoordinates.dayNumber;currentDay=scope.block.pointerHandler.currentEventCoordinates.dayNumber;start=scope.block.pointerHandler.currentEventCoordinates.start;durationLeft=scope.block.pointerHandler.currentEventCoordinates.duration;maxDuration=CalendarSettings.EventDragDayLength-start;if(angular.isUndefined(durationLeft))return;duration=durationLeft;if(duration>maxDuration)duration=maxDuration;delete scope.startHour;delete scope.endHour;if(currentDay>-1&¤tDay==calendarDayCtrl.dayNumber){showGhost=true;if(!isRelative){scope.startHour=getStartTime(start);wasOtherBlock=parseInt(iElement.css("top"))===0;if(wasOtherBlock)iElement.addClass("sg-event--notransition");if(Calendar.$view.quarterHeight){iElement.css("top",start*Calendar.$view.quarterHeight+"px");iElement.css("height",duration*Calendar.$view.quarterHeight+"px")}else iElement.css("top",Calendar.$view.topOffset+"px");if(wasOtherBlock)$timeout(enableTransition)}iElement.removeClass("fg-folder"+scope.block.component.pid);iElement.removeClass("sg-event--ghost--last");iElement.addClass("sg-event--ghost--first")}durationLeft-=duration;currentDay++;while(!showGhost&&durationLeft&¤tDay<=calendarDayCtrl.dayNumber){duration=durationLeft;if(duration>CalendarSettings.EventDragDayLength)duration=CalendarSettings.EventDragDayLength;if(currentDay>-1&¤tDay==calendarDayCtrl.dayNumber){showGhost=true;if(!isRelative){wasOtherBlock=parseInt(iElement.css("top"))!==0;if(wasOtherBlock)iElement.addClass("sg-event--notransition");iElement.css("top",Calendar.$view.topOffset+"px");if(Calendar.$view.quarterHeight)iElement.css("height",duration*Calendar.$view.quarterHeight+"px");if(wasOtherBlock)$timeout(enableTransition)}iElement.removeClass("sg-event--ghost--first");iElement.removeClass("sg-event--ghost--last");iElement.addClass("fg-folder"+scope.block.component.pid)}durationLeft-=duration;currentDay++;start=0}if(!durationLeft){if(isRelative){iElement.addClass("sg-event--ghost--last")}else{scope.endHour=getEndTime(start,duration)}}}if(showGhost)iElement.removeClass("ng-hide");else iElement.addClass("ng-hide")}function quartersToHM(quarters){var minutes,hours,mins;minutes=quarters*15;hours=Math.floor(minutes/60);if(hours<10)hours="0"+hours;mins=minutes%60;if(mins<10)mins="0"+mins;return""+hours+":"+mins}function getStartTime(start){return quartersToHM(start)}function getEndTime(start,duration){var end=(start+duration)%CalendarSettings.EventDragDayLength;return quartersToHM(end)}}}angular.module("SOGo.SchedulerUI").directive("sgCalendarGhost",sgCalendarGhost)})();(function(){"use strict";function sgCalendarMonthDay(){return{restrict:"E",scope:{blocks:"=sgBlocks",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthDay",sgCalendarMonthDay)})();(function(){"use strict";function sgCalendarMonthEvent(){return{restrict:"E",scope:{block:"=sgBlock",clickBlock:"&sgClick"},replace:true,template:['',' {{ block.starthour }} '," {{ block.component.summary }}",' ',' ',' ',' ',' '," ","
"].join(""),link:link};function link(scope,iElement,attrs){if(scope.block.component)iElement.addClass("bg-folder"+scope.block.component.pid)}}angular.module("SOGo.SchedulerUI").directive("sgCalendarMonthEvent",sgCalendarMonthEvent)})();(function(){"use strict";sgCalendarScrollView.$inject=["$rootScope","$window","$document","$q","$timeout","$mdGesture","Calendar","Component","Preferences"];function sgCalendarScrollView($rootScope,$window,$document,$q,$timeout,$mdGesture,Calendar,Component,Preferences){return{restrict:"A",scope:{type:"@sgCalendarScrollView"},controller:sgCalendarScrollViewController,link:function(scope,element,attrs,controller){var view,scrollView,type,lastScroll,deregisterDragStart,deregisterDragStop;scrollView=element[0];type=scope.type;lastScroll=0;deregisterDragStart=$rootScope.$on("calendar:dragstart",onDragStart);deregisterDragStop=$rootScope.$on("calendar:dragend",onDragEnd);$timeout(initView);scope.$on("$destroy",function(){deregisterDragStart();deregisterDragStop();
+element.off("mouseover",updateFromPointerHandler);angular.element($window).off("resize",updateCoordinates)});function initView(){var quarterHeight;quarterHeight=getQuarterHeight();view={type:type,quarterHeight:quarterHeight,scrollStep:6*quarterHeight,maxX:getMaxColumns(),element:scrollView};angular.element($window).on("resize",updateCoordinates);updateCoordinates();if(type!="monthly")Preferences.ready().then(function(){var time,hourCell,quartersOffset;if(Preferences.defaults.SOGoDayStartTime){time=Preferences.defaults.SOGoDayStartTime.split(":");hourCell=document.getElementById("hour"+parseInt(time[0]));quartersOffset=parseInt(time[1])*quarterHeight;scrollView.scrollTop=hourCell.offsetTop+quartersOffset}})}function getQuarterHeight(){var hour0,hour23,height=null;hour0=document.getElementById("hour0");hour23=document.getElementById("hour23");if(hour0&&hour23)height=(hour23.offsetTop-hour0.offsetTop)/(23*4);return height}function getDayDimensions(viewLeft){var width,height,leftOffset,topOffset,nodes,domRect,tileHeader;height=width=leftOffset=topOffset=0;nodes=scrollView.getElementsByClassName("day0");if(nodes.length>0){domRect=nodes[0].getBoundingClientRect();height=domRect.height;width=domRect.width;leftOffset=domRect.left-viewLeft;tileHeader=nodes[0].getElementsByClassName("sg-calendar-tile-header");if(tileHeader.length>0)topOffset=tileHeader[0].clientHeight}return{height:height,width:width,offset:{left:leftOffset,top:topOffset}}}function getMaxColumns(){var max=0;max=scrollView.getElementsByClassName("day").length-1;return max}function updateCoordinates(){var domRect,dayDimensions;domRect=scrollView.getBoundingClientRect();dayDimensions=getDayDimensions(domRect.left);angular.extend(view,{coordinates:{x:domRect.left,y:domRect.top},dayHeight:dayDimensions.height,dayWidth:dayDimensions.width,daysOffset:dayDimensions.offset.left,topOffset:dayDimensions.offset.top})}function onDragStart(){element.on("mouseover",updateFromPointerHandler);updateFromPointerHandler()}function onDragEnd(){element.off("mouseover",updateFromPointerHandler);Calendar.$view=null}function updateFromPointerHandler(){var scrollStep,pointerHandler,pointerCoordinates,now,scrollY,minY,delta;scrollStep=view.scrollStep;pointerHandler=Component.$ghost.pointerHandler;if(pointerHandler){pointerCoordinates=pointerHandler.getContainerBasedCoordinates(view);if(pointerCoordinates){Calendar.$view=view;now=(new Date).getTime();if(!lastScroll||now>lastScroll+100){lastScroll=now;scrollY=pointerCoordinates.y-scrollStep;if(scrollY<0){minY=-scrollView.scrollTop;if(scrollY0){scrollView.scrollTop+=delta}}}}}}}}}sgCalendarScrollViewController.$inject=["$scope"];function sgCalendarScrollViewController($scope){this.type=$scope.type}angular.module("SOGo.SchedulerUI").directive("sgCalendarScrollView",sgCalendarScrollView)})();(function(){"use strict";function sgCalendarTable(){return{restrict:"E",scope:{calendars:"=sgCalendars",calendar:"@sgCalendar",blocksType:"@sgBlocksType",day:"@sgDay",clickBlock:"&sgClick"},template:[" '].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCalendarTable",sgCalendarTable)})();(function(){"use strict";function sgCategoryStylesheet(){return{restrict:"E",require:"ngModel",scope:{ngModel:"="},replace:true,template:['"].join("")}}angular.module("SOGo.SchedulerUI").directive("sgCategoryStylesheet",sgCategoryStylesheet)})();(function(){"use strict";sgDraggableCalendarBlock.$inject=["$rootScope","$timeout","$log","Calendar","CalendarSettings","Component"];function sgDraggableCalendarBlock($rootScope,$timeout,$log,Calendar,CalendarSettings,Component){return{restrict:"CA",require:"^sgCalendarDay",link:link};function link(scope,element,attrs,calendarDayCtrl){if(scope.block){if(scope.block.component.editable)initGrips();else return}element.on("mousedown",onDragDetect);scope.$on("$destroy",function(){element.off("mousedown",onDragDetect);element.off("mousemove",onDrag)});function initGrips(){var component,dayNumber,blockIndex,isFirstBlock,isLastBlock,dragGrip,leftGrip,rightGrip,topGrip,bottomGrip;component=scope.block.component;dayNumber=scope.block.dayNumber;blockIndex=_.findIndex(component.blocks,_.matchesProperty("dayNumber",dayNumber));isFirstBlock=blockIndex===0;isLastBlock=blockIndex===component.blocks.length-1;dragGrip=angular.element('
');dragGrip.addClass("bdr-folder"+component.pid);if(component.c_isallday||element[0].parentNode.tagName==="SG-CALENDAR-MONTH-DAY"){if(isFirstBlock){leftGrip=angular.element('
').append(dragGrip);element.append(leftGrip)}if(isLastBlock){rightGrip=angular.element('
').append(dragGrip.clone());element.append(rightGrip)}}else{if(isFirstBlock){topGrip=angular.element('
').append(dragGrip);element.append(topGrip)}if(isLastBlock){bottomGrip=angular.element('
').append(dragGrip.clone());element.append(bottomGrip)}}}function onDragDetect(ev){var block,dragMode,eventType,startDate,newData,newComponent,pointerHandler;ev.stopPropagation();dragMode="move-event";if(scope.block&&scope.block.component){if(ev.target.className=="dragGrip-top"||ev.target.className=="dragGrip-left")dragMode="change-start";else if(ev.target.className=="dragGrip-bottom"||ev.target.className=="dragGrip-right")dragMode="change-end"}else{dragMode="change-end"}pointerHandler=new SOGoEventDragPointerHandler(dragMode);pointerHandler.initFromEvent(ev);Component.$ghost.pointerHandler=pointerHandler;angular.element(document).one("mouseup",onDragEnd);angular.element(document).on("mousemove",onDrag)}function dragStart(ev){var block,dragMode,eventType,isHourCell,isMonthly,startDate,newData,newComponent,pointerHandler;isHourCell=element.hasClass("clickableHourCell");isMonthly=element[0].parentNode.tagName=="SG-CALENDAR-MONTH-DAY"||element.hasClass("clickableDayCell");if(scope.block&&scope.block.component){block=scope.block}else{startDate=new Date(calendarDayCtrl.dayString.substring(0,10)+" "+calendarDayCtrl.dayString.substring(11,16));newData={type:"appointment",pid:"personal",summary:l("New Event"),startDate:startDate,isAllDay:isHourCell?0:1};newComponent=new Component(newData);block={component:newComponent,dayNumber:calendarDayCtrl.dayNumber,length:0};block.component.blocks=[block]}eventType="multiday";if(isMonthly)eventType="monthly";else if(block.component.c_isallday)eventType="multiday-allday";_.forEach(block.component.blocks,function(b){b.dragging=true});pointerHandler=Component.$ghost.pointerHandler;pointerHandler.prepareWithEventType(eventType);pointerHandler.initFromBlock(block);Component.$ghost.starthour=block.starthour;Component.$ghost.component=block.component;$log.debug("emit calendar:dragstart");$rootScope.$emit("calendar:dragstart")}function onDrag(ev){var pointerHandler=Component.$ghost.pointerHandler;$timeout(function(){pointerHandler.updateFromEvent(ev)})}function onDragEnd(ev){var block,pointer;block=scope.block;pointer=Component.$ghost.pointerHandler;angular.element(document).off("mousemove",onDrag);if(pointer.dragHasStarted){$rootScope.$emit("calendar:dragend");pointer.dragHasStarted=false}if(block)_.forEach(block.component.blocks,function(b){b.dragging=false})}function SOGoCoordinates(){}SOGoCoordinates.prototype={x:-1,y:-1,getDelta:function SC_getDelta(otherCoordinates){var delta=new SOGoCoordinates;delta.x=this.x-otherCoordinates.x;delta.y=this.y-otherCoordinates.y;return delta},getDistance:function SC_getDistance(otherCoordinates){var delta=this.getDelta(otherCoordinates);return Math.sqrt(delta.x*delta.x+delta.y*delta.y)},clone:function SC_clone(){var coordinates=new SOGoCoordinates;coordinates.x=this.x;coordinates.y=this.y;return coordinates}};function SOGoEventDragEventCoordinates(eventType){this.setEventType(eventType)}SOGoEventDragEventCoordinates.prototype={dayNumber:-1,start:-1,duration:-1,eventType:null,setEventType:function(eventType){this.eventType=eventType},initFromBlock:function(block){if(this.eventType==="monthly"){this.start=0;this.duration=block.component.blocks.length*96}else{this.start=block.component.blocks[0].start;this.duration=_.sum(block.component.blocks,function(b){return b.length})}this.dayNumber=block.component.blocks[0].dayNumber},getDelta:function(otherCoordinates){var delta=new SOGoEventDragEventCoordinates;delta.dayNumber=this.dayNumber-otherCoordinates.dayNumber;delta.start=this.start-otherCoordinates.start;delta.duration=this.duration-otherCoordinates.duration;return delta},_quartersToHM:function(quarters){var minutes=quarters*15;var hours=Math.floor(minutes/60);if(hours<10)hours="0"+hours;var mins=minutes%60;if(mins<10)mins="0"+mins;return""+hours+":"+mins},getStartTime:function(){return this._quartersToHM(this.start)},getEndTime:function(){var end=(this.start+this.duration)%CalendarSettings.EventDragDayLength;return this._quartersToHM(end)},clone:function(){var coordinates=new SOGoEventDragEventCoordinates;coordinates.dayNumber=this.dayNumber;coordinates.start=this.start;coordinates.duration=this.duration;return coordinates}};function SOGoEventDragPointerHandler(dragMode){this.dragMode=dragMode}SOGoEventDragPointerHandler.prototype={originalCoordinates:null,currentCoordinates:null,originalViewCoordinates:null,currentViewCoordinates:null,originalEventCoordinates:null,currentEventCoordinates:null,dragHasStarted:false,getEventViewCoordinates:null,initFromBlock:function SEDPH_initFromBlock(block){this.currentEventCoordinates=new SOGoEventDragEventCoordinates(this.eventType);this.originalEventCoordinates=new SOGoEventDragEventCoordinates(this.eventType);this.originalEventCoordinates.initFromBlock(block)},initFromEvent:function SEDPH_initFromEvent(event){this.currentCoordinates=new SOGoCoordinates;this.updateFromEvent(event);this.originalCoordinates=this.currentCoordinates.clone()},updateFromEvent:function SEDPH_updateFromEvent(event){this.currentCoordinates.x=event.pageX;this.currentCoordinates.y=event.pageY;if(this.dragHasStarted&&Calendar.$view){var newEventCoordinates=this.getEventViewCoordinates(Calendar.$view);if(!this.originalViewCoordinates){this.originalViewCoordinates=this.getEventViewCoordinates(Calendar.$view,this.originalCoordinates);if(Component.$ghost.component.isNew){this.setTimeFromQuarters(Component.$ghost.component.start,this.originalViewCoordinates.y);$log.debug("new event start date "+Component.$ghost.component.start)}}if(!this.currentViewCoordinates||!newEventCoordinates||newEventCoordinates.x!=this.currentViewCoordinates.x||newEventCoordinates.y!=this.currentViewCoordinates.y){this.currentViewCoordinates=newEventCoordinates;if(this.originalViewCoordinates){if(!newEventCoordinates){this.currentViewCoordinates=this.originalViewCoordinates.clone()}this.updateEventCoordinates()}}}else if(this.originalCoordinates&&this.currentCoordinates&&!this.dragHasStarted){var distance=this.getDistance();if(distance>3){this.dragHasStarted=true;dragStart(event)}}},updateEventCoordinates:function SEDGC__updateCoordinates(){var newDuration;var delta=this.currentViewCoordinates.getDelta(this.originalViewCoordinates);var deltaQuarters=delta.x*CalendarSettings.EventDragDayLength+delta.y;$log.debug("quarters delta "+deltaQuarters);if(angular.isUndefined(this.originalEventCoordinates.start)){this.originalEventCoordinates.dayNumber=this.originalViewCoordinates.x;this.originalEventCoordinates.start=this.originalViewCoordinates.y}this.currentEventCoordinates.dayNumber=this.originalEventCoordinates.dayNumber;if(this.dragMode=="move-event"){this.currentEventCoordinates.start=this.originalEventCoordinates.start+deltaQuarters;this.currentEventCoordinates.duration=this.originalEventCoordinates.duration}else{if(this.dragMode=="change-start"){newDuration=this.originalEventCoordinates.duration-deltaQuarters;if(newDuration>0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+deltaQuarters;this.currentEventCoordinates.duration=newDuration}else if(newDuration<0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+this.originalEventCoordinates.duration;this.currentEventCoordinates.duration=-newDuration}}else if(this.dragMode=="change-end"){newDuration=this.originalEventCoordinates.duration+deltaQuarters;if(newDuration>0){this.currentEventCoordinates.start=this.originalEventCoordinates.start;this.currentEventCoordinates.duration=newDuration}else if(newDuration<0){this.currentEventCoordinates.start=this.originalEventCoordinates.start+newDuration;this.currentEventCoordinates.duration=-newDuration}}}var deltaDays;if(this.currentEventCoordinates.start<0){deltaDays=Math.ceil(-this.currentEventCoordinates.start/CalendarSettings.EventDragDayLength);this.currentEventCoordinates.start+=deltaDays*CalendarSettings.EventDragDayLength;this.currentEventCoordinates.dayNumber-=deltaDays}else if(this.currentEventCoordinates.start>=CalendarSettings.EventDragDayLength){deltaDays=Math.floor(this.currentEventCoordinates.start/CalendarSettings.EventDragDayLength);this.currentEventCoordinates.start-=deltaDays*CalendarSettings.EventDragDayLength;this.currentEventCoordinates.dayNumber+=deltaDays}$log.debug("event coordinates "+JSON.stringify(this.currentEventCoordinates));$rootScope.$emit("calendar:drag")},getContainerBasedCoordinates:function SEDPH_getCBC(view,pointerCoordinates){var currentCoordinates=pointerCoordinates||this.currentCoordinates;var coordinates=currentCoordinates.getDelta(view.coordinates);var container=view.element;if(coordinates.xcontainer.clientWidth||coordinates.y<0||coordinates.y>container.clientHeight)coordinates=null;return coordinates},prepareWithEventType:function SEDPH_prepareWithEventType(eventType){var methods={multiday:this.getEventMultiDayViewCoordinates,"multiday-allday":this.getEventMultiDayAllDayViewCoordinates,monthly:this.getEventMonthlyViewCoordinates,unknown:null};var method=methods[eventType];this.eventType=eventType;this.getEventViewCoordinates=method},getEventMultiDayViewCoordinates:function SEDPH_gEMultiDayViewC(view,pointerCoordinates){var coordinates=this.getEventMultiDayAllDayViewCoordinates(view,pointerCoordinates);if(coordinates){var quarterHeight=view.quarterHeight;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);pxCoordinates.y+=view.element.scrollTop;coordinates.y=Math.floor((pxCoordinates.y-CalendarSettings.EventDragHorizontalOffset)/quarterHeight);var maxY=CalendarSettings.EventDragDayLength-1;if(coordinates.y<0)coordinates.y=0;else if(coordinates.y>maxY)coordinates.y=maxY}return coordinates},getEventMultiDayAllDayViewCoordinates:function SEDPH_gEMultiDayADVC(view,pointerCoordinates){var coordinates;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);if(pxCoordinates){coordinates=new SOGoCoordinates;var dayWidth=view.dayWidth;var daysOffset=view.daysOffset;coordinates.x=Math.floor((pxCoordinates.x-daysOffset)/dayWidth);var maxX=Calendar.$view.maxX;if(coordinates.x<0)coordinates.x=0;else if(coordinates.x>maxX)coordinates.x=maxX;coordinates.y=0}else{coordinates=null}return coordinates},getEventMonthlyViewCoordinates:function SEDPH_gEMonthlyViewC(view,pointerCoordinates){var coordinates;var pxCoordinates=this.getContainerBasedCoordinates(view,pointerCoordinates);if(pxCoordinates){coordinates=new SOGoCoordinates;var daysTopOffset=0;var dayWidth=view.dayWidth;var daysOffset=view.daysOffset;var dayHeight=view.dayHeight;var daysY=Math.floor((pxCoordinates.y-daysTopOffset)/dayHeight);if(daysY<0)daysY=0;coordinates.x=Math.floor((pxCoordinates.x-daysOffset)/dayWidth);if(coordinates.x<0)coordinates.x=0;else if(coordinates.x>6)coordinates.x=6;coordinates.x+=7*daysY;coordinates.y=0}else{coordinates=null}return coordinates},getDistance:function SEDPH_getDistance(){return this.currentCoordinates.getDistance(this.originalCoordinates)},setTimeFromQuarters:function SEDPH_setTimeFromQuarters(date,quarters){var hours,minutes;hours=Math.floor(quarters/4);minutes=quarters%4*15;date.setHours(hours,minutes)}}}}angular.module("SOGo.SchedulerUI").directive("sgDraggableCalendarBlock",sgDraggableCalendarBlock)})();(function(){"use strict";sgDroppableBlock.$inject=["$rootScope","$timeout","$mdGesture","Calendar","CalendarSettings","Component"];function sgDroppableBlock($rootScope,$timeout,$mdGesture,Calendar,CalendarSettings,Component){return{restrict:"CA",scope:{onDrop:"&sgOnDrop"},link:function(scope,element,attrs,controller){var deregister=$rootScope.$on("calendar:dragend",scope.onDrop);scope.$on("$destroy",deregister)}}}angular.module("SOGo.SchedulerUI").directive("sgDroppableBlock",sgDroppableBlock)})();
//# sourceMappingURL=Scheduler.js.map
\ No newline at end of file
diff --git a/UI/WebServerResources/js/Scheduler.js.map b/UI/WebServerResources/js/Scheduler.js.map
index 452947a7a..e22673a2e 100644
--- a/UI/WebServerResources/js/Scheduler.js.map
+++ b/UI/WebServerResources/js/Scheduler.js.map
@@ -1 +1 @@
-{"version":3,"sources":["Scheduler/Scheduler.app.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDay.directive.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarGhost.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js","Scheduler/sgCalendarScrollView.directive.js","Scheduler/sgCalendarTable.directive.js","Scheduler/sgCategoryStylesheet.directive.js","Scheduler/sgDraggableCalendarBlock.directive.js","Scheduler/sgDroppableBlock.directive.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$stateProvider","$urlRouterProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","stateEventsBlocks","when","now","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","$rootScope","$log","$location","$state","Preferences","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","length","ready","exec","settings","View","replace","CalendarController","$scope","vm","this","deregisterCalendarsList","changeView","updateView","data","$event","date","element","currentTarget","attr","CalendarListController","$timeout","$mdDialog","Dialog","component","componentType","selectedList","selectComponentType","unselectComponents","selectAll","toggleComponentSelection","confirmDeleteSelectedComponents","openEvent","openTask","newComponent","filter","filteredBy","sort","sortedBy","reload","cancelSearch","mode","search","type","SelectedList","$filter","updateComponentFromGhost","options","isUndefined","saveSelectedList","each","selected","preventDefault","stopPropagation","confirm","l","components","$deleteComponents","status","openComponent","task","viewable","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","baseComponent","pid","pointerHandler","coordinates","delta","params","$ghost","isNew","currentEventCoordinates","isAllDay","duration","setDelta","finally","getDelta","originalEventCoordinates","days","dayNumber","start","isException","occurrenceId","$adjust","$emit","template","join","RecurrentComponentDialogController","updateThisOccurrence","hide","cancel","updateAllOccurrences","filterpopup","field","value","CalendarsController","$window","$mdToast","FileUploader","focus","Settings","User","activeUser","service","newCalendar","addWebCalendar","confirmDelete","editFolder","revertEditing","renameFolder","share","importCalendar","exportCalendar","showLinks","showProperties","subscribeToFolder","today","categories","map","defaults","SOGoCalendarCategories","asCSSIdentifier","color","SOGoCalendarCategoriesColors","$watch","union","o","pick","$subscriptions","$webcalendars","newList","oldList","ids","pluck","i","isEqual","debug","$get","$setActivation","ev","prompt","isEditable","isRemote","owner","UserLogin","$id","$add","inputType","$addWebCalendar","folder","isSubscription","$delete","alert","CalendarImportDialogController","scope","uploader","ApplicationBaseURL","autoUpload","queueLimit","filters","filterByExtension","fn","onSuccessItem","item","response","headers","msg","imported","simple","content","position","hideDelay","onErrorItem","close","isTextFile","indexOf","test","location","href","LinksDialogController","PropertiesDialogController","srcCalendar","catch","$omit","saveProperties","$save","init","editMode","$reset","$rename","$acl","$users","usersWithACL","users","calendarData","$subscribe","fragments","hash","split","path","ComponentController","AddressBook","Alarm","cardFilter","edit","editAllOccurrences","reply","replyAllOccurrences","deleteOccurrence","deleteAllOccurrences","toggleRawSource","$futureComponentData","$getComponent","organizer","$query","$filterAll","$cards","c","$reply","getAlarms","delegatedTo","$hasAlarm","alarm","remove","$$resource","post","ComponentRawSourceDialogController","ComponentEditorController","Card","oldStartDate","oldEndDate","oldDueDate","showRecurrenceEditor","$hasCustomRepeat","toggleRecurrenceEditor","showAttendeesEditor","isDefined","attendees","toggleAttendeesEditor","addAttendee","addAttachUrl","save","attendeesEditor","getDays","hours","getHours","addStartDate","addDueDate","updateStartTime","adjustStartTime","updateEndTime","adjustEndTime","updateDueTime","adjustDueTime","getTime","end","due","card","isString","isValidEmail","emails","searchText","form","$valid","daysUpTo","stringWithSeparator","push","toString","$addStartDate","$addDueDate","addMinutes","getMinutes","valueOf","updateFreeBusy","minutesTo","sgCalendarDay","restrict","dayString","sgCalendarDayController","directive","sgCalendarDayBlock","CalendarSettings","block","clickBlock","link","iElement","attrs","pc","left","right","siblings","css","addClass","sgCalendarDayTable","blocks","sgCalendarGhost","require","ctrls","domElement","calendarDayCtrl","scrollViewCtrl","deregisterDragStart","initGhost","deregisterDrag","updateGhost","deregisterDragEnd","hideGhost","forEachRight","classList","removeClass","showGhost","isRelative","originalDay","currentDay","wasOtherBlock","durationLeft","maxDuration","enableTransition","$view","EventDragDayLength","startHour","endHour","getStartTime","parseInt","quarterHeight","topOffset","getEndTime","quartersToHM","quarters","minutes","mins","Math","floor","sgCalendarMonthDay","sgCalendarMonthEvent","sgCalendarScrollView","$document","$q","$mdGesture","sgCalendarScrollViewController","scrollView","lastScroll","deregisterDragStop","onDragStart","onDragEnd","initView","off","updateFromPointerHandler","updateCoordinates","getQuarterHeight","scrollStep","maxX","getMaxColumns","on","time","hourCell","quartersOffset","SOGoDayStartTime","getElementById","scrollTop","offsetTop","hour0","hour23","height","getDayDimensions","viewLeft","width","leftOffset","nodes","domRect","tileHeader","getElementsByClassName","getBoundingClientRect","clientHeight","offset","top","max","dayDimensions","extend","x","y","dayHeight","dayWidth","daysOffset","pointerCoordinates","scrollY","minY","getContainerBasedCoordinates","sgCalendarTable","blocksType","sgCategoryStylesheet","ngModel","sgDraggableCalendarBlock","editable","initGrips","onDragDetect","onDrag","blockIndex","isFirstBlock","isLastBlock","dragGrip","leftGrip","rightGrip","topGrip","bottomGrip","findIndex","matchesProperty","c_isallday","parentNode","tagName","append","clone","dragMode","eventType","startDate","newData","target","className","SOGoEventDragPointerHandler","initFromEvent","one","dragStart","isHourCell","isMonthly","hasClass","substring","summary","b","dragging","prepareWithEventType","initFromBlock","starthour","updateFromEvent","pointer","dragHasStarted","SOGoCoordinates","prototype","SC_getDelta","otherCoordinates","getDistance","SC_getDistance","sqrt","SC_clone","SOGoEventDragEventCoordinates","setEventType","sum","_quartersToHM","originalCoordinates","currentCoordinates","originalViewCoordinates","currentViewCoordinates","getEventViewCoordinates","SEDPH_initFromBlock","SEDPH_initFromEvent","SEDPH_updateFromEvent","pageX","pageY","newEventCoordinates","setTimeFromQuarters","updateEventCoordinates","distance","SEDGC__updateCoordinates","newDuration","deltaQuarters","deltaDays","ceil","JSON","stringify","SEDPH_getCBC","container","clientWidth","SEDPH_prepareWithEventType","methods","multiday","getEventMultiDayViewCoordinates","multiday-allday","getEventMultiDayAllDayViewCoordinates","monthly","getEventMonthlyViewCoordinates","unknown","method","SEDPH_gEMultiDayViewC","pxCoordinates","EventDragHorizontalOffset","maxY","SEDPH_gEMultiDayADVC","SEDPH_gEMonthlyViewC","daysTopOffset","daysY","SEDPH_getDistance","SEDPH_setTimeFromQuarters","setHours","sgDroppableBlock","onDrop","deregister"],"mappings":"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","file":"Scheduler.js"}
\ No newline at end of file
+{"version":3,"sources":["Scheduler/Scheduler.app.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDay.directive.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarGhost.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js","Scheduler/sgCalendarScrollView.directive.js","Scheduler/sgCalendarTable.directive.js","Scheduler/sgCategoryStylesheet.directive.js","Scheduler/sgDraggableCalendarBlock.directive.js","Scheduler/sgDroppableBlock.directive.js"],"names":["angular","module","config","configure","run","runBlock","$inject","$stateProvider","$urlRouterProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","stateEventsBlocks","when","now","Date","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","$rootScope","$log","$location","$state","Preferences","$on","event","toState","toParams","fromState","fromParams","error","go","current","previous","rejection","length","ready","exec","settings","View","replace","CalendarController","$scope","vm","this","deregisterCalendarsList","changeView","updateView","data","$event","date","element","currentTarget","attr","CalendarListController","$timeout","$mdDialog","Dialog","component","componentType","selectedList","selectComponentType","unselectComponents","selectAll","toggleComponentSelection","confirmDeleteSelectedComponents","openEvent","openTask","newComponent","filter","filteredBy","sort","sortedBy","reload","cancelSearch","mode","search","type","SelectedList","$filter","updateComponentFromGhost","options","isUndefined","saveSelectedList","each","selected","preventDefault","stopPropagation","confirm","l","components","$deleteComponents","status","openComponent","task","viewable","capitalize","show","parent","document","body","targetEvent","clickOutsideToClose","escapeToClose","locals","stateComponent","baseComponent","pid","pointerHandler","coordinates","delta","params","$ghost","isNew","currentEventCoordinates","isAllDay","duration","setDelta","finally","getDelta","originalEventCoordinates","days","dayNumber","start","isException","occurrenceId","$adjust","$emit","template","join","RecurrentComponentDialogController","updateThisOccurrence","hide","cancel","updateAllOccurrences","filterpopup","field","value","CalendarsController","$window","$mdToast","FileUploader","focus","Settings","User","activeUser","service","newCalendar","addWebCalendar","confirmDelete","editFolder","revertEditing","renameFolder","share","importCalendar","exportCalendar","showLinks","showProperties","subscribeToFolder","today","categories","map","defaults","SOGoCalendarCategories","asCSSIdentifier","color","SOGoCalendarCategoriesColors","$watch","union","o","pick","$subscriptions","$webcalendars","newList","oldList","ids","pluck","i","isEqual","debug","$get","$setActivation","ev","prompt","isEditable","isRemote","owner","UserLogin","$id","$add","inputType","$addWebCalendar","folder","isSubscription","$delete","alert","CalendarImportDialogController","scope","uploader","ApplicationBaseURL","autoUpload","queueLimit","filters","filterByExtension","fn","onSuccessItem","item","response","headers","msg","imported","simple","content","position","hideDelay","onErrorItem","close","isTextFile","indexOf","test","location","href","LinksDialogController","PropertiesDialogController","srcCalendar","catch","$omit","saveProperties","$save","init","editMode","$reset","$rename","$acl","$users","usersWithACL","users","calendarData","$subscribe","fragments","hash","split","path","ComponentController","AddressBook","Alarm","cardFilter","edit","editAllOccurrences","reply","replyAllOccurrences","deleteOccurrence","deleteAllOccurrences","toggleRawSource","$futureComponentData","$getComponent","organizer","$query","$filterAll","$cards","c","$reply","getAlarms","delegatedTo","$hasAlarm","alarm","remove","$$resource","post","ComponentRawSourceDialogController","ComponentEditorController","Card","oldStartDate","oldEndDate","oldDueDate","showRecurrenceEditor","$hasCustomRepeat","toggleRecurrenceEditor","showAttendeesEditor","isDefined","attendees","toggleAttendeesEditor","addAttendee","addAttachUrl","save","attendeesEditor","getDays","hours","getHours","addStartDate","addDueDate","updateStartTime","adjustStartTime","updateEndTime","adjustEndTime","updateDueTime","adjustDueTime","getTime","end","due","card","isString","isValidEmail","emails","searchText","form","$valid","daysUpTo","stringWithSeparator","push","toString","$addStartDate","$addDueDate","addMinutes","getMinutes","valueOf","updateFreeBusy","minutesTo","sgCalendarDay","restrict","dayString","sgCalendarDayController","directive","sgCalendarDayBlock","CalendarSettings","block","clickBlock","link","iElement","attrs","pc","left","right","siblings","css","addClass","sgCalendarDayTable","blocks","sgCalendarGhost","require","ctrls","domElement","calendarDayCtrl","scrollViewCtrl","deregisterDragStart","initGhost","deregisterDrag","updateGhost","deregisterDragEnd","hideGhost","forEachRight","classList","removeClass","showGhost","isRelative","originalDay","currentDay","wasOtherBlock","durationLeft","maxDuration","enableTransition","$view","EventDragDayLength","startHour","endHour","getStartTime","parseInt","quarterHeight","topOffset","getEndTime","quartersToHM","quarters","minutes","mins","Math","floor","sgCalendarMonthDay","sgCalendarMonthEvent","sgCalendarScrollView","$document","$q","$mdGesture","sgCalendarScrollViewController","scrollView","lastScroll","deregisterDragStop","onDragStart","onDragEnd","initView","off","updateFromPointerHandler","updateCoordinates","getQuarterHeight","scrollStep","maxX","getMaxColumns","on","time","hourCell","quartersOffset","SOGoDayStartTime","getElementById","scrollTop","offsetTop","hour0","hour23","height","getDayDimensions","viewLeft","width","leftOffset","nodes","domRect","tileHeader","getElementsByClassName","getBoundingClientRect","clientHeight","offset","top","max","dayDimensions","extend","x","y","dayHeight","dayWidth","daysOffset","pointerCoordinates","scrollY","minY","getContainerBasedCoordinates","sgCalendarTable","blocksType","sgCategoryStylesheet","ngModel","sgDraggableCalendarBlock","editable","initGrips","onDragDetect","onDrag","blockIndex","isFirstBlock","isLastBlock","dragGrip","leftGrip","rightGrip","topGrip","bottomGrip","findIndex","matchesProperty","c_isallday","parentNode","tagName","append","clone","dragMode","eventType","startDate","newData","target","className","SOGoEventDragPointerHandler","initFromEvent","one","dragStart","isHourCell","isMonthly","hasClass","substring","summary","b","dragging","prepareWithEventType","initFromBlock","starthour","updateFromEvent","pointer","dragHasStarted","SOGoCoordinates","prototype","SC_getDelta","otherCoordinates","getDistance","SC_getDistance","sqrt","SC_clone","SOGoEventDragEventCoordinates","setEventType","sum","_quartersToHM","originalCoordinates","currentCoordinates","originalViewCoordinates","currentViewCoordinates","getEventViewCoordinates","SEDPH_initFromBlock","SEDPH_initFromEvent","SEDPH_updateFromEvent","pageX","pageY","newEventCoordinates","setTimeFromQuarters","updateEventCoordinates","distance","SEDGC__updateCoordinates","newDuration","deltaQuarters","deltaDays","ceil","JSON","stringify","SEDPH_getCBC","container","clientWidth","SEDPH_prepareWithEventType","methods","multiday","getEventMultiDayViewCoordinates","multiday-allday","getEventMultiDayAllDayViewCoordinates","monthly","getEventMonthlyViewCoordinates","unknown","method","SEDPH_gEMultiDayViewC","pxCoordinates","EventDragHorizontalOffset","maxY","SEDPH_gEMultiDayADVC","SEDPH_gEMonthlyViewC","daysTopOffset","daysY","SEDPH_getDistance","SEDPH_setTimeFromQuarters","setHours","sgDroppableBlock","onDrop","deregister"],"mappings":"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","file":"Scheduler.js"}
\ No newline at end of file