Mercurial > hg > dml-open-vis
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); |