rocketjob_mission_control 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,135 @@
1
+ /**
2
+ * microplugin.js
3
+ * Copyright (c) 2013 Brian Reavis & contributors
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
+ * file except in compliance with the License. You may obtain a copy of the License at:
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ * ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ *
14
+ * @author Brian Reavis <brian@thirdroute.com>
15
+ */
16
+
17
+ (function(root, factory) {
18
+ if (typeof define === 'function' && define.amd) {
19
+ define(factory);
20
+ } else if (typeof exports === 'object') {
21
+ module.exports = factory();
22
+ } else {
23
+ root.MicroPlugin = factory();
24
+ }
25
+ }(this, function() {
26
+ var MicroPlugin = {};
27
+
28
+ MicroPlugin.mixin = function(Interface) {
29
+ Interface.plugins = {};
30
+
31
+ /**
32
+ * Initializes the listed plugins (with options).
33
+ * Acceptable formats:
34
+ *
35
+ * List (without options):
36
+ * ['a', 'b', 'c']
37
+ *
38
+ * List (with options):
39
+ * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]
40
+ *
41
+ * Hash (with options):
42
+ * {'a': { ... }, 'b': { ... }, 'c': { ... }}
43
+ *
44
+ * @param {mixed} plugins
45
+ */
46
+ Interface.prototype.initializePlugins = function(plugins) {
47
+ var i, n, key;
48
+ var self = this;
49
+ var queue = [];
50
+
51
+ self.plugins = {
52
+ names : [],
53
+ settings : {},
54
+ requested : {},
55
+ loaded : {}
56
+ };
57
+
58
+ if (utils.isArray(plugins)) {
59
+ for (i = 0, n = plugins.length; i < n; i++) {
60
+ if (typeof plugins[i] === 'string') {
61
+ queue.push(plugins[i]);
62
+ } else {
63
+ self.plugins.settings[plugins[i].name] = plugins[i].options;
64
+ queue.push(plugins[i].name);
65
+ }
66
+ }
67
+ } else if (plugins) {
68
+ for (key in plugins) {
69
+ if (plugins.hasOwnProperty(key)) {
70
+ self.plugins.settings[key] = plugins[key];
71
+ queue.push(key);
72
+ }
73
+ }
74
+ }
75
+
76
+ while (queue.length) {
77
+ self.require(queue.shift());
78
+ }
79
+ };
80
+
81
+ Interface.prototype.loadPlugin = function(name) {
82
+ var self = this;
83
+ var plugins = self.plugins;
84
+ var plugin = Interface.plugins[name];
85
+
86
+ if (!Interface.plugins.hasOwnProperty(name)) {
87
+ throw new Error('Unable to find "' + name + '" plugin');
88
+ }
89
+
90
+ plugins.requested[name] = true;
91
+ plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);
92
+ plugins.names.push(name);
93
+ };
94
+
95
+ /**
96
+ * Initializes a plugin.
97
+ *
98
+ * @param {string} name
99
+ */
100
+ Interface.prototype.require = function(name) {
101
+ var self = this;
102
+ var plugins = self.plugins;
103
+
104
+ if (!self.plugins.loaded.hasOwnProperty(name)) {
105
+ if (plugins.requested[name]) {
106
+ throw new Error('Plugin has circular dependency ("' + name + '")');
107
+ }
108
+ self.loadPlugin(name);
109
+ }
110
+
111
+ return plugins.loaded[name];
112
+ };
113
+
114
+ /**
115
+ * Registers a plugin.
116
+ *
117
+ * @param {string} name
118
+ * @param {function} fn
119
+ */
120
+ Interface.define = function(name, fn) {
121
+ Interface.plugins[name] = {
122
+ 'name' : name,
123
+ 'fn' : fn
124
+ };
125
+ };
126
+ };
127
+
128
+ var utils = {
129
+ isArray: Array.isArray || function(vArg) {
130
+ return Object.prototype.toString.call(vArg) === '[object Array]';
131
+ }
132
+ };
133
+
134
+ return MicroPlugin;
135
+ }));