sogo/UI/WebServerResources/js/Preferences.services.js.map
2017-03-24 09:43:51 -04:00

1 line
19 KiB
Plaintext

{"version":3,"sources":["Preferences/Preferences.service.js"],"names":["Preferences","_this","this","defaults","settings","defaultsPromise","$$resource","fetch","then","response","data","labels","_","fromPairs","map","SOGoMailLabelsColors","value","key","charAt","forEach","SOGoSieveFilters","filter","actions","action","method","argument","SOGoRememberLastModule","SOGoLoginModule","SOGoMailAutoSave","parseInt","SOGoMailComposeFontSizeEnabled","SOGoMailComposeFontSize","window","CKEDITOR","config","fontSize_defaultLabel","addCss","Vacation","startDate","Date","startDateEnabled","beginOfDay","addDays","endDate","endDateEnabled","getTime","autoReplyEmailAddresses","length","join","angular","isUndefined","isDefined","defaultEmailAddresses","daysBetweenResponse","Forward","forwardAddress","SOGoCalendarCategoriesColors","SOGoCalendarCategories","SOGoContactsCategories","extend","$mdDateLocaleProvider","locale","firstDayOfWeek","SOGoFirstDayOfWeek","firstWeekOfYear","SOGoFirstWeekOfYear","weekNumberFormatter","weekNumber","l","msgCalendar","msgOpenCalendar","parseDate","dateString","SOGoShortDateFormat","NaN","formatDate","date","format","$dateFormat","parseTime","timeString","SOGoTimeFormat","formatTime","settingsPromise","Calendar","PreventInvitationsWhitelist","match","exec","user","$User","uid","cn","c_email","$$image","avatar","no_404","url","$factory","$q","$timeout","$log","Settings","Gravatar","Resource","User","$gravatar","activeUser","$resourcesURL","resourcesURL","module","e","factory","prototype","ready","all","email","size","options","alternate_avatar","SOGoAlternateAvatar","SOGoGravatarEnabled","dstObject","dstAttr","$save","save","$omit","deep","preferences","whitelist","copy","toLowerCase","replace","substring","split","v","$shortFormat"],"mappings":"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","file":"Preferences.services.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n\n(function() {\n 'use strict';\n\n /**\n * @name Preferences\n * @constructor\n */\n function Preferences() {\n var _this = this;\n\n this.defaults = {};\n this.settings = {};\n\n this.defaultsPromise = Preferences.$$resource.fetch(\"jsonDefaults\").then(function(response) {\n var data = response || {};\n\n // We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n var labels = _.fromPairs(_.map(data.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '$')\n return ['_' + key, value];\n return [key, value];\n }));\n data.SOGoMailLabelsColors = labels;\n\n _.forEach(data.SOGoSieveFilters, function(filter) {\n _.forEach(filter.actions, function(action) {\n if (action.method == 'addflag' &&\n action.argument.charAt(0) == '$')\n action.argument = '_' + action.argument;\n });\n });\n\n if (data.SOGoRememberLastModule)\n data.SOGoLoginModule = \"Last\";\n\n // Mail editor autosave is a number of minutes or 0 if disabled\n data.SOGoMailAutoSave = parseInt(data.SOGoMailAutoSave) || 0;\n\n // Specify a base font size for HTML messages when SOGoMailComposeFontSize is not zero\n data.SOGoMailComposeFontSizeEnabled = parseInt(data.SOGoMailComposeFontSize) > 0;\n\n if (window.CKEDITOR && data.SOGoMailComposeFontSizeEnabled) {\n // HTML editor is enabled; set user's preferred font size\n window.CKEDITOR.config.fontSize_defaultLabel = data.SOGoMailComposeFontSize;\n window.CKEDITOR.addCss('.cke_editable { font-size: ' + data.SOGoMailComposeFontSize + 'px; }');\n }\n\n // We convert our list of autoReplyEmailAddresses/forwardAddress into a string.\n // We also convert our date objects into real date, otherwise we'll have strings\n // or undefined values and the md-datepicker does NOT like this.\n if (data.Vacation) {\n if (data.Vacation.startDate)\n data.Vacation.startDate = new Date(parseInt(data.Vacation.startDate) * 1000);\n else {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n data.Vacation.startDate = data.Vacation.startDate.beginOfDay();\n data.Vacation.startDate.addDays(1);\n }\n if (data.Vacation.endDate)\n data.Vacation.endDate = new Date(parseInt(data.Vacation.endDate) * 1000);\n else {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date(data.Vacation.startDate.getTime());\n data.Vacation.endDate.addDays(1);\n }\n if (data.Vacation.autoReplyEmailAddresses && data.Vacation.autoReplyEmailAddresses.length)\n data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(\",\");\n else\n delete data.Vacation.autoReplyEmailAddresses;\n } else\n data.Vacation = {};\n\n if (angular.isUndefined(data.Vacation.autoReplyEmailAddresses) &&\n angular.isDefined(window.defaultEmailAddresses))\n data.Vacation.autoReplyEmailAddresses = window.defaultEmailAddresses;\n\n if (angular.isUndefined(data.Vacation.daysBetweenResponse))\n data.Vacation.daysBetweenResponse = 7;\n\n if (angular.isUndefined(data.Vacation.startDate)) {\n data.Vacation.startDateEnabled = 0;\n data.Vacation.startDate = new Date();\n }\n\n if (angular.isUndefined(data.Vacation.endDate)) {\n data.Vacation.endDateEnabled = 0;\n data.Vacation.endDate = new Date();\n }\n\n if (data.Forward && data.Forward.forwardAddress)\n data.Forward.forwardAddress = data.Forward.forwardAddress.join(\",\");\n\n if (angular.isUndefined(data.SOGoCalendarCategoriesColors)) {\n data.SOGoCalendarCategoriesColors = {};\n data.SOGoCalendarCategories = [];\n }\n\n if (angular.isUndefined(data.SOGoContactsCategories))\n data.SOGoContactsCategories = [];\n\n angular.extend(_this.defaults, data);\n\n // Configure date locale\n _this.$mdDateLocaleProvider = Preferences.$mdDateLocaleProvider;\n angular.extend(_this.$mdDateLocaleProvider, data.locale);\n angular.extend(_this.$mdDateLocaleProvider, {\n firstDayOfWeek: data.SOGoFirstDayOfWeek,\n firstWeekOfYear: data.SOGoFirstWeekOfYear\n });\n _this.$mdDateLocaleProvider.firstDayOfWeek = parseInt(data.SOGoFirstDayOfWeek);\n _this.$mdDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\n return l('Week %d', weekNumber);\n };\n _this.$mdDateLocaleProvider.msgCalendar = l('Calender');\n _this.$mdDateLocaleProvider.msgOpenCalendar = l('Open Calendar');\n _this.$mdDateLocaleProvider.parseDate = function(dateString) {\n return dateString? dateString.parseDate(_this.$mdDateLocaleProvider, data.SOGoShortDateFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatDate = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, date.$dateFormat || data.SOGoShortDateFormat) : '';\n };\n _this.$mdDateLocaleProvider.parseTime = function(timeString) {\n return timeString? timeString.parseDate(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : new Date(NaN);\n };\n _this.$mdDateLocaleProvider.formatTime = function(date) {\n return date? date.format(_this.$mdDateLocaleProvider, data.SOGoTimeFormat) : '';\n };\n\n return _this.defaults;\n });\n\n this.settingsPromise = Preferences.$$resource.fetch(\"jsonSettings\").then(function(data) {\n // We convert our PreventInvitationsWhitelist hash into a array of user\n if (data.Calendar) {\n if (data.Calendar.PreventInvitationsWhitelist) {\n data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {\n var match = /^(.+)\\s<(\\S+)>$/.exec(value),\n user = new Preferences.$User({uid: key, cn: match[1], c_email: match[2]});\n if (!user.$$image)\n _this.avatar(user.c_email, 32, {no_404: true}).then(function(url) {\n user.$$image = url;\n });\n return user;\n });\n }\n else\n data.Calendar.PreventInvitationsWhitelist = [];\n }\n\n angular.extend(_this.settings, data);\n\n return _this.settings;\n });\n }\n\n /**\n * @memberof Preferences\n * @desc The factory we'll use to register with Angular\n * @returns the Preferences constructor\n */\n Preferences.$factory = ['$q', '$timeout', '$log', '$mdDateLocale', 'sgSettings', 'Gravatar', 'Resource', 'User', function($q, $timeout, $log, $mdDateLocaleProvider, Settings, Gravatar, Resource, User) {\n angular.extend(Preferences, {\n $q: $q,\n $timeout: $timeout,\n $log: $log,\n $mdDateLocaleProvider: $mdDateLocaleProvider,\n $gravatar: Gravatar,\n $$resource: new Resource(Settings.activeUser('folderURL'), Settings.activeUser()),\n $resourcesURL: Settings.resourcesURL(),\n $User: User\n });\n\n return new Preferences(); // return unique instance\n }];\n\n /* Initialize module if necessary */\n try {\n angular.module('SOGo.PreferencesUI');\n }\n catch(e) {\n angular.module('SOGo.PreferencesUI', ['SOGo.Common']);\n }\n\n /* Factory registration in Angular module */\n angular.module('SOGo.PreferencesUI')\n .factory('Preferences', Preferences.$factory);\n\n /**\n * @function ready\n * @memberof Preferences.prototype\n * @desc Combine promises used to load user's defaults and settings.\n * @return a combined promise\n */\n Preferences.prototype.ready = function() {\n return Preferences.$q.all([this.defaultsPromise, this.settingsPromise]);\n };\n\n /**\n * @function avatar\n * @memberof Preferences.prototype\n * @desc Get the avatar URL associated to an email address\n * @return a combined promise\n */\n Preferences.prototype.avatar = function(email, size, options) {\n var _this = this;\n return this.ready().then(function() {\n var alternate_avatar = _this.defaults.SOGoAlternateAvatar, url;\n if (_this.defaults.SOGoGravatarEnabled)\n url = Preferences.$gravatar(email, size, alternate_avatar, options);\n else\n url = [Preferences.$resourcesURL, 'img', 'ic_person_grey_24px.svg'].join('/');\n if (options && options.dstObject && options.dstAttr)\n options.dstObject[options.dstAttr] = url;\n return url;\n });\n };\n\n /**\n * @function $save\n * @memberof Preferences.prototype\n * @desc Save the preferences to the server.\n */\n Preferences.prototype.$save = function() {\n var _this = this;\n\n return Preferences.$$resource.save(\"Preferences\", this.$omit(true))\n .then(function(data) {\n // Make a copy of the data for an eventual reset\n //_this.$shadowData = _this.$omit(true);\n return data;\n });\n };\n\n /**\n * @function $omit\n * @memberof Preferences.prototype\n * @desc Return a sanitized object used to send to the server.\n * @param {Boolean} [deep] - make a deep copy if true\n * @return an object literal copy of the Preferences instance\n */\n Preferences.prototype.$omit = function(deep) {\n var preferences, labels, whitelist;\n\n preferences = {};\n whitelist = {};\n\n angular.forEach(this, function(value, key) {\n if (key != 'constructor' && key[0] != '$') {\n if (deep)\n preferences[key] = angular.copy(value);\n else\n preferences[key] = value;\n }\n });\n\n // We swap _$key -> $key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)\n labels = _.fromPairs(_.map(preferences.defaults.SOGoMailLabelsColors, function(value, key) {\n if (key.charAt(0) == '_' && key.charAt(1) == '$') {\n // New key, let's take the value and flatten it\n if (key.length > 2 && key.charAt(2) == '$') {\n return [value[0].toLowerCase().replace(/[ \\(\\)\\/\\{%\\*<>\\\\\\\"]/g, \"_\"), value];\n }\n return [key.substring(1), value];\n }\n return [key, value];\n }));\n preferences.defaults.SOGoMailLabelsColors = labels;\n\n _.forEach(preferences.defaults.SOGoSieveFilters, function(filter) {\n _.forEach(filter.actions, function(action) {\n if (action.method == 'addflag' &&\n action.argument.charAt(0) == '_' &&\n action.argument.charAt(1) == '$')\n action.argument = action.argument.substring(1);\n });\n });\n\n if (!preferences.defaults.SOGoMailComposeFontSizeEnabled)\n preferences.defaults.SOGoMailComposeFontSize = 0;\n delete preferences.defaults.SOGoMailComposeFontSizeEnabled;\n\n if (preferences.defaults.Vacation) {\n if (preferences.defaults.Vacation.startDateEnabled)\n preferences.defaults.Vacation.startDate = preferences.defaults.Vacation.startDate.getTime()/1000;\n else\n preferences.defaults.Vacation.startDate = 0;\n if (preferences.defaults.Vacation.endDateEnabled)\n preferences.defaults.Vacation.endDate = preferences.defaults.Vacation.endDate.getTime()/1000;\n else\n preferences.defaults.Vacation.endDate = 0;\n\n if (preferences.defaults.Vacation.autoReplyEmailAddresses)\n preferences.defaults.Vacation.autoReplyEmailAddresses = _.filter(preferences.defaults.Vacation.autoReplyEmailAddresses.split(\",\"), function(v) { return v.length; });\n else\n preferences.defaults.Vacation.autoReplyEmailAddresses = [];\n }\n\n if (preferences.defaults.Forward && preferences.defaults.Forward.forwardAddress)\n preferences.defaults.Forward.forwardAddress = preferences.defaults.Forward.forwardAddress.split(\",\");\n\n if (preferences.settings.Calendar && preferences.settings.Calendar.PreventInvitationsWhitelist) {\n _.forEach(preferences.settings.Calendar.PreventInvitationsWhitelist, function(user) {\n whitelist[user.uid] = user.$shortFormat();\n });\n preferences.settings.Calendar.PreventInvitationsWhitelist = whitelist;\n }\n\n return preferences;\n };\n\n})();\n"]}