comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:493bcb69166c
1 "use strict";
2
3 App.module("GraphicsRenderingModule", function(GraphicsRenderingModule, App, Backbone, Marionette, $, _, Logger) {
4
5 GraphicsRenderingModule.addInitializer(function(options){
6
7 GraphicsRenderingModule.RendererPrototypes = {};
8 GraphicsRenderingModule.renderers = {};
9
10 /**
11 * Registers a new renderer
12 */
13 GraphicsRenderingModule.registerRenderer = function(rendererDefinition) {
14 var RendererPrototype;
15 var inheritId = rendererDefinition.inherit ? rendererDefinition.inherit : "";
16 var id = rendererDefinition.id;
17 if (!id) {
18 throw _.str.sprintf("Renderer definition does not contain an id");
19 }
20 var rendererWithThisId = null;
21 try {
22 rendererWithThisId = GraphicsRenderingModule.getRendererById(id);
23 } catch (e) {
24 }
25 if (rendererWithThisId) {
26 throw _.str.sprintf("Renderer with id \"%s\" already exists", id);
27 }
28
29 var prototypeOptions = {};
30 var prototypeDefaultVegaConfig = {};
31 if (!inheritId) {
32 RendererPrototype = Marionette.Object;
33 } else {
34 try {
35 RendererPrototype = GraphicsRenderingModule.getRendererPrototypeById(inheritId);
36 var parentRenderer = GraphicsRenderingModule.getRendererById(inheritId);
37 prototypeOptions = parentRenderer.options;
38 prototypeDefaultVegaConfig = parentRenderer.defaultVegaConfig;
39 } catch (e) {
40 throw _.str.sprintf("Renderer with id \"%s\" could not be inherited from renderer with id \"%s\" (it does not exist)", id, inheritId);
41 }
42 }
43
44 var combinedOptions = rendererDefinition.options
45 ? _.defaults({}, rendererDefinition.options, prototypeOptions)
46 : _.clone(prototypeOptions);
47 var combinedDefaultVegaConfig = rendererDefinition.defaultVegaConfig
48 ? _.defaults({}, rendererDefinition.defaultVegaConfig, prototypeDefaultVegaConfig)
49 : _.clone(prototypeDefaultVegaConfig);
50
51 for (var key in rendererDefinition.options) {
52 if (rendererDefinition.options.hasOwnProperty(key) && rendererDefinition.options[key] === undefined) {
53 delete combinedOptions[key];
54 }
55 }
56 rendererDefinition.options = combinedOptions;
57
58 for (var key in rendererDefinition.defaultVegaConfig) {
59 if (rendererDefinition.defaultVegaConfig.hasOwnProperty(key) && rendererDefinition.defaultVegaConfig[key] === undefined) {
60 delete combinedDefaultVegaConfig[key];
61 }
62 }
63 rendererDefinition.defaultVegaConfig = combinedDefaultVegaConfig;
64
65 var Renderer = RendererPrototype.extend(rendererDefinition);
66 GraphicsRenderingModule.RendererPrototypes[id] = Renderer;
67 GraphicsRenderingModule.renderers[id] = new Renderer();
68 };
69
70 GraphicsRenderingModule.getRendererPrototypeById = function(id) {
71 var RendererPrototype = GraphicsRenderingModule.RendererPrototypes[id];
72 if (!RendererPrototype) {
73 throw _.str.sprintf("RendererPrototype with id \"%s\" not found.", id);
74 }
75 return RendererPrototype;
76 };
77
78 GraphicsRenderingModule.getRendererById = function(id) {
79 var renderer = GraphicsRenderingModule.renderers[id];
80 if (!renderer) {
81 throw _.str.sprintf("Renderer with id \"%s\" not found.", id);
82 }
83 return renderer;
84 };
85
86 GraphicsRenderingModule.render = function(id, $element, data, options) {
87 GraphicsRenderingModule.getRendererById(id).render($element, data, options);
88 };
89 });
90 }, Logger);