/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /** * @constructor */ function SettingsThemes() { var self = this, oData = RL.data() ; this.mainTheme = oData.mainTheme; this.customThemeType = ko.observable(RL.settingsGet('CustomThemeType')); this.customThemeImg = ko.observable(RL.settingsGet('CustomThemeImg')); this.themesObjects = ko.observableArray([]); this.customThemeUploaderProgress = ko.observable(false); this.customThemeUploaderButton = ko.observable(null); this.showCustomThemeConfig = ko.computed(function () { return 'Custom' === this.mainTheme(); }, this); this.showCustomThemeConfig.subscribe(function () { Utils.windowResize(); }); this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100}); this.oLastAjax = null; this.iTimer = 0; RL.data().theme.subscribe(function (sValue) { _.each(this.themesObjects(), function (oTheme) { oTheme.selected(sValue === oTheme.name); }); var oThemeLink = $('#rlThemeLink'), oThemeStyle = $('#rlThemeStyle'), sUrl = oThemeLink.attr('href') ; if (!sUrl) { sUrl = oThemeStyle.attr('data-href'); } if (sUrl) { sUrl = sUrl.toString().replace(/\/-\/[^\/]+\/\-\//, '/-/' + sValue + '/-/'); sUrl = sUrl.toString().replace(/\/Css\/[^\/]+\/User\//, '/Css/' + ('Custom' === sValue && window.__rlah ? window.__rlah() || '0' : '0') + '/User/'); if ('Json/' !== sUrl.substring(sUrl.length - 5, sUrl.length)) { sUrl += 'Json/'; } window.clearTimeout(self.iTimer); self.themeTrigger(Enums.SaveSettingsStep.Animate); if (this.oLastAjax && this.oLastAjax.abort) { this.oLastAjax.abort(); } this.oLastAjax = $.ajax({ 'url': sUrl, 'dataType': 'json' }).done(function(aData) { if (aData && Utils.isArray(aData) && 2 === aData.length) { if (oThemeLink && oThemeLink[0] && (!oThemeStyle || !oThemeStyle[0])) { oThemeStyle = $(''); oThemeLink.after(oThemeStyle); oThemeLink.remove(); } if (oThemeStyle && oThemeStyle[0]) { oThemeStyle.attr('data-href', sUrl).attr('data-theme', aData[0]); if (oThemeStyle && oThemeStyle[0] && oThemeStyle[0].styleSheet && !Utils.isUnd(oThemeStyle[0].styleSheet.cssText)) { oThemeStyle[0].styleSheet.cssText = aData[1]; } else { oThemeStyle.text(aData[1]); } } self.themeTrigger(Enums.SaveSettingsStep.TrueResult); } }).always(function() { self.iTimer = window.setTimeout(function () { self.themeTrigger(Enums.SaveSettingsStep.Idle); }, 1000); self.oLastAjax = null; }); } RL.remote().saveSettings(null, { 'Theme': sValue }); }, this); } Utils.addSettingsViewModel(SettingsThemes, 'SettingsThemes', 'SETTINGS_LABELS/LABEL_THEMES_NAME', 'themes'); SettingsThemes.prototype.removeCustomThemeImg = function () { this.customThemeImg(''); }; SettingsThemes.prototype.onBuild = function () { var self = this, sCurrentTheme = RL.data().theme() ; this.themesObjects(_.map(RL.data().themes(), function (sTheme) { return { 'name': sTheme, 'nameDisplay': Utils.convertThemeName(sTheme), 'selected': ko.observable(sTheme === sCurrentTheme), 'themePreviewSrc': RL.link().themePreviewLink(sTheme) }; })); _.delay(function () { self.customThemeType.subscribe(function (sValue) { RL.remote().saveSettings(function () { RL.data().theme.valueHasMutated(); }, { 'CustomThemeType': sValue }); }); self.customThemeImg.subscribe(function (sValue) { RL.remote().saveSettings(function () { RL.data().theme.valueHasMutated(); }, { 'CustomThemeImg': sValue }); }); }, 50); this.initCustomThemeUploader(); }; SettingsThemes.prototype.initCustomThemeUploader = function () { if (this.customThemeUploaderButton()) { var oJua = new Jua({ 'action': RL.link().uploadBackground(), 'name': 'uploader', 'queueSize': 1, 'multipleSizeLimit': 1, 'disableFolderDragAndDrop': true, 'clickElement': this.customThemeUploaderButton() }) ; oJua .on('onSelect', _.bind(function (sId, oData) { var sFileName = Utils.isUnd(oData.FileName) ? '' : oData.FileName.toString(), sFileNameExt = sFileName.substring(sFileName.length - 4, sFileName.length), mSize = Utils.isNormal(oData.Size) ? Utils.pInt(oData.Size) : null ; if (-1 === Utils.inArray(sFileNameExt, ['jpeg', '.jpg', '.png'])) { window.alert(Utils.i18n('SETTINGS_THEMES/ERROR_FILE_TYPE_ERROR')); return false; } if (1024 * 1024 < mSize) { window.alert(Utils.i18n('SETTINGS_THEMES/ERROR_FILE_IS_TOO_BIG')); return false; } return true; }, this)) .on('onStart', _.bind(function () { this.customThemeUploaderProgress(true); }, this)) .on('onComplete', _.bind(function (sId, bResult, oData) { if (!bResult || !oData || !oData.Result) { window.alert( oData && oData.ErrorCode ? Utils.getUploadErrorDescByCode(oData.ErrorCode) : Utils.getUploadErrorDescByCode(Enums.UploadErrorCode.Unknown) ); } else { this.customThemeImg(oData.Result); } this.customThemeUploaderProgress(false); }, this)) ; return !!oJua; } return false; };