diff src/DML/MainVisBundle/Resources/assets/marionette/modules/GraphicsRenderingModule/GraphicsRenderingModule.10-Renderer.js @ 0:493bcb69166c

added public content
author Daniel Wolff
date Tue, 09 Feb 2016 20:54:02 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/DML/MainVisBundle/Resources/assets/marionette/modules/GraphicsRenderingModule/GraphicsRenderingModule.10-Renderer.js	Tue Feb 09 20:54:02 2016 +0100
@@ -0,0 +1,90 @@
+"use strict";
+
+App.module("GraphicsRenderingModule", function(GraphicsRenderingModule, App, Backbone, Marionette, $, _, Logger) {
+
+    GraphicsRenderingModule.addInitializer(function(options){
+
+        GraphicsRenderingModule.RendererPrototypes = {};
+        GraphicsRenderingModule.renderers = {};
+
+        /**
+         * Registers a new renderer
+         */
+        GraphicsRenderingModule.registerRenderer = function(rendererDefinition) {
+            var RendererPrototype;
+            var inheritId = rendererDefinition.inherit ? rendererDefinition.inherit : "";
+            var id = rendererDefinition.id;
+            if (!id) {
+                throw _.str.sprintf("Renderer definition does not contain an id");
+            }
+            var rendererWithThisId = null;
+            try {
+                rendererWithThisId = GraphicsRenderingModule.getRendererById(id);
+            } catch (e) {
+            }
+            if (rendererWithThisId) {
+                throw _.str.sprintf("Renderer with id \"%s\" already exists", id);
+            }
+
+            var prototypeOptions = {};
+            var prototypeDefaultVegaConfig = {};
+            if (!inheritId) {
+                RendererPrototype = Marionette.Object;
+            } else {
+                try {
+                    RendererPrototype = GraphicsRenderingModule.getRendererPrototypeById(inheritId);
+                    var parentRenderer = GraphicsRenderingModule.getRendererById(inheritId);
+                    prototypeOptions = parentRenderer.options;
+                    prototypeDefaultVegaConfig = parentRenderer.defaultVegaConfig;
+                } catch (e) {
+                    throw _.str.sprintf("Renderer with id \"%s\" could not be inherited from renderer with id \"%s\" (it does not exist)", id, inheritId);
+                }
+            }
+
+            var combinedOptions = rendererDefinition.options
+                ? _.defaults({}, rendererDefinition.options, prototypeOptions)
+                : _.clone(prototypeOptions);
+            var combinedDefaultVegaConfig = rendererDefinition.defaultVegaConfig
+                ? _.defaults({}, rendererDefinition.defaultVegaConfig, prototypeDefaultVegaConfig)
+                        : _.clone(prototypeDefaultVegaConfig);
+
+            for (var key in rendererDefinition.options) {
+                if (rendererDefinition.options.hasOwnProperty(key) && rendererDefinition.options[key] === undefined) {
+                    delete combinedOptions[key];
+                }
+            }
+            rendererDefinition.options = combinedOptions;
+
+            for (var key in rendererDefinition.defaultVegaConfig) {
+                if (rendererDefinition.defaultVegaConfig.hasOwnProperty(key) && rendererDefinition.defaultVegaConfig[key] === undefined) {
+                    delete combinedDefaultVegaConfig[key];
+                }
+            }
+            rendererDefinition.defaultVegaConfig = combinedDefaultVegaConfig;
+
+            var Renderer = RendererPrototype.extend(rendererDefinition);
+            GraphicsRenderingModule.RendererPrototypes[id] = Renderer;
+            GraphicsRenderingModule.renderers[id] = new Renderer();
+        };
+
+        GraphicsRenderingModule.getRendererPrototypeById = function(id) {
+            var RendererPrototype = GraphicsRenderingModule.RendererPrototypes[id];
+            if (!RendererPrototype) {
+                throw _.str.sprintf("RendererPrototype with id \"%s\" not found.", id);
+            }
+            return RendererPrototype;
+        };
+
+        GraphicsRenderingModule.getRendererById = function(id) {
+            var renderer = GraphicsRenderingModule.renderers[id];
+            if (!renderer) {
+                throw _.str.sprintf("Renderer with id \"%s\" not found.", id);
+            }
+            return renderer;
+        };
+
+        GraphicsRenderingModule.render = function(id, $element, data, options) {
+            GraphicsRenderingModule.getRendererById(id).render($element, data, options);
+        };
+    });
+}, Logger);