snappymail/dev/Settings/User/Themes.js

163 lines
3.6 KiB
JavaScript
Raw Normal View History

2014-08-21 23:08:34 +08:00
2014-09-05 06:49:03 +08:00
(function () {
2014-08-25 23:49:01 +08:00
'use strict';
2014-08-21 23:08:34 +08:00
var
_ = require('_'),
2014-08-25 23:49:01 +08:00
ko = require('ko'),
2014-08-25 15:10:51 +08:00
Jua = require('Jua'),
2014-09-05 06:49:03 +08:00
Enums = require('Common/Enums'),
Utils = require('Common/Utils'),
2014-10-06 02:37:31 +08:00
Links = require('Common/Links'),
2014-08-22 23:08:56 +08:00
2014-10-18 21:43:44 +08:00
Data = require('Storage/User/Data'),
Remote = require('Storage/User/Remote')
2014-08-21 23:08:34 +08:00
;
/**
* @constructor
*/
function ThemesUserSettings()
2014-08-21 23:08:34 +08:00
{
2014-08-22 23:08:56 +08:00
this.mainTheme = Data.mainTheme;
2014-08-21 23:08:34 +08:00
this.themesObjects = ko.observableArray([]);
this.background = {};
this.background.name = Data.themeBackgroundName;
this.background.hash = Data.themeBackgroundHash;
this.background.uploaderButton = ko.observable(null);
this.background.loading = ko.observable(false);
this.background.error = ko.observable('');
this.capaUserBackground = Data.capaUserBackground;
2014-08-21 23:08:34 +08:00
this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100});
this.iTimer = 0;
this.oThemeAjaxRequest = null;
2014-08-21 23:08:34 +08:00
2014-08-22 23:08:56 +08:00
Data.theme.subscribe(function (sValue) {
2014-08-21 23:08:34 +08:00
_.each(this.themesObjects(), function (oTheme) {
oTheme.selected(sValue === oTheme.name);
});
Utils.changeTheme(sValue, this.background.hash(), this.themeTrigger, Links);
2014-08-21 23:08:34 +08:00
Remote.saveSettings(null, {
'Theme': sValue
});
}, this);
this.background.hash.subscribe(function (sValue) {
Utils.changeTheme(Data.theme(), sValue, this.themeTrigger, Links);
}, this);
2014-08-21 23:08:34 +08:00
}
ThemesUserSettings.prototype.onBuild = function ()
2014-08-21 23:08:34 +08:00
{
2014-08-22 23:08:56 +08:00
var sCurrentTheme = Data.theme();
this.themesObjects(_.map(Data.themes(), function (sTheme) {
2014-08-21 23:08:34 +08:00
return {
'name': sTheme,
'nameDisplay': Utils.convertThemeName(sTheme),
'selected': ko.observable(sTheme === sCurrentTheme),
2014-10-06 02:37:31 +08:00
'themePreviewSrc': Links.themePreviewLink(sTheme)
2014-08-21 23:08:34 +08:00
};
}));
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 = Utils.i18n('SETTINGS_THEMES/ERROR_FILE_IS_TOO_BIG');
break;
case Enums.UploadErrorCode.FileType:
sError = Utils.i18n('SETTINGS_THEMES/ERROR_FILE_TYPE_ERROR');
break;
}
}
if (!sError && oData.ErrorMessage)
{
sError = oData.ErrorMessage;
}
this.background.error(sError || Utils.i18n('SETTINGS_THEMES/ERROR_UNKNOWN'));
}
return true;
}, this))
;
}
2014-08-21 23:08:34 +08:00
};
module.exports = ThemesUserSettings;
2014-08-21 23:08:34 +08:00
2014-09-05 06:49:03 +08:00
}());