Mercurial > hg > dml-open-vis
diff 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 |
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.00.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,142 @@ +"use strict"; + +App.module("GraphicsRenderingModule", function(GraphicsRenderingModule, App, Backbone, Marionette, $, _, Logger) { + + GraphicsRenderingModule.addInitializer(function(options){ + GraphicsRenderingModule.logger = Logger.get("GraphicsRenderingModule"); + + + GraphicsRenderingModule._formatNumberForTooltip = function(number) { + var nDigits = 2; + if (Math.abs(number) > 1000 || Math.floor(number) == number) { + nDigits = 0; + } else if (Math.abs(number) > 100) { + nDigits = 1; + } + return _.str.numberFormat(number, nDigits); + }, + + GraphicsRenderingModule.__handleVegaMouseEvent = function() { + + var pointerEventType = arguments[0].type; + + if (pointerEventType == "mouseover" || pointerEventType == "mouseout") { + var $vegaNode = $(arguments[0].target).closest("div"); + if (pointerEventType == "mouseover") { + $vegaNode.data("vegaHoveredItem", arguments[1]); + } else { + $vegaNode.removeData("vegaHoveredItem"); + } + } + + var data = null; + if (arguments[1] && arguments[1].datum) { + data = arguments[1].datum; + } + if (_.isObject(data) && data.tooltip) { + // FIXME TMP HACK FOR GEOGRPAPHY + App.TooltipModule.tooltipView.update(arguments[0], _.isArray(data.tooltip) ? data.tooltip[2] : data.tooltip, data); + } else if (_.isArray(data)) { + var tooltip = data[0]; + if (tooltip) { + var labelParts = []; + + if (data[0] == "tooltip_range") { + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[2])); + labelParts.push(" ... "); + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[3])); + labelParts.push(" → "); + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1]).replace("-", "−")); + } else if (data[0] == "tooltip_point") { + if (data[2] * 1 === data[2]) { + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[2])); + } else { + labelParts.push(data[2]); + } + labelParts.push(" → "); + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1])); + } else if (data[0] == "tooltip_value") { + labelParts.push(GraphicsRenderingModule._formatNumberForTooltip(data[1]).replace("-", "−")); + } + + // prefix + if (data[4]) { + labelParts.unshift(data[4]); + } + // suffix + if (data[5]) { + labelParts.push(data[5]); + } + + App.TooltipModule.tooltipView.update(arguments[0], labelParts.join(""), data); + } + } else { + App.TooltipModule.tooltipView.update(); + } + }, + + /** + * Draws a chart using vega, then executes callback when ready +// */ +// GraphicsRenderingModule.vega = function ($domNode, spec, renderer, callback) { +// var _this = this; +// vg.parse.spec(spec, function(chart) { chart({ +// el:$domNode.get(0), +// renderer: renderer ? renderer : "canvas", +// //hover: false +// }) +// .on('mouseover', GraphicsRenderingModule.__handleVegaMouseEvent) +// .on('mouseout', GraphicsRenderingModule.__handleVegaMouseEvent) +// .on('mousemove', GraphicsRenderingModule.__handleVegaMouseEvent) +// .update(); +// }); +// if (_.isFunction(callback)) { +// var vegaIsReadyTimeout = setTimeout(function() { +// if (_this.vegaIsReady($domNode)) { +// callback($domNode); +// clearTimeout(vegaIsReadyTimeout); +// } +// }, 50); +// } +// }; + GraphicsRenderingModule.vegaIsReady = function($domNode) { + return $domNode.hasClass('vega'); + }; + + GraphicsRenderingModule.vegaAsync = function ($domNode, spec, renderer, callback) { + var rand = Math.random(); + $domNode.data("vega-async-rand", rand); + var $tempNode = $("<div/>"); + setTimeout(function() { + vg.parse.spec(spec, function(chart) { + var vegaObj = chart({ + el:$tempNode.get(0), + renderer: App.options.vegaRenderer ? App.options.vegaRenderer : renderer, + //hover: false + }) + .on('mouseover', GraphicsRenderingModule.__handleVegaMouseEvent) + .on('mousemove', GraphicsRenderingModule.__handleVegaMouseEvent) + .on('mouseout', GraphicsRenderingModule.__handleVegaMouseEvent) + .update(); + var $vegaNode = $tempNode.children(0); + $vegaNode.data("vegaObj", vegaObj) + + //console.log("VEGA DATA", vg, vegaObj._model._data); + var vegaIsReadyInterval = setInterval(function() { + if ($domNode.data("vega-async-rand") !== rand) { + clearInterval(vegaIsReadyInterval); + return; + } + if (GraphicsRenderingModule.vegaIsReady($vegaNode)) { + $vegaNode.addClass("vic-vega") + $domNode.empty().append($vegaNode); + clearInterval(vegaIsReadyInterval); + } + }, 50); + }); + }, 10); + }; + + + }); +}, Logger);