{"version":3,"sources":["Common/utils.js","Common/Common.app.js","Common/mdColors.app.js","Common/decodeUri.filter.js","Common/encodeUri.filter.js","Common/ensureTarget.filter.js","Common/loc.filter.js","Common/range.filter.js","Common/AclController.js","Common/navController.js","Common/Acl.service.js","Common/Alarm.service.js","Common/Authentication.service.js","Common/Dialog.service.js","Common/Gravatar.service.js","Common/Resource.service.js","Common/sgFocus.service.js","Common/User.service.js","Common/sgAvatarImage.directive.js","Common/sgCheckmark.directive.js","Common/sgColorPicker.directive.js","Common/sgCompile.directive.js","Common/sgDatepickerReadonlyInput.directive.js","Common/sgDraggable.directive.js","Common/sgDroppable.directive.js","Common/sgEnter.directive.js","Common/sgEscape.directive.js","Common/sgFocus.directive.js","Common/sgFolderStylesheet.directive.js","Common/sgPlaceholder.directive.js","Common/sgRippleClick.directive.js","Common/sgSearch.directive.js","Common/sgSelectOnly.directive.js","Common/sgSubscribe.directive.js","Common/sgTimepicker.directive.js","Common/sgToggleGrid.directive.js"],"names":["l","i","j","key","arguments","value","args","labels","clabels","length","replace","m","val","parseFloat","isNaN","hexToRgb","hex","result","exec","r","parseInt","g","b","contrast","color","c","Math","pow","guid","S4","random","toString","substring","substr","toLowerCase","configure","$logProvider","$compileProvider","$httpProvider","$mdThemingProvider","$mdAriaProvider","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastLightColors","contrastDarkColors","1000","theme","primaryPalette","default","hue-1","hue-2","hue-3","accentPalette","backgroundPalette","DebugEnabled","debugEnabled","debugInfoEnabled","disableWarnings","generateThemesOnDemand","interceptors","push","AuthInterceptor","$window","$q","response","test","config","headers","Accept","data","location","reload","reject","ErrorInterceptor","$rootScope","responseError","rejection","$broadcast","angular","module","isPopup","document","body","classList","contains","baseURL","ApplicationBaseURL","resourcesURL","ResourcesURL","activeUser","param","settings","login","UserLogin","identification","UserIdentification","email","UserEmail","language","UserLanguage","folderURL","UserFolderURL","isSuperUser","IsSuperUser","path","calendar","UserCalendarPath","contacts","UserContactsPath","mail","UserMailPath","preferences","UserPreferencesPath","administration","UserAdministrationPath","help","HelpURL","logoff","UserLogoffPath","constant","selection","xs","gt-xs","sm","gt-sm","md","gt-md","lg","gt-lg","xl","print","factory","$inject","_$mdThemingProvider","runBlock","$interpolate","$document","$log","buildCssSelectors","selectors","join","addRule","fgInterpolate","bgInterpolate","themeName","paletteName","colorArray","hueName","colorValue","colorContrast","context","palette","hue","customSheet","insertRule","index","addBorderRule","bdrInterpolate","getStyleSheet","style","head","querySelector","createElement","title","appendChild","createTextNode","sheet","fgDefault","bgDefault","bdrDefault","fgDefaultHue","bgDefaultHue","fgColor","bgColor","bdrColor","fgHue","bgHue","cssRules","deleteRule","forEach","_THEMES","_PALETTES","colors","primary","name","hues","run","decodeUri","decodeURIComponent","filter","encodeUri","encodeURIComponent","ensureTarget","$sce","element","tree","find","attr","trustAs","html","loc","range","n","res","AclController","$timeout","$mdDialog","Dialog","usersWithACL","User","folder","userFilter","$query","$filter","$acl","users","closeModal","$resetUsersRights","hide","saveModal","$saveUsersRights","then","status","alert","confirmChange","user","confirmation","$confirmRights","vm","showing","message","removeUser","$removeUser","uid","addUser","$addUser","userToAdd","searchText","selectedUid","selectUser","selectAllRights","$selectAllRights","$event","target","parentNode","selectedUser","$rights","this","controller","navController","$scope","$interval","$http","$mdSidenav","$mdToast","$mdMedia","sgConstant","sgSettings","Alarm","leftIsClose","isOpen","onHttpError","event","isString","statusText","show","template","hideDelay","position","debug","currentDay","window","get","secondsBeforeTomorrow","toggleLeft","isGtMedium","triggerHandler","toggle","toggleRight","$watch","newVal","$on","getAlarms","Acl","folderId","Settings","Resource","extend","$$resource","$User","prototype","$users","owner","_this","deferred","defer","acls","isDefined","userResource","fetch","canSubscribeUser","isSubscribed","wasSubscribed","bind","resolve","promise","_","indexOf","map","userClass","isGroup","splice","rights","right","isNumber","$resetRights","deferredSave","deferredSubscribe","action","$rightsAreDirty","$omit","save","$shadowRights","copy","uids","all","currentAlarm","AlarmService","$toast","now","Date","browserTime","floor","getTime","alarms","sort","a","x","y","next","pop","utc","url","alarmTime","delay","f","showAlarm","cancel","AlarmController","scope","reminder","ok","summary","locals","Authentication","redirectUrl","username","domain","userName","address","baseAddress","altBaseAddress","parts","hostpart","protocol","newAddress","href","split","startsWith","endsWith","getService","$cookies","passwordPolicyConfig","readLoginCookie","loginValues","cookie","base64decode","service","d","password","rememberLogin","loginSuffix","method","loginCookie","expire","grace","cn","msg","perr","LDAPPasswordPolicyError","PolicyNoError","PolicyAccountLocked","error","changePassword","newPassword","xsrfCookie","remove","X-XSRF-TOKEN","PolicyPasswordModNotAllowed","PolicyInsufficientPasswordQuality","PolicyPasswordTooShort","PolicyPasswordTooYoung","PolicyPasswordInHistory","formatted","PolicyPasswordUnknown","PolicyPasswordSystemUnknown","put","$get","PolicyPasswordChangeUnsupported","PolicyPasswordExpired","PolicyChangeAfterReset","PolicyMustSupplyOldPassword","provider","DialogService","$modal","content","htmlContent","confirm","options","prompt","label","PromptDialogController","o","id","asCSSIdentifier","parent","clickOutsideToClose","escapeToClose","inputType","Gravatar","size","alternate_avatar","hash","s","md5","no_404","_http","_q","_path","_activeUser","$factory","compact","escape","params","flatten","newguid","create","post","newValue","download","getFileNameFromHeader","header","trim","type","accept","responseType","cache","transformResponse","fileName","blob","Blob","saveAs","Error","sgFocus","userData","init","search","excludedUsers","dry","when","results","compareUids","isUndefined","$$shortFormat","$shortFormat","$$image","image","empty","fullname","c_email","no_email","$isAnonymous","$isSpecial","$confirmation","some","values","constructor","isEqual","zero","keys","$folders","$$folders","folders","sgAvatarImage","restrict","bindToController","src","link","controllerAs","attrs","imgElement","mdIconElement","css","img","genericImg","sgAvatarImageController","$element","Preferences","getGravatar","defaults","SOGoAlternateAvatar","urlEmail","hideGenericAvatar","showGenericAvatar","addClass","removeClass","ready","old","SOGoGravatarEnabled","attributes","directive","sgCheckmarkDirective","$parse","$mdAria","$mdTheming","$mdUtil","compile","tElement","tAttrs","on","hasAttribute","stopImmediatePropagation","ngModelCtrl","parseConstantExpr","expression","fallback","parseFn","listener","ev","$apply","viewValue","$viewValue","trueValue","falseValue","$setViewValue","$render","render","CHECKED_CSS","sgTrueValue","sgFalseValue","fakeNgModel","expectWithText","transclude","require","sgColorPicker","iElement","iAttr","ngModelController","sgColor","sgIconColor","sgColorPickerController","sgColors","setColor","currentTarget","parentElement","children","tile","add","sgCompile","$compile","sgCompileLink","ensureCompileRunsOnce","$eval","contents","sgDatepickerReadonlyInput","postLink","datepickerCtrl","getInput","eq","input","prop","sgDraggable","sgDraggableObject","dragStart","count","helper","bindedOnDragDetect","onDragDetect","bindedOnDrag","onDrag","sgDragStart","sgDragCount","$destroy","dragHasStarted","off","getDistanceFromStart","delta","startPosition","clientX","clientY","sqrt","stopPropagation","one","onDragEnd","counter","text","$emit","shiftKey","top","pageY","left","pageX","sgDroppable","onEnter","overElement","onLeave","dropAction","droppable","deregisterFolderDragStart","deregisterFolderDragEnd","sgDrop","dragFolder","mode","dragMode","sgEnter","ENTER_KEY","which","preventDefault","sgEscape","ESCAPE_KEY","elem","keyCode","sgFocusOn","e","focus","select","sgFolderStylesheet","sgFolderStylesheetController","ngModel","sgPlaceholder","placeholder","sgRippleClick","coordinates","getBoundingClientRect","container","overflow","scrollTop","ripple","offsetTop","offsetLeft","height","width","containerId","sgSearchPreTransclude","tAttr","inputEl","selectEl","buttonEl","removeAttr","compiledButtonEl","formName","inputName","allowDot","doSearch","cancelSearch","priority","sgSearch","clone","append","sgSearchController","minLength","minimumSearchLength","searchTextOptions","updateOn","debounce","blur","onChange","form","rawSearchText","$valid","$setValidity","searchField","sgSelectOnly","autoComplete","selectedItem","$applyAsync","sgSubscribe","folderType","onFolderSelect","sgSubscribeDialogController","showDialog","templateUrl","sgSubscribeController","$setTouched","selectFolder","folderData","close","timePaneDirective","TimePaneCtrl","controllers","sgTimePaneCtrl","mdInputContainer","configureNgModel","$$mdDateUtil","$mdConstant","$$rAF","$attrs","$mdDateLocale","dateUtil","KEY_CODE","timePaneElement","SELECTED_TIME_CLASS","FOCUSED_TIME_CLASS","nextUniqueId","displayTime","selectedTime","isInitialized","hours","displayName","selected","min5","min1","ii","show5min","getToggleBtnLbl","is5min","toggleManual5min","manual5min","tabindex","self","hourClickHandler","displayVal","updated","setHours","Number","setNgModelValue","minuteClickHandler","setMinutes","boundKeyHandler","handleKeyEvent","nextTick","date","changeSelectedTime","previousSelectedTime","prevH","getHours","prevHCell","getElementById","setAttribute","prevM","getMinutes","prevMCell","prevM5Cell","mCell","newH","hCell","newM","changed","ESCAPE","TAB","ENTER","opt_date","today","previousFocus","timePickerDirective","ariaLabelValue","ariaLabel","mdPlaceholder","TimePickerCtrl","mdTimePickerCtrl","parentForm","parseAttributeBoolean","mdNoAsterisk","parentSubmittedWatcher","$submitted","isSubmitted","updateErrorState","$mdGesture","dateLocale","documentElement","inputElement","ngInputElement","inputContainer","timePane","timeButton","inputMask","isFocused","isDisabled","setDisabled","disabled","isTimeOpen","timePaneOpenedFrom","nextUid","bodyClickHandler","handleBodyClick","windowEventName","isIos","isAndroid","windowEventHandler","closeTimePane","windowBlurHandler","handleWindowBlur","leftMargin","topMargin","$set","installPropertyInterceptors","attachChangeListeners","attachInteractionListeners","detachTimePane","EXTRA_INPUT_SIZE","INVALID_CLASS","OPEN_CLASS","DEFAULT_DEBOUNCE_INTERVAL","TIME_PANE_HEIGHT","MIN5","GTXS","XS","MIN1","TIME_PANE_WIDTH","$formatters","time","formatTime","resizeInputElement","$viewChangeListeners","unshift","debounceInterval","handleInputEvent","keyCodes","altKey","DOWN_ARROW","openTimePane","$digest","ngDisabled","$parent","Object","defineProperty","set","clearErrorState","isValidDate","field","inputString","parsedTime","parseTime","isValidInput","attachTimePane","transform","elementRect","bodyRect","paneTop","paneLeft","viewportTop","viewportLeft","scrollLeft","viewportBottom","innerHeight","viewportRight","innerWidth","paneWidth","scale","min","paneHeight","enableScrolling","removeChild","disableScrollAround","evalAttr","addEventListener","removeEventListener","getTimePaneCtrl","focusTime","ctrl","setFocused","isInTime","getClosest","inputFocusedOnWindowBlur","activeElement","sgToggleGrid","flattenedDays","modelDays","sgToggleGridAttr","modelAttr","tiles","includes","day","findIndex","$setDirty","toggleClass","String","suffix","pattern","lastIndexOf","_base64_keyStr","base64encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","utf8encode","charCodeAt","charAt","fromCharCode","L","k","K","G","I","F","H","q","p","u","aa","Z","D","t","Array","B","J","P","h","E","v","Y","X","W","V","C","S","Q","N","M","A","z","w","U","T","R","O","capitalize","toUpperCase","slice","asDate","newDate","newString","isValidEmail","emailRE","characters","escapeds","re","RegExp","timeInterval","interval","parseDate","localeProvider","format","string","formattingTokens","tokens","token","regexes","parsedInput","matchesCount","year","getYear","month","getMonth","getDate","hour","minute","%d","%e","%m","%b","shortMonths","toLower","%B","months","%y","nearFuture","getFullYear","%Y","%H","%I","%M","%p","linput","am","pm","match","NaN","daysUpTo","otherDate","days","day1","day2","tmp","nbrDays","round","setTime","minutesTo","dstOffset","valueOf","getTimezoneOffset","stringWithSeparator","separator","str","addDays","initialDate","milliSeconds","addHours","nbrHours","addMinutes","nbrMinutes","beginOfDay","setSeconds","setMilliseconds","firstWeekOfYearForDate","firstWeekRule","dayOfWeek","januaryFirst","firstWeek","firstWeekOfYear","setMonth","setDate","getDay","firstDayOfWeek","beginOfWeek","getWeek","previousWeek","weekNumber","offset","endOfWeek","getDayString","getHourString","separators","max","validParts","%a","shortDays","%A","%U","shift"],"mappings":"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","file":"Common.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\nString.prototype.endsWith = function(suffix) {\n return this.indexOf(suffix, this.length - suffix.length) !== -1;\n};\n\nString.prototype.startsWith = function(pattern, position) {\n position = angular.isNumber(position) ? position : 0;\n return this.lastIndexOf(pattern, position) === position;\n};\n\nString.prototype._base64_keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nString.prototype.base64encode = function () {\n var output = \"\";\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = this.utf8encode();\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n \n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n \n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n \n output = output +\n this._base64_keyStr.charAt(enc1) + this._base64_keyStr.charAt(enc2) +\n this._base64_keyStr.charAt(enc3) + this._base64_keyStr.charAt(enc4);\n }\n \n return output;\n};\n\nString.prototype.base64decode = function() { \n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n \n var input = \"\" + this; // .replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\")\n while (i < input.length) {\n enc1 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc2 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc3 = this._base64_keyStr.indexOf(input.charAt(i++));\n enc4 = this._base64_keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n \n output = output + String.fromCharCode(chr1);\n \n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n }\n\n return output;\n};\n\nString.prototype.md5 = function() {\n if (!this.length) { return; }\n // MD5 (Message-Digest Algorithm) by WebToolkit\n 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;P= 0)\n date.month = i;\n return (i >= 0);\n }],\n '%B': [/[^\\d\\s\\.\\/\\-]{2,}/, function(input) {\n var i = _.indexOf(_.map(localeProvider.months, _.toLower), _.toLower(input));\n if (i >= 0)\n date.month = i;\n return (i >= 0);\n }],\n '%y': [/\\d\\d/, function(input) {\n var nearFuture = parseInt(now.getFullYear().toString().substring(2)) + 5;\n date.year = parseInt(input);\n if (date.year < nearFuture) date.year += 2000;\n else date.year += 1900;\n return true;\n }],\n '%Y': [/[12]\\d\\d\\d/, function(input) {\n date.year = parseInt(input);\n return true;\n }],\n '%H': [/\\d{1,2}/, function(input) {\n date.hour = parseInt(input);\n return (date.hour < 24);\n }],\n '%I': [/\\d{1,2}/, function(input) {\n date.hour = parseInt(input);\n return (date.hour <= 12);\n }],\n '%M': [/[0-5]\\d/, function(input) {\n date.minute = parseInt(input);\n return (date.minute < 60 );\n }],\n '%p': [/[^\\d\\s\\/\\-]+/, function(input) {\n var linput = _.toLower(input), am = _.toLower(l('AM')), pm = _.toLower(l('PM'));\n if (linput == pm)\n date.hour += 12;\n return (linput == am || linput == pm);\n }],\n };\n tokens = format.match(formattingTokens) || [];\n matchesCount = 0;\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(regexes[token][0]) || [])[0];\n if (parsedInput) {\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n if (regexes[token][1](parsedInput))\n matchesCount++;\n }\n }\n\n if (tokens.length === matchesCount) {\n // console.debug(this + ' + ' + format + ' = ' + JSON.stringify(date));\n return new Date(date.year, date.month, date.day, date.hour, date.minute);\n }\n else\n return new Date(NaN);\n};\n\nDate.prototype.daysUpTo = function(otherDate) {\n var days = [];\n\n var day1 = this.getTime();\n var day2 = otherDate.getTime();\n if (day1 > day2) {\n var tmp = day1;\n day1 = day2;\n day2 = tmp;\n }\n\n var nbrDays = Math.round((day2 - day1) / 86400000) + 1;\n for (var i = 0; i < nbrDays; i++) {\n var newDate = new Date();\n newDate.setTime(day1 + (i * 86400000));\n days.push(newDate);\n }\n\n return days;\n};\n\nDate.prototype.minutesTo = function(otherDate) {\n var delta, dstOffset;\n\n delta = Math.floor(otherDate.valueOf() - this.valueOf())/1000/60;\n dstOffset = otherDate.getTimezoneOffset() - this.getTimezoneOffset();\n\n return delta - dstOffset;\n};\n\nDate.prototype.stringWithSeparator = function(separator) {\n var month = '' + (this.getMonth() + 1);\n var day = '' + this.getDate();\n var year = this.getYear();\n if (year < 1000)\n year = '' + (year + 1900);\n if (month.length == 1)\n month = '0' + month;\n if (day.length == 1)\n day = '0' + day;\n\n if (separator == '-')\n str = year + '-' + month + '-' + day;\n else\n str = day + '/' + month + '/' + year;\n\n return str;\n};\n\nDate.prototype.addDays = function(nbrDays) {\n var initialDate, milliSeconds, dstOffset;\n\n milliSeconds = this.getTime();\n initialDate = new Date(milliSeconds);\n milliSeconds += 86400000 * nbrDays;\n this.setTime(milliSeconds);\n\n dstOffset = this.getTimezoneOffset() - initialDate.getTimezoneOffset();\n if (dstOffset !== 0) {\n milliSeconds = this.getTime() + dstOffset*60*1000;\n this.setTime(milliSeconds);\n }\n\n return this;\n};\n\nDate.prototype.addHours = function(nbrHours) {\n var milliSeconds = this.getTime();\n milliSeconds += 3600000 * nbrHours;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.addMinutes = function(nbrMinutes) {\n var milliSeconds = this.getTime();\n milliSeconds += 60000 * nbrMinutes;\n this.setTime(milliSeconds);\n};\n\nDate.prototype.beginOfDay = function() {\n var beginOfDay = new Date(this.getTime());\n beginOfDay.setHours(0);\n beginOfDay.setMinutes(0);\n beginOfDay.setSeconds(0);\n beginOfDay.setMilliseconds(0);\n\n return beginOfDay;\n};\n\nDate.prototype.firstWeekOfYearForDate = function(localeProvider) {\n var firstWeekRule, dayOfWeek, januaryFirst, firstWeek;\n\n firstWeekRule = localeProvider.firstWeekOfYear;\n\n januaryFirst = new Date(this.getTime());\n januaryFirst.setMonth(0);\n januaryFirst.setDate(1);\n dayOfWeek = januaryFirst.getDay();\n\n if (firstWeekRule == 'First4DayWeek') {\n if ((dayOfWeek + localeProvider.firstDayOfWeek) % 7 < 4)\n firstWeek = januaryFirst.beginOfWeek(localeProvider.firstDayOfWeek);\n else\n firstWeek = januaryFirst.addDays(7).beginOfWeek(localeProvider.firstDayOfWeek);\n }\n else if (firstWeekRule == 'FirstFullWeek') {\n if (dayOfWeek === 0)\n firstWeek = januaryFirst.beginOfWeek(localeProvider.firstDayOfWeek);\n else\n firstWeek = januaryFirst.addDays(7).beginOfWeek(localeProvider.firstDayOfWeek);\n }\n else {\n firstWeek = januaryFirst.beginOfWeek(localeProvider.firstDayOfWeek);\n }\n\n return firstWeek;\n};\n\nDate.prototype.getWeek = function(localeProvider) {\n var firstWeek, previousWeek, weekNumber;\n\n firstWeek = this.firstWeekOfYearForDate(localeProvider);\n if (firstWeek.getTime() < this.getTime()) {\n weekNumber = 1 + Math.floor((this.getTime() - firstWeek.getTime()) / (86400000 * 7));\n }\n else\n {\n // Date is within the last week of the previous year;\n // Compute the previous week number to find the week number of the requested date.\n // The number will either be 52 or 53.\n previousWeek = new Date(this.getTime());\n previousWeek.addDays(-7);\n firstWeek = previousWeek.firstWeekOfYearForDate(localeProvider);\n weekNumber = 2 + Math.floor((previousWeek.getTime() - firstWeek.getTime()) / (86400000 * 7));\n }\n\n return weekNumber;\n};\n\nDate.prototype.beginOfWeek = function(firstDayOfWeek) {\n var offset = firstDayOfWeek - this.getDay();\n if (offset > 0)\n offset -= 7;\n\n var beginOfWeek = this.beginOfDay();\n beginOfWeek.setHours(12);\n beginOfWeek.addDays(offset);\n\n return beginOfWeek;\n};\n\nDate.prototype.endOfWeek = function(firstDayOfWeek) {\n var endOfWeek = this.beginOfWeek(firstDayOfWeek);\n endOfWeek.addDays(6);\n\n endOfWeek.setHours(23);\n endOfWeek.setMinutes(59);\n endOfWeek.setSeconds(59);\n endOfWeek.setMilliseconds(999);\n\n return endOfWeek;\n};\n\n// YYYYMMDD\nDate.prototype.getDayString = function() {\n var newString = this.getYear();\n if (newString < 1000) newString += 1900;\n var month = '' + (this.getMonth() + 1);\n if (month.length == 1)\n month = '0' + month;\n newString += month;\n var day = '' + this.getDate();\n if (day.length == 1)\n day = '0' + day;\n newString += day;\n\n return newString;\n};\n\n// MMHH\nDate.prototype.getHourString = function() {\n var newString = this.getHours() + '00';\n if (newString.length == 3)\n newString = '0' + newString;\n\n return newString;\n};\n\nDate.prototype.format = function(localeProvider, format) {\n var separators, parts, i, max,\n date = [],\n validParts = /%[deaAmbByYUHIMp]/g,\n val = {\n '%d': this.getDate(), // day of month (e.g., 01)\n '%e': this.getDate(), // day of month, space padded\n '%a': localeProvider.shortDays[this.getDay()], // locale's abbreviated weekday name (e.g., Sun)\n '%A': localeProvider.days[this.getDay()], // locale's full weekday name (e.g., Sunday)\n '%m': this.getMonth() + 1, // month (01..12)\n '%b': localeProvider.shortMonths[this.getMonth()], // locale's abbreviated month name (e.g., Jan)\n '%B': localeProvider.months[this.getMonth()], // locale's full month name (e.g., January)\n '%y': this.getFullYear().toString().substring(2), // last two digits of year (00..99)\n '%Y': this.getFullYear(), // year\n '%U': this.getWeek(localeProvider), // week of the year\n '%H': this.getHours(), // hour (00..23)\n '%M': this.getMinutes() }; // minute (00..59)\n val['%I'] = val['%H'] > 12 ? val['%H'] % 12 : val['%H']; // hour (01..12)\n val['%p'] = val['%H'] < 12 ? l('AM') : l('PM'); // locale's equivalent of either AM or PM\n\n val['%d'] = (val['%d'] < 10 ? '0' : '') + val['%d'];\n val['%e'] = (val['%e'] < 10 ? ' ' : '') + val['%e'];\n val['%m'] = (val['%m'] < 10 ? '0' : '') + val['%m'];\n val['%H'] = (val['%H'] < 10 ? '0' : '') + val['%H'];\n val['%I'] = (val['%I'] < 10 ? '0' : '') + val['%I'];\n val['%M'] = (val['%M'] < 10 ? '0' : '') + val['%M'];\n\n separators = format.replace(validParts, '\\0').split('\\0');\n parts = format.match(validParts);\n for (i = 0, max = parts.length; i <= max; i++){\n if (separators.length)\n date.push(separators.shift());\n date.push(val[parts[i]]);\n }\n\n return date.join('');\n};\n\n/* Functions */\n\nfunction l() {\n var key = arguments[0], value = key, args = arguments, i, j;\n\n // Retrieve translation\n if (labels[key]) {\n value = labels[key];\n }\n else if (clabels[key]) {\n value = clabels[key];\n }\n\n // Format placeholders %{0}, %{1], %{2}, ...\n for (i = 1, j = 0; i < args.length; i++, j++) {\n value = value.replace('%{' + j + '}', args[i]);\n }\n\n // Format placeholders %d and %s\n i = 1;\n if (args.length > 1) {\n value = value.replace(/%((%)|s|d)/g, function(m) {\n // m is the matched format, e.g. %s, %d\n var val = null;\n if (m[2]) {\n val = m[2];\n }\n else {\n val = args[i];\n // A switch statement so that the formatter can be extended. Default is %s\n switch (m) {\n case '%d':\n val = parseFloat(val);\n if (isNaN(val))\n val = 0;\n break;\n }\n i++;\n }\n return val;\n });\n }\n\n return value;\n}\n\nfunction hexToRgb(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n\n// Respect contrast ratio recommendation from W3C:\n// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\nfunction contrast(hex) {\n var color, c, l = 1;\n\n color = hexToRgb(hex);\n if (color) {\n c = [color.r / 255, color.g / 255, color.b / 255];\n\n for (var i = 0; i < c.length; ++i) {\n if (c[i] <= 0.03928) {\n\tc[i] = c[i] / 12.92;\n }\n else {\n\tc[i] = Math.pow((c[i] + 0.055) / 1.055, 2.4);\n }\n }\n\n l = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n }\n\n if (l > 0.179) {\n return 'black';\n }\n else {\n return 'white';\n }\n}\n\nfunction guid() {\n function S4() {\n return (((1+Math.random())*0x10000)|0).toString(16).substring(1); \n }\n \n return (S4() + S4() + \"-\" + S4() + \"-4\" + S4().substr(0,3) + \"-\" + S4() + \"-\" + S4() + S4() + S4()).toLowerCase();\n}\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.Common', ['ngAnimate', 'ngMessages', 'ngSanitize', 'ngMaterial', 'mdColors'])\n .value('sgSettings', {\n isPopup: document.body.classList.contains('popup'),\n baseURL: function() {\n return ApplicationBaseURL || null;\n },\n resourcesURL: function() {\n return ResourcesURL || null;\n },\n activeUser: function(param) {\n var settings = {\n login: UserLogin || null,\n identification: UserIdentification || null,\n email: UserEmail || null,\n language: UserLanguage || null,\n folderURL: UserFolderURL || null,\n isSuperUser: IsSuperUser || null,\n path: {\n calendar: UserCalendarPath || null,\n contacts: UserContactsPath || null,\n mail: UserMailPath || null,\n preferences: UserPreferencesPath || null,\n administration: (IsSuperUser ? UserAdministrationPath : null),\n help: HelpURL || null,\n logoff: UserLogoffPath || null\n }\n };\n if (param)\n return settings[param];\n else\n return settings;\n }\n })\n\n .constant('sgColors', {\n selection: [\n '#FFFFFF',\n '#330033',\n '#C0C0C0',\n '#999999',\n '#666666',\n '#333333',\n '#000000',\n '#FFCCCC',\n '#FF6666',\n '#FF0000',\n '#CC0000',\n '#990000',\n '#660000',\n '#330000',\n '#FFCC99',\n '#FF9966',\n '#FF9900',\n '#FF6600',\n '#CC6600',\n '#993300',\n '#663300',\n '#FFFF99',\n '#FFFF66',\n '#FFCC66',\n '#FFCC33',\n '#CC9933',\n '#996633',\n '#663333',\n '#FFFFCC',\n '#FFFF33',\n '#FFFF00',\n '#FFCC00',\n '#999900',\n '#666600',\n '#333300',\n '#CCCCCC',\n '#66FF99',\n '#33FF33',\n '#33CC00',\n '#009900',\n '#006600',\n '#003300',\n '#99FFFF',\n '#33FFFF',\n '#66CCCC',\n '#00CCCC',\n '#339999',\n '#336666',\n '#003333',\n '#CCFFFF',\n '#66FFFF',\n '#33CCFF',\n '#3366FF',\n '#3333FF',\n '#000099',\n '#000066',\n '#CCCCFF',\n '#9999FF',\n '#6666CC',\n '#6633FF',\n '#6600CC',\n '#333399',\n '#330099',\n '#FFCCFF',\n '#FF99FF',\n '#CC66CC',\n '#CC33CC',\n '#993399',\n '#663366',\n '#99FF99'\n ]\n })\n\n // md break-points values are hard-coded in angular-material/src/core/util/constant.js\n // $mdMedia has a built-in support for those values but can also evaluate others.\n // The following breakpoints match our CSS breakpoints in scss/core/variables.scss\n .constant('sgConstant', {\n 'xs' : '(max-width: 599px)' ,\n 'gt-xs' : '(min-width: 600px)' ,\n 'sm' : '(min-width: 600px) and (max-width: 959px)' ,\n 'gt-sm' : '(min-width: 960px)' ,\n 'md' : '(min-width: 960px) and (max-width: 1023px)' ,\n 'gt-md' : '(min-width: 1024px)' ,\n 'lg' : '(min-width: 1024px) and (max-width: 1279px)',\n 'gt-lg' : '(min-width: 1280px)' ,\n 'xl' : '(min-width: 1920px)' ,\n 'print' : 'print'\n })\n\n .config(configure)\n\n .factory('AuthInterceptor', AuthInterceptor)\n .factory('ErrorInterceptor', ErrorInterceptor);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$logProvider', '$compileProvider', '$httpProvider', '$mdThemingProvider', '$mdAriaProvider'];\n function configure($logProvider, $compileProvider, $httpProvider, $mdThemingProvider, $mdAriaProvider) {\n // Accent palette\n $mdThemingProvider.definePalette('sogo-green', {\n '50': 'eaf5e9',\n '100': 'cbe5c8',\n '200': 'aad6a5',\n '300': '88c781',\n '400': '66b86a',\n '500': '56b04c',\n '600': '4da143',\n '700': '388e3c',\n '800': '367d2e',\n '900': '225e1b',\n // 'A100': 'b9f6ca',\n 'A100': 'fafafa', // assigned to md-hue-1\n 'A200': '69f0ae',\n 'A400': '00e676',\n 'A700': '00c853',\n 'contrastDefaultColor': 'dark',\n // 'contrastDarkColors': ['50', '100', '200', 'A100'],\n 'contrastLightColors': ['300', '400', '500', '600', '700', '800', '900']\n });\n // Primary palette\n $mdThemingProvider.definePalette('sogo-blue', {\n '50': 'f0faf9',\n '100': 'e1f5f3',\n '200': 'ceebe8',\n '300': 'bfe0dd',\n '400': 'b2d6d3',\n '500': 'a1ccc8',\n '600': '8ebfbb',\n '700': '7db3b0',\n '800': '639997',\n '900': '4d8080',\n 'A100': 'd4f7fa',\n 'A200': 'c3f5fa',\n 'A400': '53e3f0',\n 'A700': '00b0c0',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': ['50', '100', '200'],\n // 'contrastLightColors': ['300', '400', '500', '600', '700', '800', '900', 'A100', 'A200', 'A400', 'A700']\n });\n // Background palette\n $mdThemingProvider.definePalette('sogo-paper', {\n '50': 'fcf7f8',\n '100': 'f7f1dc',\n '200': 'ede5ca',\n '300': 'e6d8ba',\n '400': 'e2d2a3',\n '500': 'd6c48d',\n '600': 'baa870',\n '700': '857545',\n '800': '524517',\n '900': '433809',\n '1000': '000000',\n 'A100': 'ffffff',\n 'A200': 'eeeeee',\n 'A400': 'bdbdbd',\n 'A700': '616161',\n 'contrastDefaultColor': 'dark',\n 'contrastLightColors': ['800', '900']\n });\n // Default theme definition\n $mdThemingProvider.theme('default')\n .primaryPalette('sogo-blue', {\n 'default': '900',\n 'hue-1': '400',\n 'hue-2': '800',\n 'hue-3': 'A700'\n })\n .accentPalette('sogo-green', {\n 'default': '500',\n // 'hue-1': '200',\n 'hue-1': 'A100', // background-50\n 'hue-2': '300',\n 'hue-3': 'A700'\n })\n .backgroundPalette('grey', {\n 'default': '50',\n 'hue-1': '200',\n 'hue-2': '300',\n 'hue-3': '500'\n });\n\n if (!DebugEnabled) {\n // Disable debugging information\n $logProvider.debugEnabled(false);\n $compileProvider.debugInfoEnabled(false);\n // Disable warnings\n $mdAriaProvider.disableWarnings();\n // Disable theme generation but keep definition in config (required by mdColors)\n $mdThemingProvider.generateThemesOnDemand(true);\n // Disable theming completely\n //$mdThemingProvider.disableTheming();\n }\n\n $httpProvider.interceptors.push('AuthInterceptor');\n $httpProvider.interceptors.push('ErrorInterceptor');\n }\n\n /**\n * @ngInject\n */\n AuthInterceptor.$inject = ['$window', '$q'];\n function AuthInterceptor($window, $q) {\n return {\n response: function(response) {\n // When expecting JSON but receiving HTML, assume session has expired and reload page\n if (response && /^application\\/json/.test(response.config.headers.Accept) &&\n /^/.test(response.data)) {\n $window.location.reload(true);\n return $q.reject();\n }\n return response;\n }\n };\n }\n\n /**\n * @ngInject\n */\n ErrorInterceptor.$inject = ['$rootScope', '$q'];\n function ErrorInterceptor($rootScope, $q) {\n return {\n responseError: function(rejection) {\n if (/^application\\/json/.test(rejection.config.headers.Accept)) {\n // Broadcast the response error\n $rootScope.$broadcast('http:Error', rejection);\n }\n return $q.reject(rejection);\n }\n };\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/*\n * https://github.com/angular/material/issues/1269\n * https://gist.github.com/senthilprabhut/dd2147ebabc89bf223e7\n */\n\n(function() {\n 'use strict';\n\n var _$mdThemingProvider;\n\n angular\n .module('mdColors', ['ngMaterial'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$mdThemingProvider'];\n function configure($mdThemingProvider) {\n _$mdThemingProvider = $mdThemingProvider;\n }\n \n /**\n * @ngInject\n */\n runBlock.$inject = ['$interpolate', '$document', '$log'];\n function runBlock($interpolate, $document, $log) {\n\n function buildCssSelectors(selectors) {\n var result = selectors.join('');\n return result;\n }\n\n var fgDefault = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-fg']) + ' { color:{{value}};}'),\n bgDefault = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-bg']) + ' { background-color:{{value}};}'),\n bdrDefault = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-bdr']) + ' { border-color:{{value}};}'),\n fgDefaultHue = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{hue}}','.md-fg']) + ' { color:{{value}};}'),\n bgDefaultHue = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{hue}}','.md-bg']) + ' { background-color:{{value}};}'),\n fgColor = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{palette}}','.md-fg']) + ' { color:{{value}};}'),\n bgColor = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{palette}}','.md-bg']) + ' { background-color:{{value}}; color:{{contrast}} !important; }'),\n bdrColor = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{palette}}','.md-bdr']) + ' { border-color:{{value}};}'),\n fgHue = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{palette}}.md-{{hue}}','.md-fg']) + ' { color:{{value}};}'),\n bgHue = $interpolate(buildCssSelectors(['.md-{{theme}}-theme','.md-{{palette}}.md-{{hue}}','.md-bg']) + ' { background-color:{{value}};}'),\n customSheet = getStyleSheet(),\n index = 0;\n\n // Clear out old rules from stylesheet\n while (customSheet.cssRules.length > 0 ) {\n customSheet.deleteRule(0);\n }\n angular.forEach(_$mdThemingProvider._THEMES, function(theme, themeName){\n // Add default selectors - primary is the default palette\n addRule(fgDefault, bgDefault, themeName, 'primary',\n _$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);\n addRule(fgDefaultHue, bgDefaultHue, themeName, 'primary',\n _$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues['hue-2'] ], 'hue-2');\n addRule(fgDefaultHue, bgDefaultHue, themeName, 'primary',\n _$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues['hue-3'] ], 'hue-3');\n addRule(fgDefaultHue, bgDefaultHue, themeName, 'primary',\n _$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues['hue-1'] ], 'hue-1');\n addBorderRule(bdrDefault, themeName, 'primary',\n _$mdThemingProvider._PALETTES[theme.colors.primary.name][theme.colors.primary.hues.default]);\n\n // Add selectors for palettes - accent, background, primary and warn\n angular.forEach(theme.colors, function(color, paletteName){\n addRule(fgColor, bgColor, themeName, paletteName, _$mdThemingProvider._PALETTES[color.name][color.hues.default]);\n addBorderRule(bdrColor, themeName, paletteName, _$mdThemingProvider._PALETTES[color.name][color.hues.default]);\n addRule(fgHue, bgHue, themeName, paletteName, _$mdThemingProvider._PALETTES[color.name][color.hues['hue-2'] ], 'hue-2');\n addRule(fgHue, bgHue, themeName, paletteName, _$mdThemingProvider._PALETTES[color.name][color.hues['hue-3'] ], 'hue-3');\n addRule(fgHue, bgHue, themeName, paletteName, _$mdThemingProvider._PALETTES[color.name][color.hues['hue-1'] ], 'hue-1');\n });\n\n //$log.debug(_.map(customSheet.cssRules, 'cssText').join(\"\\n\"));\n });\n\n function addRule(fgInterpolate, bgInterpolate, themeName, paletteName, colorArray, hueName){\n // Set up interpolation functions to build css rules.\n if (!colorArray) return;\n var colorValue = 'rgb(' + colorArray.value[0] + ',' + colorArray.value[1] + ',' + colorArray.value[2] + ')',\n colorContrast = 'rgb(' + colorArray.contrast[0] + ',' + colorArray.contrast[1] + ',' + colorArray.contrast[2] + ')',\n context = {\n theme: themeName,\n palette: paletteName,\n value: colorValue,\n contrast: colorContrast,\n hue: hueName\n };\n\n // Insert foreground color rule\n customSheet.insertRule(fgInterpolate(context), index);\n index += 1;\n\n // Insert background color rule\n customSheet.insertRule(bgInterpolate(context), index);\n index += 1;\n }\n\n function addBorderRule(bdrInterpolate, themeName, paletteName, colorArray, hueName){\n // Set up interpolation functions to build css rule for border color.\n if (!colorArray) return;\n var colorValue = 'rgb(' + colorArray.value[0] + ',' + colorArray.value[1] + ',' + colorArray.value[2] + ')';\n\n customSheet.insertRule(bdrInterpolate({\n theme: themeName,\n palette: paletteName,\n value: colorValue,\n hue: hueName\n }), index);\n index += 1;\n }\n\n function getStyleSheet() {\n // function to add a dynamic style-sheet to the document\n var style = $document[0].head.querySelector('style[title=\"Dynamic-Generated-by-mdColors\"]');\n if (style === null) {\n style = $document[0].createElement('style');\n style.title = 'Dynamic-Generated-by-mdColors';\n // WebKit hack... (not sure if still needed)\n style.appendChild($document[0].createTextNode(''));\n $document[0].head.appendChild(style);\n }\n return style.sheet;\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n decodeUri.$inject = ['$window'];\n function decodeUri($window) {\n return $window.decodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('decodeUri', decodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n encodeUri.$inject = ['$window'];\n function encodeUri($window) {\n return $window.encodeURIComponent;\n }\n\n angular.module('SOGo.Common')\n .filter('encodeUri', encodeUri);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function () {\n 'use strict';\n\n /**\n * ensureTarget - A filter to set a blank target to all links.\n * @memberof SOGo.Common\n * @ngInject\n * @example:\n\n
\n */\n ensureTarget.$inject = ['$sce'];\n function ensureTarget($sce) {\n return function(element) {\n var tree = angular.element('
' + element + '
');\n tree.find('a').attr('target', '_blank');\n return $sce.trustAs('html', tree.html());\n };\n }\n\n angular.module('SOGo.Common')\n .filter('ensureTarget', ensureTarget);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * loc - A simple filter to return the localized version of a string.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n function loc() {\n return l;\n }\n\n angular.module('SOGo.Common')\n .filter('loc', loc);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * range - A simple filter that will return an array of the size of its argument.\n * @memberof SOGo.Common\n */\n(function () {\n 'use strict';\n\n function range() {\n return function(n) {\n var res = [];\n for (var i = 0; i < parseInt(n); i++) {\n res.push(i);\n }\n return res;\n };\n }\n\n angular.module('SOGo.Common')\n .filter('range', range);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AclController.$inject = ['$timeout', '$mdDialog', 'Dialog', 'usersWithACL', 'User', 'folder'];\n function AclController($timeout, $mdDialog, Dialog, usersWithACL, User, folder) {\n var vm = this;\n\n vm.users = usersWithACL; // ACL users\n vm.folder = folder;\n vm.selectedUser = null;\n vm.selectedUid = null;\n vm.userToAdd = '';\n vm.searchText = '';\n vm.userFilter = userFilter;\n vm.closeModal = closeModal;\n vm.saveModal = saveModal;\n vm.confirmChange = confirmChange;\n vm.removeUser = removeUser;\n vm.addUser = addUser;\n vm.selectAllRights = selectAllRights;\n vm.selectUser = selectUser;\n vm.confirmation = { showing: false,\n message: ''};\n\n function userFilter($query) {\n return User.$filter($query, folder.$acl.users);\n }\n\n function closeModal() {\n folder.$acl.$resetUsersRights(); // cancel changes\n $mdDialog.hide();\n }\n\n function saveModal() {\n folder.$acl.$saveUsersRights().then(function() {\n $mdDialog.hide();\n }, function(data, status) {\n Dialog.alert(l('Warning'), l('An error occured please try again.'));\n });\n }\n\n function confirmChange(user) {\n var confirmation = user.$confirmRights(vm.folder);\n if (confirmation) {\n vm.confirmation.showing = true;\n vm.confirmation.message = confirmation;\n }\n }\n\n function removeUser(user) {\n $timeout(function() {\n folder.$acl.$removeUser(user.uid);\n }, 500); // wait for CSS transition to complete (see card.scss)\n }\n\n function addUser(data) {\n if (data) {\n folder.$acl.$addUser(data).then(function(user) {\n vm.userToAdd = '';\n vm.searchText = '';\n vm.selectedUid = null;\n if (user)\n selectUser(user);\n });\n }\n }\n\n function selectAllRights(user) {\n folder.$acl.$selectAllRights(user);\n }\n\n function selectUser(user, $event) {\n if ($event && $event.target.parentNode.classList.contains('md-secondary'))\n return false;\n if (vm.selectedUid == user.uid) {\n vm.selectedUid = null;\n }\n else {\n vm.selectedUid = user.uid;\n vm.selectedUser = user;\n vm.selectedUser.$rights();\n }\n }\n }\n\n angular\n .module('SOGo.Common')\n .controller('AclController', AclController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n/**\n * @type {angular.Module}\n */\n(function () {\n 'use strict';\n\n /**\n * @ngInject\n */\n navController.$inject = ['$rootScope', '$scope', '$timeout', '$interval', '$http', '$window', '$mdSidenav', '$mdToast', '$mdMedia', '$log', 'sgConstant', 'sgSettings', 'Alarm'];\n function navController($rootScope, $scope, $timeout, $interval, $http, $window, $mdSidenav, $mdToast, $mdMedia, $log, sgConstant, sgSettings, Alarm) {\n\n $scope.isPopup = sgSettings.isPopup;\n $scope.activeUser = sgSettings.activeUser();\n $scope.baseURL = sgSettings.baseURL();\n $scope.leftIsClose = !$mdMedia(sgConstant['gt-md']);\n\n // Show current day in top bar\n $scope.currentDay = window.currentDay;\n $timeout(function() {\n // Update date when day ends\n $interval(function() {\n $http.get('../date').then(function(data) {\n $scope.currentDay = data;\n });\n }, 24 * 3600 * 1000);\n }, window.currentDay.secondsBeforeTomorrow * 1000);\n\n $scope.toggleLeft = function() {\n if ($scope.isGtMedium) {\n // Left sidenav is toggled while sidenav is locked open; bypass $mdSidenav\n $scope.leftIsClose = !$scope.leftIsClose;\n }\n else {\n $scope.leftIsClose = leftIsClose();\n // Fire a window resize when opening the sidenav on a small device.\n // This is a fix until the following issue is officially resolved:\n // https://github.com/angular/material/issues/7309\n if ($scope.leftIsClose)\n angular.element($window).triggerHandler('resize');\n $mdSidenav('left').toggle()\n .then(function () {\n $log.debug(\"toggle left is done\");\n });\n }\n };\n $scope.toggleRight = function() {\n $mdSidenav('right').toggle()\n .then(function () {\n $log.debug(\"toggle right is done\");\n });\n };\n // $scope.openBottomSheet = function() {\n // $mdBottomSheet.show({\n // parent: angular.element(document.getElementById('left-sidenav')),\n // templateUrl: 'bottomSheetTemplate.html'\n // });\n // };\n // $scope.toggleDetailView = function() {\n // var detail = angular.element(document.getElementById('detailView'));\n // detail.toggleClass('sg-close');\n // };\n $scope.$watch(function() {\n return $mdMedia(sgConstant['gt-md']);\n }, function(newVal) {\n $scope.isGtMedium = newVal;\n if (newVal) {\n $scope.leftIsClose = false;\n }\n });\n\n function leftIsClose() {\n return !$mdSidenav('left').isOpen();\n }\n\n function onHttpError(event, response) {\n var message;\n if (response.data && response.data.message && angular.isString(response.data.message))\n message = response.data.message;\n else if (response.status)\n message = response.statusText;\n\n if (message)\n $mdToast.show({\n template: [\n '',\n '
',\n ' error_outline',\n ' ' + l(message) + '',\n '
',\n '
'\n ].join(''),\n hideDelay: 5000,\n position: 'top right'\n });\n else\n $log.debug('untrap error');\n }\n\n // Listen to HTTP errors broadcasted from HTTP interceptor\n $rootScope.$on('http:Error', onHttpError);\n\n Alarm.getAlarms();\n }\n\n angular.module('SOGo.Common')\n .controller('navController', navController);\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name Acl\n * @constructor\n * @param {String} folderId - the folder ID associated to the ACLs\n */\n function Acl(folderId) {\n this.folderId = folderId;\n }\n\n /**\n * @memberof Acl\n * @desc The factory we'll use to register with Angular.\n * @return the Acl constructor\n */\n Acl.factory = ['$q', '$timeout', 'sgSettings', 'Resource', 'User', function($q, $timeout, Settings, Resource, User) {\n angular.extend(Acl, {\n $q: $q,\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $User: User\n });\n\n return Acl;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('Acl', Acl.factory);\n\n /**\n * @function $users\n * @memberof Acl.prototype\n * @param {Object} owner - the owner to use when fetching the ACL as it might not be the Settings.activeUser\n * @desc Fetch the list of users that have specific rights for the current folder.\n * @return a promise of an array of User objects\n */\n Acl.prototype.$users = function(owner) {\n var _this = this,\n deferred = Acl.$q.defer(),\n user;\n if (this.users) {\n deferred.resolve(this.users);\n }\n else {\n var acls;\n if (angular.isDefined(owner))\n acls = Acl.$$resource.userResource(owner).fetch(this.folderId, 'acls');\n else\n acls = Acl.$$resource.fetch(this.folderId, 'acls');\n\n return acls.then(function(response) {\n _this.users = [];\n //console.debug(JSON.stringify(users, undefined, 2));\n angular.forEach(response.users, function(data) {\n user = new Acl.$User(data);\n user.canSubscribeUser = user.isSubscribed;\n user.wasSubscribed = user.isSubscribed;\n user.$rights = angular.bind(user, user.$acl, _this.folderId, owner);\n _this.users.push(user);\n });\n deferred.resolve(_this.users);\n return _this.users;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $addUser\n * @memberof Acl.prototype\n * @param {Object} user - a User object with minimal set of attributes (uid, isGroup, cn, c_email)\n * @param {Object} owner - the owner to use when fetching the ACL as it might not be the Settings.activeUser\n * @see {@link User.$filter}\n */\n Acl.prototype.$addUser = function(user, owner) {\n var _this = this,\n deferred = Acl.$q.defer(),\n param = {uid: user.uid};\n if (!user.uid || _.indexOf(_.map(this.users, 'uid'), user.uid) > -1) {\n // No UID specified or user already in ACLs\n deferred.resolve();\n }\n else {\n var acls;\n\n if (angular.isDefined(owner))\n acls = Acl.$$resource.userResource(owner).fetch(this.folderId, 'addUserInAcls', param);\n else\n acls = Acl.$$resource.fetch(this.folderId, 'addUserInAcls', param);\n\n acls.then(function() {\n user.wasSubscribed = false;\n user.userClass = user.isGroup ? 'normal-group' : 'normal-user';\n user.$rights = angular.bind(user, user.$acl, _this.folderId, owner);\n _this.users.push(user);\n deferred.resolve(user);\n }, function(data, status) {\n deferred.reject(l('An error occured please try again.'));\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $removeUser\n * @memberof Acl.prototype\n * @desc Remove a user from the folder's ACL\n * @return a promise of the server call to remove the user from the folder's ACL\n */\n Acl.prototype.$removeUser = function(uid, owner) {\n var _this = this,\n param = {uid: uid},\n acls;\n\n if (angular.isDefined(owner))\n acls = Acl.$$resource.userResource(owner).fetch(this.folderId, 'removeUserFromAcls', param);\n else\n acls = Acl.$$resource.fetch(this.folderId, 'removeUserFromAcls', param);\n\n return acls.then(function() {\n var i = _.indexOf(_.map(_this.users, 'uid'), uid);\n if (i >= 0) {\n _this.users.splice(i, 1);\n }\n });\n };\n\n /**\n * @function $selectAllRights\n * @memberof Acl.prototype\n * @desc Select all rights of an user\n */\n Acl.prototype.$selectAllRights = function(user) {\n _.forEach(user.rights, function(value, right) {\n if (angular.isNumber(user.rights[right]))\n user.rights[right] = 1;\n });\n };\n\n /**\n * @function $resetUsersRights\n * @memberof Acl.prototype\n * @desc Restore initial rights of all users.\n */\n Acl.prototype.$resetUsersRights = function() {\n angular.forEach(this.users, function(user) {\n user.$resetRights();\n });\n };\n\n /**\n * @function $saveUsersRights\n * @memberof Acl.prototype\n * @desc Save user rights that have changed and subscribe users that have been selected.\n * @param {Object} owner - the owner to use when fetching the ACL as it might not be the Settings.activeUser\n * @return a promise that resolved only if the modifications and subscriptions were successful\n */\n Acl.prototype.$saveUsersRights = function(owner) {\n var _this = this,\n deferredSave = Acl.$q.defer(),\n deferredSubscribe = Acl.$q.defer(),\n param = {action: 'saveUserRights'},\n users = [];\n\n // Save user rights\n angular.forEach(this.users, function(user) {\n if (user.$rightsAreDirty()) {\n users.push(user.$omit());\n // console.debug('save ' + JSON.stringify(user.$omit(), undefined, 2));\n }\n });\n if (users.length) {\n var acls;\n\n if (angular.isDefined(owner))\n acls = Acl.$$resource.userResource(owner).save(this.folderId, users, param);\n else\n acls = Acl.$$resource.save(this.folderId, users, param);\n\n acls.then(function() {\n // Save was successful; copy rights to shadow rights\n angular.forEach(_this.users, function(user) {\n if (user.$rightsAreDirty()) {\n user.$shadowRights = angular.copy(user.rights);\n }\n });\n deferredSave.resolve();\n }, deferredSave.reject);\n }\n else {\n deferredSave.resolve();\n }\n\n // Subscribe users\n users = [];\n angular.forEach(this.users, function(user) {\n if (!user.wasSubscribed && user.isSubscribed) {\n users.push(user.uid);\n // console.debug('subscribe ' + user.uid);\n }\n });\n if (users.length) {\n param = {uids: users.join(',')};\n Acl.$$resource.fetch(this.folderId, 'subscribeUsers', param)\n .then(function() {\n // Subscribe was successful; reset \"wasSubscribed\" attribute\n angular.forEach(_this.users, function(user) {\n user.wasSubscribed = user.isSubscribed;\n });\n deferredSubscribe.resolve();\n }, deferredSubscribe.reject);\n }\n else {\n deferredSubscribe.resolve();\n }\n return Acl.$q.all([deferredSave.promise, deferredSubscribe.promise]);\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Alarm\n * @constructor\n */\n function Alarm() {\n this.currentAlarm = null;\n }\n\n /**\n * @name getAlarms\n * @desc Fetch the list of alarms from the server and use the last one\n */\n Alarm.getAlarms = function() {\n var _this = this;\n var now = new Date();\n var browserTime = Math.floor(now.getTime()/1000);\n\n this.$$resource.fetch('', 'alarmslist?browserTime=' + browserTime).then(function(data) {\n \n var alarms = data.alarms.sort(function reverseSortByAlarmTime(a, b) {\n var x = parseInt(a[2]);\n var y = parseInt(b[2]);\n return (y - x);\n });\n\n if (alarms.length > 0) {\n var next = alarms.pop();\n var now = new Date();\n var utc = Math.floor(now.getTime()/1000);\n var url = next[0] + '/' + next[1];\n var alarmTime = parseInt(next[2]);\n var delay = alarmTime;\n if (alarmTime > 0) delay -= utc;\n var d = new Date(alarmTime*1000);\n //console.log (\"now = \" + now.toUTCString());\n //console.log (\"next event \" + url + \" in \" + delay + \" seconds (on \" + d.toUTCString() + \")\");\n\n var f = angular.bind(_this, Alarm.showAlarm, url);\n\n if (_this.currentAlarm)\n _this.$timeout.cancel(_this.currentAlarm);\n\n _this.currentAlarm = _this.$timeout(f, delay*1000);\n }\n });\n };\n \n /**\n * @name showAlarm\n * @desc Show the latest alarm using a toast\n * @param url The URL of the calendar component for snoozing\n */\n Alarm.showAlarm = function(url) {\n var _this = this;\n\n this.$$resource.fetch(url, '?resetAlarm=yes').then(function(data) {\n _this.$toast.show({\n position: 'top right',\n hideDelay: 0,\n template: [\n '',\n '
',\n ' ',\n ' ',\n ' ',\n ' ',\n l('5 minutes'),\n ' ',\n ' ',\n l('10 minutes'),\n ' ',\n ' ',\n l('15 minutes'),\n ' ',\n ' ',\n l('30 minutes'),\n ' ',\n ' ',\n l('45 minutes'),\n ' ',\n ' ',\n l('1 hour'),\n ' ',\n ' ',\n l('1 day'),\n ' ',\n ' ',\n ' ',\n ' ',\n l('Cancel'),\n ' ',\n ' ',\n l('Ok'),\n ' ',\n '
',\n '
'\n ].join(''),\n locals: {\n url: url\n },\n controller: AlarmController\n });\n\n /**\n * @ngInject\n */\n AlarmController.$inject = ['scope', '$mdToast', 'url'];\n function AlarmController(scope, $mdToast, url) {\n scope.reminder = '10';\n scope.cancel = function() {\n $mdToast.hide();\n };\n scope.ok = function() {\n _this.$$resource.fetch(url, 'view?snoozeAlarm=' + scope.reminder);\n $mdToast.hide();\n };\n }\n });\n };\n\n /**\n * @memberof Alarm\n * @desc The factory we'll register as Alarm in the Angular module SOGo.Common\n * @ngInject\n */\n AlarmService.$inject = ['$timeout', 'sgSettings', 'Resource', '$mdToast'];\n function AlarmService($timeout, Settings, Resource, $mdToast) {\n angular.extend(Alarm, {\n $timeout: $timeout,\n $$resource: new Resource(Settings.activeUser('folderURL') + 'Calendar', Settings.activeUser()),\n $toast: $mdToast\n });\n\n return Alarm; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Alarm', AlarmService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for Authentication */\n\n(function() {\n /* jshint validthis: true */\n 'use strict';\n\n angular.module('SOGo.Authentication', ['ngCookies'])\n\n .constant('passwordPolicyConfig', {\n PolicyPasswordChangeUnsupported: -3,\n PolicyPasswordSystemUnknown: -2,\n PolicyPasswordUnknown: -1,\n PolicyPasswordExpired: 0,\n PolicyAccountLocked: 1,\n PolicyChangeAfterReset: 2,\n PolicyPasswordModNotAllowed: 3,\n PolicyMustSupplyOldPassword: 4,\n PolicyInsufficientPasswordQuality: 5,\n PolicyPasswordTooShort: 6,\n PolicyPasswordTooYoung: 7,\n PolicyPasswordInHistory: 8,\n PolicyNoError: 65535\n })\n\n .provider('Authentication', Authentication);\n\n function Authentication() {\n function redirectUrl(username, domain) {\n var userName, address, baseAddress, altBaseAddress, parts, hostpart, protocol, newAddress;\n\n userName = username;\n if (domain)\n userName += '@' + domain.value;\n address = '' + window.location.href;\n baseAddress = ApplicationBaseURL + '/' + encodeURIComponent(userName);\n if (baseAddress[0] == '/') {\n parts = address.split('/');\n hostpart = parts[2];\n protocol = parts[0];\n baseAddress = protocol + '//' + hostpart + baseAddress;\n }\n parts = baseAddress.split('/');\n parts.splice(0, 3);\n altBaseAddress = parts.join('/');\n if ((address.startsWith(baseAddress) || address.startsWith(altBaseAddress)) &&\n !address.endsWith('/logoff')) {\n newAddress = address;\n }\n else {\n newAddress = baseAddress;\n }\n\n return newAddress;\n }\n\n this.$get = getService;\n\n /**\n * @ngInject\n */\n getService.$inject = ['$q', '$http', '$cookies', 'passwordPolicyConfig'];\n function getService($q, $http, $cookies, passwordPolicyConfig) {\n var service;\n\n function readLoginCookie() {\n var loginValues = null,\n cookie = $cookies.get('0xHIGHFLYxSOGo'),\n value;\n if (cookie && cookie.length > 8) {\n value = decodeURIComponent(cookie.substr(8));\n loginValues = value.base64decode().split(':');\n }\n\n return loginValues;\n }\n\n service = {\n login: function(data) {\n var d = $q.defer(),\n username = data.username,\n password = data.password,\n domain = data.domain,\n language,\n rememberLogin = data.rememberLogin ? 1 : 0;\n\n if (data.loginSuffix && !username.endsWith(data.loginSuffix)) {\n username += loginSuffix;\n domain = false;\n }\n if (data.language && data.language != 'WONoSelectionString') {\n language = data.language;\n }\n\n $http({\n method: 'POST',\n url: '/SOGo/connect',\n data: {\n userName: username,\n password: password,\n domain: domain,\n language: language,\n rememberLogin: rememberLogin\n }\n }).then(function(response) {\n var data = response.data;\n // Make sure browser's cookies are enabled\n var loginCookie = readLoginCookie();\n if (!loginCookie) {\n d.reject(l('cookiesNotEnabled'));\n }\n else {\n // Check password policy\n if (typeof data.expire != 'undefined' && typeof data.grace != 'undefined') {\n if (data.expire < 0 && data.grace > 0) {\n d.reject({grace: data.grace});\n //showPasswordDialog('grace', createPasswordGraceDialog, data['grace']);\n } else if (data.expire > 0 && data.grace == -1) {\n d.reject({expire: data.expire});\n //showPasswordDialog('expiration', createPasswordExpirationDialog, data['expire']);\n }\n else {\n d.resolve({ cn: data.cn, url: redirectUrl(username, domain) });\n }\n }\n else {\n d.resolve(redirectUrl(username, domain));\n }\n }\n }, function(response) {\n var msg, perr, data = response.data;\n if (data && data.LDAPPasswordPolicyError) {\n perr = data.LDAPPasswordPolicyError;\n if (perr == passwordPolicyConfig.PolicyNoError) {\n msg = l('Wrong username or password.');\n }\n else if (perr == passwordPolicyConfig.PolicyAccountLocked) {\n msg = l('Your account was locked due to too many failed attempts.');\n }\n else {\n msg = l('Login failed due to unhandled error case: ') + perr;\n }\n }\n else {\n msg = l('Unhandled error response');\n }\n d.reject({error: msg});\n });\n return d.promise;\n }, // login: function(data) { ...\n\n changePassword: function(newPassword) {\n var d = $q.defer(),\n loginCookie = readLoginCookie(),\n xsrfCookie = $cookies.get('XSRF-TOKEN');\n\n $cookies.remove('XSRF-TOKEN', {path: '/SOGo/'});\n\n $http({\n method: 'POST',\n url: '/SOGo/so/changePassword',\n headers: {\n 'X-XSRF-TOKEN' : xsrfCookie\n },\n data: {\n userName: loginCookie[0],\n password: loginCookie[1],\n newPassword: newPassword }\n }).then(d.resolve, function(response) {\n var error,\n data = response.data,\n perr = data.LDAPPasswordPolicyError;\n\n if (!perr) {\n perr = passwordPolicyConfig.PolicyPasswordSystemUnknown;\n error = _(\"Unhandled error response\");\n }\n else if (perr == passwordPolicyConfig.PolicyNoError) {\n error = l(\"Password change failed\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordModNotAllowed) {\n error = l(\"Password change failed - Permission denied\");\n } else if (perr == passwordPolicyConfig.PolicyInsufficientPasswordQuality) {\n error = l(\"Password change failed - Insufficient password quality\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordTooShort) {\n error = l(\"Password change failed - Password is too short\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordTooYoung) {\n error = l(\"Password change failed - Password is too young\");\n } else if (perr == passwordPolicyConfig.PolicyPasswordInHistory) {\n error = l(\"Password change failed - Password is in history\");\n } else {\n error = l(\"Unhandled policy error: %{0}\").formatted(perr);\n perr = passwordPolicyConfig.PolicyPasswordUnknown;\n }\n\n // Restore the cookie\n $cookies.put('XSRF-TOKEN', xsrfCookie, {path: '/SOGo/'});\n d.reject(error);\n });\n return d.promise;\n }\n };\n return service;\n }\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Dialog\n * @constructor\n */\n function Dialog() {\n }\n\n /**\n * @name alert\n * @desc Show an alert dialog box with a single \"OK\" button\n * @param {string} title\n * @param {string} content\n */\n Dialog.alert = function(title, content) {\n var alert = this.$modal.alert()\n .title(title)\n .htmlContent(content)\n .ok(l('OK'));\n this.$modal.show(alert);\n };\n\n /**\n * @name confirm\n * @desc Show a confirmation dialog box with buttons 'Cancel' and 'OK'\n * @param {string} title\n * @param {string} content\n * @returns a promise that resolves if the user has clicked on the 'OK' button\n */\n Dialog.confirm = function(title, content, options) {\n var confirm = this.$modal.confirm()\n .title(title)\n .htmlContent(content)\n .ok((options && options.ok)? options.ok : l('OK'))\n .cancel((options && options.cancel)? options.cancel : l('Cancel'));\n return this.$modal.show(confirm);\n };\n\n /**\n * @name prompt\n * @desc Show a primpt dialog box with a input text field and the 'Cancel' and 'OK' buttons\n * @param {string} title\n * @param {string} label\n * @param {object} [options] - use a different input type by setting 'inputType'\n * @returns a promise that resolves with the input field value\n */\n Dialog.prompt = function(title, label, options) {\n var o = options || {},\n id = title.asCSSIdentifier(),\n d = this.$q.defer();\n\n this.$modal.show({\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n escapeToClose: true,\n template: [\n '',\n '
',\n ' ',\n '

',\n ' ',\n ' ',\n ' ',\n ' ',\n '
',\n ' ',\n ' ',\n ' ' + l('Cancel'),\n ' ',\n ' ',\n ' ' + l('OK'),\n ' ',\n ' ',\n '
',\n '
'\n ].join(''),\n controller: PromptDialogController\n });\n\n /**\n * @ngInject\n */\n PromptDialogController.$inject = ['scope', '$mdDialog'];\n function PromptDialogController(scope, $mdDialog) {\n scope.title = title;\n scope.name = \"\";\n scope.cancel = function() {\n d.reject();\n $mdDialog.hide();\n };\n scope.ok = function() {\n d.resolve(scope.name);\n $mdDialog.hide();\n };\n }\n\n return d.promise;\n };\n\n /**\n * @memberof Dialog\n * @desc The factory we'll register as Dialog in the Angular module SOGo.Common\n * @ngInject\n */\n DialogService.$inject = ['$q', '$mdDialog'];\n function DialogService($q, $mdDialog) {\n angular.extend(Dialog, { $q: $q , $modal: $mdDialog });\n\n return Dialog; // return constructor\n }\n\n /* Factory registration in Angular module */\n angular\n .module('SOGo.Common')\n .factory('Dialog', DialogService);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * Gravatar - A service to build the Gravatar URL for an email address\n * @memberof SOGo.Common\n * @param {string} email\n * @param {number} [size] - the size of the image\n * @param {string} alternate avatar to use (none, identicon, monsterid, wavatar, retro)\n * @ngInject\n */\n function Gravatar() {\n return function(email, size, alternate_avatar, options) {\n var x, y, hash, s = size, a = alternate_avatar;\n if (!email) {\n return '';\n }\n x = email.indexOf('<');\n if (x >= 0) {\n y = email.indexOf('>', x);\n if (y > x)\n email = email.substring(x+1,y);\n }\n if (!size) {\n s = 48; // default to 48 pixels\n }\n hash = email.md5();\n\n if (!a || a == \"none\") {\n if (options && options.no_404)\n alternate_avatar = \"mm\"; // mystery man alternative\n else\n alternate_avatar = \"404\";\n }\n\n return 'https://www.gravatar.com/avatar/' + hash + '?s=' + s + '&d=' + alternate_avatar;\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('Gravatar', Gravatar);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Resource\n * @constructor\n * @param {Object} $http - the Angular HTTP service\n * @param {Object} $q - the Angular promise/deferred service\n * @param {String} path - the base path of the external resource\n * @param {Object} options - extra attributes to be associated to the object\n */\n function Resource($http, $q, path, activeUser, options) {\n angular.extend(this, {\n _http: $http,\n _q: $q,\n _path: path,\n _activeUser: activeUser\n });\n angular.extend(this, options);\n // Trim trailing slash\n this._path = this._path.replace(/\\/$/, '');\n }\n\n /**\n * @memberof Resource\n * @desc The factory we'll use to register with Angular.\n * @return a new Resource object\n */\n Resource.$factory = ['$http', '$q', function($http, $q) {\n return function(path, activeUser, options) {\n return new Resource($http, $q, path, activeUser, options);\n };\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of Resource in Angular module.\n */\n angular.module('SOGo.Common').factory('Resource', Resource.$factory);\n\n /**\n * @function userResource\n * @memberof Resource.prototype\n * @desc Create a new Resource object associated to a username different than the active user.\n * @param {String} uid - the user UID\n * @return a new Resource object\n */\n Resource.prototype.userResource = function(uid) {\n var path = _.compact(this._activeUser.folderURL.split('/'));\n path.splice(path.length - 1, 1, escape(uid));\n\n return new Resource(this._http, this._q, '/' + path.join('/'), this._activeUser);\n };\n\n /**\n * @function fetch\n * @memberof Resource.prototype\n * @desc Fetch resource using a specific folder, action and/or parameters.\n * @param {string} folderId - the folder on which the action will be applied (ex: addressbook, calendar)\n * @param {string} action - the action to be used in the URL\n * @param {Object} params - Object parameters injected through the $http service\n * @return a promise\n */\n Resource.prototype.fetch = function(folderId, action, params) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (folderId) path.push(folderId.split('/'));\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http({\n method: 'GET',\n url: path,\n params: params\n })\n .then(function(response) {\n return deferred.resolve(response.data);\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function newguid\n * @memberof Resource.prototype\n * @desc Fetch a new GUID on the specified folder ID.\n * @return a promise of the new data structure\n */\n Resource.prototype.newguid = function(folderId) {\n var deferred = this._q.defer(),\n path = this._path + '/' + folderId + '/newguid';\n\n this._http\n .get(path)\n .then(function(response) {\n return deferred.resolve(response.data);\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function create\n * @memberof Resource.prototype\n * @desc Create a new resource using a specific action (post).\n * @param {string} action - the action to be used in the URL\n * @param {string} name - the new resource's name\n * @return a promise\n */\n Resource.prototype.create = function(action, name) {\n var deferred = this._q.defer(),\n path = this._path + '/' + action;\n\n this._http\n .post(path, { name: name })\n .then(function(response) {\n return deferred.resolve(response.data);\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function post\n * @memberof Resource.prototype\n * @desc Post a resource attributes on the server.\n * @return a promise\n */\n Resource.prototype.post = function(id, action, data) {\n var deferred = this._q.defer(),\n path = [this._path];\n if (id) path.push(id);\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n this._http\n .post(path, data)\n .then(function(response) {\n return deferred.resolve(response.data);\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n /**\n * @function save\n * @memberof Resource.prototype\n * @desc Save a resource attributes on the server (post /save).\n * @return a promise\n */\n Resource.prototype.save = function(id, newValue, options) {\n var action = (options && options.action)? options.action : 'save';\n\n return this.post(id, action, newValue);\n };\n\n /**\n * @function download\n * @memberof Resource.prototype\n * @desc Download a file from the server. Requires FileSaver.js.\n * @see {@link http://blog.davidjs.com/2015/07/download-files-via-post-request-in-angularjs/|Download files via POST request in AngularJs}\n * @see {@link https://github.com/eligrey/FileSaver.js|FileSaver.js}\n * @return a promise\n */\n Resource.prototype.download = function(id, action, data, options) {\n var deferred = this._q.defer(),\n type = (options && options.type)? options.type : 'application/zip',\n path = [this._path];\n if (id) path.push(id);\n if (action) path.push(action);\n path = _.compact(_.flatten(path)).join('/');\n\n function getFileNameFromHeader(header) {\n var result;\n\n if (!header) return null;\n result = header.split(\";\")[1].trim().split(\"=\")[1];\n\n return result.replace(/\"/g, '');\n }\n\n return this._http({\n method: 'POST',\n url: path,\n data: data,\n headers: {\n accept: type\n },\n responseType: 'arraybuffer',\n cache: false,\n transformResponse: function (data, headers) {\n var fileName, result, blob = null;\n\n if (data) {\n blob = new Blob([data], { type: type });\n }\n fileName = getFileNameFromHeader(headers('content-disposition'));\n\n if (!saveAs) {\n throw new Error('To use Resource.download, FileSaver.js must be loaded.');\n }\n else {\n saveAs(blob, fileName);\n }\n }\n });\n };\n\n /**\n * @function remove\n * @memberof Resource.prototype\n * @desc Delete a resource (get /delete).\n * @return a promise\n */\n Resource.prototype.remove = function(uid) {\n var deferred = this._q.defer(),\n path = this._path + '/' + uid + '/delete';\n\n this._http\n .get(path)\n .then(function(response) {\n return deferred.resolve(response.data);\n }, deferred.reject);\n\n return deferred.promise;\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n \n /**\n * sgFocus - A service to set the focus on the element associated to a specific string\n * @memberof SOGo.Common\n * @param {string} name - the string identifier of the element\n * @see {@link SOGo.Common.sgFocusOn}\n * @ngInject\n */\n sgFocus.$inject = ['$rootScope', '$timeout'];\n function sgFocus($rootScope, $timeout) {\n return function(name) {\n $timeout(function() {\n $rootScope.$broadcast('sgFocusOn', name);\n });\n };\n }\n\n angular\n .module('SOGo.Common')\n .factory('sgFocus', sgFocus);\n})();\n","(function() {\n 'use strict';\n\n /**\n * @name User\n * @constructor\n * @param {object} [userData] - some default values for the user\n */\n function User(userData) {\n if (userData) {\n this.init(userData);\n }\n }\n\n /**\n * @memberof User\n * @desc The factory we'll use to register with Angular.\n * @return the User constructor\n */\n User.factory = ['$q', '$log', 'sgSettings', 'Resource', function($q, $log, Settings, Resource) {\n angular.extend(User, {\n $q: $q,\n $log: $log,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $query: '',\n $users: []\n });\n\n return User;\n }];\n\n /**\n * @module SOGo.Common\n * @desc Factory registration of User in Angular module.\n */\n angular.module('SOGo.Common').factory('User', User.factory);\n\n /**\n * @memberof User\n * @desc Search for users that match a string.\n * @param {string} search - a string used to performed the search\n * @param {object[]} excludedUsers - a list of User objects that must be excluded from the results\n * @return a promise of an array of matching User objects\n */\n User.$filter = function(search, excludedUsers, options) {\n var _this = this, param = {search: search};\n\n if (!options || !options.dry) {\n if (!search) {\n // No query specified\n User.$users.splice(0, User.$users.length);\n return User.$q.when(User.$users);\n }\n if (User.$query == search) {\n // Query hasn't changed\n return User.$q.when(User.$users);\n }\n User.$query = search;\n }\n\n return User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {\n var results, index, user, users,\n compareUids = function(data) {\n return this.uid == data.uid;\n };\n\n if (options) {\n if (options.dry)\n users = [];\n else if (options.results)\n users = options.results;\n }\n else\n users = User.$users;\n\n if (excludedUsers) {\n // Remove excluded users from response\n results = _.filter(response.users, function(user) {\n return !_.find(excludedUsers, _.bind(compareUids, user));\n });\n }\n else {\n results = response.users;\n }\n\n // Remove users that no longer match the search query\n for (index = users.length - 1; index >= 0; index--) {\n user = users[index];\n if (!_.find(results, _.bind(compareUids, user))) {\n users.splice(index, 1);\n }\n }\n // Add new users matching the search query\n _.forEach(results, function(data, index) {\n if (_.isUndefined(_.find(users, _.bind(compareUids, data)))) {\n var user = new User(data);\n users.splice(index, 0, user);\n }\n });\n User.$log.debug(users);\n return users;\n });\n };\n\n /**\n * @function init\n * @memberof User.prototype\n * @desc Extend instance with required attributes and new data.\n * @param {object} data - attributes of user\n */\n User.prototype.init = function(data) {\n angular.extend(this, data);\n if (!this.$$shortFormat)\n this.$$shortFormat = this.$shortFormat();\n if (!this.$$image)\n this.$$image = this.image;\n // NOTE: We can't assign a Gravatar at this stage since we would need the Preferences module\n // which already depend on the User module.\n\n // An empty attribute to trick md-autocomplete when adding users from the ACLs editor\n this.empty = ' ';\n };\n\n /**\n * @function $shortFormat\n * @memberof User.prototype\n * @return the fullname along with the email address\n */\n User.prototype.$shortFormat = function(options) {\n var fullname = this.cn || this.c_email;\n var email = this.c_email;\n var no_email = options && options.email === false;\n if (!no_email && email && fullname != email) {\n fullname += ' <' + email + '>';\n }\n return fullname;\n };\n\n /**\n * @function $acl\n * @memberof User.prototype\n * @desc Fetch the user rights associated to a specific folder and populate the 'rights' attribute.\n * @param {string} the folder ID\n * @param {Object} owner - the owner to use when fetching the ACL as it might not be the Settings.activeUser\n * @return a promise\n */\n User.prototype.$acl = function(folderId, owner) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {uid: this.uid};\n if (this.$shadowRights) {\n deferred.resolve(this.rights);\n }\n else {\n var rights;\n\n if (angular.isDefined(owner))\n rights = User.$$resource.userResource(owner).fetch(folderId, 'userRights', param);\n else\n rights = User.$$resource.fetch(folderId, 'userRights', param);\n\n rights.then(function(data) {\n _this.rights = data;\n // Convert numbers (0|1) to boolean values\n //angular.forEach(_.keys(_this.rights), function(key) {\n // _this.rights[key] = _this.rights[key] ? true : false;\n //});\n // console.debug('rights ' + _this.uid + ' => ' + JSON.stringify(data, undefined, 2));\n // Keep a copy of the server's version\n _this.$shadowRights = angular.copy(data);\n deferred.resolve(data);\n return data;\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $isAnonymous\n * @memberof User.prototype\n * @return true if it's the special anonymous user\n */\n User.prototype.$isAnonymous = function() {\n return this.uid == 'anonymous';\n };\n\n /**\n * @function $isSpecial\n * @memberof User.prototype\n * @desc Only accurate from the ACL editor.\n * @return true if the user is not a regular system user\n */\n User.prototype.$isSpecial = function() {\n return this.userClass && this.userClass == 'public-user';\n };\n\n /**\n * @function $confirmRights\n * @memberof User.prototype\n * @desc Check if a confirmation is required before giving some rights.\n * @return the confirmation message or false if no confirmation is required\n */\n User.prototype.$confirmRights = function(folder) {\n var confirmation = false;\n\n if (this.$confirmation) {\n // Don't bother the user more than once\n return false;\n }\n\n if (_.some(_.values(this.rights))) {\n if (this.uid == 'anonymous') {\n if (folder.constructor.name == 'AddressBook')\n confirmation = l('Potentially anyone on the Internet will be able to access your address book \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?', folder.name);\n else if (folder.constructor.name == 'Calendar')\n confirmation = l('Potentially anyone on the Internet will be able to access your calendar \"%{0}\", even if they do not have an account on this system. Is this information suitable for the public Internet?', folder.name);\n }\n else if (this.uid == 'anyone' || this.uid == '') {\n if (folder.constructor.name == 'AddressBook')\n confirmation = l('Any user with an account on this system will be able to access your address book \"%{0}\". Are you certain you trust them all?', folder.name);\n else if (folder.constructor.name == 'Calendar')\n confirmation = l('Any user with an account on this system will be able to access your calendar \"%{0}\". Are you certain you trust them all?', folder.name);\n else if (folder.constructor.name == 'Mailbox')\n confirmation = l('Any user with an account on this system will be able to access your mailbox \"%{0}\". Are you certain you trust them all?', folder.name);\n }\n }\n\n this.$confirmation = confirmation;\n\n return confirmation;\n };\n\n /**\n * @function $rightsAreDirty\n * @memberof User.prototype\n * @return whether or not the rights have changed from their initial values\n */\n User.prototype.$rightsAreDirty = function() {\n return this.rights && !_.isEqual(this.rights, this.$shadowRights);\n };\n\n /**\n * @function $resetRights\n * @memberof User.prototype\n * @desc Restore initial rights or disable all rights\n * @param {boolean} [zero] - reset all rights to zero when true\n */\n User.prototype.$resetRights = function(zero) {\n var _this = this;\n if (zero) {\n // Disable all rights\n _.map(_.keys(this.rights), function(key) {\n if (angular.isString(_this.rights[key]))\n _this.rights[key] = 'None';\n else\n _this.rights[key] = 0;\n });\n }\n else {\n // Restore initial rights\n this.rights = angular.copy(this.$shadowRights);\n }\n };\n\n /**\n * @function $folders\n * @memberof User.prototype\n * @desc Retrieve the list of folders of a specific type\n * @param {string} type - either 'contact' or 'calendar'\n * @return a promise of the HTTP query result or the cached result\n */\n User.prototype.$folders = function(type) {\n var _this = this,\n deferred = User.$q.defer(),\n param = {type: type};\n if (this.$$folders) {\n deferred.resolve(this.$$folders);\n }\n else {\n User.$$resource.userResource(this.uid).fetch(null, 'foldersSearch', param).then(function(response) {\n _this.$$folders = response.folders;\n deferred.resolve(response.folders);\n });\n }\n return deferred.promise;\n };\n\n /**\n * @function $omit\n * @memberof User.prototype\n * @desc Return a sanitized object used to send to the server.\n * @return an object literal copy of the User instance\n */\n User.prototype.$omit = function() {\n var user = {};\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n user[key] = value;\n }\n });\n return user;\n };\n\n User.prototype.toString = function() {\n return '[User ' + this.c_email + ']';\n };\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n /* jshint validthis: true, newcap: false */\n 'use strict';\n\n /**\n * sgAvatarImage - An avatar directive that returns un img element with either a local URL (if sg-src is specified)\n * or a Gravatar URL built from the Gravatar factory (using sg-email).\n * Based on http://blog.lingohub.com/2014/08/better-ux-with-angularjs-directives/.\n * @memberof SOGo.Common\n * @example:\n \n */\n function sgAvatarImage() {\n return {\n restrict: 'AE',\n scope: {},\n bindToController: {\n size: '@',\n email: '=sgEmail',\n src: '=sgSrc'\n },\n template: [\n 'person', // the generic icon\n '' // the gravatar or local image\n ].join(''),\n link: link,\n controller: 'sgAvatarImageController',\n controllerAs: 'vm'\n };\n }\n\n function link(scope, element, attrs, controller) {\n var imgElement = element.find('img'),\n mdIconElement = element.find('md-icon');\n\n if (attrs.size) {\n imgElement.attr('width', attrs.size);\n imgElement.attr('height', attrs.size);\n mdIconElement.css('font-size', attrs.size + 'px');\n }\n\n controller.img = imgElement;\n controller.genericImg = mdIconElement;\n }\n\n /**\n * @ngInject\n */\n sgAvatarImageController.$inject = ['$scope', '$element', '$http', '$q', 'Preferences', 'Gravatar'];\n function sgAvatarImageController($scope, $element, $http, $q, Preferences, Gravatar) {\n var vm;\n\n vm = this;\n\n // Wait on user's defaults\n Preferences.ready().then(function() {\n $scope.$watch(function() { return vm.email; }, function(email, old) {\n if (email && vm.urlEmail != email) {\n // Email has changed or doesn't match the current URL (this happens when using md-virtual-repeat)\n showGenericAvatar();\n if (Preferences.defaults.SOGoGravatarEnabled)\n getGravatar(email);\n }\n else if (!email)\n showGenericAvatar();\n });\n });\n\n // If sg-src is defined, watch the expression for the URL of a local image\n if ('sg-src' in $element[0].attributes) {\n $scope.$watch(function() { return vm.src; }, function(src) {\n if (src) {\n // Set image URL and save the associated email address\n vm.url = src;\n vm.urlEmail = '' + vm.email;\n hideGenericAvatar();\n }\n });\n }\n\n function getGravatar(email) {\n var url = Gravatar(email, vm.size, Preferences.defaults.SOGoAlternateAvatar);\n $http({\n method: 'GET',\n url: url,\n cache: true,\n headers: { Accept: 'image/*' }\n }).then(function successCallback() {\n if (!vm.url) {\n // Set image URL and save the associated email address\n vm.url = url;\n vm.urlEmail = email;\n hideGenericAvatar();\n }\n }, function errorCallback() {\n showGenericAvatar();\n });\n }\n\n function showGenericAvatar() {\n vm.url = null;\n vm.urlEmail = null;\n vm.img.addClass('ng-hide');\n vm.genericImg.removeClass('ng-hide');\n }\n\n function hideGenericAvatar() {\n vm.genericImg.addClass('ng-hide');\n vm.img.removeClass('ng-hide');\n }\n }\n\n angular\n .module('SOGo.Common')\n .directive('sgAvatarImage', sgAvatarImage)\n .controller('sgAvatarImageController', sgAvatarImageController);\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n angular\n .module('SOGo.Common')\n .directive('sgCheckmark', sgCheckmarkDirective);\n\n /*\n * sgCheckmark - A checkmark to be used in a mdMenuItem\n * @memberof SOGo.Common\n * @restrict element\n *\n * @example:\n\n \n \n sort\n \n \n \n Descending Order\n \n \n \n */\n sgCheckmarkDirective.$inject = ['$parse', '$mdAria', '$mdTheming', '$mdUtil'];\n function sgCheckmarkDirective($parse, $mdAria, $mdTheming, $mdUtil) {\n var CHECKED_CSS = 'sg-checked';\n\n return {\n restrict: 'E',\n replace: true,\n transclude: true,\n require: '?ngModel',\n //priority: 210, // Run before ngAria\n template: [\n '