mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-11-15 12:15:20 +08:00
184 lines
No EOL
4.1 KiB
JavaScript
184 lines
No EOL
4.1 KiB
JavaScript
|
|
(function () {
|
|
|
|
'use strict';
|
|
|
|
var
|
|
_ = require('_'),
|
|
$ = require('$'),
|
|
ko = require('ko'),
|
|
|
|
Jua = require('Jua'),
|
|
|
|
Enums = require('Common/Enums'),
|
|
Utils = require('Common/Utils'),
|
|
Links = require('Common/Links'),
|
|
Translator = require('Common/Translator'),
|
|
|
|
ThemeStore = require('Stores/Theme'),
|
|
|
|
Settings = require('Storage/Settings'),
|
|
Remote = require('Storage/User/Remote')
|
|
;
|
|
|
|
/**
|
|
* @constructor
|
|
*/
|
|
function ThemesUserSettings()
|
|
{
|
|
this.theme = ThemeStore.theme;
|
|
this.themes = ThemeStore.themes;
|
|
this.themesObjects = ko.observableArray([]);
|
|
|
|
this.background = {};
|
|
this.background.name = ThemeStore.themeBackgroundName;
|
|
this.background.hash = ThemeStore.themeBackgroundHash;
|
|
this.background.uploaderButton = ko.observable(null);
|
|
this.background.loading = ko.observable(false);
|
|
this.background.error = ko.observable('');
|
|
|
|
this.capaUserBackground = ko.observable(Settings.capa(Enums.Capa.UserBackground));
|
|
|
|
this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100});
|
|
|
|
this.iTimer = 0;
|
|
this.oThemeAjaxRequest = null;
|
|
|
|
this.theme.subscribe(function (sValue) {
|
|
|
|
_.each(this.themesObjects(), function (oTheme) {
|
|
oTheme.selected(sValue === oTheme.name);
|
|
});
|
|
|
|
Utils.changeTheme(sValue, this.themeTrigger);
|
|
|
|
Remote.saveSettings(null, {
|
|
'Theme': sValue
|
|
});
|
|
|
|
}, this);
|
|
|
|
this.background.hash.subscribe(function (sValue) {
|
|
|
|
var $oBg = $('#rl-bg');
|
|
if (!sValue)
|
|
{
|
|
if ($oBg.data('backstretch'))
|
|
{
|
|
$oBg.backstretch('destroy').attr('style', '');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$('#rl-bg').attr('style', 'background-image: none !important;').backstretch(
|
|
Links.userBackground(sValue), {
|
|
'fade': 1000, 'centeredX': true, 'centeredY': true
|
|
}).removeAttr('style');
|
|
}
|
|
|
|
}, this);
|
|
}
|
|
|
|
ThemesUserSettings.prototype.onBuild = function ()
|
|
{
|
|
var sCurrentTheme = this.theme();
|
|
this.themesObjects(_.map(this.themes(), function (sTheme) {
|
|
return {
|
|
'name': sTheme,
|
|
'nameDisplay': Utils.convertThemeName(sTheme),
|
|
'selected': ko.observable(sTheme === sCurrentTheme),
|
|
'themePreviewSrc': Links.themePreviewLink(sTheme)
|
|
};
|
|
}));
|
|
|
|
this.initUploader();
|
|
};
|
|
|
|
ThemesUserSettings.prototype.onShow = function ()
|
|
{
|
|
this.background.error('');
|
|
};
|
|
|
|
ThemesUserSettings.prototype.clearBackground = function ()
|
|
{
|
|
if (this.capaUserBackground())
|
|
{
|
|
var self = this;
|
|
Remote.clearUserBackground(function () {
|
|
self.background.name('');
|
|
self.background.hash('');
|
|
});
|
|
}
|
|
};
|
|
|
|
ThemesUserSettings.prototype.initUploader = function ()
|
|
{
|
|
if (this.background.uploaderButton() && this.capaUserBackground())
|
|
{
|
|
var
|
|
oJua = new Jua({
|
|
'action': Links.uploadBackground(),
|
|
'name': 'uploader',
|
|
'queueSize': 1,
|
|
'multipleSizeLimit': 1,
|
|
'disableDragAndDrop': true,
|
|
'disableMultiple': true,
|
|
'clickElement': this.background.uploaderButton()
|
|
})
|
|
;
|
|
|
|
oJua
|
|
.on('onStart', _.bind(function () {
|
|
|
|
this.background.loading(true);
|
|
this.background.error('');
|
|
|
|
return true;
|
|
|
|
}, this))
|
|
.on('onComplete', _.bind(function (sId, bResult, oData) {
|
|
|
|
this.background.loading(false);
|
|
|
|
if (bResult && sId && oData && oData.Result && oData.Result.Name && oData.Result.Hash)
|
|
{
|
|
this.background.name(oData.Result.Name);
|
|
this.background.hash(oData.Result.Hash);
|
|
}
|
|
else
|
|
{
|
|
this.background.name('');
|
|
this.background.hash('');
|
|
|
|
var sError = '';
|
|
if (oData.ErrorCode)
|
|
{
|
|
switch (oData.ErrorCode)
|
|
{
|
|
case Enums.UploadErrorCode.FileIsTooBig:
|
|
sError = Translator.i18n('SETTINGS_THEMES/ERROR_FILE_IS_TOO_BIG');
|
|
break;
|
|
case Enums.UploadErrorCode.FileType:
|
|
sError = Translator.i18n('SETTINGS_THEMES/ERROR_FILE_TYPE_ERROR');
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!sError && oData.ErrorMessage)
|
|
{
|
|
sError = oData.ErrorMessage;
|
|
}
|
|
|
|
this.background.error(sError || Translator.i18n('SETTINGS_THEMES/ERROR_UNKNOWN'));
|
|
}
|
|
|
|
return true;
|
|
|
|
}, this))
|
|
;
|
|
}
|
|
};
|
|
|
|
module.exports = ThemesUserSettings;
|
|
|
|
}()); |