summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-23 16:28:29 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-23 16:57:27 +0100
commit6d265fdc8707a636f5faaf362b2e3df8c1cb1f5c (patch)
tree37e2e1fff05b0df048b9718bf72a89fba2c27b6b /ishtar_common
parentd78e35b13a6c311ad0465928d7a21c630a50bcf2 (diff)
downloadIshtar-6d265fdc8707a636f5faaf362b2e3df8c1cb1f5c.tar.bz2
Ishtar-6d265fdc8707a636f5faaf362b2e3df8c1cb1f5c.zip
Search result - export: export only selected
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/static/js/ishtar.js30
-rw-r--r--ishtar_common/templates/blocks/DataTables-content.html4
-rw-r--r--ishtar_common/templates/blocks/DataTables.html52
-rw-r--r--ishtar_common/views_item.py8
4 files changed, 90 insertions, 4 deletions
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index 03d62bac3..3b4aa7156 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -1127,6 +1127,36 @@ var qa_action_register = function(url, slug) {
});
};
+
+var update_export_urls = function(dt, sname, source, source_full, extra_sources, extra_tpl){
+ let rows = dt.rows( { selected: true } ).data();
+ let data = "selected_ids=";
+ for (k in rows){
+ if (!rows[k]['id']) continue;
+ if (k > 0) data += "-";
+ data += rows[k]['id'];
+ }
+ let csv_url = source + "csv?submited=1&" + data;
+ $("." + sname + "-csv").attr("href", csv_url);
+ let csv_full_url = source_full + "csv?submited=1&" + data;
+ $("." + sname + "-csv-full").attr("href", csv_full_url);
+
+ for (k in extra_sources){
+ let src = extra_sources[k];
+ let slug = src[0];
+ let name = src[1];
+ let extra_source = src[2];
+ $("." + slug + "-csv-full").attr("href", extra_source + "csv?submited=1&" + data);
+ }
+ for (k in extra_tpl){
+ let tpl = extra_tpl[k];
+ let slug = tpl[0];
+ let lnk = tpl[1];
+ $("." + slug + "-labels").attr("href", lnk + "?submited=1&" + data);
+ }
+ return false;
+};
+
var dt_single_enable_disable_submit_button = function(e, dt, type, indexes){
var rows = dt.rows( { selected: true } ).count();
if (rows == 1) {
diff --git a/ishtar_common/templates/blocks/DataTables-content.html b/ishtar_common/templates/blocks/DataTables-content.html
index 9de143cd4..832b60d22 100644
--- a/ishtar_common/templates/blocks/DataTables-content.html
+++ b/ishtar_common/templates/blocks/DataTables-content.html
@@ -54,6 +54,10 @@
{% endfor %}
</div>
</div>{% endif %}
+ <span class="selected-lines">
+ <span class="sl-whole">{% trans "whole table" %}</span>
+ <span class="sl-selected"><span class="sl-number"></span>&nbsp;{% trans "selected item(s)" %}</span>
+ </span>
</div>
</div>
diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html
index 9f0ab04ca..95ebbbc6b 100644
--- a/ishtar_common/templates/blocks/DataTables.html
+++ b/ishtar_common/templates/blocks/DataTables.html
@@ -167,6 +167,26 @@ update_submit_args = function(){
return false;
};
+update_select_args = function(dt){
+ let nb_row = dt.rows( { selected: true } ).count();
+ $(".sl-number").html(nb_row);
+ if (nb_row == 0){
+ $(".selected-lines .sl-whole").show();
+ $(".selected-lines .sl-selected").hide();
+ update_submit_args();
+ return;
+ }
+ $(".selected-lines .sl-selected").show();
+ $(".selected-lines .sl-whole").hide();
+ let extra_sources = [{% for slug, name, extra_source in extra_sources %}
+ ["{{slug}}", "{{name}}", "{{extra_source}}"]{% if not forloop.last %},{% endif %}
+ {% endfor %}];
+ let extra_tpl = [{% for template in current_model.label_templates %}
+ ["{{template.slug}}", "{{template.get_baselink_for_labels}}"]{% if not forloop.last %},{% endif %}
+ {% endfor %}];
+ update_export_urls(dt, "{{sname}}", "{{source}}", "{{source_full}}", extra_sources, extra_tpl);
+}
+
var current_source = "default";
jQuery(document).ready(function(){
@@ -284,11 +304,35 @@ jQuery(document).ready(function(){
datatable_{{sname}} = jQuery("#grid_{{name}}").DataTable(datatable_options);
{% if not multiple_select %}
- datatable_{{sname}}.on('select', dt_single_enable_disable_submit_button);
- datatable_{{sname}}.on('deselect', dt_single_enable_disable_submit_button);
+ datatable_{{sname}}.on(
+ 'select',
+ function(e, dt, type, indexes){
+ update_select_args(dt);
+ dt_single_enable_disable_submit_button(e, dt, type, indexes);
+ }
+ );
+ datatable_{{sname}}.on(
+ 'deselect',
+ function(e, dt, type, indexes){
+ update_select_args(dt);
+ dt_single_enable_disable_submit_button(e, dt, type, indexes);
+ }
+ );
{% else %}
- datatable_{{sname}}.on('select', dt_multi_enable_disable_submit_button);
- datatable_{{sname}}.on('deselect', dt_multi_enable_disable_submit_button);
+ datatable_{{sname}}.on(
+ 'select',
+ function(e, dt, type, indexes){
+ update_select_args(dt);
+ dt_multi_enable_disable_submit_button(e, dt, type, indexes);
+ }
+ );
+ datatable_{{sname}}.on(
+ 'deselect',
+ function(e, dt, type, indexes){
+ update_select_args(dt);
+ dt_multi_enable_disable_submit_button(e, dt, type, indexes);
+ }
+ );
{% endif %}
{% if external_sources %}{% for source_id, source_label, source_url in external_sources %}
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 9853e5410..ebe9ca07d 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1864,10 +1864,18 @@ def get_item(
except ValueError:
return HttpResponse("[]", content_type="text/plain")
+ selected_ids = request_items.get("selected_ids", None)
+ if selected_ids:
+ if "-" in selected_ids:
+ q = Q(pk__in=selected_ids.split("-"))
+ else:
+ q = Q(pk=selected_ids)
+ and_reqs.append(q)
for k in request_keys:
val = request_items.get(k)
if not val:
continue
+
req_keys = request_keys[k]
target = dct
if k in query_parameters: