| @@ -7,8 +7,10 @@ | ||
| 7 | 7 | |
| 8 | 8 | (function($) { |
| 9 | 9 | var gv; |
| 10 | 10 | var all_charts, objects; |
| 11 | + // so that we know which charts belong to our library. | |
| 12 | + var rendered_charts = []; | |
| 11 | 13 | |
| 12 | 14 | function renderChart(id) { |
| 13 | 15 | renderSpecificChart(id, all_charts[id]); |
| 14 | 16 | } |
| @@ -18,8 +20,9 @@ | ||
| 18 | 20 | |
| 19 | 21 | if(chart.library !== 'google'){ |
| 20 | 22 | return; |
| 21 | 23 | } |
| 24 | + rendered_charts[id] = 'yes'; | |
| 22 | 25 | |
| 23 | 26 | series = chart.series; |
| 24 | 27 | data = chart.data; |
| 25 | 28 | settings = chart.settings; |
| @@ -131,8 +134,9 @@ | ||
| 131 | 134 | case 'area': |
| 132 | 135 | case 'scatter': |
| 133 | 136 | case 'candlestick': |
| 134 | 137 | case 'column': |
| 138 | + case 'combo': | |
| 135 | 139 | axis = settings.hAxis; |
| 136 | 140 | break; |
| 137 | 141 | case 'bar': |
| 138 | 142 | axis = settings.vAxis; |
| @@ -209,12 +213,19 @@ | ||
| 209 | 213 | } |
| 210 | 214 | } else if (chart.type === 'pie' && settings.format && settings.format !== '') { |
| 211 | 215 | format_data(id, table, 'number', settings.format, 1); |
| 212 | 216 | } |
| 217 | + | |
| 218 | + | |
| 219 | + if(settings.hAxis) { | |
| 220 | + format_data(id, table, series[0].type, settings.hAxis.format, 0); | |
| 221 | + } | |
| 222 | + | |
| 213 | 223 | override(settings); |
| 214 | 224 | |
| 215 | 225 | gv.events.addListener(render, 'ready', function () { |
| 216 | 226 | var arr = id.split('-'); |
| 227 | + __visualizer_chart_images[ arr[0] + '-' + arr[1] ] = ''; | |
| 217 | 228 | try{ |
| 218 | 229 | var img = render.getImageURI(); |
| 219 | 230 | __visualizer_chart_images[ arr[0] + '-' + arr[1] ] = img; |
| 220 | 231 | $('body').trigger('visualizer:render:chart', {id: arr[1], image: img}); |
| @@ -222,8 +233,10 @@ | ||
| 222 | 233 | console.warn('render.getImageURI not defined for ' + arr[0] + '-' + arr[1]); |
| 223 | 234 | } |
| 224 | 235 | }); |
| 225 | 236 | |
| 237 | + $('body').trigger('visualizer:chart:settings:extend', {id: id, chart: chart, settings: settings, data: table}); | |
| 238 | + | |
| 226 | 239 | render.draw(table, settings); |
| 227 | 240 | } |
| 228 | 241 | |
| 229 | 242 | function format_data(id, table, type, format, index) { |
| @@ -288,9 +301,9 @@ | ||
| 288 | 301 | |
| 289 | 302 | resizeHiddenContainers(true); |
| 290 | 303 | }); |
| 291 | 304 | |
| 292 | - $(window).load(function(){ | |
| 305 | + $(window).on('load', function(){ | |
| 293 | 306 | resizeHiddenContainers(true); |
| 294 | 307 | }); |
| 295 | 308 | |
| 296 | 309 | function resizeHiddenContainers(everytime){ |
| @@ -319,10 +332,46 @@ | ||
| 319 | 332 | }); |
| 320 | 333 | } |
| 321 | 334 | |
| 322 | 335 | $('body').on('visualizer:render:chart:start', function(event, v){ |
| 336 | + var $chart_types = ['corechart', 'geochart', 'gauge', 'table', 'timeline']; | |
| 337 | + if(v.is_front == true){ // jshint ignore:line | |
| 338 | + // check what all chart types to load. | |
| 339 | + $chart_types = []; | |
| 340 | + $.each(v.charts, function(i, c){ | |
| 341 | + var $type = c.type; | |
| 342 | + switch($type){ | |
| 343 | + case 'bar': | |
| 344 | + case 'column': | |
| 345 | + case 'line': | |
| 346 | + case 'area': | |
| 347 | + case 'stepped area': | |
| 348 | + case 'bubble': | |
| 349 | + case 'pie': | |
| 350 | + case 'donut': | |
| 351 | + case 'combo': | |
| 352 | + case 'candlestick': | |
| 353 | + case 'histogram': | |
| 354 | + case 'scatter': | |
| 355 | + $type = 'corechart'; | |
| 356 | + break; | |
| 357 | + case 'geo': | |
| 358 | + $type = 'geochart'; | |
| 359 | + break; | |
| 360 | + case 'dataTable': | |
| 361 | + case 'polarArea': | |
| 362 | + case 'radar': | |
| 363 | + $type = null; | |
| 364 | + break; | |
| 365 | + } | |
| 366 | + if($type != null){ | |
| 367 | + $chart_types.push($type); | |
| 368 | + } | |
| 369 | + }); | |
| 370 | + } | |
| 371 | + | |
| 323 | 372 | objects = {}; |
| 324 | - google.charts.load("current", {packages: ["corechart", "geochart", "gauge", "table", "timeline"], mapsApiKey: v.map_api_key, 'language' : v.language}); | |
| 373 | + google.charts.load("current", {packages: $chart_types, mapsApiKey: v.map_api_key, 'language' : v.language}); | |
| 325 | 374 | google.charts.setOnLoadCallback(function() { |
| 326 | 375 | gv = google.visualization; |
| 327 | 376 | all_charts = v.charts; |
| 328 | 377 | render(); |
| @@ -332,7 +381,27 @@ | ||
| 332 | 381 | $('body').on('visualizer:render:specificchart:start', function(event, v){ |
| 333 | 382 | objects = {}; |
| 334 | 383 | gv = google.visualization; |
| 335 | 384 | renderSpecificChart(v.id, v.chart); |
| 385 | + }); | |
| 386 | + | |
| 387 | + // front end actions | |
| 388 | + $('body').on('visualizer:action:specificchart', function(event, v){ | |
| 389 | + switch(v.action){ | |
| 390 | + case 'print': | |
| 391 | + var id = v.id; | |
| 392 | + if(typeof rendered_charts[id] === 'undefined'){ | |
| 393 | + return; | |
| 394 | + } | |
| 395 | + var arr = id.split('-'); | |
| 396 | + var img = __visualizer_chart_images[ arr[0] + '-' + arr[1] ]; | |
| 397 | + // for charts that have no rendered image defined, we print the data instead. | |
| 398 | + var html = v.data; | |
| 399 | + if(img !== ''){ | |
| 400 | + html = "<html><body><img src='" + img + "' /></body></html>"; | |
| 401 | + } | |
| 402 | + $('body').trigger('visualizer:action:specificchart:defaultprint', {data: html}); | |
| 403 | + break; | |
| 404 | + } | |
| 336 | 405 | }); |
| 337 | 406 | |
| 338 | 407 | })(jQuery); |