diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-24 16:13:16 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-24 16:48:04 +0200 |
commit | f60470064e73bf874c96db8f4217c4c8ba603c39 (patch) | |
tree | 354a5f8d9b9c2b226c7fae104a4f799d6a8fceef /ishtar_common/views.py | |
parent | df6ea17f4b8bb1d45fe480044af80bd19742bf80 (diff) | |
download | Ishtar-f60470064e73bf874c96db8f4217c4c8ba603c39.tar.bz2 Ishtar-f60470064e73bf874c96db8f4217c4c8ba603c39.zip |
WIP: ajaxify shortcut menu - 3
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 27b192e74..67b883447 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -63,7 +63,8 @@ from archaeological_operations.forms import DashboardForm as DashboardFormOpe from archaeological_files.forms import DashboardForm as DashboardFormFile from ishtar_common.forms import FinalForm, FinalDeleteForm -from ishtar_common.utils import get_random_item_image_link, shortify +from ishtar_common.widgets import JQueryAutoComplete +from ishtar_common.utils import get_random_item_image_link from ishtar_common import forms_common as forms from ishtar_common import wizards from ishtar_common.models import HistoryError, PRIVATE_FIELDS, \ @@ -199,6 +200,16 @@ def get_autocomplete_generic(model, extra={'available': True}): return func +def activate_all_search(request): + request.session['SHORTCUT_SEARCH'] = 'all' + return HttpResponse('OK', mimetype='text/plain') + + +def activate_own_search(request): + request.session['SHORTCUT_SEARCH'] = 'own' + return HttpResponse('OK', mimetype='text/plain') + + def shortcut_menu(request): profile = get_current_profile() CURRENT_ITEMS = [] @@ -209,36 +220,19 @@ def shortcut_menu(request): CURRENT_ITEMS.append((_(u"Context record"), ContextRecord)) if profile.find: CURRENT_ITEMS.append((_(u"Find"), Find)) - dct = {'current_menu': []} - current_selected_item = None + dct = {'current_menu': [], 'menu': [], + 'SHORTCUT_SEARCH': request.session['SHORTCUT_SEARCH'] + if 'SHORTCUT_SEARCH' in request.session else 'own'} + for lbl, model in CURRENT_ITEMS: - new_selected_item = None model_name = model.SLUG - cls = '' current = model_name in request.session and request.session[model_name] - items = [] - for item in model.get_owns(request.user, - menu_filtr=current_selected_item): - pk = unicode(item.pk) - if item.IS_BASKET: - pk = "basket-" + pk - selected = pk == current - if selected: - cls = item.get_short_menu_class() - new_selected_item = item - items.append((pk, shortify(unicode(item), 60), - selected, item.get_short_menu_class())) - # selected is not in owns - add it to the list - if not new_selected_item and current: - try: - item = model.objects.get(pk=int(current)) - new_selected_item = item - items.append((item.pk, shortify(unicode(item), 60), - True, item.get_short_menu_class())) - except (model.DoesNotExist, ValueError): - pass - dct['current_menu'].append((lbl, model_name, cls, items)) - current_selected_item = new_selected_item + + dct['menu'].append((lbl, model_name, current or 0, JQueryAutoComplete( + reverse('get-' + model.SLUG + '-shortcut'), + model).render( + model.SLUG + '-shortcut', value=current, + attrs={'id': 'current_' + model.SLUG}))) return render_to_response('ishtar/blocks/shortcut_menu.html', dct, context_instance=RequestContext(request)) @@ -281,6 +275,7 @@ def update_current_item(request, item_type=None, pk=None): request.session[item_type] = request.POST['value'] else: request.session[item_type] = str(pk) + request.session['SHORTCUT_SEARCH'] = 'all' currents = get_current_items(request) # reinit when descending item are not relevant @@ -507,6 +502,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[], break # max right reach if force_own: own = True + if full == 'shortcut' and 'SHORTCUT_SEARCH' in request.session and \ + request.session['SHORTCUT_SEARCH'] == 'own': + own = True EMPTY = '' if 'type' in dct: data_type = dct.pop('type') @@ -535,6 +533,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[], request_items = request.method == 'POST' and request.POST \ or request.GET dct = base_request.copy() + if full == 'shortcut': + dct['cached_label__icontains'] = request.GET.get('term', None) and_reqs, or_reqs = [], [] try: old = 'old' in request_items and int(request_items['old']) @@ -568,7 +568,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], q = Q(**{req_key: val}) reqs = reqs | q and_reqs.append(reqs) - if 'submited' not in request_items: + if 'submited' not in request_items and full != 'shortcut': # default search # an item is selected in the default menu if default_name in request.session and \ @@ -782,6 +782,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[], pass start = (page_nb - 1) * row_nb end = page_nb * row_nb + if full == 'shortcut': + start = 0 + end = 20 items_nb = items.count() if manual_sort_key: items = items.all() @@ -896,13 +899,18 @@ def get_item(model, func_name, default_name, extra_request_keys=[], if hasattr(model, 'COL_LINK') and k in model.COL_LINK: value = link_ext_template.format(value, value) res[k] = value + if full == 'shortcut': + res['value'] = res.pop('cached_label') rows.append(res) - data = json.dumps({ - "records": items_nb, - "rows": rows, - "page": page_nb, - "total": (items_nb / row_nb + 1) if row_nb else items_nb, - }) + if full == 'shortcut': + data = json.dumps(rows) + else: + data = json.dumps({ + "records": items_nb, + "rows": rows, + "page": page_nb, + "total": (items_nb / row_nb + 1) if row_nb else items_nb, + }) return HttpResponse(data, mimetype='text/plain') elif data_type == "csv": response = HttpResponse(mimetype='text/csv') |