summaryrefslogtreecommitdiff
path: root/ishtar_common/static/js/ishtar.js
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/static/js/ishtar.js')
-rw-r--r--ishtar_common/static/js/ishtar.js279
1 files changed, 279 insertions, 0 deletions
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index 2527c1bd7..54823968c 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -1095,6 +1095,33 @@ var get_hover_div = function(table_cols, data){
return hover;
};
+var _gallery_submit_search = function(image_page, query_vars, name, source){
+ if (image_page) {
+ current_image_page = image_page;
+ } else {
+ current_image_page = 1;
+ }
+ $('.modal-progress').modal('show');
+ var data = search_get_query_data(query_vars, name);
+ var nb_select = jQuery("#id_" + name + "-length_image").val();
+ if (!nb_select) nb_select = 10;
+
+ var url = source + "json-image?length=" + nb_select + "&submited=1&" + data;
+ $.getJSON(url, function(data) {
+ var timestamp = Math.floor(Date.now() / 1000);
+ var gallery_id = "gallery-" + timestamp;
+ $("#tab-content-gallery-" + name).html(
+ render_gallery(data, name, nb_select, gallery_id));
+ $("#id_" + name + "-length_image").change(gallery_submit_search);
+ register_image_gallery(gallery_id);
+ $('.card[data-toggle="tooltip"]').tooltip();
+ if ($('.modal-progress').length > 0){
+ $('.modal-progress').modal('hide');
+ }
+ });
+ return false;
+}
+
var render_gallery = function(data_table, table_name, nb_select, gallery_id){
var html = '<div class="ishtar-gallery-wrapper container-fluid">';
html += render_paginate_select(table_name, 'image', nb_select);
@@ -1343,6 +1370,7 @@ var register_map = function(map_id, points){
var main_submit_search = function(){
if (current_tab == "table") datatable_submit_search();
if (current_tab == "gallery") gallery_submit_search();
+ if (current_tab == "stats") stats_submit_search();
if (current_tab == "map") map_submit_search();
};
@@ -1376,3 +1404,254 @@ var search_get_query_data = function(query_vars, table_name){
}
return data;
};
+
+var registered_stats = false;
+
+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);
+ }
+ );
+ $('#chart-img-display-' + name).click(function(){
+ $('#chart-img-' + name).hide();
+ $('#img-' + name).html(
+ $('<img/>').attr(
+ 'src', $('#chart-' + name).jqplotToImageStr({})
+ )
+ );
+ $('#chart-img-' + name).show('slow');
+ });
+};
+
+var _stats_submit_search = function(query_vars, name, source){
+ $('.modal-progress').modal('show');
+
+ var data = search_get_query_data(query_vars, name);
+ register_stats(query_vars, name, source);
+
+ var url = source + "json-stats?submited=1&" + data;
+ var modality_1 = $("#stats_modality_1-" + name).val();
+ if (modality_1) url += '&stats_modality_1=' + modality_1;
+ var modality_2 = $("#stats_modality_2-" + name).val();
+ if (modality_2) url += '&stats_modality_2=' + modality_2;
+ $.getJSON(url, function(data) {
+ var timestamp = Math.floor(Date.now() / 1000);
+ var stats_id = "stats-" + timestamp;
+ $("#tab-content-stats-" + name).html(
+ render_stats(data, name));
+ if ($('.modal-progress').length > 0){
+ $('.modal-progress').modal('hide');
+ }
+ });
+ return false;
+}
+
+var stats_showmarker = false;
+var stats_incompatible_modality = "This graph type accept only one modality.";
+var stats_current_graph;
+
+var _render_stats_table = function(stats_values, name){
+ var modality_1 = $("#stats_modality_1-" + name).val();
+ var modality_2 = $("#stats_modality_2-" + name).val();
+ var rows = new Array();
+
+ var current_row = new Array();
+ var html = "";
+ html += "<table class='table w-75 mt-4 pt-4 mx-auto'><thead>";
+ html += "<tr><th>";
+ var modality_1_lbl = $('#stats_modality_1-' + name + ' option:selected').text();
+ current_row.push(modality_1_lbl);
+ html += modality_1_lbl;
+ if (modality_2 && modality_2 != modality_1){
+ html += "</th><th>";
+ var modality_2_lbl = $('#stats_modality_2-' + name + ' option:selected').text();
+ html += modality_2_lbl;
+ current_row.push(modality_2_lbl);
+ }
+ html += "</th><th>";
+ var sum_lbl = $('#stats_sum-' + name + ' option:selected').text();
+ html += sum_lbl;
+ current_row.push(sum_lbl);
+ html += "</th></tr></thead><tbody>";
+ rows.push(current_row);
+
+ if (modality_2 && modality_2 != modality_1){
+ for (idx in stats_values){
+ var start_row = "";
+ row_content = "";
+ for (inner_idx in stats_values[idx][1]){
+ current_row = new Array();
+ var colspan = parseInt(inner_idx) + 1;
+ start_row = "<tr><td rowspan='" + colspan + "'>" + stats_values[idx][0] + "</td>";
+ current_row.push(stats_values[idx][0]);
+ if (inner_idx > 0) row_content += "<tr>";
+ row_content += "<td>" + stats_values[idx][1][inner_idx][0] + "</td>";
+ current_row.push(stats_values[idx][1][inner_idx][0]);
+ row_content += "<td>" + stats_values[idx][1][inner_idx][1] + "</td></tr>";
+ current_row.push(stats_values[idx][1][inner_idx][1]);
+ rows.push(current_row);
+ }
+ html += start_row + row_content;
+ }
+ } else {
+ for (idx in stats_values){
+ current_row = new Array();
+ html += "<tr><td>" + stats_values[idx][0] + "</td>";
+ current_row.push(stats_values[idx][0]);
+ html += "<td>" + stats_values[idx][1] + "</td></tr>";
+ current_row.push(stats_values[idx][1]);
+ rows.push(current_row);
+ }
+ }
+
+ html += "</tbody></table>";
+ $("#charts-" + name).hide();
+ $("#stats-table-content-" + name).html(html);
+ $("#stats-table-" + name).show();
+
+ var csv_content = "data:text/csv;charset=utf-8," + rows.map(e => e.join(",")).join("\n");
+ var encoded_uri = encodeURI(csv_content);
+ $("#stats-table-csv-" + name).attr("href", encoded_uri);
+ $("#stats-table-csv-" + name).attr("download", "ishtar-stats.csv");
+};
+
+var render_stats = function(stats_values, name){
+ var stats_type = $("#stats_renderer-" + name).val();
+
+ if (!stats_values || !stats_values['data']) return;
+ stats_values = stats_values['data'];
+
+ if (stats_current_graph){
+ stats_current_graph.destroy();
+ }
+ if (stats_type == "table"){
+ return _render_stats_table(stats_values, name);
+ }
+
+ $("#stats-table-" + name).hide();
+ $("#charts-" + name).show();
+ var modality_1 = $("#stats_modality_1-" + name).val();
+ var modality_2 = $("#stats_modality_2-" + name).val();
+
+ stats_xaxis = {
+ label: $('#stats_modality_1-' + name + ' option:selected').text()
+ };
+
+ var stats_help = $("#stats-zoom-help-" + name);
+
+ if (stats_type == "pie"){
+ stats_help.hide();
+ if (modality_2){
+ display_info(stats_incompatible_modality);
+ return;
+ }
+ } else {
+ stats_help.show();
+ var stats_xaxis_tickoptions;
+ if (modality_1 == "year"){
+ stats_xaxis_tickoptions = {formatString: "%d"};
+ } else {
+ stats_xaxis_tickoptions = {angle:-25};
+ }
+ stats_xaxis["tickOptions"] = stats_xaxis_tickoptions
+ }
+
+ var stats_showmarker = false;
+ if (stats_values.length < 25){
+ stats_showmarker = true;
+ }
+ var jqvalues = new Array();
+ var ticks = new Array();
+ var series = new Array();
+ var series_conf = new Array();
+ if (modality_2 && modality_2 != modality_1){
+ for (idx in stats_values){
+ ticks.push(stats_values[idx][0]);
+ var serie_values = stats_values[idx][1];
+ var current_serie_values = new Array();
+ for (inner_idx in serie_values){
+ var serie_value = serie_values[inner_idx][0];
+ if (series.indexOf(serie_value) == -1){
+ series.push(serie_value);
+ var fill_values = new Array();
+ if (idx > 0){ // put 0 for previous items
+ for (var fill_idx = 0 ; fill_idx < idx ; fill_idx++ ){
+ fill_values.push(0);
+ }
+ }
+ jqvalues.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);
+ }
+ // 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);
+ }
+ }
+ }
+ stats_xaxis['ticks'] = ticks;
+ } else {
+ jqvalues = [stats_values];
+ series.push("Total");
+ }
+ if (stats_type != "pie"){
+ stats_xaxis['renderer'] = $.jqplot.CategoryAxisRenderer;
+ stats_xaxis['labelRenderer'] = $.jqplot.CanvasAxisLabelRenderer;
+ stats_xaxis['tickRenderer'] = $.jqplot.CanvasAxisTickRenderer;
+ }
+
+ var stats_renderer;
+ if (stats_type == "bar"){
+ stats_renderer = $.jqplot.BarRenderer;
+ } else if (stats_type == "pie"){
+ stats_renderer = $.jqplot.PieRenderer;
+ }
+ for (idx in series){
+ var serie_conf = {
+ label: series[idx],
+ showmarker: stats_showmarker
+ };
+ if (stats_renderer){
+ serie_conf["renderer"] = stats_renderer;
+ }
+ serie_conf["rendererOptions"] = {
+ padding: 8, showDataLabels: true,
+ dataLabels: 'value',
+ fill: false, sliceMargin: 4
+ };
+ series_conf.push(serie_conf);
+ }
+
+ var stats_options = {
+ axes: {
+ xaxis: stats_xaxis,
+ yaxis: {
+ label: $('#stats_sum-' + name + ' option:selected').text(),
+ min: 0
+ }
+ },
+ highlighter: {
+ show: true,
+ tooltipAxes: 'y',
+ sizeAdjust: 7.5
+ },
+ series: series_conf,
+ legend: { show:true, location: 'e', placement: 'outside' }
+ };
+ if (stats_type != "pie"){
+ stats_options["cursor"] = {
+ show: true,
+ zoom: true,
+ showTooltip: false
+ }
+ }
+
+ stats_current_graph = $.jqplot('chart-' + name,
+ jqvalues, stats_options
+ );
+};