diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2019-01-31 18:30:52 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2019-02-01 07:58:07 +0100 |
commit | 3d1a3b66442698601597d4f777d47d5f0ea744c2 (patch) | |
tree | a44609185e85074414a60dfe62a0936d75adb600 /core/src | |
parent | 4846aea9517d1bda4293e3064179f777c1d07aa1 (diff) | |
download | nextcloud-server-3d1a3b66442698601597d4f777d47d5f0ea744c2.tar.gz nextcloud-server-3d1a3b66442698601597d4f777d47d5f0ea744c2.zip |
Move OC.Plugin to the server bundle
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/OC/index.js | 2 | ||||
-rw-r--r-- | core/src/OC/plugins.js | 89 |
2 files changed, 91 insertions, 0 deletions
diff --git a/core/src/OC/index.js b/core/src/OC/index.js index f79fd5755e6..9d416f687a2 100644 --- a/core/src/OC/index.js +++ b/core/src/OC/index.js @@ -27,6 +27,7 @@ import EventSource from './eventsource' import L10N from './l10n' import msg from './msg' import Notification from './notification' +import Plugins from './plugins' /** @namespace OC */ export default { @@ -38,4 +39,5 @@ export default { L10N, msg, Notification, + Plugins, } diff --git a/core/src/OC/plugins.js b/core/src/OC/plugins.js new file mode 100644 index 00000000000..dd25610c2db --- /dev/null +++ b/core/src/OC/plugins.js @@ -0,0 +1,89 @@ +/* + * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @namespace OC.Plugins + */ +export default { + + /** + * @type Array.<OC.Plugin> + */ + _plugins: {}, + + /** + * Register plugin + * + * @param {String} targetName app name / class name to hook into + * @param {OC.Plugin} plugin + */ + register: function (targetName, plugin) { + var plugins = this._plugins[targetName]; + if (!plugins) { + plugins = this._plugins[targetName] = []; + } + plugins.push(plugin); + }, + + /** + * Returns all plugin registered to the given target + * name / app name / class name. + * + * @param {String} targetName app name / class name to hook into + * @return {Array.<OC.Plugin>} array of plugins + */ + getPlugins: function (targetName) { + return this._plugins[targetName] || []; + }, + + /** + * Call attach() on all plugins registered to the given target name. + * + * @param {String} targetName app name / class name + * @param {Object} object to be extended + * @param {Object} [options] options + */ + attach: function (targetName, targetObject, options) { + var plugins = this.getPlugins(targetName); + for (var i = 0; i < plugins.length; i++) { + if (plugins[i].attach) { + plugins[i].attach(targetObject, options); + } + } + }, + + /** + * Call detach() on all plugins registered to the given target name. + * + * @param {String} targetName app name / class name + * @param {Object} object to be extended + * @param {Object} [options] options + */ + detach: function (targetName, targetObject, options) { + var plugins = this.getPlugins(targetName); + for (var i = 0; i < plugins.length; i++) { + if (plugins[i].detach) { + plugins[i].detach(targetObject, options); + } + } + } + +}
\ No newline at end of file |