diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-11-09 17:35:30 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-11-09 17:35:30 +0100 | 
| commit | 1410d3ecca9aa7aacfe7ea498508a7fccf70266a (patch) | |
| tree | a7c596683feaeff9a148259bd7b9519b09c8f2fb | |
| parent | db16b6a6f4d0c2105551b8da64f3793cbea17b7e (diff) | |
| download | Ishtar-1410d3ecca9aa7aacfe7ea498508a7fccf70266a.tar.bz2 Ishtar-1410d3ecca9aa7aacfe7ea498508a7fccf70266a.zip  | |
Pin searches on the search bar (refs #4308)
| -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:  | 
