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