snappymail/dev/Settings/Admin/Plugins.js

112 lines
2.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
2014-08-25 23:49:01 +08:00
_ = require('_'),
ko = require('ko'),
2014-08-25 15:10:51 +08:00
2014-09-05 06:49:03 +08:00
Enums = require('Common/Enums'),
Utils = require('Common/Utils'),
2014-08-21 23:08:34 +08:00
Settings = require('Storage/Settings'),
Data = require('Storage/Admin/Data'),
Remote = require('Storage/Admin/Remote')
2014-08-21 23:08:34 +08:00
;
/**
* @constructor
*/
function PluginsAdminSetting()
2014-08-21 23:08:34 +08:00
{
2014-08-27 23:59:44 +08:00
this.enabledPlugins = ko.observable(!!Settings.settingsGet('EnabledPlugins'));
2014-08-21 23:08:34 +08:00
this.pluginsError = ko.observable('');
this.plugins = Data.plugins;
this.visibility = ko.computed(function () {
2014-10-04 19:58:01 +08:00
return Data.plugins.loading() ? 'visible' : 'hidden';
2014-08-21 23:08:34 +08:00
}, this);
this.onPluginLoadRequest = _.bind(this.onPluginLoadRequest, this);
this.onPluginDisableRequest = _.bind(this.onPluginDisableRequest, this);
}
PluginsAdminSetting.prototype.disablePlugin = function (oPlugin)
2014-08-21 23:08:34 +08:00
{
oPlugin.disabled(!oPlugin.disabled());
Remote.pluginDisable(this.onPluginDisableRequest, oPlugin.name, oPlugin.disabled());
};
PluginsAdminSetting.prototype.configurePlugin = function (oPlugin)
2014-08-21 23:08:34 +08:00
{
Remote.plugin(this.onPluginLoadRequest, oPlugin.name);
};
PluginsAdminSetting.prototype.onBuild = function (oDom)
2014-08-21 23:08:34 +08:00
{
var self = this;
oDom
.on('click', '.e-item .configure-plugin-action', function () {
var oPlugin = ko.dataFor(this);
if (oPlugin)
{
self.configurePlugin(oPlugin);
}
})
.on('click', '.e-item .disabled-plugin', function () {
var oPlugin = ko.dataFor(this);
if (oPlugin)
{
self.disablePlugin(oPlugin);
}
})
;
this.enabledPlugins.subscribe(function (bValue) {
Remote.saveAdminConfig(Utils.emptyFunction, {
'EnabledPlugins': bValue ? '1' : '0'
});
});
};
PluginsAdminSetting.prototype.onShow = function ()
2014-08-21 23:08:34 +08:00
{
this.pluginsError('');
require('App/Admin').reloadPluginList();
2014-08-21 23:08:34 +08:00
};
PluginsAdminSetting.prototype.onPluginLoadRequest = function (sResult, oData)
2014-08-21 23:08:34 +08:00
{
if (Enums.StorageResultType.Success === sResult && oData && oData.Result)
{
require('Knoin/Knoin').showScreenPopup(require('View/Popup/Plugin'), [oData.Result]);
2014-08-21 23:08:34 +08:00
}
};
PluginsAdminSetting.prototype.onPluginDisableRequest = function (sResult, oData)
2014-08-21 23:08:34 +08:00
{
if (Enums.StorageResultType.Success === sResult && oData)
{
if (!oData.Result && oData.ErrorCode)
{
if (Enums.Notification.UnsupportedPluginPackage === oData.ErrorCode && oData.ErrorMessage && '' !== oData.ErrorMessage)
{
this.pluginsError(oData.ErrorMessage);
}
else
{
this.pluginsError(Utils.getNotification(oData.ErrorCode));
}
}
}
require('App/Admin').reloadPluginList();
2014-08-21 23:08:34 +08:00
};
module.exports = PluginsAdminSetting;
2014-08-21 23:08:34 +08:00
2014-09-05 06:49:03 +08:00
}());