syntax errors free
[fnpeditor.git] / runner.js
diff --git a/runner.js b/runner.js
new file mode 100644 (file)
index 0000000..e03d577
--- /dev/null
+++ b/runner.js
@@ -0,0 +1,68 @@
+var Runner = function($, _, app) {\r
+\r
+    function getModuleInstance(moduleName) {\r
+        var module = moduleInstances[moduleName] = (moduleInstances[moduleName] || app.modules[moduleName](new Sandbox(moduleName)));\r
+        return module;\r
+    }\r
+\r
+    var bootstrappedData = {},\r
+        options = {},\r
+        moduleInstances = {},\r
+        eventListeners = [];\r
+        \r
+    _.each(_.keys(app.modules || {}), function(moduleName) {\r
+        if(_.contains(app.permissions[moduleName] || [], 'handleEvents')) {\r
+            eventListeners.push(moduleName)\r
+        }\r
+    });\r
+\r
+    \r
+        \r
+    var Sandbox = function(moduleName) {\r
+        this.$ = $;\r
+        this._ = _;\r
+        \r
+        this.getBootstrappedData = function() {\r
+            return bootstrappedData[moduleName];\r
+        }\r
+        \r
+        this.getTemplate = function(templateName) {\r
+            return _.template($('[data-template-name="' + moduleName + '.' + templateName + '"]').html().trim());\r
+        }\r
+        \r
+        this.publish = function(eventName) {\r
+            var eventArgs = Array.prototype.slice.call(arguments, 1)\r
+            _.each(eventListeners, function(listenerModuleName) {\r
+                var listener = moduleInstances[listenerModuleName];\r
+                if(listener) {\r
+                    listener.handleEvent(moduleName, eventName, eventArgs);\r
+                }\r
+            });\r
+        }\r
+        \r
+        var permissions = app.permissions[moduleName];\r
+        \r
+        this.getModule = _.contains(permissions, 'getModule') ? function(requestedModuleName) {\r
+            return getModuleInstance(requestedModuleName);\r
+        } : undefined;\r
+        \r
+        this.getDOM = _.contains(permissions, 'getDOM') ? function() {\r
+            return $(options.rootSelector);\r
+        } : undefined;\r
+        \r
+    };\r
+    \r
+    \r
+    this.setBootstrappedData = function(moduleName, data) {\r
+        bootstrappedData[moduleName] = data;\r
+    };\r
+    \r
+    this.start = function(_options) {\r
+        options = _.extend({\r
+            rootSelector: 'body'\r
+        }, _options);\r
+        app.initModules.forEach(function(moduleName) {\r
+            getModuleInstance(moduleName).start();\r
+        });\r
+    }\r
+};
\ No newline at end of file