diff options
-rw-r--r-- | ishtar_common/static/js/ishtar.js | 41 | ||||
-rw-r--r-- | ishtar_common/templates/base.html | 2 | ||||
-rw-r--r-- | ishtar_common/templates/widgets/search_input.html | 6 | ||||
-rw-r--r-- | ishtar_common/urls.py | 2 | ||||
-rw-r--r-- | ishtar_common/views.py | 34 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 10 |
6 files changed, 74 insertions, 21 deletions
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index b9e9d6844..8d1c2ccc1 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -47,6 +47,7 @@ var debug = false; var datatables_i18n; var current_modal; var default_search_vector; +var pin_search_url; var datatables_default = { "processing": true, @@ -69,6 +70,7 @@ var datatables_static_default = { var activate_all_search_msg = "Searches in the shortcut menu deals with all items."; var activate_own_search_msg = "Searches in the shortcut menu deals with only your items."; var added_message = " items added."; +var search_pinned_msg = ""; var advanced_menu = false; var shortcut_menu_hide = false; @@ -372,6 +374,25 @@ $(document).ready(function(){ $("#id_search_vector").addClass('input-progress'); enable_save(); }); + + $("#pin-search-button").click(function(){ + if (!pin_search_url){ + return; + } + var url = pin_search_url.replace( + 'item', $(this).attr('data-item-type') + ); + var current_search = + $(this).parent().parent().children('input').prop("value"); + + ajax_post( + url, {'value': current_search}, "", + function(){ + display_info(search_pinned_msg); + } + ); + }); + $("#submit-search").click(function(){ $(".search_button").click(); }); @@ -898,22 +919,24 @@ var dt_qa_open = function (url){ return false; }; -var ajax_post = function(url, data, target, callback){ +var ajax_post = function(url, data, target, callback, error_callback){ $.ajax({ url : url, type : "POST", data : data, success : function(data) { close_wait(); - $(target).html(data); + if(target) $(target).html(data); if(callback) callback(); }, error : function(xhr,errmsg,err) { close_wait(); - $(target).html("<div class='alert-box alert'>Oops! We have encountered an error: " - + errmsg + "</div>"); + if (target) { + $(target).html("<div class='alert-box alert'>Oops! We have encountered an error: " + + errmsg + "</div>"); + } console.log(xhr.status + ": " + xhr.responseText); - if(callback) callback(); + if (error_callback) error_callback(); } }); @@ -923,13 +946,13 @@ var qa_action_register = function(url) { $('#qa-action').on('submit', function(event){ event.preventDefault(); + var fn = function(){ + $('#modal-dynamic-form').modal("show"); + } ; $('#modal-dynamic-form').modal("hide"); short_wait(); ajax_post( - url, $(this).serialize(), "#modal-dynamic-form", - function(){ - $('#modal-dynamic-form').modal("show"); - } + url, $(this).serialize(), "#modal-dynamic-form", fn, fn ); }); }; diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index a4d09c878..652df14b3 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -34,6 +34,7 @@ {% if DISPLAY_PIN_MENU %}var show_shortcut_menu = true;{% endif %} var alert_url = '{% url "alert-list" %}'; var get_file_url = '{% url "get-file-shortcut" %}'; + var pin_search_url = '{% url "pin-search" "item" %}'; var get_operation_url = '{% url "get-operation-shortcut" %}'; var get_contextrecord_url = '{% url "get-contextrecord-shortcut" %}'; var get_find_url = '{% url "get-find-shortcut" %}'; @@ -41,6 +42,7 @@ var activate_own_search_url = '{% url "activate-own-search" %}'; var activate_all_search_msg = "{% trans 'Searches in the shortcut menu deal with all items.' %}"; var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deal with only your items.' %}"; + var search_pinned_msg = "{% trans 'Search pinned' %}"; var added_message = "{% trans " items added." %}"; var YES = "{% trans 'yes' %}"; var NO = "{% trans 'no' %}"; diff --git a/ishtar_common/templates/widgets/search_input.html b/ishtar_common/templates/widgets/search_input.html index e63d067a9..3f7cdc17e 100644 --- a/ishtar_common/templates/widgets/search_input.html +++ b/ishtar_common/templates/widgets/search_input.html @@ -19,6 +19,12 @@ </span> <span class="input-group-text input-sep"> </span> + <span class="input-group-text input-link" + id="pin-search-button" + data-item-type="{{model}}" + title="{% trans 'Pin the current search' %}"> + <i class="fa fa-thumb-tack" aria-hidden="true"></i> + </span> <a class="input-group-text input-link async-link disabled" id="save-search-button" data-target="#modal-dynamic-form" diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 57241dd57..8d06b6862 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -162,6 +162,8 @@ urlpatterns += [ name='update-current-item'), url(r'pin/(?P<item_type>[a-z-]+)/(?P<pk>\d+)/$', views.update_current_item, name='pin'), + url(r'pin-search/(?P<item_type>[a-z-]+)/$', views.pin_search, + name='pin-search'), url(r'unpin/(?P<item_type>[a-z-]+)/$', views.unpin, name='unpin'), url(r'get-by-importer/(?P<slug>[\w-]+)/(?P<type>[a-z-]+)?$', views.get_by_importer, name='get-by-importer'), diff --git a/ishtar_common/views.py b/ishtar_common/views.py index e4b55cae2..6fce21953 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -369,33 +369,33 @@ def get_current_items(request): return currents -def unpin(request, item_type): +def unpin(request, item_type, cascade=False): if item_type not in CURRENT_ITEM_KEYS_DICT.keys(): logger.warning("unpin unknow type: {}".format(item_type)) return HttpResponse('nok') request.session['treatment'] = '' - if item_type == 'treatment': + if item_type == 'treatment' and not cascade: return HttpResponse('ok') request.session['treatmentfile'] = '' - if item_type == 'treatmentfile': + if item_type == 'treatmentfile' and not cascade: return HttpResponse('ok') request.session['find'] = '' - if item_type == 'find': + if item_type == 'find' and not cascade: return HttpResponse('ok') request.session['warehouse'] = '' - if item_type == 'warehouse': + if item_type == 'warehouse' and not cascade: return HttpResponse('ok') request.session['contextrecord'] = '' - if item_type == 'contextrecord': + if item_type == 'contextrecord' and not cascade: return HttpResponse('ok') request.session['site'] = '' - if item_type == 'site': + if item_type == 'site' and not cascade: return HttpResponse('ok') request.session['operation'] = '' - if item_type == 'operation': + if item_type == 'operation' and not cascade: return HttpResponse('ok') request.session['file'] = '' - if item_type == 'file': + if item_type == 'file' and not cascade: return HttpResponse('ok') @@ -455,6 +455,22 @@ def update_current_item(request, item_type=None, pk=None): return HttpResponse('ok') +def pin_search(request, item_type): + key = "pin-search-" + item_type + if not item_type or not (request.is_ajax() and request.method == 'POST'): + raise Http404 + if 'value' in request.POST: + request.session[key] = request.POST['value'] + else: + request.session[key] = request.POST['value'] + if not request.POST['value']: + # empty all + unpin(request, item_type, cascade=True) + else: + unpin(request, item_type) + return HttpResponse('ok') + + def get_by_importer(request, slug, data_type='json', full=False, force_own=False, **dct): q = models.ImporterType.objects.filter(slug=slug) diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index aa017c7ad..9df2277de 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -771,10 +771,14 @@ def _construct_query(relation_types, dct, or_reqs, and_reqs): def _manage_default_search(dct, request, model, default_name, my_base_request, my_relative_session_names): - # an item is selected in the default menu pinned_search = "" - if default_name in request.session and \ - request.session[default_name]: + pin_key = "pin-search-" + default_name + if pin_key in request.session and \ + request.session[pin_key]: # a search is pinned + pinned_search = request.session[pin_key] + dct = {'search_vector': request.session[pin_key]} + elif default_name in request.session and \ + request.session[default_name]: # an item is pinned value = request.session[default_name] if 'basket-' in value: try: |