diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-09 04:14:41 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-09 04:14:41 +0100 |
commit | e71f176e8c85ac0111b480ad4106455dafc4e003 (patch) | |
tree | 49c1cfd40495a9fa1d1f16b66e93224843bcdf89 | |
parent | 2906e1e6b8fab767be4fddb28814f83b31fc783e (diff) | |
download | Ishtar-e71f176e8c85ac0111b480ad4106455dafc4e003.tar.bz2 Ishtar-e71f176e8c85ac0111b480ad4106455dafc4e003.zip |
Manage own items shortcuts (refs #54)
-rw-r--r-- | ishtar/furnitures/context_processors.py | 14 | ||||
-rw-r--r-- | ishtar/furnitures/forms.py | 9 | ||||
-rw-r--r-- | ishtar/furnitures/models.py | 7 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 2 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 8 | ||||
-rw-r--r-- | ishtar/templates/base.html | 21 | ||||
-rw-r--r-- | static/js/ishtar.js | 8 | ||||
-rw-r--r-- | static/media/style.css | 31 |
8 files changed, 94 insertions, 6 deletions
diff --git a/ishtar/furnitures/context_processors.py b/ishtar/furnitures/context_processors.py index df401cda0..ed6fb1252 100644 --- a/ishtar/furnitures/context_processors.py +++ b/ishtar/furnitures/context_processors.py @@ -17,11 +17,14 @@ # See the file COPYING for details. +from django.utils.translation import ugettext, ugettext_lazy as _ + from ishtar import settings from menus import Menu +import models def get_base_context(request): - dct = {} + dct = {'URL_PATH':settings.URL_PATH} if settings.APP_NAME: dct["APP_NAME"] = settings.APP_NAME dct["COUNTRY"] = settings.COUNTRY @@ -35,5 +38,14 @@ def get_base_context(request): dct['MENU'] = request.session['MENU'] dct['JQUERY_URL'] = settings.JQUERY_URL dct['JQUERY_UI_URL'] = settings.JQUERY_UI_URL + dct['current_menu'] = [] + for lbl, model in ((_(u"Archaelogical file"), models.File),): + model_name = model.__name__.lower() + current = model_name in request.session and request.session[model_name] + items = [] + for item in model.get_owns(request.user): + items.append((item.pk, unicode(item), unicode(item.pk) == current)) + if items: + dct['current_menu'].append((lbl, model_name, items)) return dct diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 64acaa5c5..6c1b48fc4 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -295,6 +295,13 @@ class Wizard(NamedUrlSessionFormWizard): if current_obj: return self.get_instanced_init(current_obj, request, storage, step) + elif step.startswith('selec-') and step in self.form_list \ + and 'pk' in self.form_list[step].associated_models: + model_name = self.form_list[step].associated_models['pk' + ].__name__.lower() + val = model_name in request.session and request.session[model_name] + if val: + return {'pk':val} return super(Wizard, self).get_form_initial(request, storage, step) def get_instanced_init(self, obj, request, storage, step): @@ -419,7 +426,7 @@ def get_now(): class FileFormSelection(forms.Form): form_label = _("Archaelogical file") associated_models = {'pk':models.File} - pk = forms.IntegerField(label=_("Archaelogical file"), + pk = forms.IntegerField(label=_("References/location"), widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), associated_model=models.File), validators=[models.valid_id(models.File)]) diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 6664adb72..ef5ad8cb2 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -269,6 +269,13 @@ class File(BaseHistorizedItem, OwnPerms): items = [u'%d-%d' % (self.year, self.numeric_reference)] + items return u" - ".join(items) + @classmethod + def get_owns(cls, user, order_by=['-year', '-numeric_reference']): + if user.is_anonymous(): + return [] + return cls.objects.filter(history_modifier=user).order_by(*order_by + ).all() + class OperationType(GeneralType): class Meta: verbose_name = _(u"Operation type") diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index 4a9349700..762aa135f 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -47,4 +47,6 @@ urlpatterns += patterns('ishtar.furnitures.views', name='autocomplete-organization'), url(BASE_URL + r'autocomplete-file/$', 'autocomplete_file', name='autocomplete-file'), + url(BASE_URL + r'update-current-item/$', 'update_current_item', + name='update-current-item'), ) diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index dcf0f28d9..ba05d0b39 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -42,6 +42,14 @@ def index(request): return render_to_response('index.html', dct, context_instance=RequestContext(request)) +def update_current_item(request): + if not request.is_ajax() and not request.method == 'POST': + return Http404() + print request.POST + if 'value' in request.POST and 'item' in request.POST: + request.session[request.POST['item']] = request.POST['value'] + return HttpResponse('ok') + def check_permission(request, action_slug, obj_id=None): if obj_id: return menu.items[action_slug].is_available(request.user, obj_id) diff --git a/ishtar/templates/base.html b/ishtar/templates/base.html index 6a1136021..2b2b440c8 100644 --- a/ishtar/templates/base.html +++ b/ishtar/templates/base.html @@ -8,13 +8,15 @@ <link rel="shortcut icon" href="{{MEDIA_URL}}/media/images/favicon.png"> <title>{% block title %}Ishtar{% if APP_NAME %} - {{APP_NAME}}{%endif%}{% endblock %} </title> + <script language="javascript" type="text/javascript"> + var url_path = "{{URL_PATH}}"; + </script> <script language="javascript" type="text/javascript" src="{{JQUERY_URL}}"></script> <script language="javascript" type="text/javascript" src="{{JQUERY_UI_URL}}jquery-ui.js"></script> <script language="javascript" type="text/javascript" src="{{JQUERY_UI_URL}}ui/i18n/jquery.ui.datepicker-{{COUNTRY}}.js"></script> <script language="javascript" type="text/javascript" src="{{MEDIA_URL}}/js/ishtar.js"></script> <link type="text/css" href="{{JQUERY_UI_URL}}css/smoothness/jquery-ui.css" rel="stylesheet" /> </head> - <body> <div id="header"> {% block header %} @@ -31,7 +33,22 @@ {% if APP_NAME %}<p id="app_name">{{APP_NAME}}</p>{%endif%} </div> <div id="context_menu"> - {% block context %}{% endblock %} + {% block context %}{% if current_menu %} + <form method="post" action="{% url update-current-item %}"> + <fieldset> + <legend>{% trans "Default items"%}</legend> + <ul id='current_items'> + {% for lbl, model_name, items in current_menu %} + <li><label for="current_{{model_name}}">{{lbl}}</label> + <select id='current_{{model_name}}'> + <option value=''>--</option> + {% for val, label, selected in items %}<option value='{{val}}'{%if selected%} selected="selected"{%endif%}>{{label}}</option> + {% endfor %}</select></li> + {% endfor %} + </ul> + </fieldset> + </form> + {% endif %}{% endblock %} </div> <div id="main_menu"> <ul> diff --git a/static/js/ishtar.js b/static/js/ishtar.js index 9e94b4359..94b13c4ae 100644 --- a/static/js/ishtar.js +++ b/static/js/ishtar.js @@ -1,6 +1,14 @@ $(document).ready(function(){ $("#main_menu ul ul").hide(); $("#main_menu ul ul .selected").parent().show(); + var items = new Array('file'); + for (idx in items){ + $("#current_" + items[idx]).change(function(){ + $.post(url_path + '/update-current-item/', + {item:items[idx], value:$("#current_" + items[idx]).val()} + ); + }); + } }); $("#main_menu ul li").live('click', function(){ diff --git a/static/media/style.css b/static/media/style.css index 036c04021..07d068024 100644 --- a/static/media/style.css +++ b/static/media/style.css @@ -103,6 +103,31 @@ div#main_menu > ul{ color:#922; } +div#context_menu fieldset{ + right:20px;; + position:absolute; + width:350px; + background-color:#EEE; + border:2px solid #CCC; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; +} +div#context_menu fieldset label{ + display:inline; +} + +div#context_menu ul{ + margin:0; + padding:2px; +} + +div#context_menu li{ + margin: 0; + list-style:none; +} + + div#content{ margin:0 200px; text-align:center; @@ -144,8 +169,10 @@ div.form { display:block; width:500px; background-color: #EEE; - border:1px solid #CCC; - border-radius:10px; + border:2px solid #CCC; + -moz-border-radius:8px; + -webkit-border-radius:8px; + border-radius:8px; text-align:center; } |