snappymail/dev/Common/Plugins.jsx
2015-11-18 23:10:01 +03:00

107 lines
2.4 KiB
JavaScript

import {_} from 'common';
import Utils from 'Common/Utils';
import Globals from 'Common/Globals';
import Settings from 'Storage/Settings';
class Plugins
{
oSimpleHooks = {};
aUserViewModelsHooks = [];
aAdminViewModelsHooks = [];
constructor() {}
/**
* @param {string} name
* @param {Function} callback
*/
addHook(name, callback) {
if (Utils.isFunc(callback))
{
if (!Utils.isArray(this.oSimpleHooks[name]))
{
this.oSimpleHooks[name] = [];
}
this.oSimpleHooks[name].push(callback);
}
}
/**
* @param {string} name
* @param {Array=} args
*/
runHook(name, args = []) {
if (Utils.isArray(this.oSimpleHooks[name]))
{
_.each(this.oSimpleHooks[name], (callback) => {
callback.apply(null, args);
});
}
}
/**
* @param {string} name
* @return {?}
*/
mainSettingsGet(name) {
return Settings.settingsGet(name);
}
/**
* @param {Function} callback
* @param {string} action
* @param {Object=} parameters
* @param {?number=} timeout
*/
remoteRequest(callback, action, parameters, timeout) {
if (Globals.__APP__)
{
Globals.__APP__.remote().defaultRequest(callback, 'Plugin' + action, parameters, timeout);
}
}
/**
* @param {Function} SettingsViewModelClass
* @param {string} labelName
* @param {string} template
* @param {string} route
*/
addSettingsViewModel(SettingsViewModelClass, template, labelName, route) {
this.aUserViewModelsHooks.push([SettingsViewModelClass, template, labelName, route]);
}
/**
* @param {Function} SettingsViewModelClass
* @param {string} labelName
* @param {string} template
* @param {string} route
*/
addSettingsViewModelForAdmin(SettingsViewModelClass, template, labelName, route) {
this.aAdminViewModelsHooks.push([SettingsViewModelClass, template, labelName, route]);
}
/**
* @param {boolean} admin
*/
runSettingsViewModelHooks(admin) {
const Knoin = require('Knoin/Knoin');
_.each(admin ? this.aAdminViewModelsHooks : this.aUserViewModelsHooks, (view) => {
Knoin.addSettingsViewModel(view[0], view[1], view[2], view[3]);
});
}
/**
* @param {string} pluginSection
* @param {string} name
* @return {?}
*/
settingsGet(pluginSection, name) {
let plugins = Settings.settingsGet('Plugins');
plugins = plugins && !Utils.isUnd(plugins[pluginSection]) ? plugins[pluginSection] : null;
return plugins ? (Utils.isUnd(plugins[name]) ? null : plugins[name]) : null;
}
}
module.exports = new Plugins();