diff --git a/panoramix/static/panoramix.js b/panoramix/static/panoramix.js index 0eeedc539..cadcc31ab 100644 --- a/panoramix/static/panoramix.js +++ b/panoramix/static/panoramix.js @@ -1,3 +1,25 @@ +var px = (function() { + + var visualizations = []; + + function registerWidget(name, initializer) { + visualizations[name] = initializer; + } + + function makeNullWidget() { + return { + render: function() {}, + resize: function() {}, + }; + } + + function initializeWidget(data) { + var name = data['viz_name']; + var initializer = visualizations[name]; + var widget = initializer ? initializer(data) : makeNullWidget(); + return widget; + } + function initializeDatasourceView() { function getParam(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); @@ -127,8 +149,9 @@ function initializeDashboardView(dashboard_id) { }, resize: { enabled: true, - stop: function(e, ui, _widget) { - _widget.find("a.refresh").click(); + stop: function(e, ui, element) { + var widget = $(element).data('widget'); + widget.resize(); } }, serialize_params: function(_w, wgd) { @@ -171,3 +194,15 @@ function initializeDashboardView(dashboard_id) { $("#user_style").html(css); }); } + + // Export public functions + + return { + registerWidget: registerWidget, + initializeWidget: initializeWidget, + initializeDatasourceView: initializeDatasourceView, + initializeDashboardView: initializeDashboardView, + } + +})(); + diff --git a/panoramix/static/widgets/viz_bignumber.js b/panoramix/static/widgets/viz_bignumber.js index f405ca9f7..b59a1cd19 100644 --- a/panoramix/static/widgets/viz_bignumber.js +++ b/panoramix/static/widgets/viz_bignumber.js @@ -1,6 +1,10 @@ -function viz_bignumber(token, json_callback) { - var div = d3.select('#' + token); - var render = function() { +px.registerWidget('big_number', function(data_attribute) { + + var token_name = data_attribute['token']; + var json_callback = data_attribute['json_endpoint']; + var div = d3.select('#' + token_name); + + function render() { d3.json(json_callback, function(error, payload){ json = payload.data; div.html(""); @@ -134,6 +138,10 @@ function viz_bignumber(token, json_callback) { }); }); }; - render(); - $(div).parent().find("a.refresh").click(render); -} + + return { + render: render, + resize: render, + } + +}); diff --git a/panoramix/static/widgets/viz_nvd3.js b/panoramix/static/widgets/viz_nvd3.js index b5b2556c7..52bed8c67 100644 --- a/panoramix/static/widgets/viz_nvd3.js +++ b/panoramix/static/widgets/viz_nvd3.js @@ -1,4 +1,8 @@ -function viz_nvd3(token_name, json_callback) { +function viz_nvd3(data_attribute) { + + var token_name = data_attribute['token']; + var json_callback = data_attribute['json_endpoint']; + function UTC(dttm){ return v = new Date(dttm.getUTCFullYear(), dttm.getUTCMonth(), dttm.getUTCDate(), dttm.getUTCHours(), dttm.getUTCMinutes(), dttm.getUTCSeconds()); } @@ -138,6 +142,22 @@ function viz_nvd3(token_name, json_callback) { chart.html(err); }); }; - refresh(); - jtoken.parent().find("a.refresh").click(refresh); + + return { + render: refresh, + resize: refresh, + }; + } + +[ + 'area', + 'bubble', + 'column', + 'compare', + 'dist_bar', + 'line', + 'pie', +].forEach(function(name) { + px.registerWidget(name, viz_nvd3); +}); diff --git a/panoramix/static/widgets/viz_wordcloud.js b/panoramix/static/widgets/viz_wordcloud.js index 1464816ac..3e7c07e81 100644 --- a/panoramix/static/widgets/viz_wordcloud.js +++ b/panoramix/static/widgets/viz_wordcloud.js @@ -1,5 +1,9 @@ -function viz_wordcloud(token, json_callback) { - var token = d3.select('#' + token); +px.registerWidget('word_cloud', function(data_attribute) { + + var token_name = data_attribute['token']; + var json_callback = data_attribute['json_endpoint']; + var token = d3.select('#' + token_name); + function refresh() { d3.json(json_callback, function(error, json) { var data = json.data; @@ -60,7 +64,10 @@ function viz_wordcloud(token, json_callback) { } }); } - refresh(); - jtoken = $(token); - jtoken.parent().find("a.refresh").click(refresh); -} + + return { + render: refresh, + resize: refresh, + }; + +}); diff --git a/panoramix/templates/panoramix/dashboard.html b/panoramix/templates/panoramix/dashboard.html index 050bdac69..d0164859a 100644 --- a/panoramix/templates/panoramix/dashboard.html +++ b/panoramix/templates/panoramix/dashboard.html @@ -76,6 +76,8 @@ body {