From e4e7b911c585517254bf5d87c8adf2020c96c16a Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Thu, 25 Feb 2016 18:14:13 -0800 Subject: [PATCH] Fixing dashboard.html --- .../panoramix => assets/html}/dashboard.html | 25 +- .../panoramix => assets/html}/sql.html | 0 panoramix/assets/javascripts/dashboard.js | 154 +++++++ panoramix/assets/javascripts/explore.js | 233 ++++++++-- .../assets/javascripts/modules/panoramix.js | 429 +++--------------- panoramix/assets/visualizations/big_number.js | 2 + panoramix/assets/webpack.config.js | 4 +- panoramix/views.py | 4 +- 8 files changed, 428 insertions(+), 423 deletions(-) rename panoramix/{templates/panoramix => assets/html}/dashboard.html (87%) rename panoramix/{templates/panoramix => assets/html}/sql.html (100%) create mode 100644 panoramix/assets/javascripts/dashboard.js diff --git a/panoramix/templates/panoramix/dashboard.html b/panoramix/assets/html/dashboard.html similarity index 87% rename from panoramix/templates/panoramix/dashboard.html rename to panoramix/assets/html/dashboard.html index 93fb684991d26..7a3b7d02699d4 100644 --- a/panoramix/templates/panoramix/dashboard.html +++ b/panoramix/assets/html/dashboard.html @@ -1,17 +1,14 @@ -{% extends "panoramix/base.html" %} +{% extends "refactor/basic.html" %} {% block head_css %} {{ super() }} - {% for css in dashboard.css_files %} - - {% endfor %} - + {% endblock %} -{% block content_fluid %} +{% block body %}
@@ -32,6 +29,7 @@ {% endfor %}
+
{% endblock %} -{% block tail %} - {{ super() }} - {% for js in dashboard.js_files %} - - {% endfor %} - - - +{% block tail_js %} + {% endblock %} diff --git a/panoramix/templates/panoramix/sql.html b/panoramix/assets/html/sql.html similarity index 100% rename from panoramix/templates/panoramix/sql.html rename to panoramix/assets/html/sql.html diff --git a/panoramix/assets/javascripts/dashboard.js b/panoramix/assets/javascripts/dashboard.js new file mode 100644 index 0000000000000..7e68577f41d4f --- /dev/null +++ b/panoramix/assets/javascripts/dashboard.js @@ -0,0 +1,154 @@ +var $ = window.$ = require('jquery'); +var jQuery = window.jQuery = $; +var px = require('./modules/panoramix.js'); +var d3 = require('d3'); +require('bootstrap'); + +var ace = require('brace'); +require('brace/mode/css'); +require('brace/theme/crimson_editor'); + +require('select2'); +require('./../node_modules/gridster/dist/jquery.gridster.min.js'); + +var dashboard; + +var Dashboard = function(id){ + var dash = { + slices: [], + filters: {}, + id: id, + addFilter: function(slice_id, filters) { + this.filters[slice_id] = filters; + this.refreshExcept(slice_id); + }, + readFilters: function() { + // Returns a list of human readable active filters + return JSON.stringify(this.filters, null, 4); + }, + refreshExcept: function(slice_id) { + this.slices.forEach(function(slice){ + if(slice.data.slice_id != slice_id){ + slice.render(); + } + }); + }, + clearFilter: function(slice_id) { + delete this.filters[slice_id]; + this.refreshExcept(slice_id); + }, + getSlice: function(slice_id) { + for(var i=0; i load vis dependencies -> read data (from dynamic html) -> render slice // nb: to add a new vis, you must also add a Python fn in viz.py - +// // js var $ = window.$ = require('jquery'); var jQuery = window.jQuery = $; @@ -17,48 +17,203 @@ require('../vendor/select2.sortable.js'); // css require('../vendor/pygments.css'); require('../vendor/bootstrap-toggle/bootstrap-toggle.min.css'); +function initExploreView() { -// vis sources -var sourceMap = { - area: 'nvd3_vis.js', - bar: 'nvd3_vis.js', - bubble: 'nvd3_vis.js', - big_number: 'big_number.js', - compare: 'nvd3_vis.js', - dist_bar: 'nvd3_vis.js', - directed_force: 'directed_force.js', - filter_box: 'filter_box.js', - heatmap: 'heatmap.js', - iframe: 'iframe.js', - line: 'nvd3_vis.js', - markup: 'markup.js', - para: 'parallel_coordinates.js', - pie: 'nvd3_vis.js', - pivot_table: 'pivot_table.js', - sankey: 'sankey.js', - sunburst: 'sunburst.js', - table: 'table.js', - word_cloud: 'word_cloud.js', - world_map: 'world_map.js', -}; + function druidify(){ + $('div.alert').remove(); + history.pushState({}, document.title, slice.querystring()); + renderSlice(); + } -$(document).ready(function() { - px.initExploreView(); + function get_collapsed_fieldsets(){ + var collapsed_fieldsets = $("#collapsed_fieldsets").val(); - // Dynamically register this visualization - var visType = window.viz_type.value; - var visSource = sourceMap[visType]; + if (collapsed_fieldsets != undefined && collapsed_fieldsets != "") { + collapsed_fieldsets = collapsed_fieldsets.split('||'); + } + else { + collapsed_fieldsets = []; + } + return collapsed_fieldsets; + } + + function toggle_fieldset(legend, animation) { + var parent = legend.parent(); + var fieldset = parent.find(".legend_label").text(); + var collapsed_fieldsets = get_collapsed_fieldsets(); + + if (!parent.hasClass("collapsed")){ + if (animation) { + parent.find(".fieldset_content").slideUp(); + } + else { + parent.find(".fieldset_content").hide(); + } + + parent.addClass("collapsed"); + parent.find("span.collapser").text("[+]"); + var index = collapsed_fieldsets.indexOf(fieldset); + if (index === -1 && fieldset !== "" && fieldset !== undefined) { + collapsed_fieldsets.push(fieldset); + } + } else { + if (animation) { + parent.find(".fieldset_content").slideDown(); + } + else { + parent.find(".fieldset_content").show(); + } + parent.removeClass("collapsed"); + parent.find("span.collapser").text("[-]"); + + // removing from array, js is overcomplicated + var index = collapsed_fieldsets.indexOf(fieldset); + if (index !== -1) { + collapsed_fieldsets.splice(index, 1); + } + } + $("#collapsed_fieldsets").val(collapsed_fieldsets.join("||")); + } + + $('legend').click(function () { + toggle_fieldset($(this), true); + }); + + $('#shortner').click(function () { + $.ajax({ + type: "POST", + url: '/r/shortner/', + data: {'data': '/' + window.location.pathname + slice.querystring()}, + success: function(data) { + data += '   '; + $('#shortner').popover({content: data, placement: 'left', html: true, trigger: 'manual'}); + $('#shortner').popover('show'); + $('#close_shortner').click(function(){ + $('#shortner').popover('destroy'); + }); + }, + error: function() {alert("Error :(");}, + }); + }); + $("#viz_type").change(function() {$("#query").submit();}); + + var collapsed_fieldsets = get_collapsed_fieldsets(); + for(var i=0; i < collapsed_fieldsets.length; i++){ + toggle_fieldset($('legend:contains("' + collapsed_fieldsets[i] + '")'), false); + } + + $(".select2").select2({dropdownAutoWidth : true}); + $(".select2Sortable").select2({dropdownAutoWidth : true}); + $(".select2Sortable").select2Sortable({bindOrder: 'sortableStop'}); + $("form").show(); + $('[data-toggle="tooltip"]').tooltip(); + $(".ui-helper-hidden-accessible").remove(); // jQuery-ui 1.11+ creates a div for every tooltip + + function set_filters(){ + for (var i = 1; i < 10; i++){ + var eq = px.getParam("flt_eq_" + i); + if (eq != ''){ + add_filter(i); + } + } + } + set_filters(); + + function add_filter(i) { + var cp = $("#flt0").clone(); + $(cp).appendTo("#filters"); + $(cp).show(); + if (i != undefined){ + $(cp).find("#flt_eq_0").val(px.getParam("flt_eq_" + i)); + $(cp).find("#flt_op_0").val(px.getParam("flt_op_" + i)); + $(cp).find("#flt_col_0").val(px.getParam("flt_col_" + i)); + } + $(cp).find('select').select2(); + $(cp).find('.remove').click(function() { + $(this).parent().parent().remove(); + }); + } + + $(window).bind("popstate", function(event) { + // Browser back button + var returnLocation = history.location || document.location; + // Could do something more lightweight here, but we're not optimizing + // for the use of the back button anyways + returnLocation.reload(); + }); + + + $("#plus").click(add_filter); + $("#btn_save").click(function () { + var slice_name = prompt("Name your slice!"); + if (slice_name != "" && slice_name != null) { + $("#slice_name").val(slice_name); + prepForm(); + $("#action").val("save"); + $("#query").submit(); + } + }); + $("#btn_overwrite").click(function () { + var flag = confirm("Overwrite slice [" + $("#slice_name").val() + "] !?"); + if (flag) { + $("#action").val("overwrite"); + prepForm(); + $("#query").submit(); + } + }); - if (visSource) { - var visFactory = require('../visualizations/' + visSource); - if (typeof visFactory === 'function') { - // @TODO handle px.registerViz here instead of in each file? - px.registerViz(visType, visFactory); + $(".druidify").click(druidify); + + function create_choices(term, data) { + var filtered = $(data).filter(function() { + return this.text.localeCompare(term) === 0; + }); + if (filtered.length === 0) { + return {id: term, text: term}; } } - else { - console.error("require(", visType, ") failed."); + function initSelectionToValue(element, callback) { + callback({id: element.val(), text: element.val()}); + } + function list_data(arr) { + var obj = []; + for (var i=0; i' + ); + $("input[name='" + name +"']").select2({ + createSearchChoice: create_choices, + initSelection: initSelectionToValue, + dropdownAutoWidth : true, + multiple: false, + data: l, + }); + $(this).remove(); + }); +} + +$(document).ready(function() { + initExploreView(); + + // Dynamically register this visualization + var visType = window.viz_type.value; + px.registerViz(visType); + var data = $('.slice').data('slice'); var slice = px.Slice(data); @@ -71,9 +226,9 @@ $(document).ready(function() { // make checkbox inputs display as toggles $(':checkbox') - .addClass('pull-right') - .attr("data-onstyle", "default") - .bootstrapToggle({size: 'mini'}); + .addClass('pull-right') + .attr("data-onstyle", "default") + .bootstrapToggle({size: 'mini'}); $('div.toggle').addClass('pull-right'); }); diff --git a/panoramix/assets/javascripts/modules/panoramix.js b/panoramix/assets/javascripts/modules/panoramix.js index 6850fbdf268fc..38658363472f9 100644 --- a/panoramix/assets/javascripts/modules/panoramix.js +++ b/panoramix/assets/javascripts/modules/panoramix.js @@ -1,6 +1,30 @@ var $ = require('jquery'), jQuery = $; var d3 = require('d3'); +// vis sources +var sourceMap = { + area: 'nvd3_vis.js', + bar: 'nvd3_vis.js', + bubble: 'nvd3_vis.js', + big_number: 'big_number.js', + compare: 'nvd3_vis.js', + dist_bar: 'nvd3_vis.js', + directed_force: 'directed_force.js', + filter_box: 'filter_box.js', + heatmap: 'heatmap.js', + iframe: 'iframe.js', + line: 'nvd3_vis.js', + markup: 'markup.js', + para: 'parallel_coordinates.js', + pie: 'nvd3_vis.js', + pivot_table: 'pivot_table.js', + sankey: 'sankey.js', + sunburst: 'sunburst.js', + table: 'table.js', + word_cloud: 'word_cloud.js', + world_map: 'world_map.js', +}; + var color = function(){ // Color related utility functions go in this object var bnbColors = [ @@ -58,8 +82,8 @@ var px = (function() { function getParam(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } function UTC(dttm){ @@ -69,10 +93,10 @@ var px = (function() { [".%L", function(d) { return d.getMilliseconds(); }], // If there are millisections, show only them [":%S", function(d) { return d.getSeconds(); }], // If there are seconds, show only them ["%a %b %d, %I:%M %p", function(d) { return d.getMinutes()!=0; }], // If there are non-zero minutes, show Date, Hour:Minute [AM/PM] - ["%a %b %d, %I %p", function(d) { return d.getHours() != 0; }], // If there are hours that are multiples of 3, show date and AM/PM - ["%a %b %d, %Y", function(d) { return d.getDate() != 1; }], // If not the first of the month, do "month day, year." - ["%B %Y", function(d) { return d.getMonth() != 0 && d.getDate() == 1; }], // If the first of the month, do "month day, year." - ["%Y", function(d) { return true; }] // fall back on month, year + ["%a %b %d, %I %p", function(d) { return d.getHours() != 0; }], // If there are hours that are multiples of 3, show date and AM/PM + ["%a %b %d, %Y", function(d) { return d.getDate() != 1; }], // If not the first of the month, do "month day, year." + ["%B %Y", function(d) { return d.getMonth() != 0 && d.getDate() == 1; }], // If the first of the month, do "month day, year." + ["%Y", function(d) { return true; }] // fall back on month, year ]); function formatDate(dttm) { var d = UTC(new Date(dttm)); @@ -98,9 +122,9 @@ var px = (function() { var dttm = 0; var timer; var stopwatch = function () { - dttm += 10; - var num = dttm / 1000; - $('#timer').text(num.toFixed(2) + " sec"); + dttm += 10; + var num = dttm / 1000; + $('#timer').text(num.toFixed(2) + " sec"); } var qrystr = ''; var always = function(data) { @@ -139,7 +163,7 @@ var px = (function() { token.find("img.loading").hide() container.show(); if(data !== undefined) - $("#query_container").html(data.query); + $("#query_container").html(data.query); $('#timer').removeClass('btn-warning'); $('#timer').addClass('btn-success'); $('span.query').removeClass('disabled'); @@ -179,14 +203,14 @@ var px = (function() { timer = setInterval(stopwatch, 10); $('#timer').removeClass('btn-danger btn-success'); $('#timer').addClass('btn-warning'); - viz.render(); + this.viz.render(); }, resize: function() { token.find("img.loading").show(); container.hide(); container.html(''); - viz.render(); - viz.resize(); + this.viz.render(); + this.viz.resize(); }, addFilter: function(col, vals) { if(dashboard !== undefined) @@ -197,373 +221,56 @@ var px = (function() { delete dashboard.clearFilter(slice_id); }, }; - var viz = visualizations[data.form_data.viz_type](slice); - slice['viz'] = viz; + var visType = data.form_data.viz_type; + px.registerViz(visType); + slice['viz'] = visualizations[data.form_data.viz_type](slice); return slice; } - var Dashboard = function(id){ - var dash = { - slices: [], - filters: {}, - id: id, - addFilter: function(slice_id, filters) { - this.filters[slice_id] = filters; - this.refreshExcept(slice_id); - }, - readFilters: function() { - // Returns a list of human readable active filters - return JSON.stringify(this.filters, null, 4); - }, - refreshExcept: function(slice_id) { - this.slices.forEach(function(slice){ - if(slice.data.slice_id != slice_id){ - slice.render(); - } - }); - }, - clearFilter: function(slice_id) { - delete this.filters[slice_id]; - this.refreshExcept(slice_id); - }, - getSlice: function(slice_id) { - for(var i=0; i div").each(function() { - $(this).attr("id", function() {return "flt_" + i;}) - $(this).find("#flt_col_0") - .attr("id", function() {return "flt_col_" + i;}) - .attr("name", function() {return "flt_col_" + i;}); - $(this).find("#flt_op_0") - .attr("id", function() {return "flt_op_" + i;}) - .attr("name", function() {return "flt_op_" + i;}); - $(this).find("#flt_eq_0") - .attr("id", function() {return "flt_eq_" + i;}) - .attr("name", function() {return "flt_eq_" + i;}); - i++; - }); - } - function renderSlice(){ - prepForm(); - slice.render(); - } - function druidify(){ - $('div.alert').remove(); - history.pushState({}, document.title, slice.querystring()); - renderSlice(); - } - - function initExploreView() { - - function get_collapsed_fieldsets(){ - var collapsed_fieldsets = $("#collapsed_fieldsets").val(); - - if (collapsed_fieldsets != undefined && collapsed_fieldsets != "") { - collapsed_fieldsets = collapsed_fieldsets.split('||'); - } - else { - collapsed_fieldsets = []; - } - return collapsed_fieldsets; - } - - function toggle_fieldset(legend, animation) { - var parent = legend.parent(); - var fieldset = parent.find(".legend_label").text(); - var collapsed_fieldsets = get_collapsed_fieldsets(); - - if (!parent.hasClass("collapsed")){ - if (animation) { - parent.find(".fieldset_content").slideUp(); - } - else { - parent.find(".fieldset_content").hide(); - } - - parent.addClass("collapsed"); - parent.find("span.collapser").text("[+]"); - var index = collapsed_fieldsets.indexOf(fieldset); - if (index === -1 && fieldset !== "" && fieldset !== undefined) { - collapsed_fieldsets.push(fieldset); - } - } else { - if (animation) { - parent.find(".fieldset_content").slideDown(); - } - else { - parent.find(".fieldset_content").show(); - } - parent.removeClass("collapsed"); - parent.find("span.collapser").text("[-]"); - - // removing from array, js is overcomplicated - var index = collapsed_fieldsets.indexOf(fieldset); - if (index !== -1) { - collapsed_fieldsets.splice(index, 1); - } - } - $("#collapsed_fieldsets").val(collapsed_fieldsets.join("||")); - } + function registerViz(name) { + var visSource = sourceMap[name]; - $('legend').click(function () { - toggle_fieldset($(this), true); - }); - - $('#shortner').click(function () { - $.ajax({ - type: "POST", - url: '/r/shortner/', - data: {'data': '/' + window.location.pathname + slice.querystring()}, - success: function(data) { - data += '   '; - $('#shortner').popover({content: data, placement: 'left', html: true, trigger: 'manual'}); - $('#shortner').popover('show'); - $('#close_shortner').click(function(){ - $('#shortner').popover('destroy'); - }); - }, - error: function() {alert("Error :(");}, - }); - }); - $("#viz_type").change(function() {$("#query").submit();}); - - var collapsed_fieldsets = get_collapsed_fieldsets(); - for(var i=0; i < collapsed_fieldsets.length; i++){ - toggle_fieldset($('legend:contains("' + collapsed_fieldsets[i] + '")'), false); - } - - $(".select2").select2({dropdownAutoWidth : true}); - $(".select2Sortable").select2({dropdownAutoWidth : true}); - $(".select2Sortable").select2Sortable({bindOrder: 'sortableStop'}); - $("form").show(); - $('[data-toggle="tooltip"]').tooltip(); - $(".ui-helper-hidden-accessible").remove(); // jQuery-ui 1.11+ creates a div for every tooltip - - function set_filters(){ - for (var i = 1; i < 10; i++){ - var eq = getParam("flt_eq_" + i); - if (eq != ''){ - add_filter(i); - } + if (visSource) { + var visFactory = require('../../visualizations/' + visSource); + if (typeof visFactory === 'function') { + visualizations[name] = visFactory; } } - set_filters(); - - function add_filter(i) { - var cp = $("#flt0").clone(); - $(cp).appendTo("#filters"); - $(cp).show(); - if (i != undefined){ - $(cp).find("#flt_eq_0").val(getParam("flt_eq_" + i)); - $(cp).find("#flt_op_0").val(getParam("flt_op_" + i)); - $(cp).find("#flt_col_0").val(getParam("flt_col_" + i)); - } - $(cp).find('select').select2(); - $(cp).find('.remove').click(function() { - $(this).parent().parent().remove(); - }); + else { + console.error("require(", visType, ") failed."); } - - $(window).bind("popstate", function(event) { - // Browser back button - var returnLocation = history.location || document.location; - // Could do something more lightweight here, but we're not optimizing - // for the use of the back button anyways - returnLocation.reload(); - }); - - - $("#plus").click(add_filter); - $("#btn_save").click(function () { - var slice_name = prompt("Name your slice!"); - if (slice_name != "" && slice_name != null) { - $("#slice_name").val(slice_name); - prepForm(); - $("#action").val("save"); - $("#query").submit(); - } - }); - $("#btn_overwrite").click(function () { - var flag = confirm("Overwrite slice [" + $("#slice_name").val() + "] !?"); - if (flag) { - $("#action").val("overwrite"); - prepForm(); - $("#query").submit(); - } - }); - - $(".druidify").click(druidify); - - function create_choices(term, data) { - var filtered = $(data).filter(function() { - return this.text.localeCompare(term) === 0; - }); - if (filtered.length === 0) { - return {id: term, text: term}; - } - } - function initSelectionToValue(element, callback) { - callback({id: element.val(), text: element.val()}); - } - function list_data(arr) { - var obj = []; - for (var i=0; i' - ); - $("input[name='" + name +"']").select2({ - createSearchChoice: create_choices, - initSelection: initSelectionToValue, - dropdownAutoWidth : true, - multiple: false, - data: l, - }); - $(this).remove(); - }); } - - - function initDashboardView() { - var gridster = $(".gridster ul").gridster({ - widget_margins: [5, 5], - widget_base_dimensions: [100, 100], - draggable: { - handle: '.drag', - }, - resize: { - enabled: true, - stop: function(e, ui, element) { - var slice_data = $(element).data('slice'); - dashboard.getSlice(slice_data.slice_id).resize(); - } - }, - serialize_params: function(_w, wgd) { - return { - slice_id: $(_w).attr('slice_id'), - col: wgd.col, - row: wgd.row, - size_x: wgd.size_x, - size_y: wgd.size_y - }; - }, - }).data('gridster'); - $("div.gridster").css('visibility', 'visible'); - $("#savedash").click(function() { - var expanded_slices = {}; - $.each($(".slice_info"), function(i, d){ - var widget = $(this).parents('.widget'); - var slice_description = widget.find('.slice_description'); - if(slice_description.is(":visible")) - expanded_slices[$(d).attr('slice_id')] = true; - }); - var data = { - positions: gridster.serialize(), - css: editor.getValue(), - expanded_slices: expanded_slices, - }; - $.ajax({ - type: "POST", - url: '/panoramix/save_dash/' + dashboard.id + '/', - data: {'data': JSON.stringify(data)}, - success: function() {alert("Saved!")}, - error: function() {alert("Error :(")}, - }); - }); - - var editor = ace.edit("dash_css"); - editor.$blockScrolling = Infinity - - editor.setTheme("ace/theme/crimson_editor"); - editor.setOptions({ - minLines: 16, - maxLines: Infinity, - }); - editor.getSession().setMode("ace/mode/css"); - - $(".select2").select2({dropdownAutoWidth : true}); - $("#css_template").on("change", function() { - var css = $(this).find('option:selected').data('css'); - editor.setValue(css); - $('#dash_css').val(css); - $("#user_style").html(css); - }); - $('#filters').click( function(){ - alert(dashboard.readFilters()); - }); - $("a.closeslice").click(function() { - var li = $(this).parents("li"); - gridster.remove_widget(li); - }); - $(".slice_info").click(function(){ - var widget = $(this).parents('.widget'); - var slice_description = widget.find('.slice_description'); - slice_description.slideToggle(500, function(){ - widget.find('.refresh').click(); - }); - }); - $("table.slice_header").mouseover(function() { - $(this).find("td.icons nobr").show(); - }); - $("table.slice_header").mouseout(function() { - $(this).find("td.icons nobr").hide(); - }); - editor.on("change", function(){ - css = editor.getValue(); - $('#dash_css').val(css); - $("#user_style").html(css); + function prepForm(){ + var i = 1; + // Assigning the right id to form elements in filters + $("#filters > div").each(function() { + $(this).attr("id", function() {return "flt_" + i;}) + $(this).find("#flt_col_0") + .attr("id", function() {return "flt_col_" + i;}) + .attr("name", function() {return "flt_col_" + i;}); + $(this).find("#flt_op_0") + .attr("id", function() {return "flt_op_" + i;}) + .attr("name", function() {return "flt_op_" + i;}); + $(this).find("#flt_eq_0") + .attr("id", function() {return "flt_eq_" + i;}) + .attr("name", function() {return "flt_eq_" + i;}); + i++; }); } + function renderSlice(){ + prepForm(); + slice.render(); + } // Export public functions return { registerViz: registerViz, Slice: Slice, - Dashboard: Dashboard, - druidify: druidify, - initExploreView: initExploreView, - initDashboardView: initDashboardView, formatDate: formatDate, timeFormatFactory: timeFormatFactory, color: color(), renderSlice: renderSlice, + getParam: getParam, } })(); diff --git a/panoramix/assets/visualizations/big_number.js b/panoramix/assets/visualizations/big_number.js index 78850c9608216..8b0d9038003e0 100644 --- a/panoramix/assets/visualizations/big_number.js +++ b/panoramix/assets/visualizations/big_number.js @@ -4,6 +4,8 @@ var d3 = window.d3 || require('d3'); // CSS require('./big_number.css'); +var px = require('../javascripts/modules/panoramix.js'); + function bigNumberVis(slice) { var data_attribute = slice.data; var div = d3.select(slice.selector); diff --git a/panoramix/assets/webpack.config.js b/panoramix/assets/webpack.config.js index 5aff4c3797e8e..5a7a5d789e091 100644 --- a/panoramix/assets/webpack.config.js +++ b/panoramix/assets/webpack.config.js @@ -7,10 +7,10 @@ var BUILD_DIR = path.resolve(__dirname, './javascripts/dist'); // output var config = { // for now generate one compiled js file per entry point / html page entry: { - //dashboard: APP_DIR + '/javascripts/dist/dashboard.js', + dashboard: APP_DIR + '/javascripts/dashboard.js', explore: APP_DIR + '/javascripts/explore.js', - sql: APP_DIR + '/javascripts/sql.js', featured: APP_DIR + '/javascripts/featured.js', + sql: APP_DIR + '/javascripts/sql.js', }, output: { path: BUILD_DIR, diff --git a/panoramix/views.py b/panoramix/views.py index f55bc37888469..118eebac4d8f6 100644 --- a/panoramix/views.py +++ b/panoramix/views.py @@ -560,7 +560,7 @@ def dashboard(**kwargs): int(o['slice_id']):o for o in json.loads(dash.position_json)} return self.render_template( - "panoramix/dashboard.html", dashboard=dash, + "refactor/dashboard.html", dashboard=dash, templates=templates, pos_dict=pos_dict) @@ -575,7 +575,7 @@ def sql(self, database_id): table_name=request.args.get('table_name') return self.render_template( - "panoramix/sql.html", + "refactor/sql.html", tables=tables, table_name=table_name, db=mydb)