aboutsummaryrefslogtreecommitdiffstats
path: root/core/src/OC/plugins.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/OC/plugins.js')
-rw-r--r--core/src/OC/plugins.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/core/src/OC/plugins.js b/core/src/OC/plugins.js
new file mode 100644
index 00000000000..8212fc0b4ee
--- /dev/null
+++ b/core/src/OC/plugins.js
@@ -0,0 +1,70 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+export default {
+
+ /**
+ * @type {Array.<OC.Plugin>}
+ */
+ _plugins: {},
+
+ /**
+ * Register plugin
+ *
+ * @param {string} targetName app name / class name to hook into
+ * @param {OC.Plugin} plugin plugin
+ */
+ register(targetName, plugin) {
+ let 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(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} targetObject to be extended
+ * @param {object} [options] options
+ */
+ attach(targetName, targetObject, options) {
+ const plugins = this.getPlugins(targetName)
+ for (let 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} targetObject to be extended
+ * @param {object} [options] options
+ */
+ detach(targetName, targetObject, options) {
+ const plugins = this.getPlugins(targetName)
+ for (let i = 0; i < plugins.length; i++) {
+ if (plugins[i].detach) {
+ plugins[i].detach(targetObject, options)
+ }
+ }
+ },
+
+}