diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-11-04 11:56:09 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:59 +0100 |
commit | de97b55bc330568ca68a50a252cccbb240480f9c (patch) | |
tree | ad1b58164c37a702a7a2acd21a57396609b46804 | |
parent | 697966da54cbfc76836abfba3816e3f4848fb53c (diff) | |
download | Ishtar-de97b55bc330568ca68a50a252cccbb240480f9c.tar.bz2 Ishtar-de97b55bc330568ca68a50a252cccbb240480f9c.zip |
Syndication - stats UI
-rw-r--r-- | ishtar_common/static/js/ishtar.js | 84 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables-stats-detail.html | 79 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables-stats.html | 85 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables.html | 16 |
4 files changed, 155 insertions, 109 deletions
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 8a8cbb8e9..b865c7153 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -1501,12 +1501,17 @@ var search_get_query_data = function(query_vars, table_name){ }; var registered_stats = false; +var extra_list = new Array(); +var sources = new Array(); var register_stats = function(query_vars, name, source){ if (registered_stats) return; registered_stats = true; - $("#stats-form-" + name + " select").on('change', function() { - _stats_submit_search(query_vars, name, source); + $("#stats-form-" + name + " select").on('change', + function() { + for (idx in extra_list){ + _stats_submit_search(query_vars, name, sources[idx], extra_list[idx]); + } } ); $('#chart-img-display-' + name).click(function(){ @@ -1520,11 +1525,12 @@ var register_stats = function(query_vars, name, source){ }); }; -var _stats_submit_search = function(query_vars, name, source){ +var _stats_submit_search = function(query_vars, name, source, extra){ + if (!extra) extra = ""; $('.modal-progress').modal('show'); var data = search_get_query_data(query_vars, name); - register_stats(query_vars, name, source); + register_stats(query_vars, name); var url = source + "json-stats?submited=1&" + data; var modality_1 = $("#stats_modality_1-" + name).val(); @@ -1537,7 +1543,8 @@ var _stats_submit_search = function(query_vars, name, source){ var timestamp = Math.floor(Date.now() / 1000); var stats_id = "stats-" + timestamp; $("#tab-content-stats-" + name).html( - render_stats(data, name)); + render_stats(data, name, extra) + ); if ($('.modal-progress').length > 0){ $('.modal-progress').modal('hide'); } @@ -1547,7 +1554,7 @@ var _stats_submit_search = function(query_vars, name, source){ var stats_showmarker = false; var stats_incompatible_modality = "This graph type accept only one modality."; -var stats_current_graph; +var stats_current_graph = new Array(); var _render_stats_empty = function(stats_values, name){ $("#charts-" + name).hide(); @@ -1563,7 +1570,7 @@ var _render_stats_too_many_values = function(name){ $("#stats-error-" + name).show(); } -var _render_stats_table = function(stats_values, name){ +var _render_stats_table = function(stats_values, name, extra){ var modality_1 = $("#stats_modality_1-" + name).val(); var modality_2 = $("#stats_modality_2-" + name).val(); var rows = new Array(); @@ -1625,21 +1632,23 @@ var _render_stats_table = function(stats_values, name){ } html += "</tbody></table>"; - $("#charts-" + name).hide(); - $("#stats-empty-" + name).hide(); - $("#stats-error-" + name).hide(); - $("#stats-table-content-" + name).html(html); - $("#stats-table-" + name).show(); + if (!extra) extra = "default"; + $("#charts-" + name + "-" + extra).hide(); + $("#stats-empty-" + name + "-" + extra).hide(); + $("#stats-error-" + name + "-" + extra).hide(); + $("#stats-table-content-" + name + "-" + extra).html(html); + $("#stats-table-" + name + "-" + extra).show(); var encoded_uri = encodeURI("data:text/csv;charset=utf-8,") + encodeURIComponent(Papa.unparse(rows)); - $("#stats-table-csv-" + name).attr("href", encoded_uri); - $("#stats-table-csv-" + name).attr("download", "ishtar-stats.csv"); + $("#stats-table-csv-" + name + "-" + extra).attr("href", encoded_uri); + $("#stats-table-csv-" + name + "-" + extra).attr("download", "ishtar-stats.csv"); }; var MAX_STATS_GRAPH_VALUES = 100; var MAX_STATS_GRAPH_MODALITY_VALUES = 100; +var jqvalues = new Array(); -var render_stats = function(stats_values, name){ +var render_stats = function(stats_values, name, extra){ var stats_type = $("#stats_renderer-" + name).val(); if (!stats_values || !stats_values['data'] @@ -1649,11 +1658,12 @@ var render_stats = function(stats_values, name){ stats_values = stats_values['data']; - if (stats_current_graph){ - stats_current_graph.destroy(); + if (!extra) extra = "default"; + if (stats_current_graph[extra]){ + stats_current_graph[extra].destroy(); } if (stats_type == "table"){ - return _render_stats_table(stats_values, name); + return _render_stats_table(stats_values, name, extra); } if (stats_values.length > MAX_STATS_GRAPH_VALUES){ @@ -1667,10 +1677,10 @@ var render_stats = function(stats_values, name){ } } - $("#stats-table-" + name).hide(); - $("#stats-empty-" + name).hide(); - $("#stats-error-" + name).hide(); - $("#charts-" + name).show(); + $("#stats-table-" + name + "-" + extra).hide(); + $("#stats-empty-" + name + "-" + extra).hide(); + $("#stats-error-" + name + "-" + extra).hide(); + $("#charts-" + name + "-" + extra).show(); var modality_1 = $("#stats_modality_1-" + name).val(); var modality_2 = $("#stats_modality_2-" + name).val(); stats_xaxis = { @@ -1700,7 +1710,7 @@ var render_stats = function(stats_values, name){ if (stats_values.length < 25){ stats_showmarker = true; } - var jqvalues = new Array(); + jqvalues[extra] = new Array(); var ticks = new Array(); var series = new Array(); var series_conf = new Array(); @@ -1722,16 +1732,16 @@ var render_stats = function(stats_values, name){ fill_values.push(0); } } - jqvalues.push(fill_values); + jqvalues[extra].push(fill_values); } current_serie_values.push(serie_value); var current_value = serie_values[inner_idx][1]; - jqvalues[series.indexOf(serie_value)].push(current_value); + jqvalues[extra][series.indexOf(serie_value)].push(current_value); } // put 0 for missing series for this item for (idx_serie in series){ if (current_serie_values.indexOf(series[idx_serie]) == -1){ - jqvalues[series.indexOf(series[idx_serie])].push(0); + jqvalues[extra][series.indexOf(series[idx_serie])].push(0); } } } @@ -1740,7 +1750,7 @@ var render_stats = function(stats_values, name){ for (idx in stats_values){ stats_values[idx][0] = text_truncate(stats_values[idx][0], 40); } - jqvalues = [stats_values]; + jqvalues[extra] = [stats_values]; series.push("Total"); if (stats_type != "pie"){ legend_conf = {}; @@ -1791,14 +1801,14 @@ var render_stats = function(stats_values, name){ }; if (stats_type != "pie"){ stats_options["cursor"] = { - show: true, - zoom: true, - showTooltip: false + show: true, + zoom: true, + showTooltip: false } } - - stats_current_graph = $.jqplot('chart-' + name, - jqvalues, stats_options + stats_current_graph[extra] = $.jqplot( + 'chart-' + name + "-" + extra, + jqvalues[extra], stats_options ); }; @@ -1901,4 +1911,12 @@ var inline_register_add_button = function(slug){ inline_total_forms.setAttribute('value', `${inline_form_num+1}`); } ); +}; + +var redraw_plots = function(name, key){ + if (stats_current_graph && stats_current_graph[key]){ + $('#chart-' + name + "-" + key).height($('#charts-' + name + "-" + key).height()*0.96 - 100); + $('#chart-' + name + "-" + key).width($('#charts-' + name + "-" + key).width()* 0.96); + stats_current_graph[key].replot({resetAxes: true}); + } };
\ No newline at end of file diff --git a/ishtar_common/templates/blocks/DataTables-stats-detail.html b/ishtar_common/templates/blocks/DataTables-stats-detail.html new file mode 100644 index 000000000..9dcb04ae4 --- /dev/null +++ b/ishtar_common/templates/blocks/DataTables-stats-detail.html @@ -0,0 +1,79 @@ +{% load i18n %} +<div class="sources sources-{{extra}}"> + <div id="charts-{{stats_name}}-{{extra}}"> + <div id="chart-{{stats_name}}-{{extra}}-wrapper" class="chart-wrapper"> + <div id="chart-{{stats_name}}-{{extra}}" class="chart-content"></div> + <div class="resize-handler"></div> + </div> + <hr/> + <p class='alert alert-info' id="stats-zoom-help-{{stats_name}}-{{extra}}" style="z-index:-1"> + <i class="fa fa-info-circle" aria-hidden="true"></i> + {% trans 'Draw rectangle on the graph to zoom. Double-click to reinitialize.' %} + </p> + <div class='form chart-img-form'> + <div class="text-center"> + <button id="chart-img-display-{{stats_name}}-{{extra}}" + type='button' class='btn btn-secondary'> + {% trans "Display as an image" %} + </button> + </div> + <br> + <div id="chart-img-{{stats_name}}-{{extra}}" class='chart-img'> + <div class="card"> + <div id="img-{{stats_name}}-{{extra}}" + class="card-img-top text-center ml-3 mt-3"></div> + <div class="card-body"> + <div class='alert alert-info'> + <i class="fa fa-info-circle" aria-hidden="true"></i> + {% trans 'Right-click on this image to save it.' %} + </div> + </div> + </div> + </div> + </div> + </div> + <div id="stats-table-{{stats_name}}-{{extra}}"> + <div id="stats-table-content-{{stats_name}}-{{extra}}"></div> + <hr> + <div class="text-center"> + <a id="stats-table-csv-{{stats_name}}-{{extra}}" href="#" + type='button' class='btn btn-secondary'> + {% trans "Export as CSV" %} + </a> + </div> + </div> + <div id="stats-empty-{{stats_name}}-{{extra}}"> + <p class="alert alert-info" > + <i class="fa fa-info-circle" aria-hidden="true"></i> + {% trans "No data" %} + </p> + </div> + <div id="stats-error-{{stats_name}}-{{extra}}"> + <div class="alert alert-info"> + <i class="fa fa-info-circle" aria-hidden="true"></i> + {% trans "Too many values for the selected modalities, graph cannot be displayed. You can: " %} + <ul> + <li>{% trans 'Select "table" type.'%}</li> + <li>{% trans 'Refine the search to limit the results.'%}</li> + </ul> + </div> + </div> +</div> + +<script language="javascript" type="text/javascript"> +jQuery(document).ready(function(){ + $("#chart-{{stats_name}}-wrapper-{{extra}}").resizable({ + handleSelector: ".resize-handler", + onDragStart: function (e, $el, opt) { + $("#chart-{{stats_name}}-{{extra}}-wrapper").addClass('chart-resize'); + $("#chart-{{stats_name}}-{{extra}}").hide(); + }, + onDragEnd: function (e, $el, opt) { + $("#chart-{{stats_name}}-{{extra}}-wrapper").removeClass('chart-resize'); + $("#chart-{{stats_name}}-{{extra}}").show(); + stats_current_graph.replot( { resetAxes: true } ); + } + }); + } +); +</script> diff --git a/ishtar_common/templates/blocks/DataTables-stats.html b/ishtar_common/templates/blocks/DataTables-stats.html index 342051d19..aae2bb91f 100644 --- a/ishtar_common/templates/blocks/DataTables-stats.html +++ b/ishtar_common/templates/blocks/DataTables-stats.html @@ -36,80 +36,13 @@ </p> </div> <hr/> - <div id="charts-{{name}}"> - <div id="chart-{{name}}-wrapper" class="chart-wrapper"> - <div id="chart-{{name}}" class="chart-content"></div> - <div class="resize-handler"></div> - </div> - <hr/> - <p class='alert alert-info' id="stats-zoom-help-{{name}}" style="z-index:-1"> - <i class="fa fa-info-circle" aria-hidden="true"></i> - {% trans 'Draw rectangle on the graph to zoom. Double-click to reinitialize.' %} - </p> - <div class='form chart-img-form'> - <div class="text-center"> - <button id="chart-img-display-{{name}}" - type='button' class='btn btn-secondary'> - {% trans "Display as an image" %} - </button> - </div> - <br> - <div id="chart-img-{{name}}" class='chart-img'> - <div class="card"> - <div id="img-{{name}}" - class="card-img-top text-center ml-3 mt-3"></div> - <div class="card-body"> - <div class='alert alert-info'> - <i class="fa fa-info-circle" aria-hidden="true"></i> - {% trans 'Right-click on this image to save it.' %} - </div> - </div> - </div> - </div> - </div> - </div> - <div id="stats-table-{{name}}"> - <div id="stats-table-content-{{name}}"></div> - <hr> - <div class="text-center"> - <a id="stats-table-csv-{{name}}" href="#" - type='button' class='btn btn-secondary'> - {% trans "Export as CSV" %} - </a> - </div> - </div> - <div id="stats-empty-{{name}}"> - <p class="alert alert-info" > - <i class="fa fa-info-circle" aria-hidden="true"></i> - {% trans "No data" %} - </p> - </div> - <div id="stats-error-{{name}}"> - <div class="alert alert-info"> - <i class="fa fa-info-circle" aria-hidden="true"></i> - {% trans "Too many values for the selected modalities, graph cannot be displayed. You can: " %} - <ul> - <li>{% trans 'Select "table" type.'%}</li> - <li>{% trans 'Refine the search to limit the results.'%}</li> - </ul> - </div> - </div> -</div> -<script language="javascript" type="text/javascript"> -jQuery(document).ready(function(){ - $("#chart-{{name}}-wrapper").resizable({ - handleSelector: ".resize-handler", - onDragStart: function (e, $el, opt) { - $("#chart-{{name}}-wrapper").addClass('chart-resize'); - $("#chart-{{name}}").hide(); - }, - onDragEnd: function (e, $el, opt) { - $("#chart-{{name}}-wrapper").removeClass('chart-resize'); - $("#chart-{{name}}").show(); - stats_current_graph.replot( { resetAxes: true } ); - } - }); - } -); -</script>
\ No newline at end of file + {% with stats_name=name %}{% with extra="default" %} + {% include "blocks/DataTables-stats-detail.html" %} + {% endwith %}{% endwith %} + {% if external_sources %}{% for source_id, source_label, source_url in external_sources %} + {% with stats_name=name %}{% with extra=source_id %} + {% include "blocks/DataTables-stats-detail.html" %} + {% endwith %}{% endwith %} + {% endfor %}{% endif %} +</div> diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html index 3d1b817a8..199cd3af2 100644 --- a/ishtar_common/templates/blocks/DataTables.html +++ b/ishtar_common/templates/blocks/DataTables.html @@ -94,7 +94,21 @@ map_submit_search = function(){ return _map_submit_search(query_vars, "{{name}}", "{{source}}"); }; {% endif %} + +extra_list = [ + "default"{% for source_id, source_label, source_url in external_sources %}, +"{{source_id}}"{% endfor %} +]; + +sources = [ + "{{source}}"{% for source_id, source_label, source_url in external_sources %}, + "{{source_url}}"{% endfor %} +]; + stats_submit_search = function(){ + {% if external_sources %}{% for source_id, source_label, source_url in external_sources %} + _stats_submit_search(query_vars, "{{name}}", "{{source_url}}", "{{source_id}}"); + {% endfor %}{% endif %} return _stats_submit_search(query_vars, "{{name}}", "{{source}}"); }; @@ -157,6 +171,7 @@ jQuery(document).ready(function(){ function(){ $(".sources").hide(); $(".sources-default").show(); + redraw_plots("{{name}}", "default"); } ); {% for source_id, source_label, source_url in external_sources %} @@ -164,6 +179,7 @@ jQuery(document).ready(function(){ function(){ $(".sources").hide(); $(".sources-{{source_id}}").show(); + redraw_plots("{{name}}", "{{source_id}}"); } ); {% endfor %} |