diff options
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 |
commit | 6d265fdc8707a636f5faaf362b2e3df8c1cb1f5c (patch) | |
tree | 37e2e1fff05b0df048b9718bf72a89fba2c27b6b /ishtar_common | |
parent | d78e35b13a6c311ad0465928d7a21c630a50bcf2 (diff) | |
download | Ishtar-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.js | 30 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables-content.html | 4 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables.html | 52 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 8 |
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> {% 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: |