comparison src/DML/MainVisBundle/Resources/assets/marionette/modules/GraphicsRenderingModule/GraphicsRenderingModule.00.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 GraphicsRenderingModule.logger = Logger.get("GraphicsRenderingModule");
7
8
9 GraphicsRenderingModule._formatNumberForTooltip = function(number) {
10 var nDigits = 2;
11 if (Math.abs(number) > 1000 || Math.floor(number) == number) {
12 nDigits = 0;
13 } else if (Math.abs(number) > 100) {
14 nDigits = 1;
15 }
16 return _.str.numberFormat(number, nDigits);
17 },
18
19 GraphicsRenderingModule.__handleVegaMouseEvent = function() {
20
21 var pointerEventType = arguments[0].type;
22
23 if (pointerEventType == "mouseover" || pointerEventType == "mouseout") {
24 var $vegaNode = $(arguments[0].target).closest("div");
25 if (pointerEventType == "mouseover") {
26 $vegaNode.data("vegaHoveredItem", arguments[1]);
27 } else {
28 $vegaNode.removeData("vegaHoveredItem");
29 }
30 }
31
32 var data = null;
33 if (arguments[1] && arguments[1].datum) {
34 data = arguments[1].datum;
35 }
36 if (_.isObject(data) && data.tooltip) {
37 // FIXME TMP HACK FOR GEOGRPAPHY
38 App.TooltipModule.tooltipView.update(arguments[0], _.isArray(data.tooltip) ? data.tooltip[2] : data.tooltip, data);
39 } else if (_.isArray(data)) {
40 var tooltip = data[0];
41 if (tooltip) {
42 var labelParts = [];
43
44 if (data[0] == "tooltip_range") {
45 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[2]));
46 labelParts.push(" ... ");
47 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[3]));
48 labelParts.push(" → ");
49 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1]).replace("-", "−"));
50 } else if (data[0] == "tooltip_point") {
51 if (data[2] * 1 === data[2]) {
52 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[2]));
53 } else {
54 labelParts.push(data[2]);
55 }
56 labelParts.push(" → ");
57 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1]));
58 } else if (data[0] == "tooltip_value") {
59 labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1]).replace("-", "−"));
60 }
61
62 // prefix
63 if (data[4]) {
64 labelParts.unshift(data[4]);
65 }
66 // suffix
67 if (data[5]) {
68 labelParts.push(data[5]);
69 }
70
71 App.TooltipModule.tooltipView.update(arguments[0], labelParts.join(""), data);
72 }
73 } else {
74 App.TooltipModule.tooltipView.update();
75 }
76 },
77
78 /**
79 * Draws a chart using vega, then executes callback when ready
80 // */
81 // GraphicsRenderingModule.vega = function ($domNode, spec, renderer, callback) {
82 // var _this = this;
83 // vg.parse.spec(spec, function(chart) { chart({
84 // el:$domNode.get(0),
85 // renderer: renderer ? renderer : "canvas",
86 // //hover: false
87 // })
88 // .on('mouseover', GraphicsRenderingModule.__handleVegaMouseEvent)
89 // .on('mouseout', GraphicsRenderingModule.__handleVegaMouseEvent)
90 // .on('mousemove', GraphicsRenderingModule.__handleVegaMouseEvent)
91 // .update();
92 // });
93 // if (_.isFunction(callback)) {
94 // var vegaIsReadyTimeout = setTimeout(function() {
95 // if (_this.vegaIsReady($domNode)) {
96 // callback($domNode);
97 // clearTimeout(vegaIsReadyTimeout);
98 // }
99 // }, 50);
100 // }
101 // };
102 GraphicsRenderingModule.vegaIsReady = function($domNode) {
103 return $domNode.hasClass('vega');
104 };
105
106 GraphicsRenderingModule.vegaAsync = function ($domNode, spec, renderer, callback) {
107 var rand = Math.random();
108 $domNode.data("vega-async-rand", rand);
109 var $tempNode = $("<div/>");
110 setTimeout(function() {
111 vg.parse.spec(spec, function(chart) {
112 var vegaObj = chart({
113 el:$tempNode.get(0),
114 renderer: App.options.vegaRenderer ? App.options.vegaRenderer : renderer,
115 //hover: false
116 })
117 .on('mouseover', GraphicsRenderingModule.__handleVegaMouseEvent)
118 .on('mousemove', GraphicsRenderingModule.__handleVegaMouseEvent)
119 .on('mouseout', GraphicsRenderingModule.__handleVegaMouseEvent)
120 .update();
121 var $vegaNode = $tempNode.children(0);
122 $vegaNode.data("vegaObj", vegaObj)
123
124 //console.log("VEGA DATA", vg, vegaObj._model._data);
125 var vegaIsReadyInterval = setInterval(function() {
126 if ($domNode.data("vega-async-rand") !== rand) {
127 clearInterval(vegaIsReadyInterval);
128 return;
129 }
130 if (GraphicsRenderingModule.vegaIsReady($vegaNode)) {
131 $vegaNode.addClass("vic-vega")
132 $domNode.empty().append($vegaNode);
133 clearInterval(vegaIsReadyInterval);
134 }
135 }, 50);
136 });
137 }, 10);
138 };
139
140
141 });
142 }, Logger);