summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2019-01-31 18:30:52 +0100
committerChristoph Wurst <christoph@winzerhof-wurst.at>2019-02-01 07:58:07 +0100
commit3d1a3b66442698601597d4f777d47d5f0ea744c2 (patch)
treea44609185e85074414a60dfe62a0936d75adb600 /core/src
parent4846aea9517d1bda4293e3064179f777c1d07aa1 (diff)
downloadnextcloud-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.js2
-rw-r--r--core/src/OC/plugins.js89
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