ソースを参照

Add re-usable plugin iterator functions

Kevin van Zonneveld 9 年 前
コミット
30ea13a40d
2 ファイル変更30 行追加11 行削除
  1. 27 0
      src/core/Core.js
  2. 3 11
      src/plugins/Plugin.js

+ 27 - 0
src/core/Core.js

@@ -52,6 +52,33 @@ export default class Core {
     return this
   }
 
+/**
+ * Find one Plugin by name
+ *
+ * @param string name description
+ */
+  getPlugin (name) {
+    let foundPlugin = false
+    this.core.iteratePlugins(plugin => {
+      if (plugin.constructor.name === name) {
+        foundPlugin = plugin
+        return false
+      }
+    })
+    return foundPlugin
+  }
+
+/**
+ * Iterate through all `use`d plugins
+ *
+ * @param function method description
+ */
+  iteratePlugins (method) {
+    Object.keys(this.plugins).forEach(pluginType => {
+      this.plugins[pluginType].forEach(method)
+    })
+  }
+
 /**
  * Sets plugin’s progress, like for uploads
  *

+ 3 - 11
src/plugins/Plugin.js

@@ -50,18 +50,10 @@ export default class Plugin {
     } else {
       this.core.log('plugin is a target')
 
-      let pluginTarget
+      let targetPlugin = this.core.getPlugin(target.name)
+      targetPlugin.prepareTarget(callerPlugin)
 
-      Object.keys(this.core.plugins).forEach(pluginType => {
-        const plugins = this.core.plugins[pluginType]
-        plugins.forEach(plugin => {
-          if (plugin.constructor.name === target.name) {
-            pluginTarget = plugin.prepareTarget(callerPlugin)
-          }
-        })
-      })
-
-      return pluginTarget
+      return targetPlugin
     }
   }