summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/static/js/ishtar.js41
-rw-r--r--ishtar_common/templates/base.html2
-rw-r--r--ishtar_common/templates/widgets/search_input.html6
-rw-r--r--ishtar_common/urls.py2
-rw-r--r--ishtar_common/views.py34
-rw-r--r--ishtar_common/views_item.py10
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: