mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-11-15 12:15:20 +08:00
133 lines
No EOL
3 KiB
JavaScript
133 lines
No EOL
3 KiB
JavaScript
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
|
|
|
|
(function (module, require) {
|
|
|
|
'use strict';
|
|
|
|
var
|
|
window = require('window'),
|
|
$ = require('$'),
|
|
ko = require('ko'),
|
|
_ = require('_'),
|
|
|
|
Enums = require('Enums'),
|
|
Utils = require('Utils'),
|
|
LinkBuilder = require('LinkBuilder'),
|
|
|
|
Data = require('Storage:RainLoop:Data'),
|
|
Remote = require('Storage:RainLoop:Remote')
|
|
;
|
|
|
|
/**
|
|
* @constructor
|
|
*/
|
|
function SettingsThemes()
|
|
{
|
|
var self = this;
|
|
|
|
this.mainTheme = Data.mainTheme;
|
|
this.themesObjects = ko.observableArray([]);
|
|
|
|
this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100});
|
|
|
|
this.oLastAjax = null;
|
|
this.iTimer = 0;
|
|
|
|
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/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 = $('<style id="rlThemeStyle"></style>');
|
|
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;
|
|
});
|
|
}
|
|
|
|
Remote.saveSettings(null, {
|
|
'Theme': sValue
|
|
});
|
|
|
|
}, this);
|
|
}
|
|
|
|
SettingsThemes.prototype.onBuild = function ()
|
|
{
|
|
var sCurrentTheme = Data.theme();
|
|
this.themesObjects(_.map(Data.themes(), function (sTheme) {
|
|
return {
|
|
'name': sTheme,
|
|
'nameDisplay': Utils.convertThemeName(sTheme),
|
|
'selected': ko.observable(sTheme === sCurrentTheme),
|
|
'themePreviewSrc': LinkBuilder.themePreviewLink(sTheme)
|
|
};
|
|
}));
|
|
};
|
|
|
|
module.exports = SettingsThemes;
|
|
|
|
}(module, require)); |